# CommonEms **Repository Path**: guxuefeng/common-ems ## Basic Information - **Project Name**: CommonEms - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-16 - **Last Updated**: 2026-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 企业级能耗管理系统 (Common EMS) ## 项目概述 企业级能耗管理系统(Common EMS)是一个基于Spring Cloud Alibaba微服务架构的多企业SaaS综合能耗管理平台,专注于水、电、气、蒸汽等能源的实时监控、数据分析和智能告警。系统采用前后端分离架构,支持Web管理端和微信小程序双端访问,具备完善的租户隔离机制。 ## 多企业SaaS架构特性 ### 1. 租户隔离机制 - **数据隔离**: 基于企业ID的数据隔离,确保各企业数据独立 - **资源隔离**: 独立的配置、权限、报表等资源 - **服务套餐**: 支持免费、基础、专业、企业等不同服务套餐 ### 2. 企业管理体系 - **企业注册**: 支持企业自主注册和管理 - **服务管理**: 企业服务状态、到期时间、数据保留期限管理 - **配置管理**: 企业个性化配置管理 ### 3. 权限体系 - **RBAC权限**: 基于角色的访问控制 - **数据权限**: 基于企业范围的数据访问控制 - **功能权限**: 不同服务套餐的功能权限控制 ## 技术架构 ### 后端技术栈 - **核心框架**: Spring Boot 3.x + Spring Cloud Alibaba 2023.x - **服务注册与配置**: Nacos (服务发现和配置中心) - **服务调用**: OpenFeign (声明式 REST 调用) - **网关**: Spring Cloud Gateway - **熔断限流**: Sentinel - **数据库**: - 时序数据: TDengine (用于存储能耗读数) - 业务数据: MySQL 8.0 (用于存储设备档案、用户信息) - **缓存**: Redis 7 (用于实时数据缓存和会话共享) - **消息队列**: RocketMQ (用于解耦数据采集与告警/计算逻辑) - **ORM框架**: MyBatis-Plus - **安全**: Spring Security + JWT ### 前端技术栈 - **Web管理端**: Vue 3 + TypeScript + Vite + Element Plus + Pinia + ECharts - **微信小程序**: 原生小程序开发 ## 系统架构 ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ Web管理端 │ │ 微信小程序端 │ │ 边缘网关 │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ └───────────────────────┼──────────────────────┘ │ ┌─────────────────────────────────────────────────────────────┐ │ Nginx (前端托管) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 静态资源托管 (HTML/CSS/JS) │ │ │ │ API请求代理到Gateway │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ │ ┌─────────────────────────────────────────────────────────────┐ │ API网关 (Gateway) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 服务路由 (device, data, alarm, user) │ │ │ │ JWT认证授权 │ │ │ │ 限流熔断 (Sentinel) │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ │ ┌─────────────────────────┼─────────────────────────┐ │ │ │ ┌───────▼────────┐ ┌───────────▼──────────┐ ┌─────────▼─────────┐ │ 设备接入服务 │ │ 时序数据服务 │ │ 告警引擎服务 │ │ (device:8081) │ │ (data:8082) │ │ (alarm:8083) │ │ │ │ │ │ │ │ - 设备管理 │ │ - 数据存储(TDengine) │ │ - 规则引擎 │ │ - 数据接收 │◄───┼───消息队列(RocketMQ)───┼───►│ - 告警生成 │ │ - 状态监控 │ │ - 数据查询 │ │ - 工单管理 │ │ - 协议适配 │ │ - 数据聚合 │ │ - 推送通知 │ └───────────────┘ │ - 趋势分析 │ └──────────────────┘ │ └──────────────────────┘ │ │ │ │ └─────────────────────────┼─────────────────────────┘ │ ┌─────────▼─────────┐ │ 用户管理服务 │ │ (user:8084) │ │ │ │ - RBAC权限管理 │ │ - 用户认证 │ │ - 角色管理 │ │ - 企业租户管理 │ └─────────────────┘ │ ┌─────────────────────────┼─────────────────────────┐ │ │ │ ┌───────▼────────┐ ┌───────────▼──────────┐ ┌─────────▼─────────┐ │ MySQL │ │ Redis │ │ TDengine │ │ 业务数据存储 │ │ 缓存 & 会话 │ │ 时序数据存储 │ │ │ │ │ │ │ │ - 用户信息 │ │ - 实时数据缓存 │ │ - 能耗读数 │ │ - 设备档案 │ │ - 会话管理 │ │ - 告警记录 │ │ - 告警规则 │ │ - 配置缓存 │ │ - 统计数据 │ │ - 企业信息 │ │ - 限流计数器 │ │ - 分析结果 │ └───────────────┘ └────────────────────┘ └─────────────────┘ │ │ │ └─────────────────────────┼─────────────────────────┘ │ ┌─────────▼─────────┐ │ 服务注册中心 │ │ (Nacos:8848) │ │ │ │ - 服务发现 │ │ - 配置管理 │ │ - 健康检查 │ └─────────────────┘ │ ┌─────────▼─────────┐ │ 限流熔断 │ │ (Sentinel:8080) │ │ │ │ - 流量控制 │ │ - 熔断降级 │ │ - 系统保护 │ └─────────────────┘ ``` ## 功能模块 ### 1. 设备接入服务 (device-service) - **职责**: 接收边缘网关上报的JSON数据,解析后转发给消息队列,并提供设备CRUD管理接口 - **核心功能**: - **多厂商协议支持**: 支持JSON、Modbus、MQTT等多种协议,以及西门子、施耐德等厂商专有协议 - **协议适配器框架**: 可插拔的协议适配器设计,支持快速扩展新协议 - **自动协议识别**: 根据设备信息自动识别适用协议 - **统一数据模型**: 将不同协议数据转换为统一格式 - **设备管理**: 设备注册、配置、状态监控 - **数据验证**: 输入数据格式和范围验证 - **租户隔离**: 基于企业ID的数据隔离 - **实时数据接收**: 接收并处理设备上报的实时数据 - **设备状态监控**: 监控设备在线状态和运行状态 - **心跳检测与离线判断**: 通过心跳机制判断设备离线状态 ### 2. 时序数据服务 (data-service) - **职责**: 消费消息队列中的原始数据,清洗后写入TDengine,并提供查询接口 - **核心功能**: - 数据入库(TDengine) - 多维度数据查询 - 数据聚合分析 - 趋势分析 ### 3. 告警引擎服务 (alarm-service) - **职责**: 订阅实时数据流,根据预设阈值判断是否触发告警 - **核心功能**: - 告警规则管理 - 实时告警检测 - 告警工单生成 - 告警处理跟踪 ### 4. 数据分析服务 (data-service) - **职责**: 基于国标GB/T 2589-2020《综合能耗计算通则》等标准进行能耗分析 - **核心功能**: - **基础报表**: 日/月/年报表生成 - **能效诊断**: 基于GB/T 17167-2021的能效分析 - **异常检测**: 能耗异常告警与分析 - **多维分析**: 基于时间、部门、设备类型等维度的能耗分析 - **能源平衡**: 基于GB/T 3485-1998的能源平衡分析 - **对标分析**: 与行业标杆值进行对比分析 - **节能潜力**: 识别节能改进机会 - **碳排放计算**: 基于GB/T 32150-2015的碳排放核算 - **综合能耗计算**: 基于国标的综合能耗计算与单位产品能耗分析 ### 5. 用户管理服务 (user-service) - **职责**: 用户、角色、权限管理 - **核心功能**: - 用户认证与授权 - RBAC权限控制 - 个人信息管理 ### 6. API网关 (gateway) - **职责**: 统一路由、鉴权、限流 - **核心功能**: - 服务路由 - JWT鉴权 - 流量控制 ### 7. Docker部署配置 - **资源限制**: - **Nacos**: 内存限制 256M - **Sentinel Dashboard**: 内存限制 200M,Xms 128M,端口映射 9090:8080 - **RocketMQ Namesrv**: 内存限制 200M - **RocketMQ Broker**: 内存限制 1G,Xms 512M - **TDengine**: 内存限制 200M ## 前端功能 ### Web管理端 - **首页大屏**: 实时展示总能耗、碳排放量、能流图 - **实时监控**: 设备树形结构、实时曲线展示 - **告警中心**: 告警列表、工单处理 - **报表分析**: 日报/月报生成 ### 微信小程序端 - **移动看板**: 车间能耗概览 - **扫码巡检**: 设备扫码、实时数据查看 - **告警处理**: 告警列表、快速处理 ## 项目结构 ``` ├── backend/ # 后端微服务代码 │ ├── common/ # 公共模块 │ ├── device/ # 设备服务 │ ├── data/ # 数据服务 │ ├── alarm/ # 告警服务 │ ├── user/ # 用户服务 │ ├── gateway/ # 网关服务 │ ├── config/ # 配置文件 │ └── sql/ # 数据库脚本 ├── frontend/ # Web前端代码 │ ├── src/ # 源代码 │ │ ├── components/ # 组件 │ │ ├── pages/ # 页面 │ │ ├── stores/ # Pinia状态管理 │ │ ├── services/ # API服务 │ │ └── utils/ # 工具函数 │ ├── public/ # 静态资源 │ ├── package.json # 依赖配置 │ └── vite.config.ts # 构建配置 ├── miniapp/ # 微信小程序代码 │ ├── pages/ # 页面 │ ├── components/ # 组件 │ ├── utils/ # 工具函数 │ ├── app.js # 小程序入口 │ └── app.json # 小程序配置 ├── README.md # 项目说明 └── .gitignore # Git忽略文件 ``` ## 快速开始 ### 环境准备 1. JDK 17+ 2. Maven 3.8+ 3. Node.js 16+ 4. MySQL 8.0 5. Redis 7 6. TDengine 3.x 7. Nacos 2.x 8. RocketMQ 4.x ### 后端启动 ```bash # 1. 启动中间件 (Nacos, MySQL, Redis, TDengine, RocketMQ) # 2. 启动各微服务 cd backend mvn clean install # 分别启动各服务 java -jar device/target/device-*.jar java -jar data/target/data-*.jar java -jar alarm/target/alarm-*.jar java -jar user/target/user-*.jar java -jar gateway/target/gateway-*.jar ``` ### 前端启动 ```bash # Web管理端 cd frontend npm install npm run dev # 微信小程序 # 使用微信开发者工具打开 miniapp 目录 ``` ## 部署方案 ### Docker Compose部署 (推荐) 项目提供了完整的Docker Compose配置,一键部署所有中间件服务: ```bash # 启动所有中间件服务 cd docker-compose docker-compose up -d # 或者使用启动脚本 ./start-services.sh # 停止所有服务 docker-compose down # 查看服务状态 docker-compose ps ``` #### 包含的服务 - **Nacos**: v3.1.1 服务注册与配置中心 (端口: 8848, 管理端口: 18080) - **MySQL**: 8.4 业务数据存储 (端口: 3306, 密码: abcd1234) - **Redis**: alpine 缓存和会话存储 (端口: 6379) - **TDengine**: 3.3.6.13 时序数据存储 (端口: 6030, 6035, 6041, UDP: 6030) - **RocketMQ**: 5.3.1 消息队列 (Namesrv: 9876, Broker: 10911) - **Sentinel Dashboard**: 1.8.9 限流熔断监控 (端口: 9090) - **Nginx**: alpine 前端静态资源托管 (端口: 80) #### Docker Compose配置说明 - **版本兼容**: 已移除废弃的`version`字段,兼容最新Docker版本 - **UDP端口**: 正确配置UDP端口映射格式 (`hostPort:containerPort/protocol`) - **资源限制**: 为各服务配置了合理的内存限制 - **服务依赖**: 正确配置了服务间的依赖关系 - **环境检查**: 提供环境检查和启动脚本 #### 环境检查和启动 ```bash # 检查环境并启动服务 cd docker-compose ./check-and-start.sh # 或者使用启动脚本 ./start-all-services.sh # 检查服务健康状态 ./check-services-health.sh ``` ### 数据库初始化 系统支持多企业SaaS架构,数据库结构已更新以支持租户隔离: 1. **企业表** (`ems_enterprises`): 存储企业基本信息 2. **租户配置表** (`ems_tenant_configs`): 存储企业个性化配置 3. **业务表扩展**: 所业务表均增加 `enterprise_id` 字段实现数据隔离 初始化脚本位于 `backend/sql/ems_tables_multitenant.sql`,包含: - 完整的表结构定义 - 必要的索引和约束 - 默认企业、角色、用户数据 - Nacos配置表结构 执行初始化: ```bash # 进入MySQL容器 docker exec -it mysql mysql -u root -p # 执行初始化脚本 source /docker-entrypoint-initdb.d/ems_tables_multitenant.sql; ``` ### K8s部署 - 提供完整的K8s部署配置文件 - 支持服务网格(Istio)部署 ## 二次开发 ### 新增功能模块 1. 创建新的微服务模块 2. 在Nacos中注册服务 3. 配置网关路由 4. 实现业务逻辑 ### 数据库扩展 - 业务数据表在MySQL中扩展 - 时序数据表在TDengine中扩展 ## 贡献指南 1. Fork 项目 2. 创建特性分支 3. 提交代码 4. 发起 Pull Request ## 许可证 Apache License 2.0 ## 项目特色 ### 1. 统一协议适配器框架 - **多协议支持**: 支持JSON、Modbus、MQTT等通用协议及西门子、施耐德等厂商专有协议 - **自动识别**: 根据设备信息自动识别适用协议 - **插件化设计**: 可插拔的协议适配器,易于扩展新协议 - **统一数据模型**: 将不同协议数据转换为统一格式 ### 2. 多企业SaaS架构 - **数据隔离**: 基于企业ID的完全数据隔离 - **租户管理**: 完整的企业生命周期管理 - **服务套餐**: 支持不同级别的服务套餐 - **资源隔离**: 独立的配置、权限、报表资源 ### 3. 高性能架构 - **时序数据库**: TDengine优化海量时序数据存储查询 - **消息队列**: RocketMQ解耦数据采集与处理 - **缓存策略**: Redis多级缓存提升性能 - **异步处理**: 异步处理高并发场景 ### 4. 智能化功能 - **告警引擎**: 规则驱动的智能告警系统 - **数据分析**: 基于国标的能耗分析 - **可视化**: 丰富的图表展示和大屏监控 - **移动支持**: 微信小程序移动访问 ## 部署与运维 ### 快速部署 使用提供的部署脚本一键部署: ```bash # 启动所有中间件 ./docker-compose/start-services.sh # 构建并启动后端服务 cd backend mvn clean install -DskipTests # 启动各微服务(按依赖顺序) # 构建前端 cd frontend npm install npm run build ``` ### 监控运维 - **系统监控**: 提供完整的监控脚本和告警机制 - **日志管理**: 结构化日志便于分析 - **性能优化**: 多级缓存、数据库优化、异步处理 ## 扩展能力 ### 协议扩展 - 实现ProtocolAdapter接口即可支持新协议 - 自动协议识别机制 - 厂商协议模板配置 ### 功能扩展 - 微服务架构支持功能模块独立扩展 - 插件化设计便于功能增强 - 标准化API接口便于集成 ## 技术价值 1. **架构先进**: 基于Spring Cloud Alibaba的现代化微服务架构 2. **扩展性强**: 插件化协议适配器框架,支持快速扩展 3. **性能优异**: 高性能时序数据库和缓存策略 4. **企业级**: 完整的多租户SaaS架构和安全机制 5. **标准化**: 遵循国标GB/T 2589-2020等能耗计算标准 ## 联系方式 如有问题,请提Issue或联系作者。