Compare commits

...

66 Commits

Author SHA1 Message Date
3067418132@qq.com 11914559f3 1、本地配置文件修改 5 hours ago
v-lijf43 0a41264a2e 1、修改首页; 2 weeks ago
v-lijf43 168f9c4056 1、保利本地生产环境配置修改 2 weeks ago
3067418132@qq.com d1b905573f 1、保利能管系统项目新增项目管理以及优化设备台账管理 2 weeks ago
3067418132@qq.com b17bd849a8 1、保利能管系统项目新增项目管理以及优化设备台账管理 3 weeks ago
3067418132@qq.com 4732280dc5 1、保利能管系统项目初始化以及对应接口修改优化 3 weeks ago
3067418132@qq.com 64c2158f12 1、主机详情内容修改 1 month ago
3067418132@qq.com f900c6f9da 1、首页增加冷源系统实时EER 1 month ago
3067418132@qq.com 441e1848ee 1、监视界面优化; 1 month ago
3067418132@qq.com 5b02ea1a80 1、垃圾PLC点位修改,需要改代码 2 months ago
3067418132@qq.com 4e61bac0de 1、本地环境配置 3 months ago
25604 d6f030e552 1、能耗查询、设备组查询分析增加数据条数 5 months ago
25604 12e93c9b78 1、配置修改 5 months ago
25604 3b25a9e235 1、首页热回收数据日累积值计算优化; 5 months ago
25604 1b27a0c287 1、热回收系统触摸屏mqtt数据处理; 5 months ago
25604 f81769b738 1、热回收系统触摸屏mqtt数据接收 5 months ago
25604 0288f2cffb 1、设备采集参数管理; 5 months ago
25604 e5e5cee85a 1、广合二厂热回收系统:设备热量查询接口、设备组热量查询接口 5 months ago
25604 786da07f68 1、优化netty上线,减少cpu使用率; 5 months ago
25604 0a76509188 1、首页添加缓存优化; 6 months ago
25604 a383aa7cd7 1、抄表记录bug修复 7 months ago
25604 cc1a258a4f 1、运行报表增加分页参数。 7 months ago
25604 981ddd6126 1、运行报表增加分页参数。 7 months ago
25604 577e98b7b3 1、采暖系统运行报表,excel导出,编辑; 7 months ago
25604 c9e81f4ab0 1、梅州账号项目菜单区别; 7 months ago
25604 da80ade668 1、修复蒸汽机运行报表以及水箱指令生成; 8 months ago
25604 1d132511c6 1、蒸汽机运行报表记录查询、编辑、excel记录导出; 8 months ago
25604 a4739b576f 1、采暖泵接口编写 8 months ago
25604 bf81ca52c9 1、生活水箱液位前后端对接; 8 months ago
25604 1be07e2157 1、添加液位计采集 8 months ago
25604 e0df3ad93a 1、优化首页查询sql; 8 months ago
25604 22ce82f641 1、每日抄表记录报表、热水热泵运行报表添加。 8 months ago
v-lijf43 90f667ca72 1、添加豪生酒店运营部值班电话账号 9 months ago
25604 2b9f736dbb 1、风柜优化 9 months ago
25604 bc2ab582ea 1、修复热泵采集电流设置; 9 months ago
25604 6046c172a6 1、主机运行报表优化; 9 months ago
25604 bc7087a559 1、区域管理接口对接以及优化; 9 months ago
v-lijf43 42b108d055 1、日月年统计修复; 9 months ago
v-lijf43 fe759a75f4 1、添加采集点质量逻辑字段; 9 months ago
25604 f0ecb0f048 1、优化报警记录 9 months ago
v-lijf43 3c02d03a12 1、修复报警记录生成; 9 months ago
25604 60a954bcd3 1、优化风柜系统定时列表排序; 9 months ago
25604 4d64b681a9 1、定时开关风柜逻辑优化; 9 months ago
25604 99501add71 1、定时开关风柜逻辑优化; 10 months ago
25604 3754345b3d 1、当采集记录大于10000,推出; 10 months ago
25604 f8dad021d8 1、当采集记录小于等于0,则发送到延迟队列; 10 months ago
25604 0c0cf2bdf1 1、修复设备在线定时任务; 10 months ago
25604 77124eff14 1、添加锅炉主机数据点位处理(研华网关只支持4个mqtt,目前没有使用); 10 months ago
25604 5fb572cd4d 1、修复定时报警、热水记录生成; 10 months ago
25604 3ee23dea5a 1、主机系统参数报表导出、查询、编辑、定时执行存储过程 11 months ago
25604 5167e0c702 1、延迟队列实现异常误报警; 11 months ago
25604 9b4d5faf18 1、优化报警生成;2、优化微信推送异常功能; 11 months ago
25604 d2c9fca950 1、添加了冷源电表,优化对应功能。 12 months ago
25604 065e8df394 1、优化定时器:数据分析,楼层能耗分析。 1 year ago
25604 ff709ec621 1、优化策略管理排序问题。 1 year ago
25604 4d696317f2 1、报警添加微信通知功能,增加模板。 1 year ago
25604 b8d5667431 1、报警添加微信通知功能。 1 year ago
25604 4ad037f002 1、生活热水供水系统楼层查询、项目总览、能源分析、用能查询、数据分析相关接口 1 year ago
25604 dcc9307d54 1、生活热水供水系统获取设备状态信息数据 1 year ago
25604 e457861976 1、netty控制热泵设置; 1 year ago
25604 81c8a35c76 1、netty控制热泵设置; 1 year ago
25604 6973b889c8 1、netty控制热泵设置; 1 year ago
mh 36d60e0b79 1、添加通过DTU-4G,netty方式设置热泵信息; 1 year ago
mh 1603247df1 1、添加netty采集生活热水水电表、热泵信息; 1 year ago
v-lijf43 b22ba182dc PID调节风柜系统 1 year ago
mh d268edfce2 1、风柜系统添加定时开关机逻辑处理; 1 year ago
  1. BIN
      doc/节能改造每日能耗统计表.xlsx
  2. 357
      doc/项目信息管理API接口文档.md
  3. 37
      mh-admin/src/main/java/com/mh/MHRunner.java
  4. 55
      mh-admin/src/main/java/com/mh/web/controller/comprehensive/CompreReportController.java
  5. 23
      mh-admin/src/main/java/com/mh/web/controller/comprehensive/ProOverviewController.java
  6. 23
      mh-admin/src/main/java/com/mh/web/controller/device/ChillersParamsController.java
  7. 10
      mh-admin/src/main/java/com/mh/web/controller/device/CollectionParamsManageController.java
  8. 53
      mh-admin/src/main/java/com/mh/web/controller/device/OperationController.java
  9. 109
      mh-admin/src/main/java/com/mh/web/controller/energy/HotWaterEnergyController.java
  10. 8
      mh-admin/src/main/java/com/mh/web/controller/energy/SysEnergyConsumptionController.java
  11. 44
      mh-admin/src/main/java/com/mh/web/controller/energy/SysEnergyQueryController.java
  12. 6
      mh-admin/src/main/java/com/mh/web/controller/monitor/CoolingSystemMonitorController.java
  13. 45
      mh-admin/src/main/java/com/mh/web/controller/monitor/ERSMonitorController.java
  14. 70
      mh-admin/src/main/java/com/mh/web/controller/monitor/HeatingPumpMonitorController.java
  15. 76
      mh-admin/src/main/java/com/mh/web/controller/monitor/HomeController.java
  16. 20
      mh-admin/src/main/java/com/mh/web/controller/monitor/HotWaterMonitorController.java
  17. 57
      mh-admin/src/main/java/com/mh/web/controller/monitor/SteamBoilerMonitorController.java
  18. 2
      mh-admin/src/main/java/com/mh/web/controller/mqtt/MqttSubsController.java
  19. 2
      mh-admin/src/main/java/com/mh/web/controller/mqtt/MqttTopicController.java
  20. 85
      mh-admin/src/main/java/com/mh/web/controller/project/ProjectInfoController.java
  21. 96
      mh-admin/src/main/java/com/mh/web/controller/report/ReportHeatingController.java
  22. 144
      mh-admin/src/main/java/com/mh/web/controller/report/ReportHotWaterController.java
  23. 131
      mh-admin/src/main/java/com/mh/web/controller/report/ReportMeterReadingsController.java
  24. 156
      mh-admin/src/main/java/com/mh/web/controller/report/ReportSteamController.java
  25. 100
      mh-admin/src/main/java/com/mh/web/controller/report/ReportSysController.java
  26. 20
      mh-admin/src/main/java/com/mh/web/controller/space/BuildingInfoController.java
  27. 5
      mh-admin/src/main/java/com/mh/web/controller/space/SpaceController.java
  28. 2
      mh-admin/src/main/java/com/mh/web/controller/system/SysLoginController.java
  29. 40
      mh-admin/src/main/resources/application-dev.yml
  30. 2
      mh-admin/src/main/resources/application-druid.yml
  31. 38
      mh-admin/src/main/resources/application-prod.yml
  32. 26
      mh-admin/src/main/resources/application-test.yml
  33. 46
      mh-admin/src/main/resources/logback.xml
  34. BIN
      mh-admin/src/main/resources/节能岛改造每日能耗统计表.xlsx
  35. 158
      mh-admin/src/test/java/com/mh/MHApplicationTest.java
  36. 40
      mh-admin/src/test/java/com/mh/web/controller/ai/AiFileControllerTest.java
  37. 52
      mh-admin/src/test/java/com/mh/web/controller/ai/FileNameEncodingTest.java
  38. 13
      mh-common/pom.xml
  39. 28
      mh-common/src/main/java/com/mh/common/config/wechat/RestTemplateConfig.java
  40. 94
      mh-common/src/main/java/com/mh/common/config/wechat/WechatMpConfig.java
  41. 62
      mh-common/src/main/java/com/mh/common/config/wechat/WechatSignUtil.java
  42. 10
      mh-common/src/main/java/com/mh/common/constant/CacheConstants.java
  43. 5
      mh-common/src/main/java/com/mh/common/constant/Constants.java
  44. 15
      mh-common/src/main/java/com/mh/common/constant/DateConstant.java
  45. 25
      mh-common/src/main/java/com/mh/common/constant/EnergyType.java
  46. 170
      mh-common/src/main/java/com/mh/common/core/domain/dto/BFloorReportHotWaterDTO.java
  47. 74
      mh-common/src/main/java/com/mh/common/core/domain/dto/CompreReportDTO.java
  48. 68
      mh-common/src/main/java/com/mh/common/core/domain/dto/DataResultDTO.java
  49. 14
      mh-common/src/main/java/com/mh/common/core/domain/dto/HotWaterNowDataDTO.java
  50. 284
      mh-common/src/main/java/com/mh/common/core/domain/dto/MaglevReportSysParamDTO.java
  51. 179
      mh-common/src/main/java/com/mh/common/core/domain/dto/ReportHeatingRunParamDTO.java
  52. 135
      mh-common/src/main/java/com/mh/common/core/domain/dto/ReportSteamRunParamDTO.java
  53. 210
      mh-common/src/main/java/com/mh/common/core/domain/dto/ThreeFloorReportHotWaterDTO.java
  54. 63
      mh-common/src/main/java/com/mh/common/core/domain/dto/WeatherDataDTO.java
  55. 26
      mh-common/src/main/java/com/mh/common/core/domain/entity/AlarmRecords.java
  56. 46
      mh-common/src/main/java/com/mh/common/core/domain/entity/AnalysisMonth.java
  57. 27
      mh-common/src/main/java/com/mh/common/core/domain/entity/AnalysisYear.java
  58. 81
      mh-common/src/main/java/com/mh/common/core/domain/entity/CollectionParamsManage.java
  59. 9
      mh-common/src/main/java/com/mh/common/core/domain/entity/CpmSpaceRelation.java
  60. 81
      mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java
  61. 88
      mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceState.java
  62. 89
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyDay.java
  63. 74
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyDaySum.java
  64. 220
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyHour.java
  65. 89
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyMonth.java
  66. 74
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyMonthSum.java
  67. 89
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyYear.java
  68. 74
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyYearSum.java
  69. 9
      mh-common/src/main/java/com/mh/common/core/domain/entity/GatewayManage.java
  70. 15
      mh-common/src/main/java/com/mh/common/core/domain/entity/HistoryEntity.java
  71. 15
      mh-common/src/main/java/com/mh/common/core/domain/entity/HouseInfo.java
  72. 274
      mh-common/src/main/java/com/mh/common/core/domain/entity/ProjectInfo.java
  73. 217
      mh-common/src/main/java/com/mh/common/core/domain/entity/ReportHeatingRunParamHis.java
  74. 232
      mh-common/src/main/java/com/mh/common/core/domain/entity/ReportHotWaterParamHis.java
  75. 114
      mh-common/src/main/java/com/mh/common/core/domain/entity/ReportMeterReadingsHis.java
  76. 170
      mh-common/src/main/java/com/mh/common/core/domain/entity/ReportSteamRunParamHis.java
  77. 310
      mh-common/src/main/java/com/mh/common/core/domain/entity/ReportSysRunParamHis.java
  78. 2
      mh-common/src/main/java/com/mh/common/core/domain/entity/SysRole.java
  79. 2
      mh-common/src/main/java/com/mh/common/core/domain/entity/SysUser.java
  80. 117
      mh-common/src/main/java/com/mh/common/core/domain/entity/WaterLevel.java
  81. 117
      mh-common/src/main/java/com/mh/common/core/domain/entity/WaterTemp.java
  82. 30
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/AxisLine.java
  83. 45
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/BaseChartEntity.java
  84. 54
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/ChartEntity.java
  85. 17
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/ChartParams.java
  86. 31
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Feature.java
  87. 35
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/GetChartParams.java
  88. 30
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Legend.java
  89. 21
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/LineStyle.java
  90. 38
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Series.java
  91. 21
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/SplitLine.java
  92. 25
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Title.java
  93. 16
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/ToolTip.java
  94. 37
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Unit.java
  95. 21
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/XAxis.java
  96. 31
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/YAxis.java
  97. 53
      mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageDataVO.java
  98. 5
      mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageVO.java
  99. 5
      mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceMonitorVO.java
  100. 14
      mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyConsumptionVO.java
  101. Some files were not shown because too many files have changed in this diff Show More

BIN
doc/节能改造每日能耗统计表.xlsx

Binary file not shown.

357
doc/项目信息管理API接口文档.md

@ -0,0 +1,357 @@
# 项目信息管理 API 接口文档
## 基础信息
- **模块名称**: 项目信息管理
- **基础路径**: `/project/info`
- **权限标识前缀**: `project:info`
---
## 1. 查询项目信息列表
### 接口描述
分页查询项目信息列表,支持按项目名称、项目负责人模糊查询,以及按安装日期范围查询。
### 请求信息
- **接口路径**: `/project/info/list`
- **请求方式**: `GET`
- **权限要求**: `project:info:list`
### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|--------|------|------|------|--------|
| pageNum | Integer | 否 | 页码,默认1 | 1 |
| pageSize | Integer | 否 | 每页条数,默认10 | 10 |
| projectName | String | 否 | 项目名称(模糊查询) | 豪生酒店 |
| projectManager | String | 否 | 项目负责人(模糊查询) | 张三 |
| params[beginTime] | String | 否 | 安装日期开始时间(格式:yyyy-MM-dd) | 2025-01-01 |
| params[endTime] | String | 否 | 安装日期结束时间(格式:yyyy-MM-dd) | 2025-12-31 |
### 请求示例
```
GET /project/info/list?pageNum=1&pageSize=10&projectName=豪生&projectManager=张&params[beginTime]=2025-01-01&params[endTime]=2025-12-31
```
### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码(200成功) |
| msg | String | 返回消息 |
| total | Long | 总记录数 |
| rows | Array | 数据列表 |
**rows数组元素结构**:
| 参数名 | 类型 | 说明 |
|--------|------|------|
| id | String | 项目ID(UUID) |
| projectCode | String | 用户项目编码 |
| projectName | String | 项目名称 |
| projectAddress | String | 项目地址 |
| installDate | String | 安装日期(yyyy-MM-dd HH:mm:ss) |
| acceptanceDate | String | 验收日期(yyyy-MM-dd HH:mm:ss) |
| onlineDate | String | 上线日期(yyyy-MM-dd HH:mm:ss) |
| deviceCount | Integer | 设备数量 |
| onlineDeviceCount | Integer | 在线设备数量 |
| offlineDeviceCount | Integer | 离线设备数量 |
| gatewayCount | Integer | 网关数量 |
| onlineGatewayCount | Integer | 在线网关数量 |
| offlineGatewayCount | Integer | 离线网关数量 |
| projectManager | String | 项目负责人 |
| electricityPrice | BigDecimal | 电单价 |
| createBy | String | 创建者 |
| createTime | String | 创建时间 |
| updateBy | String | 更新者 |
| updateTime | String | 更新时间 |
| remark | String | 备注 |
### 响应示例
```json
{
"code": 200,
"msg": "查询成功",
"total": 2,
"rows": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"projectCode": "PROJ2025001",
"projectName": "梅州豪生酒店节能改造项目",
"projectAddress": "广东省梅州市梅江区江南街道",
"installDate": "2025-03-15 10:00:00",
"acceptanceDate": "2025-06-20 14:30:00",
"onlineDate": "2025-07-01 09:00:00",
"deviceCount": 150,
"onlineDeviceCount": 145,
"offlineDeviceCount": 5,
"gatewayCount": 10,
"onlineGatewayCount": 10,
"offlineGatewayCount": 0,
"projectManager": "张三",
"electricityPrice": 0.85,
"createBy": "admin",
"createTime": "2025-03-10 08:30:00",
"updateBy": "admin",
"updateTime": "2025-07-01 10:00:00",
"remark": "一期工程项目"
}
]
}
```
---
## 2. 查询项目详情
### 接口描述
根据项目ID查询单个项目的详细信息。
### 请求信息
- **接口路径**: `/project/info/{id}`
- **请求方式**: `GET`
- **权限要求**: `project:info:query`
### 路径参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|--------|------|------|------|--------|
| id | String | 是 | 项目ID(UUID) | 550e8400-e29b-41d4-a716-446655440000 |
### 请求示例
```
GET /project/info/550e8400-e29b-41d4-a716-446655440000
```
### 响应参数
同列表查询的单条记录结构
### 响应示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"projectCode": "PROJ2025001",
"projectName": "梅州豪生酒店节能改造项目",
"projectAddress": "广东省梅州市梅江区江南街道",
"installDate": "2025-03-15 10:00:00",
"acceptanceDate": "2025-06-20 14:30:00",
"onlineDate": "2025-07-01 09:00:00",
"deviceCount": 150,
"onlineDeviceCount": 145,
"offlineDeviceCount": 5,
"gatewayCount": 10,
"onlineGatewayCount": 10,
"offlineGatewayCount": 0,
"projectManager": "张三",
"electricityPrice": 0.85,
"createBy": "admin",
"createTime": "2025-03-10 08:30:00",
"updateBy": "admin",
"updateTime": "2025-07-01 10:00:00",
"remark": "一期工程项目"
}
}
```
---
## 3. 新增项目信息
### 接口描述
创建新的项目信息记录。
### 请求信息
- **接口路径**: `/project/info`
- **请求方式**: `POST`
- **权限要求**: `project:info:add`
- **Content-Type**: `application/json`
### 请求参数(Body)
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|--------|------|------|------|--------|
| projectCode | String | 是 | 用户项目编码 | PROJ2025002 |
| projectName | String | 是 | 项目名称 | 某某酒店项目 |
| projectAddress | String | 否 | 项目地址 | 广东省深圳市南山区 |
| installDate | String | 否 | 安装日期(yyyy-MM-dd HH:mm:ss) | 2025-08-01 10:00:00 |
| acceptanceDate | String | 否 | 验收日期(yyyy-MM-dd HH:mm:ss) | 2025-10-01 14:30:00 |
| onlineDate | String | 否 | 上线日期(yyyy-MM-dd HH:mm:ss) | 2025-10-15 09:00:00 |
| deviceCount | Integer | 否 | 设备数量,默认0 | 100 |
| onlineDeviceCount | Integer | 否 | 在线设备数量,默认0 | 95 |
| offlineDeviceCount | Integer | 否 | 离线设备数量,默认0 | 5 |
| gatewayCount | Integer | 否 | 网关数量,默认0 | 8 |
| onlineGatewayCount | Integer | 否 | 在线网关数量,默认0 | 8 |
| offlineGatewayCount | Integer | 否 | 离线网关数量,默认0 | 0 |
| projectManager | String | 否 | 项目负责人 | 李四 |
| electricityPrice | BigDecimal | 否 | 电单价 | 0.75 |
| remark | String | 否 | 备注 | 二期工程 |
### 请求示例
```json
{
"projectCode": "PROJ2025002",
"projectName": "深圳某某酒店节能改造项目",
"projectAddress": "广东省深圳市南山区科技园",
"installDate": "2025-08-01 10:00:00",
"acceptanceDate": "2025-10-01 14:30:00",
"onlineDate": "2025-10-15 09:00:00",
"deviceCount": 100,
"onlineDeviceCount": 95,
"offlineDeviceCount": 5,
"gatewayCount": 8,
"onlineGatewayCount": 8,
"offlineGatewayCount": 0,
"projectManager": "李四",
"electricityPrice": 0.75,
"remark": "二期工程"
}
```
### 响应参数
| 参数名 | 类型 | 说明 |
|--------|------|------|
| code | Integer | 状态码(200成功) |
| msg | String | 返回消息 |
| data | Object | 返回数据(包含新增记录的ID) |
### 响应示例
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"id": "660e8400-e29b-41d4-a716-446655440001"
}
}
```
---
## 4. 修改项目信息
### 接口描述
更新已存在的项目信息记录。
### 请求信息
- **接口路径**: `/project/info`
- **请求方式**: `PUT`
- **权限要求**: `project:info:edit`
- **Content-Type**: `application/json`
### 请求参数(Body)
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|--------|------|------|------|--------|
| id | String | 是 | 项目ID(UUID) | 550e8400-e29b-41d4-a716-446655440000 |
| projectCode | String | 否 | 用户项目编码 | PROJ2025001 |
| projectName | String | 否 | 项目名称 | 梅州豪生酒店节能改造项目(修改后) |
| projectAddress | String | 否 | 项目地址 | 广东省梅州市梅江区江南街道(修改后) |
| installDate | String | 否 | 安装日期 | 2025-03-15 10:00:00 |
| acceptanceDate | String | 否 | 验收日期 | 2025-06-20 14:30:00 |
| onlineDate | String | 否 | 上线日期 | 2025-07-01 09:00:00 |
| deviceCount | Integer | 否 | 设备数量 | 160 |
| onlineDeviceCount | Integer | 否 | 在线设备数量 | 155 |
| offlineDeviceCount | Integer | 否 | 离线设备数量 | 5 |
| gatewayCount | Integer | 否 | 网关数量 | 12 |
| onlineGatewayCount | Integer | 否 | 在线网关数量 | 12 |
| offlineGatewayCount | Integer | 否 | 离线网关数量 | 0 |
| projectManager | String | 否 | 项目负责人 | 王五 |
| electricityPrice | BigDecimal | 否 | 电单价 | 0.90 |
| remark | String | 否 | 备注 | 一期工程扩建 |
### 请求示例
```json
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"projectCode": "PROJ2025001",
"projectName": "梅州豪生酒店节能改造项目(扩建)",
"projectAddress": "广东省梅州市梅江区江南街道",
"deviceCount": 160,
"onlineDeviceCount": 155,
"offlineDeviceCount": 5,
"gatewayCount": 12,
"onlineGatewayCount": 12,
"offlineGatewayCount": 0,
"projectManager": "王五",
"electricityPrice": 0.90,
"remark": "一期工程扩建"
}
```
### 响应示例
```json
{
"code": 200,
"msg": "操作成功"
}
```
---
## 5. 删除项目信息
### 接口描述
批量删除项目信息记录。
### 请求信息
- **接口路径**: `/project/info/{ids}`
- **请求方式**: `DELETE`
- **权限要求**: `project:info:remove`
### 路径参数
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|--------|------|------|------|--------|
| ids | String[] | 是 | 项目ID数组(多个ID用逗号分隔) | 550e8400-e29b-41d4-a716-446655440000,660e8400-e29b-41d4-a716-446655440001 |
### 请求示例
```
DELETE /project/info/550e8400-e29b-41d4-a716-446655440000,660e8400-e29b-41d4-a716-446655440001
```
### 响应示例
```json
{
"code": 200,
"msg": "操作成功"
}
```
---
## 通用说明
### 状态码说明
| 状态码 | 说明 |
|--------|------|
| 200 | 操作成功 |
| 401 | 未授权,需要登录 |
| 403 | 无权限访问 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
### 日期格式
所有日期时间字段统一使用格式:`yyyy-MM-dd HH:mm:ss`
### 注意事项
1. 所有写操作(新增、修改、删除)都需要相应的权限
2. ID由系统自动生成UUID,无需前端传入
3. 新增和修改操作会自动记录创建人/更新人和时间
4. 列表查询支持分页,默认每页10条
5. 查询条件可以组合使用,未传递的条件不参与过滤
6. 数值类型字段(设备数量、网关数量等)默认为0
7. 电单价保留4位小数精度
### 权限配置
在系统中需要配置以下权限菜单:
- `project:info:list` - 项目信息查询
- `project:info:query` - 项目详情查询
- `project:info:add` - 项目新增
- `project:info:edit` - 项目修改
- `project:info:remove` - 项目删除

37
mh-admin/src/main/java/com/mh/MHRunner.java

@ -1,14 +1,20 @@
package com.mh; package com.mh;
import com.mh.common.core.domain.entity.GatewayManage;
import com.mh.common.core.domain.entity.MqttSubscription; import com.mh.common.core.domain.entity.MqttSubscription;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.framework.mqtt.service.IMqttTopicService; import com.mh.framework.mqtt.service.IMqttTopicService;
import com.mh.framework.netty.EchoServer;
import com.mh.system.service.device.ICollectionParamsManageService;
import com.mh.system.service.device.IGatewayManageService;
import com.mh.system.service.mqtt.IMqttSubscriptionService; import com.mh.system.service.mqtt.IMqttSubscriptionService;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* @author LJF * @author LJF
@ -18,21 +24,48 @@ import java.util.List;
* @date 2025-02-14 16:35:50 * @date 2025-02-14 16:35:50
*/ */
@Component @Component
@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true)
public class MHRunner implements ApplicationRunner { public class MHRunner implements ApplicationRunner {
private final IMqttSubscriptionService iMqttSubscriptionService; private final IMqttSubscriptionService iMqttSubscriptionService;
private final IMqttTopicService iMqttTopicService; private final IMqttTopicService iMqttTopicService;
public MHRunner(IMqttSubscriptionService iMqttSubscriptionService, IMqttTopicService iMqttTopicService) { private final ICollectionParamsManageService collectionParamsManageService;
private final IGatewayManageService gatewayManageService;
public MHRunner(IMqttSubscriptionService iMqttSubscriptionService, IMqttTopicService iMqttTopicService, ICollectionParamsManageService collectionParamsManageService, IGatewayManageService gatewayManageService) {
this.iMqttSubscriptionService = iMqttSubscriptionService; this.iMqttSubscriptionService = iMqttSubscriptionService;
this.iMqttTopicService = iMqttTopicService; this.iMqttTopicService = iMqttTopicService;
this.collectionParamsManageService = collectionParamsManageService;
this.gatewayManageService = gatewayManageService;
} }
@Override @Override
public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) throws Exception {
// 初始化mqtt订阅记录 // 初始化mqtt订阅记录
initializeMqttSubscription(); // initializeMqttSubscription();
// 生成DTU采集参数
// createDtuCollectionParams();
// 启动netty服务端
// startNettyServer();
}
private void startNettyServer() {
List<GatewayManage> gatewayManages = gatewayManageService.selectGwManageList(new GatewayManage());
if (gatewayManages != null && !gatewayManages.isEmpty()) {
// 根据端口号分组
gatewayManages.stream().collect(Collectors.groupingBy(GatewayManage::getPort)).forEach((k, v) -> {
// 启动网关
GatewayManage gatewayManage = v.getFirst();
new Thread(() -> new EchoServer(gatewayManage.getPort()).start()).start();
});
}
}
private void createDtuCollectionParams() {
collectionParamsManageService.createDtuCollectionParams();
} }
/** /**

55
mh-admin/src/main/java/com/mh/web/controller/comprehensive/CompreReportController.java

@ -0,0 +1,55 @@
package com.mh.web.controller.comprehensive;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.vo.EnergyQueryVO;
import com.mh.common.core.page.TableDataInfo;
import com.mh.system.service.report.IComprehensiveReportService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @Classname CompreReportController
* Todo: 综合报表
* @Date 2025-10-05 13:59
* @Created by LJF
*/
@RestController
@RequestMapping("/compre")
public class CompreReportController extends BaseController {
private final IComprehensiveReportService proOverviewService;
public CompreReportController(IComprehensiveReportService proOverviewService) {
this.proOverviewService = proOverviewService;
}
@PostMapping("/report")
public TableDataInfo report(@RequestBody EnergyQueryVO vo) {
TableDataInfo dataTable = getDataTable(proOverviewService.report(vo));
// 优化分页逻辑,防止出现数组越界异常
List<?> rows = dataTable.getRows();
int total = rows.size();
// 如果 pageNum 小于等于0,则返回全部
if (vo.getPageNum() <= 0) {
return dataTable;
}
int pageNum = vo.getPageNum() <= 0 ? 1 : vo.getPageNum();
int pageSize = vo.getPageSize() <= 0 ? 10 : vo.getPageSize();
// 计算起始索引和结束索引
int startIndex = (pageNum - 1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, total);
// 边界检查
if (startIndex >= total || startIndex < 0) {
dataTable.setRows(List.of()); // 返回空列表而不是抛出异常
} else {
dataTable.setRows(rows.subList(startIndex, endIndex));
}
return dataTable;
}
}

23
mh-admin/src/main/java/com/mh/web/controller/comprehensive/ProOverviewController.java

@ -91,4 +91,27 @@ public class ProOverviewController extends BaseController {
return getDataTable(proOverviewService.mainParams()); return getDataTable(proOverviewService.mainParams());
} }
/**
* 获取热回收系统相关数据
* 出水温度离心机高温出水温度中温换热出水温度低温1换热出水温度低温2换热出水温度
* 热量数据生产累积热量散热累积热量总热量回收热利用率
* 系统数据离心机入口温度离心机出水温度保障进水温度
* 阀门开度二通阀阀门开度三通阀阀门开度
* 热回收数据瞬时热量日累积热量累积热量
* 应用侧数据瞬时热量日累计热量累积热量
*
*/
@GetMapping("/ersDatas")
public TableDataInfo ersDatas(@RequestParam("systemType") String systemType) {
return getDataTable(proOverviewService.ersDatas(systemType));
}
/**
* 查询能耗系数
* @return
*/
@GetMapping("/getCoe")
public TableDataInfo getCoe(){
return getDataTable(proOverviewService.getCoe());
}
} }

23
mh-admin/src/main/java/com/mh/web/controller/device/ChillersParamsController.java

@ -18,6 +18,7 @@ import com.mh.system.service.device.ICommunicationParamsService;
import com.mh.system.service.energy.IEnergyService; import com.mh.system.service.energy.IEnergyService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -51,13 +52,15 @@ public class ChillersParamsController extends BaseController {
*/ */
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(CollectionParamsManage collectionParamsManage) { public TableDataInfo list(CollectionParamsManage collectionParamsManage) {
collectionParamsManage.setIsUse(0);
List<CollectionParamsManage> list = iCollectionParamsManageService.selectCollectionParamsManageList(collectionParamsManage); List<CollectionParamsManage> list = iCollectionParamsManageService.selectCollectionParamsManageList(collectionParamsManage);
// list中的CollectionParamsManage中的other_name去掉“号主机”之前数据 // list中的CollectionParamsManage中的other_name去掉“号主机”之前数据
list.forEach(item -> { list.forEach(item -> {
String otherName = item.getOtherName(); String otherName = item.getOtherName();
// 使用正则表达式去掉“号主机”及之前的内容 // 使用正则表达式去掉“号主机”及之前的内容
String result = otherName != null ? otherName.replaceFirst(".*号主机", "") : otherName; String result = otherName != null ? otherName.replaceFirst(".*号主机", "") : otherName;
result = result != null ? result.replace("-", "") : result; result = result != null ? result.replace("_", "") : result;
result = result != null ? result.replace("主机参数", "") : result;
item.setOtherName(result); item.setOtherName(result);
}); });
// list中的CollectionParamsManage对象赋值到CollectionParamsManageVO2形成List<CollectionParamsManageVO2> // list中的CollectionParamsManage对象赋值到CollectionParamsManageVO2形成List<CollectionParamsManageVO2>
@ -67,31 +70,35 @@ public class ChillersParamsController extends BaseController {
CollectionParamsManageVO2 vo = new CollectionParamsManageVO2(); CollectionParamsManageVO2 vo = new CollectionParamsManageVO2();
BeanUtils.copyProperties(item, vo); BeanUtils.copyProperties(item, vo);
vo.setCurValue(item.getCurValue().setScale(2).toString()); vo.setCurValue(item.getCurValue().setScale(2).toString());
// 再根据mtType判断,如果是压缩机的,就只保留整数
if (vo.getMtType().equals("9") || vo.getMtType().equals("10") || vo.getMtType().equals("11")) {
vo.setCurValue(new BigDecimal(vo.getCurValue()).intValue() + "");
}
// 判断运行状态、启停、故障、本地远程 // 判断运行状态、启停、故障、本地远程
switch (vo.getParamType()) { switch (vo.getParamType()) {
case "1": // 运行状态 case "1": // 运行状态
if (!StringUtils.isEmpty(vo.getCurValue())) { if (!StringUtils.isEmpty(vo.getCurValue())) {
vo.setCurValue(vo.getCurValue().equals("1") ? "运行" : "停止"); vo.setCurValue(new BigDecimal(vo.getCurValue()).intValue() == 1 ? "运行" : "停止");
} }
break; break;
case "2": // 启停 case "2": // 启停
if (!StringUtils.isEmpty(vo.getCurValue())) { if (!StringUtils.isEmpty(vo.getCurValue())) {
vo.setCurValue(vo.getCurValue().equals("1") ? "启动" : "停止"); vo.setCurValue(new BigDecimal(vo.getCurValue()).intValue() == 1 ? "启动" : "停止");
} }
break; break;
case "5": // 故障 case "5": // 故障
if (!StringUtils.isEmpty(vo.getCurValue())) { if (!StringUtils.isEmpty(vo.getCurValue())) {
vo.setCurValue(vo.getCurValue().equals("1") ? "故障" : "正常"); vo.setCurValue(new BigDecimal(vo.getCurValue()).intValue() == 1 ? "故障" : "无故障");
} }
break; break;
case "6": // 手自动切换 case "6": // 手自动切换
if (!StringUtils.isEmpty(vo.getCurValue())) { if (!StringUtils.isEmpty(vo.getCurValue())) {
vo.setCurValue(vo.getCurValue().equals("1") ? "手动" : "自动"); vo.setCurValue(new BigDecimal(vo.getCurValue()).intValue() == 1 ? "手动" : "自动");
} }
break; break;
case "22": // 本地远程切换 case "22": // 本地远程切换
if (!StringUtils.isEmpty(vo.getCurValue())) { if (!StringUtils.isEmpty(vo.getCurValue())) {
vo.setCurValue(vo.getCurValue().equals("1") ? "远程" : "本地"); vo.setCurValue(new BigDecimal(vo.getCurValue()).intValue() == 1 ? "远程" : "本地");
} }
break; break;
default: default:
@ -113,8 +120,8 @@ public class ChillersParamsController extends BaseController {
return map; return map;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
result.sort((map1, map2) -> { result.sort((map1, map2) -> {
Integer mtType1 = Integer.parseInt((String)map1.get("mtType")); Integer mtType1 = Integer.parseInt((String) map1.get("mtType"));
Integer mtType2 = Integer.parseInt((String)map2.get("mtType")); Integer mtType2 = Integer.parseInt((String) map2.get("mtType"));
return mtType1.compareTo(mtType2); // 升序 return mtType1.compareTo(mtType2); // 升序
}); });
return getDataTable(result); return getDataTable(result);

10
mh-admin/src/main/java/com/mh/web/controller/device/CollectionParamsManageController.java

@ -88,4 +88,14 @@ public class CollectionParamsManageController extends BaseController {
return toAjax(iCollectionParamsManageService.deleteCommunicationByIds(cpmIds)); return toAjax(iCollectionParamsManageService.deleteCommunicationByIds(cpmIds));
} }
/**
* 删除设备采集参数管理
*/
@Log(title = "设备采集参数管理")
@GetMapping("/list/{deviceLegerIds}")
public TableDataInfo queryList(@PathVariable String[] deviceLegerIds)
{
return getDataTable(iCollectionParamsManageService.selectCollectionParamsManageListByIds(deviceLegerIds));
}
} }

53
mh-admin/src/main/java/com/mh/web/controller/device/OperationController.java

@ -11,6 +11,7 @@ import com.mh.common.core.domain.vo.DeviceOperateMonitorVO;
import com.mh.common.core.page.TableDataInfo; import com.mh.common.core.page.TableDataInfo;
import com.mh.common.enums.BusinessType; import com.mh.common.enums.BusinessType;
import com.mh.framework.mqtt.service.IMqttGatewayService; import com.mh.framework.mqtt.service.IMqttGatewayService;
import com.mh.framework.netty.INettyService;
import com.mh.system.service.device.ICollectionParamsManageService; import com.mh.system.service.device.ICollectionParamsManageService;
import com.mh.system.service.operation.IOperationDeviceService; import com.mh.system.service.operation.IOperationDeviceService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -39,20 +40,17 @@ public class OperationController extends BaseController {
@Autowired @Autowired
private MHConfig mhConfig; private MHConfig mhConfig;
private final ICollectionParamsManageService iCollectionParamsManageService; @Autowired
private ICollectionParamsManageService iCollectionParamsManageService;
private final IOperationDeviceService iOperationService; @Autowired
private IOperationDeviceService iOperationService;
private final IMqttGatewayService iMqttGatewayService; @Autowired(required = false)
private IMqttGatewayService iMqttGatewayService;
@Autowired @Autowired
public OperationController(ICollectionParamsManageService iCollectionParamsManageService, private INettyService nettyService;
IOperationDeviceService iOperationService,
IMqttGatewayService iMqttGatewayService) {
this.iCollectionParamsManageService = iCollectionParamsManageService;
this.iOperationService = iOperationService;
this.iMqttGatewayService = iMqttGatewayService;
}
/** /**
* 获取监控列表内容数据 * 获取监控列表内容数据
@ -95,11 +93,36 @@ public class OperationController extends BaseController {
@ControlDeviceAno(value = "设备操作") @ControlDeviceAno(value = "设备操作")
public AjaxResult operationDevice(@RequestBody List<OrderEntity> changeValues) { public AjaxResult operationDevice(@RequestBody List<OrderEntity> changeValues) {
try { try {
String sendOrder = iOperationService.operationDevice(changeValues); // 增加判断是否是昆仑通态触摸屏的MQTT设备
String name = mhConfig.getName(); if (!iOperationService.isKuLunTouchScreen(changeValues)) {
// 获取mqtt操作队列(后期通过mqtt队列配置发送主题) String sendOrder = iOperationService.operationKLTTDevice(changeValues);
log.info("发送主题:{},消息:{}", name + "/"+ controlTopic, sendOrder); String name = mhConfig.getName();
iMqttGatewayService.publish(name + "/"+ controlTopic, sendOrder, 1); // 获取mqtt操作队列(后期通过mqtt队列配置发送主题)
log.info("发送主题:{},消息:{}", name + "/" + controlTopic, sendOrder);
if (iMqttGatewayService != null) {
iMqttGatewayService.publish(name + "/" + controlTopic, sendOrder, 1);
} else {
log.warn("MQTT未启用,无法发送控制指令");
}
} else if (!iOperationService.isAdvanTech(changeValues)) {
// 判断id是否是DTU设备类型
String sendOrder = iOperationService.operationDevice(changeValues);
String name = mhConfig.getName();
// 获取mqtt操作队列(后期通过mqtt队列配置发送主题)
log.info("发送主题:{},消息:{}", name + "/" + controlTopic, sendOrder);
if (iMqttGatewayService != null) {
iMqttGatewayService.publish(name + "/" + controlTopic, sendOrder, 1);
} else {
log.warn("MQTT未启用,无法发送控制指令");
}
} else {
// 目前只有DTU设备需要发送4G指令
if (nettyService.sendOrder(changeValues)) {
return AjaxResult.success();
} else {
return AjaxResult.error();
}
}
} catch (Exception e) { } catch (Exception e) {
log.error("设备操作失败", e); log.error("设备操作失败", e);
return AjaxResult.error(); return AjaxResult.error();

109
mh-admin/src/main/java/com/mh/web/controller/energy/HotWaterEnergyController.java

@ -0,0 +1,109 @@
package com.mh.web.controller.energy;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.entity.WaterLevel;
import com.mh.common.core.domain.entity.WaterTemp;
import com.mh.common.core.page.TableDataInfo;
import com.mh.system.service.energy.IEnergyQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 生活热水能耗分析
* @date 2025-06-18 17:49:49
*/
@RestController
@RequestMapping("/hot_energy")
public class HotWaterEnergyController extends BaseController {
private final IEnergyQueryService energyQueryService;
public HotWaterEnergyController(IEnergyQueryService iEnergyQueryService) {
this.energyQueryService = iEnergyQueryService;
}
@GetMapping("/query")
public TableDataInfo queryEnergy(@RequestParam(value = "buildingId", required = false) String buildingId,
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate,
@RequestParam(value = "type") int type) {
startPage();
List<?> result = energyQueryService.queryEnergyDataList(buildingId, startDate, endDate, type);
return getDataTable(result);
}
//查询日月年用量汇总
@GetMapping(value = "/energySum")
public TableDataInfo queryEnergySum(@RequestParam(value = "buildingId", required = false) String buildingId,
@RequestParam(value = "curDate", required = false) String curDate,
@RequestParam(value = "type", required = true) Integer type) {
startPage();
List<?> result = energyQueryService.queryEnergyDataSumList(buildingId, curDate, type);
return getDataTable(result);
}
/**
* 温度变化表
*
* @param buildingId
* @param curDate
* @return
*/
@GetMapping("/waterTemp")
public TableDataInfo queryWaterTemp(@RequestParam(value = "buildingId", required = false) String buildingId,
@RequestParam(value = "curDate", required = false) String curDate) {
startPage();
List<WaterTemp> result = energyQueryService.queryWaterTemp(buildingId, curDate);
return getDataTable(result);
}
/**
* 水位变化表
*
* @param buildingId
* @param curDate
* @return
*/
@GetMapping("/waterLevel")
public TableDataInfo queryWaterLevel(@RequestParam(value = "buildingId", required = false) String buildingId,
@RequestParam(value = "curDate", required = false) String curDate) {
startPage();
List<WaterLevel> result = energyQueryService.queryWaterLevel(buildingId, curDate);
return getDataTable(result);
}
@GetMapping("/queryDeviceDatas")
public TableDataInfo queryDeviceDatas(@RequestParam(value = "buildingId", required = false) String buildingId,
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate,
@RequestParam(value = "deviceType", required = false) String deviceType) {
startPage();
List<?> result = energyQueryService.queryDeviceDatas(buildingId, startDate, endDate, deviceType);
return getDataTable(result);
}
@GetMapping("/analysis/queryYear") //type=1(水),2(电),3(能耗),4(维保)
public TableDataInfo queryAnalysisYear(@RequestParam(value = "curDate",required = true) String curDate,
@RequestParam(value = "buildingId",required = true) String buildingId,
@RequestParam(value = "type",defaultValue = "3") int type) {
startPage();
List<?> result = energyQueryService.queryAnalysisYear(curDate, buildingId, type);
return getDataTable(result);
}
@GetMapping("/analysis/queryMonth") //type=1(水),2(电),3(能耗),4(维保),5(使用时间)
public TableDataInfo queryAnalysisMonth(@RequestParam(value = "curDate",required = true) String curDate,
@RequestParam(value = "buildingId",required = true) String buildingId,
@RequestParam(value = "type",defaultValue = "3") int type) {
startPage();
List<?> result = energyQueryService.queryAnalysisMonth(curDate, buildingId, type);
return getDataTable(result);
}
}

8
mh-admin/src/main/java/com/mh/web/controller/energy/SysEnergyConsumptionController.java

@ -77,7 +77,13 @@ public class SysEnergyConsumptionController extends BaseController {
@PostMapping("/device") @PostMapping("/device")
public AjaxResult device(@RequestBody EnergyConsumptionVO vo) { public AjaxResult device(@RequestBody EnergyConsumptionVO vo) {
DateUtils.energyDateChange(vo); DateUtils.energyDateChange(vo);
return energyService.device(vo); if (vo.getSystemType().equals("0")) {
// 冷源系统
return energyService.device(vo);
} else {
// 热回收系统
return energyService.deviceERS(vo);
}
} }
} }

44
mh-admin/src/main/java/com/mh/web/controller/energy/SysEnergyQueryController.java

@ -54,6 +54,9 @@ public class SysEnergyQueryController {
// 文件名 // 文件名
try { try {
String fileName = "机房整体能耗表.xlsx"; String fileName = "机房整体能耗表.xlsx";
if (vo.getSystemType().equalsIgnoreCase("7")) {
fileName = "热回收热量总计表.xlsx";
}
// 从数据库获取数据 // 从数据库获取数据
List<Map<String, Object>> dataList = (List<Map<String, Object>>) energyQueryService.sysQuery(vo).get("data"); List<Map<String, Object>> dataList = (List<Map<String, Object>>) energyQueryService.sysQuery(vo).get("data");
if (dataList != null) { if (dataList != null) {
@ -71,18 +74,33 @@ public class SysEnergyQueryController {
for (Map<String, Object> map : dataList) { for (Map<String, Object> map : dataList) {
if (map.containsKey("titleArr")) { if (map.containsKey("titleArr")) {
titleArr = Arrays.asList((String[]) map.get("titleArr")); titleArr = Arrays.asList((String[]) map.get("titleArr"));
List<String> head0 = ListUtils.newArrayList(); if (vo.getSystemType().equalsIgnoreCase("7")) {
head0.add("日期"); List<String> head0 = ListUtils.newArrayList();
List<String> head1 = ListUtils.newArrayList(); head0.add("日期");
head1.add("制冷量"); List<String> head1 = ListUtils.newArrayList();
List<String> head2 = ListUtils.newArrayList(); head1.add("散热量");
head2.add("耗电量"); List<String> head2 = ListUtils.newArrayList();
List<String> head3= ListUtils.newArrayList(); head2.add("总热量回收");
head3.add("COP"); List<String> head3 = ListUtils.newArrayList();
head.add(head0); head3.add("热利用率");
head.add(head1); head.add(head0);
head.add(head2); head.add(head1);
head.add(head3); head.add(head2);
head.add(head3);
} else {
List<String> head0 = ListUtils.newArrayList();
head0.add("日期");
List<String> head1 = ListUtils.newArrayList();
head1.add("制冷量");
List<String> head2 = ListUtils.newArrayList();
head2.add("耗电量");
List<String> head3 = ListUtils.newArrayList();
head3.add("COP");
head.add(head0);
head.add(head1);
head.add(head2);
head.add(head3);
}
} }
if (map.containsKey("timeStrArr")) { if (map.containsKey("timeStrArr")) {
timeStrArr = Arrays.asList((String[])map.get("timeStrArr")); timeStrArr = Arrays.asList((String[])map.get("timeStrArr"));
@ -107,7 +125,7 @@ public class SysEnergyQueryController {
excelDataList.add(list1); excelDataList.add(list1);
} }
// 内容格式 // 内容格式
EasyExcel.write(response.getOutputStream()).head(head).sheet("机房整体能耗表").doWrite(excelDataList); EasyExcel.write(response.getOutputStream()).head(head).sheet(fileName.substring(0, fileName.lastIndexOf("."))).doWrite(excelDataList);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("下载报表异常", e); log.error("下载报表异常", e);

6
mh-admin/src/main/java/com/mh/web/controller/monitor/CoolingSystemMonitorController.java

@ -111,4 +111,10 @@ public class CoolingSystemMonitorController extends BaseController {
return AjaxResult.success(iCoolingSystemMonitorService.getSystemMode(systemType, paramType)); return AjaxResult.success(iCoolingSystemMonitorService.getSystemMode(systemType, paramType));
} }
@GetMapping("/getWeatherTemp")
public TableDataInfo getWeatherTemp(@RequestParam(name = "startTime") String startTime, @RequestParam(name = "endTime") String endTime){
startPage();
return getDataTable(iCoolingSystemMonitorService.getWeatherTemp(startTime, endTime));
}
} }

45
mh-admin/src/main/java/com/mh/web/controller/monitor/ERSMonitorController.java

@ -0,0 +1,45 @@
package com.mh.web.controller.monitor;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.dto.DeviceMonitorDTO;
import com.mh.common.core.page.TableDataInfo;
import com.mh.system.service.device.ICollectionParamsManageService;
import jakarta.annotation.Resource;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热回收系统工业流程图
* @date 2026-01-28 13:48:13
*/
@RestController
@RequestMapping("/device/ers")
public class ERSMonitorController extends BaseController {
@Resource
private ICollectionParamsManageService iCollectionParamsManageService;
@PreAuthorize("@ss.hasPermi('device:cpm:list')")
@GetMapping("/monitor/list")
public TableDataInfo list(@RequestParam(name = "systemType") String systemType)
{
List<DeviceMonitorDTO> list = iCollectionParamsManageService.selectMonitorListBySystemType(systemType);
return getDataTable(list);
}
@GetMapping("/monitor/totalDatas")
public TableDataInfo totalERSDatas(@RequestParam(name = "systemType") String systemType)
{
List<?> list = iCollectionParamsManageService.totalERSDatas(systemType);
return getDataTable(list);
}
}

70
mh-admin/src/main/java/com/mh/web/controller/monitor/HeatingPumpMonitorController.java

@ -0,0 +1,70 @@
package com.mh.web.controller.monitor;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.dto.DeviceMonitorDTO;
import com.mh.common.core.domain.entity.CollectionParamsManage;
import com.mh.common.core.page.TableDataInfo;
import com.mh.system.service.device.ICollectionParamsManageService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 三台采暖泵的监测
* @date 2025-09-12 09:36:33
*/
@RestController
@RequestMapping("/device")
public class HeatingPumpMonitorController extends BaseController {
private final ICollectionParamsManageService collectionParamsManageService;
public HeatingPumpMonitorController(ICollectionParamsManageService collectionParamsManageService) {
this.collectionParamsManageService = collectionParamsManageService;
}
/**
* 获取 alarmList 列表
* @param systemType 3
* @param type 0代表查询报警
* @return
*/
@RequestMapping("/heatPump/alarmList")
public TableDataInfo list(@RequestParam(name = "systemType") String systemType,
@RequestParam(name = "type", required = false, defaultValue = "0") String type) {
List<?> list = collectionParamsManageService.selectHeatPumpAlarmListByParams(systemType, type, "14", "5");
return getDataTable(list);
}
/**
* 获取 运行热泵统计 列表
* @param systemType 3
* @param type 0代表查询报警
* @return
*/
@RequestMapping("/heatPump/online")
public TableDataInfo online(@RequestParam(name = "systemType") String systemType,
@RequestParam(name = "type", required = false, defaultValue = "0") String type) {
List<?> list = collectionParamsManageService.selectHeatPumpOnlineByParams(systemType, type);
return getDataTable(list);
}
/**
* 获取 采暖泵 列表
* @param systemType 3
* @param type 0代表查询动画界面数据
* @return
*/
@RequestMapping("/heatPump/list")
public TableDataInfo heatPumpList(@RequestParam(name = "systemType") String systemType,
@RequestParam(name = "type", required = false, defaultValue = "0") String type) {
List<DeviceMonitorDTO> list = collectionParamsManageService.selectHotWaterBoilerListByParams(systemType, type, "14");
return getDataTable(list);
}
}

76
mh-admin/src/main/java/com/mh/web/controller/monitor/HomeController.java

@ -0,0 +1,76 @@
package com.mh.web.controller.monitor;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.page.TableDataInfo;
import com.mh.system.service.overview.HomeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 新增首页监控
* @date 2026-06-05 10:14:39
*/
@RestController
@RequestMapping("/home")
public class HomeController extends BaseController {
@Autowired
HomeService homeService;
/**
* 主界面图表
* @return
*/
@GetMapping("/charts")
public TableDataInfo getHomeCharts(){
return homeService.getHomeCharts();
}
/**
* 查询日供冷量月供冷量年供冷量
* 累计EER
* 累计供冷量
* @return
*/
@GetMapping("/statical")
public TableDataInfo getStatisticalData(){
return homeService.getStatisticalData();
}
/**
* 查询能耗系数
* @return
*/
@GetMapping("/getCoe")
public TableDataInfo getCoe(){
return homeService.getCoe();
}
/**
* 查询系统运行时长
* @return
*/
@GetMapping("/getRunTime")
public TableDataInfo getRunTime(){
return homeService.getRunTime();
}
/**
* 获取实时功率
* @return
*/
@GetMapping("/getCurrentRate")
public TableDataInfo getCurrentRate(){
return homeService.getCurrentRate();
}
@GetMapping("/getWeatherData")
public TableDataInfo getWeatherData() {
return homeService.getWeatherData();
}
}

20
mh-admin/src/main/java/com/mh/web/controller/monitor/HotWaterMonitorController.java

@ -1,14 +1,15 @@
package com.mh.web.controller.monitor; package com.mh.web.controller.monitor;
import com.mh.common.core.controller.BaseController; import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.ColumnData;
import com.mh.common.core.domain.ColumnFilter; import com.mh.common.core.domain.ColumnFilter;
import com.mh.common.core.domain.entity.DeviceState;
import com.mh.common.core.domain.dto.HotWaterControlDTO; import com.mh.common.core.domain.dto.HotWaterControlDTO;
import com.mh.common.core.domain.dto.HotWaterNowDataDTO; import com.mh.common.core.domain.dto.HotWaterNowDataDTO;
import com.mh.common.core.domain.dto.PumpInfoDTO; import com.mh.common.core.domain.dto.PumpInfoDTO;
import com.mh.common.core.domain.entity.ChillersEntity; import com.mh.common.core.domain.entity.ChillersEntity;
import com.mh.common.core.page.TableDataInfo; import com.mh.common.core.page.TableDataInfo;
import com.mh.system.service.device.ICollectionParamsManageService; import com.mh.system.service.device.ICollectionParamsManageService;
import com.mh.system.service.device.IDeviceLedgerService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -30,9 +31,12 @@ public class HotWaterMonitorController extends BaseController {
private final ICollectionParamsManageService iCollectionParamsManageService; private final ICollectionParamsManageService iCollectionParamsManageService;
private final IDeviceLedgerService deviceLedgerService;
@Autowired @Autowired
public HotWaterMonitorController(ICollectionParamsManageService iCollectionParamsManageService) { public HotWaterMonitorController(ICollectionParamsManageService iCollectionParamsManageService, IDeviceLedgerService deviceLedgerService) {
this.iCollectionParamsManageService = iCollectionParamsManageService; this.iCollectionParamsManageService = iCollectionParamsManageService;
this.deviceLedgerService = deviceLedgerService;
} }
/** /**
@ -89,4 +93,16 @@ public class HotWaterMonitorController extends BaseController {
return getDataTable(list); return getDataTable(list);
} }
/**
* 获取设备状态信息数据
* @param systemType
* @return
*/
@GetMapping("/deviceState")
public TableDataInfo deviceState(@RequestParam("systemType") String systemType) {
startPage();
List<DeviceState> list = deviceLedgerService.deviceState(systemType);
return getDataTable(list);
}
} }

57
mh-admin/src/main/java/com/mh/web/controller/monitor/SteamBoilerMonitorController.java

@ -0,0 +1,57 @@
package com.mh.web.controller.monitor;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.dto.DeviceMonitorDTO;
import com.mh.common.core.domain.entity.CollectionParamsManage;
import com.mh.common.core.page.TableDataInfo;
import com.mh.system.service.device.ICollectionParamsManageService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 蒸汽热水锅炉监测
* @date 2025-09-12 09:36:33
*/
@RestController
@RequestMapping("/device")
public class SteamBoilerMonitorController extends BaseController {
private final ICollectionParamsManageService collectionParamsManageService;
public SteamBoilerMonitorController(ICollectionParamsManageService collectionParamsManageService) {
this.collectionParamsManageService = collectionParamsManageService;
}
/**
* 获取 steamBoiler 列表
* @param systemType 3
* @param type 0代表查询动画界面数据1代表查询模拟量监测数据2代表查询继电器数据3查询端口输入数据4代表查询报警数据
* @return
*/
@RequestMapping("/steamBoiler/list")
public TableDataInfo list(@RequestParam(name = "systemType") String systemType,
@RequestParam(name = "type") String type) {
List<CollectionParamsManage> list = collectionParamsManageService.selectSteamBoilerListByParams(systemType, type);
return getDataTable(list);
}
/**
* 获取 热水锅炉 列表
* @param systemType 3
* @param type 0代表查询动画界面数据
* @return
*/
@RequestMapping("/hotWaterBoiler/list")
public TableDataInfo hotWaterBoilerList(@RequestParam(name = "systemType") String systemType,
@RequestParam(name = "type", required = false, defaultValue = "0") String type) {
List<DeviceMonitorDTO> list = collectionParamsManageService.selectHotWaterBoilerListByParams(systemType, type, "13");
return getDataTable(list);
}
}

2
mh-admin/src/main/java/com/mh/web/controller/mqtt/MqttSubsController.java

@ -10,6 +10,7 @@ import com.mh.common.utils.StringUtils;
import com.mh.framework.mqtt.service.IMqttTopicService; import com.mh.framework.mqtt.service.IMqttTopicService;
import com.mh.system.service.mqtt.IMqttSubscriptionService; import com.mh.system.service.mqtt.IMqttSubscriptionService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -28,6 +29,7 @@ import java.util.Objects;
*/ */
@RestController @RestController
@RequestMapping("/mqtt/subs") @RequestMapping("/mqtt/subs")
@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true)
public class MqttSubsController extends BaseController { public class MqttSubsController extends BaseController {
@Autowired @Autowired

2
mh-admin/src/main/java/com/mh/web/controller/mqtt/MqttTopicController.java

@ -3,6 +3,7 @@ package com.mh.web.controller.mqtt;
import com.mh.framework.mqtt.service.IMqttMsgSenderService; import com.mh.framework.mqtt.service.IMqttMsgSenderService;
import com.mh.framework.mqtt.service.IMqttTopicService; import com.mh.framework.mqtt.service.IMqttTopicService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -18,6 +19,7 @@ import java.util.Arrays;
*/ */
@RestController @RestController
@RequestMapping("/topic") @RequestMapping("/topic")
@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true)
public class MqttTopicController { public class MqttTopicController {
@Autowired @Autowired

85
mh-admin/src/main/java/com/mh/web/controller/project/ProjectInfoController.java

@ -0,0 +1,85 @@
package com.mh.web.controller.project;
import com.mh.common.annotation.Log;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.AjaxResult;
import com.mh.common.core.domain.entity.ProjectInfo;
import com.mh.common.core.page.TableDataInfo;
import com.mh.common.enums.BusinessType;
import com.mh.system.service.project.IProjectInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
/**
* @author EEMCS
* @version 1.0
* @project EEMCS
* @description 项目信息管理
* @date 2026-06-11
*/
@RestController
@RequestMapping("/project/info")
public class ProjectInfoController extends BaseController {
@Autowired
private IProjectInfoService projectInfoService;
/**
* 获取项目信息列表
*/
@PreAuthorize("@ss.hasPermi('project:info:list')")
@GetMapping("/list")
public TableDataInfo list(ProjectInfo projectInfo) {
startPage();
List<ProjectInfo> list = projectInfoService.selectProjectInfoList(projectInfo);
return getDataTable(list);
}
/**
* 根据项目ID获取详细信息
*/
@PreAuthorize("@ss.hasPermi('project:info:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable String id) {
return success(projectInfoService.selectProjectInfoById(id));
}
/**
* 新增项目信息
*/
@PreAuthorize("@ss.hasPermi('project:info:add')")
@Log(title = "项目信息管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody ProjectInfo projectInfo) {
projectInfo.setCreateBy(getUsername());
projectInfo.setCreateTime(new Date());
return toAjax(projectInfoService.insertProjectInfo(projectInfo));
}
/**
* 修改项目信息
*/
@PreAuthorize("@ss.hasPermi('project:info:edit')")
@Log(title = "项目信息管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody ProjectInfo projectInfo) {
projectInfo.setUpdateBy(getUsername());
projectInfo.setUpdateTime(new Date());
return toAjax(projectInfoService.updateProjectInfo(projectInfo));
}
/**
* 删除项目信息
*/
@PreAuthorize("@ss.hasPermi('project:info:remove')")
@Log(title = "项目信息管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable String[] ids) {
return toAjax(projectInfoService.deleteProjectInfoByIds(ids));
}
}

96
mh-admin/src/main/java/com/mh/web/controller/report/ReportHeatingController.java

@ -0,0 +1,96 @@
package com.mh.web.controller.report;
import com.alibaba.excel.EasyExcel;
import com.github.pagehelper.PageHelper;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.AjaxResult;
import com.mh.common.core.domain.dto.ReportHeatingRunParamDTO;
import com.mh.common.core.domain.dto.ReportSteamRunParamDTO;
import com.mh.common.core.domain.entity.ReportHeatingRunParamHis;
import com.mh.common.core.domain.entity.ReportSteamRunParamHis;
import com.mh.common.core.page.PageDomain;
import com.mh.common.core.page.TableDataInfo;
import com.mh.common.core.page.TableSupport;
import com.mh.common.utils.file.handle.ExcelFillCellMergeHandler;
import com.mh.common.utils.file.handle.ReportSysParamHandler;
import com.mh.common.utils.file.handle.RowHeightStyleHandler;
import com.mh.common.utils.sql.SqlUtil;
import com.mh.system.service.report.IReportHeatingService;
import com.mh.system.service.report.IReportSteamService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author LJF
* @version 1.0
* @project eemcs
* @description 采暖系统运行参数报表
* @date 2024-05-30 08:45:57
*/
@RestController
@RequestMapping("/reportHeating")
@Slf4j
public class ReportHeatingController extends BaseController {
private final IReportHeatingService reportHeatingService;
private ReportHeatingController(IReportHeatingService reportHeatingService) {
this.reportHeatingService = reportHeatingService;
}
@PostMapping("/list")
public TableDataInfo list(@RequestBody ReportHeatingRunParamHis reportHeatingRunParamHis) {
if (reportHeatingRunParamHis.getPageNum() != 0) {
PageHelper.startPage(reportHeatingRunParamHis.getPageNum(), reportHeatingRunParamHis.getPageSize());
}
List<ReportHeatingRunParamHis> list = reportHeatingService.selectHeatingList(reportHeatingRunParamHis);
return getDataTable(list);
}
@PutMapping("/edit")
public AjaxResult edit(@RequestBody ReportHeatingRunParamHis reportHeatingRunParamHis) {
return toAjax(reportHeatingService.updateRunParams(reportHeatingRunParamHis));
}
@PostMapping("/export")
public void exportExcel(@RequestBody ReportHeatingRunParamHis reportSteamRunParamHis, HttpServletResponse response) {
// 文件名
try {
String fileName = "采暖系统运行记录表.xlsx";
String headTitle = "采暖系统运行记录表";
// 从数据库获取数据
List<ReportHeatingRunParamHis> list = reportHeatingService.selectHeatingList(reportSteamRunParamHis);
if (list != null) {
// 设置响应格式
response.setContentType("application/vdn.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, StandardCharsets.UTF_8) + "\"");
response.setCharacterEncoding(String.valueOf(StandardCharsets.UTF_8));
ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler();
List<ReportHeatingRunParamDTO> infoDTOS = list.stream().map(info -> {
ReportHeatingRunParamDTO deviceInfoDTO = new ReportHeatingRunParamDTO();
BeanUtils.copyProperties(info, deviceInfoDTO);
return deviceInfoDTO;
}).collect(Collectors.toList());
// 内容格式
EasyExcel.write(response.getOutputStream(), ReportHeatingRunParamDTO.class)
.registerWriteHandler(new ReportSysParamHandler(headTitle))
.registerWriteHandler(mergePrevCol)
.registerWriteHandler(new RowHeightStyleHandler())
.sheet(fileName.replace(".xlsx", ""))
.doWrite(infoDTOS);
}
} catch (IOException e) {
throw new RuntimeException("下载报表异常");
}
}
}

144
mh-admin/src/main/java/com/mh/web/controller/report/ReportHotWaterController.java

@ -0,0 +1,144 @@
package com.mh.web.controller.report;
import com.alibaba.excel.EasyExcel;
import com.github.pagehelper.PageHelper;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.AjaxResult;
import com.mh.common.core.domain.dto.BFloorReportHotWaterDTO;
import com.mh.common.core.domain.dto.ThreeFloorReportHotWaterDTO;
import com.mh.common.core.domain.entity.ReportHotWaterParamHis;
import com.mh.common.core.domain.entity.ReportSysRunParamHis;
import com.mh.common.core.page.TableDataInfo;
import com.mh.common.utils.StringUtils;
import com.mh.common.utils.file.handle.ExcelFillCellMergeHandler;
import com.mh.common.utils.file.handle.ReportSysParamHandler;
import com.mh.common.utils.file.handle.RowHeightStyleHandler;
import com.mh.system.service.report.IReportHotWaterService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author LJF
* @version 1.0
* @project NewZhujiang_Server
* @description 热泵系统运行参数报表
* @date 2024-05-30 08:45:57
*/
@RestController
@RequestMapping("/reportHotWater")
@Slf4j
public class ReportHotWaterController extends BaseController {
private final IReportHotWaterService reportHotWaterService;
private ReportHotWaterController(IReportHotWaterService reportHotWaterService) {
this.reportHotWaterService = reportHotWaterService;
}
@PostMapping("/list")
public TableDataInfo list(@RequestBody ReportHotWaterParamHis reportHotWaterParamHis)
{
if (reportHotWaterParamHis.getPageNum() != 0) {
PageHelper.startPage(reportHotWaterParamHis.getPageNum(), reportHotWaterParamHis.getPageSize());
}
List<ReportHotWaterParamHis> list = reportHotWaterService.selectList(reportHotWaterParamHis);
return getDataTable(list);
}
@PutMapping("/edit")
public AjaxResult edit(@RequestBody ReportHotWaterParamHis reportHotWaterParamHis)
{
return toAjax(reportHotWaterService.updateRunParams(reportHotWaterParamHis));
}
@PostMapping("/export")
public void exportExcel(@RequestBody ReportHotWaterParamHis reportHotWaterParamHis, HttpServletResponse response) {
// 文件名
try {
String fileName = "热水热泵运行记录表.xlsx";
String floorId = reportHotWaterParamHis.getFloorId();
String headTitle = "热水热泵运行记录表";
if (!StringUtils.isBlank(floorId)) {
if (floorId.contains("-1楼")) {
fileName = "-1楼热水热泵运行记录表.xlsx";
headTitle = "-1楼热水热泵运行记录表";
} else {
fileName = "3楼热水热泵运行记录表.xlsx";
headTitle = "3楼热水热泵运行记录表";
}
}
// 从数据库获取数据
List<ReportHotWaterParamHis> list = reportHotWaterService.selectList(reportHotWaterParamHis);
if (list != null) {
// 设置响应格式
response.setContentType("application/vdn.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");
response.setCharacterEncoding("UTF-8");
ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler();
int headSize = 3;
if (floorId.contains("-1楼")) {
List<BFloorReportHotWaterDTO> infoDTOS = list.stream().map(info -> {
BFloorReportHotWaterDTO deviceInfoDTO = new BFloorReportHotWaterDTO();
BeanUtils.copyProperties(info, deviceInfoDTO);
// 单独处理启停和运行状态
deviceInfoDTO.setStatusRunHotPumpOneStr(info.getStatusRunHotPumpOne() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpOneStr(info.getStatusSwitchHotPumpOne() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunHotPumpTwoStr(info.getStatusRunHotPumpTwo() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpTwoStr(info.getStatusSwitchHotPumpTwo() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunSupplyPumpOneStr(info.getStatusRunSupplyPumpOne() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusRunSupplyPumpTwoStr(info.getStatusRunSupplyPumpTwo() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusRunSupplyPumpThreeStr(info.getStatusRunSupplyPumpThree() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusRunSupplyPumpFourStr(info.getStatusRunSupplyPumpFour() == 1 ? "运行" : "不运行");
return deviceInfoDTO;
}).collect(Collectors.toList());
// 内容格式
EasyExcel.write(response.getOutputStream(), BFloorReportHotWaterDTO.class)
.registerWriteHandler(new ReportSysParamHandler(headTitle))
.registerWriteHandler(mergePrevCol)
.registerWriteHandler(new RowHeightStyleHandler())
.sheet(fileName.replace(".xlsx", ""))
.doWrite(infoDTOS);
} else {
List<ThreeFloorReportHotWaterDTO> infoDTOS = list.stream().map(info -> {
ThreeFloorReportHotWaterDTO deviceInfoDTO = new ThreeFloorReportHotWaterDTO();
BeanUtils.copyProperties(info, deviceInfoDTO);
// 单独处理启停和运行状态
deviceInfoDTO.setStatusRunHotPumpOneStr(info.getStatusRunHotPumpOne() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpOneStr(info.getStatusSwitchHotPumpOne() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunHotPumpTwoStr(info.getStatusRunHotPumpTwo() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpTwoStr(info.getStatusSwitchHotPumpTwo() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunHotPumpThreeStr(info.getStatusRunHotPumpThree() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpThreeStr(info.getStatusSwitchHotPumpThree() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunHotPumpFourStr(info.getStatusRunHotPumpFour() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpFourStr(info.getStatusSwitchHotPumpFour() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunSupplyPumpOneStr(info.getStatusRunSupplyPumpOne() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusRunSupplyPumpTwoStr(info.getStatusRunSupplyPumpTwo() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusRunSupplyPumpThreeStr(info.getStatusRunSupplyPumpThree() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusRunSupplyPumpFourStr(info.getStatusRunSupplyPumpFour() == 1 ? "运行" : "不运行");
return deviceInfoDTO;
}).collect(Collectors.toList());
// 内容格式
EasyExcel.write(response.getOutputStream(), ThreeFloorReportHotWaterDTO.class)
.registerWriteHandler(new ReportSysParamHandler(headTitle))
.registerWriteHandler(mergePrevCol)
.registerWriteHandler(new RowHeightStyleHandler())
.sheet(fileName.replace(".xlsx", ""))
.doWrite(infoDTOS);
}
}
} catch (IOException e) {
throw new RuntimeException("下载报表异常");
}
}
}

131
mh-admin/src/main/java/com/mh/web/controller/report/ReportMeterReadingsController.java

@ -0,0 +1,131 @@
package com.mh.web.controller.report;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillWrapper;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.dto.WeatherDataDTO;
import com.mh.common.core.domain.entity.ReportMeterReadingsHis;
import com.mh.common.core.page.TableDataInfo;
import com.mh.common.utils.DateUtils;
import com.mh.system.service.device.ICoolingSystemMonitorService;
import com.mh.system.service.report.IMeterReadingsHisService;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.*;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 每日抄表记录查询
* @date 2025-10-21 16:04:09
*/
@RestController
@RequestMapping("/reportMeterReadings")
public class ReportMeterReadingsController extends BaseController {
private final IMeterReadingsHisService meterReadingsHisService;
private final ICoolingSystemMonitorService coolingSystemMonitorService;
public ReportMeterReadingsController(IMeterReadingsHisService meterReadingsHisService, ICoolingSystemMonitorService coolingSystemMonitorService) {
this.meterReadingsHisService = meterReadingsHisService;
this.coolingSystemMonitorService = coolingSystemMonitorService;
}
@PostMapping("/list")
public TableDataInfo list(@RequestBody ReportMeterReadingsHis todayTimestamp)
{
List<ReportMeterReadingsHis> list = meterReadingsHisService.selectList(todayTimestamp);
return getDataTable(list);
}
@PostMapping("/export")
public void exportExcel(@RequestBody ReportMeterReadingsHis reportMeterReadingsHis, HttpServletResponse response) {
// 文件名
try {
String fileName = "节能岛改造每日能耗统计表"+ DateUtils.dateToString(reportMeterReadingsHis.getTodayTimestamp(), "yyyyMMdd")+".xlsx";
// 读取资源文件
ClassPathResource classPathResource = new ClassPathResource(File.separator + "节能岛改造每日能耗统计表.xlsx");
// 获取数据
List<ReportMeterReadingsHis> list = meterReadingsHisService.selectList(reportMeterReadingsHis);
// 组织并填充模板数据
ByteArrayOutputStream byteArrayOutputStream = compositeFill(classPathResource.getInputStream(), reportMeterReadingsHis.getTodayTimestamp(), list);
// 设置响应格式
response.setContentType("application/vdn.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");
response.setCharacterEncoding("UTF-8");
// 将文件内容写入响应输出流,浏览器可以直接触发下载
response.getOutputStream().write(byteArrayOutputStream.toByteArray());
response.getOutputStream().flush();
} catch (IOException e) {
throw new RuntimeException("下载报表异常");
}
}
private ByteArrayOutputStream compositeFill(InputStream templateInputStream, Date todayTimestamp, List<ReportMeterReadingsHis> list) throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// 使用EasyExcel的模板填充功能,在这里指定合并单元格,这里应该是easyExcel的bug,第一列无法合并,其他列都可以,所以第一列单独用原生poi进行合并
try (ExcelWriter excelWriter = EasyExcel.write(byteArrayOutputStream).withTemplate(templateInputStream)
.build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
// 防止上面两个表格覆盖下面两个表格,每一行都采用新增一行的方式
// FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
// 使用模板填充,必须使用FillWrapper,这是官方要求,并且每行两个表格只能有一个表格设置增行,否则会存在一个表格有空行,这里是造的测试数据
for (int i = 0; i < list.size(); i++) {
excelWriter.fill(new FillWrapper("data"+(i+1), List.of(list.get(i))), writeSheet);
}
// 设置表格外的填充数据,例如总计、日期等数据
HashMap<String, Object> map = new HashMap<>();
List<WeatherDataDTO> weatherTemp = (List<WeatherDataDTO>) coolingSystemMonitorService.getWeatherTemp(DateUtils.dateToString(todayTimestamp, "yyyy-MM-dd"), DateUtils.dateToString(todayTimestamp, "yyyy-MM-dd"));
if (!weatherTemp.isEmpty()) {
String maxTemp = weatherTemp.getFirst().getMaxTemp();
map.put("maxTemp", maxTemp);
String minTemp = weatherTemp.getFirst().getMinTemp();
map.put("minTemp", minTemp);
}
map.put("date", DateUtils.dateToString(todayTimestamp, "yyyy年MM月dd日"));
excelWriter.fill(map, writeSheet);
// 2. 获取 Workbook 并计算公式
Workbook workbook = excelWriter.writeContext()
.writeWorkbookHolder()
.getWorkbook();
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
for (Row row : workbook.getSheetAt(0)) {
for (Cell cell : row) {
if (cell.getCellType() == CellType.FORMULA) {
evaluator.evaluateFormulaCell(cell); // 单元格级计算
// evaluator.evaluateAll(); // 全工作簿计算(推荐)
}
}
}
// 3. 强制刷新计算结果
workbook.setForceFormulaRecalculation(true);
excelWriter.finish();
}
// 合并单元格,由于easyExcel自带的OnceAbsoluteMergeStrategy合并策略bug,这里需要用poi合并一下
return byteArrayOutputStream;
}
}

156
mh-admin/src/main/java/com/mh/web/controller/report/ReportSteamController.java

@ -0,0 +1,156 @@
package com.mh.web.controller.report;
import com.alibaba.excel.EasyExcel;
import com.github.pagehelper.PageHelper;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.AjaxResult;
import com.mh.common.core.domain.dto.ReportSteamRunParamDTO;
import com.mh.common.core.domain.dto.ThreeFloorReportHotWaterDTO;
import com.mh.common.core.domain.entity.ReportSteamRunParamHis;
import com.mh.common.core.page.TableDataInfo;
import com.mh.common.utils.file.handle.ExcelFillCellMergeHandler;
import com.mh.common.utils.file.handle.ReportSysParamHandler;
import com.mh.common.utils.file.handle.RowHeightStyleHandler;
import com.mh.system.service.report.IReportSteamService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author LJF
* @version 1.0
* @project eemcs
* @description 蒸汽系统运行参数报表
* @date 2024-05-30 08:45:57
*/
@RestController
@RequestMapping("/reportSteam")
@Slf4j
public class ReportSteamController extends BaseController {
private final IReportSteamService reportSteamService;
private ReportSteamController(IReportSteamService reportSteamService) {
this.reportSteamService = reportSteamService;
}
@PostMapping("/list")
public TableDataInfo list(@RequestBody ReportSteamRunParamHis reportSteamRunParamHis) {
if (reportSteamRunParamHis.getPageNum() != 0) {
PageHelper.startPage(reportSteamRunParamHis.getPageNum(), reportSteamRunParamHis.getPageSize());
}
List<ReportSteamRunParamHis> list = reportSteamService.selectList(reportSteamRunParamHis);
return getDataTable(list);
}
@PutMapping("/edit")
public AjaxResult edit(@RequestBody ReportSteamRunParamHis reportSteamRunParamHis) {
return toAjax(reportSteamService.updateRunParams(reportSteamRunParamHis));
}
@PostMapping("/export")
public void exportExcel(@RequestBody ReportSteamRunParamHis reportSteamRunParamHis, HttpServletResponse response) {
// 文件名
try {
String fileName = "蒸汽机运行记录表.xlsx";
String headTitle = "蒸汽机运行记录表";
// 从数据库获取数据
List<ReportSteamRunParamHis> list = reportSteamService.selectList(reportSteamRunParamHis);
if (list != null) {
// 设置响应格式
response.setContentType("application/vdn.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");
response.setCharacterEncoding("UTF-8");
ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler();
List<ReportSteamRunParamDTO> infoDTOS = list.stream().map(info -> {
ReportSteamRunParamDTO deviceInfoDTO = new ReportSteamRunParamDTO();
BeanUtils.copyProperties(info, deviceInfoDTO);
// 单独处理运行状态
// 0:上电延时
// 1:关机
// 2:待机
// 3:前清扫
// 4:预点火
// 5:点火
// 6:传火
// 7:工作
// 8:后清扫
// 9:故障
// 10:小火保持
// 11:自检
// 12:检漏
// 13:开点火器
// 14:启动等待中
switch (info.getCurStatus()) {
case 0:
deviceInfoDTO.setCurStatus("上电延时");
break;
case 1:
deviceInfoDTO.setCurStatus("关机");
break;
case 2:
deviceInfoDTO.setCurStatus("待机");
break;
case 3:
deviceInfoDTO.setCurStatus("前清扫");
break;
case 4:
deviceInfoDTO.setCurStatus("预点火");
break;
case 5:
deviceInfoDTO.setCurStatus("点火");
break;
case 6:
deviceInfoDTO.setCurStatus("传火");
break;
case 7:
deviceInfoDTO.setCurStatus("工作");
break;
case 8:
deviceInfoDTO.setCurStatus("后清扫");
break;
case 9:
deviceInfoDTO.setCurStatus("故障");
break;
case 10:
deviceInfoDTO.setCurStatus("小火保持");
break;
case 11:
deviceInfoDTO.setCurStatus("自检");
break;
case 12:
deviceInfoDTO.setCurStatus("检漏");
break;
case 13:
deviceInfoDTO.setCurStatus("开点火器");
break;
case 14:
deviceInfoDTO.setCurStatus("启动等待中");
break;
default:
deviceInfoDTO.setCurStatus("未知");
break;
}
return deviceInfoDTO;
}).collect(Collectors.toList());
// 内容格式
EasyExcel.write(response.getOutputStream(), ReportSteamRunParamDTO.class)
.registerWriteHandler(new ReportSysParamHandler(headTitle))
.registerWriteHandler(mergePrevCol)
.registerWriteHandler(new RowHeightStyleHandler())
.sheet(fileName.replace(".xlsx", ""))
.doWrite(infoDTOS);
}
} catch (IOException e) {
throw new RuntimeException("下载报表异常");
}
}
}

100
mh-admin/src/main/java/com/mh/web/controller/report/ReportSysController.java

@ -0,0 +1,100 @@
package com.mh.web.controller.report;
import com.alibaba.excel.EasyExcel;
import com.github.pagehelper.PageHelper;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.AjaxResult;
import com.mh.common.core.domain.dto.MaglevReportSysParamDTO;
import com.mh.common.core.domain.entity.ReportSysRunParamHis;
import com.mh.common.core.page.TableDataInfo;
import com.mh.common.utils.StringUtils;
import com.mh.common.utils.file.handle.ExcelFillCellMergeHandler;
import com.mh.common.utils.file.handle.ReportSysParamHandler;
import com.mh.common.utils.file.handle.RowHeightStyleHandler;
import com.mh.system.service.report.IReportSysService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author LJF
* @version 1.0
* @project NewZhujiang_Server
* @description 系统参数报表
* @date 2024-05-30 08:45:57
*/
@RestController
@RequestMapping("/reportSys")
@Slf4j
public class ReportSysController extends BaseController {
private final IReportSysService reportSysService;
private ReportSysController(IReportSysService reportSysService) {
this.reportSysService = reportSysService;
}
@PostMapping("/list")
public TableDataInfo list(@RequestBody ReportSysRunParamHis reportSysRunParamHis)
{
if (reportSysRunParamHis.getPageNum() != 0) {
PageHelper.startPage(reportSysRunParamHis.getPageNum(), reportSysRunParamHis.getPageSize());
}
List<ReportSysRunParamHis> list = reportSysService.selectList(reportSysRunParamHis);
return getDataTable(list);
}
@PutMapping("/edit")
public AjaxResult edit(@RequestBody ReportSysRunParamHis reportSysRunParamHis)
{
return toAjax(reportSysService.updateSysRunParams(reportSysRunParamHis));
}
@PostMapping("/export")
public void exportExcel(@RequestBody ReportSysRunParamHis reportSysRunParamHis, HttpServletResponse response) {
// 文件名
try {
String fileName = "系统参数运行日志报表.xlsx";
String deviceNum = (String) reportSysRunParamHis.getParams().get("deviceNum");
if (!StringUtils.isBlank(deviceNum)) {
if ("2".equals(deviceNum)) {
fileName = "变频螺杆主机系统参数报表.xlsx";
} else {
fileName = "磁悬浮主机系统参数报表.xlsx";
}
}
// 从数据库获取数据
List<ReportSysRunParamHis> list = reportSysService.selectList(reportSysRunParamHis);
if (list != null) {
// 设置响应格式
response.setContentType("application/vdn.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");
response.setCharacterEncoding("UTF-8");
ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler();
int headSize = 3;
List<MaglevReportSysParamDTO> infoDTOS = list.stream().map(info -> {
MaglevReportSysParamDTO deviceInfoDTO = new MaglevReportSysParamDTO();
BeanUtils.copyProperties(info, deviceInfoDTO);
return deviceInfoDTO;
}).collect(Collectors.toList());
// 内容格式
EasyExcel.write(response.getOutputStream(), MaglevReportSysParamDTO.class)
.registerWriteHandler(new ReportSysParamHandler("磁悬浮水冷冷水机组数据运行记录表"))
.registerWriteHandler(mergePrevCol)
.registerWriteHandler(new RowHeightStyleHandler())
.sheet(fileName.replace(".xlsx", ""))
.doWrite(infoDTOS);
}
} catch (IOException e) {
throw new RuntimeException("下载报表异常");
}
}
}

20
mh-admin/src/main/java/com/mh/web/controller/space/BuildingInfoController.java

@ -6,6 +6,7 @@ import com.mh.common.core.domain.AjaxResult;
import com.mh.common.core.domain.entity.BuildingInfo; import com.mh.common.core.domain.entity.BuildingInfo;
import com.mh.common.core.page.TableDataInfo; import com.mh.common.core.page.TableDataInfo;
import com.mh.common.enums.BusinessType; import com.mh.common.enums.BusinessType;
import com.mh.system.service.energy.IEnergyQueryService;
import com.mh.system.service.space.IBuildingInfoService; import com.mh.system.service.space.IBuildingInfoService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -13,6 +14,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author LJF * @author LJF
@ -28,6 +30,9 @@ public class BuildingInfoController extends BaseController {
@Autowired @Autowired
private IBuildingInfoService buildingInfoService; private IBuildingInfoService buildingInfoService;
@Autowired
private IEnergyQueryService energyQueryService;
/** /**
* 获取楼栋管理列表内容数据 * 获取楼栋管理列表内容数据
*/ */
@ -85,4 +90,19 @@ public class BuildingInfoController extends BaseController {
return toAjax(buildingInfoService.deleteBuildingInfoByIds(buildingIds)); return toAjax(buildingInfoService.deleteBuildingInfoByIds(buildingIds));
} }
/**
* 获取楼栋管理列表内容数据
*/
@GetMapping("/hot_list")
public TableDataInfo hotWaterList(@RequestParam("systemType") String systemType)
{
List<Map<String, Object>> list = energyQueryService.queryFloorInfo(systemType);
// 在当前list首个坐标加个值
if (systemType.equals("1")) {
list.addFirst(Map.of("id", "所有", "building_name", "所有"));
}
return getDataTable(list);
}
} }

5
mh-admin/src/main/java/com/mh/web/controller/space/SpaceController.java

@ -29,4 +29,9 @@ public class SpaceController extends BaseController {
return AjaxResult.success(houseInfoService.buildTree(systemType)); return AjaxResult.success(houseInfoService.buildTree(systemType));
} }
@GetMapping("/floorTree")
public AjaxResult floorTree(@RequestParam(value = "systemType", required = false) String systemType) {
return AjaxResult.success(houseInfoService.buildFloorTree(systemType));
}
} }

2
mh-admin/src/main/java/com/mh/web/controller/system/SysLoginController.java

@ -92,6 +92,6 @@ public class SysLoginController
{ {
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId); List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
return AjaxResult.success(menuService.buildMenus(menus)); return AjaxResult.success(menuService.buildMenus(menus,userId));
} }
} }

40
mh-admin/src/main/resources/application-dev.yml

@ -1,11 +1,11 @@
# 项目相关配置 # 项目相关配置
mh: mh:
# 名称 # 名称
name: mz name: bl_dev
# 版本 # 版本
version: 1.0.0 version: 1.0.0
# 版权年份 # 版权年份
copyrightYear: 2024 copyrightYear: 2026
# 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath) # 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath)
profile: D:/mh/uploadPath profile: D:/mh/uploadPath
# 获取ip地址开关 # 获取ip地址开关
@ -63,7 +63,7 @@ spring:
# 端口,默认为6379 # 端口,默认为6379
port: 6379 port: 6379
# 数据库索引 # 数据库索引
database: 0 database: 3
# 密码 # 密码
password: password:
# 连接超时时间 # 连接超时时间
@ -84,7 +84,7 @@ spring:
port: 5672 port: 5672
username: eemcs username: eemcs
password: mh@803 password: mh@803
virtual-host: /eemcs virtual-host: /eemcs_bl_dev
listener: listener:
direct: direct:
prefetch: 2 prefetch: 2
@ -98,8 +98,8 @@ spring:
# 主库数据源 # 主库数据源
master: master:
#添加allowMultiQueries=true 在批量更新时才不会出错 #添加allowMultiQueries=true 在批量更新时才不会出错
# url: jdbc:postgresql://127.0.0.1:5432/eemcs_hw_dev url: jdbc:postgresql://127.0.0.1:5432/eemcs_blzj
url: jdbc:postgresql://127.0.0.1:5432/eemcs # url: jdbc:postgresql://106.55.173.225:5505/eemcs
username: postgres username: postgres
password: mh@803 password: mh@803
# 从库数据源 # 从库数据源
@ -188,19 +188,21 @@ xss:
urlPatterns: /system/*,/monitor/*,/tool/* urlPatterns: /system/*,/monitor/*,/tool/*
mqttSpring: mqttSpring:
# 是否启用MQTT,默认false
enabled: false
# BASIC parameters are required. # BASIC parameters are required.
BASIC: BASIC:
protocol: MQTT protocol: MQTT
host: 127.0.0.1 host: 192.168.1.79
port: 2883 port: 1883
username: mh username: test123456
password: mhtech@803 password: test123456
# protocol: MQTT # protocol: MQTT
# host: mqtt.mhito.net # host: mqtt.mhito.net
# port: 1883 # port: 1883
# username: sa # username: sa
# password: sa123 # password: sa123
client-id: mqtt_mz_producer_dev client-id: mqtt_bl_producer_dev
# If the protocol is ws/wss, this value is required. # If the protocol is ws/wss, this value is required.
path: path:
# Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",". # Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",".
@ -209,10 +211,24 @@ mqttSpring:
# 无人机远程控制模式(drone remote control) # 无人机远程控制模式(drone remote control)
DRC: DRC:
protocol: WS protocol: WS
host: 127.0.0.1 host: 192.168.1.79
port: 8083 port: 8083
path: /mqtt path: /mqtt
control: control:
topic: mh_control/events_upload/devices/dev topic: mh_control/events_upload/devices/dev
amap: amap:
key: fc4e79719daca2d0b8a11ba3124e1bd5 key: fc4e79719daca2d0b8a11ba3124e1bd5
wechat:
mpAppId: wx5653d0f930e98414
mpAppSecret: 3473cbd80e891e4e7da1b1b71ae3a5a2
redirectUri: https://35gm72cu2458.vicp.fun/wechat/userInfo
# 生成微信授权
authorizedUrl: https://open.weixin.qq.com/connect/oauth2/authorize?appid=mpAppId&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
# 获取code后,请求以下链接获取access_token
access_token: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET
# 拉取用户信息(需scope为 snsapi_userinfo)
userinfo: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
# 消息推送url
pushUrl: https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
baseUrl: https://35gm72cu2458.vicp.fun

2
mh-admin/src/main/resources/application-druid.yml

@ -7,7 +7,7 @@ spring:
# 主库数据源 # 主库数据源
master: master:
#添加allowMultiQueries=true 在批量更新时才不会出错 #添加allowMultiQueries=true 在批量更新时才不会出错
url: jdbc:postgresql://127.0.0.1:5432/eemcs_hw url: jdbc:postgresql://127.0.0.1:5432/eemcs_gh_ers_dev
# url: jdbc:postgresql://127.0.0.1:5432/eemcs # url: jdbc:postgresql://127.0.0.1:5432/eemcs
username: postgres username: postgres
password: mh@803 password: mh@803

38
mh-admin/src/main/resources/application-prod.yml

@ -1,13 +1,13 @@
# 项目相关配置 # 项目相关配置
mh: mh:
# 名称 # 名称
name: mz name: bl_eems
# 版本 # 版本
version: 1.0.0 version: 1.0.0
# 版权年份 # 版权年份
copyrightYear: 2024 copyrightYear: 2026
# 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath) # 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath)
profile: E:/mh/uploadPath profile: D:/mh_data/uploadPath
# 获取ip地址开关 # 获取ip地址开关
addressEnabled: false addressEnabled: false
# 验证码类型 math 数字计算 char 字符验证 # 验证码类型 math 数字计算 char 字符验证
@ -63,7 +63,7 @@ spring:
# 端口,默认为6379 # 端口,默认为6379
port: 6379 port: 6379
# 数据库索引 # 数据库索引
database: 14 database: 1
# 密码 # 密码
password: password:
# 连接超时时间 # 连接超时时间
@ -82,9 +82,9 @@ spring:
rabbitmq: rabbitmq:
host: 127.0.0.1 host: 127.0.0.1
port: 5672 port: 5672
username: eemcs_mz username: eemcs
password: mh@803 password: mh@803
virtual-host: /eemcs_mz virtual-host: eems_bl
listener: listener:
direct: direct:
prefetch: 2 prefetch: 2
@ -98,7 +98,7 @@ spring:
# 主库数据源 # 主库数据源
master: master:
#添加allowMultiQueries=true 在批量更新时才不会出错 #添加allowMultiQueries=true 在批量更新时才不会出错
url: jdbc:postgresql://127.0.0.1:5505/eemcs url: jdbc:postgresql://127.0.0.1:5232/bl_eems
# url: jdbc:postgresql://127.0.0.1:5505/eemcs # url: jdbc:postgresql://127.0.0.1:5505/eemcs
username: postgres username: postgres
password: mhtech@803 password: mhtech@803
@ -188,14 +188,16 @@ xss:
urlPatterns: /system/*,/monitor/*,/tool/* urlPatterns: /system/*,/monitor/*,/tool/*
mqttSpring: mqttSpring:
# 是否启用MQTT,默认false
enabled: false
# BASIC parameters are required. # BASIC parameters are required.
BASIC: BASIC:
protocol: MQTT protocol: MQTT
host: mqtt.mhito.net host: mqtt.mhito.net
port: 1883 port: 1883
username: sa username: eemcs_gh_ers
password: sa123 password: mhtech@ghers
client-id: eemcs_mz_mqtt_pro client-id: eemcs_gh_ers_mqtt_pro
# If the protocol is ws/wss, this value is required. # If the protocol is ws/wss, this value is required.
path: path:
# Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",". # Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",".
@ -208,6 +210,20 @@ mqttSpring:
port: 8083 port: 8083
path: /mqtt path: /mqtt
control: control:
topic: mh_control/events_upload/devices topic: mh_control/events_upload/devices/dev
amap: amap:
key: fc4e79719daca2d0b8a11ba3124e1bd5 key: fc4e79719daca2d0b8a11ba3124e1bd5
wechat:
mpAppId: wx5653d0f930e98414
mpAppSecret: 3473cbd80e891e4e7da1b1b71ae3a5a2
redirectUri: http://jnd2.mhwsh.net:8766/wechat/userInfo
# 生成微信授权
authorizedUrl: https://open.weixin.qq.com/connect/oauth2/authorize?appid=mpAppId&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
# 获取code后,请求以下链接获取access_token
access_token: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET
# 拉取用户信息(需scope为 snsapi_userinfo)
userinfo: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
# 消息推送url
pushUrl: https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
baseUrl: http://jnd2.mhwsh.net:8766

26
mh-admin/src/main/resources/application-test.yml

@ -1,11 +1,11 @@
# 项目相关配置 # 项目相关配置
mh: mh:
# 名称 # 名称
name: MH name: gh_ers
# 版本 # 版本
version: 1.0.0 version: 1.0.0
# 版权年份 # 版权年份
copyrightYear: 2024 copyrightYear: 2026
# 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath) # 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath)
profile: D:/mh/uploadPath profile: D:/mh/uploadPath
# 获取ip地址开关 # 获取ip地址开关
@ -63,7 +63,7 @@ spring:
# 端口,默认为6379 # 端口,默认为6379
port: 6379 port: 6379
# 数据库索引 # 数据库索引
database: 0 database: 1
# 密码 # 密码
password: password:
# 连接超时时间 # 连接超时时间
@ -98,7 +98,7 @@ spring:
# 主库数据源 # 主库数据源
master: master:
#添加allowMultiQueries=true 在批量更新时才不会出错 #添加allowMultiQueries=true 在批量更新时才不会出错
url: jdbc:postgresql://106.55.173.225:5505/eemcs_hw url: jdbc:postgresql://106.55.173.225:5505/eemcs_gh_ers_dev
username: postgres username: postgres
password: mhtech@803 password: mhtech@803
# 从库数据源 # 从库数据源
@ -187,6 +187,8 @@ xss:
urlPatterns: /system/*,/monitor/*,/tool/* urlPatterns: /system/*,/monitor/*,/tool/*
mqttSpring: mqttSpring:
# 是否启用MQTT,默认false
enabled: false
# BASIC parameters are required. # BASIC parameters are required.
BASIC: BASIC:
protocol: MQTT protocol: MQTT
@ -194,7 +196,7 @@ mqttSpring:
port: 2883 port: 2883
username: mh username: mh
password: mhtech@803 password: mhtech@803
client-id: mqtt_mz_producer_dev client-id: mqtt_gh_ers_producer_test
# If the protocol is ws/wss, this value is required. # If the protocol is ws/wss, this value is required.
path: path:
# Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",". # Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",".
@ -210,3 +212,17 @@ control:
topic: mh_control/events_upload/devices/test topic: mh_control/events_upload/devices/test
amap: amap:
key: fc4e79719daca2d0b8a11ba3124e1bd5 key: fc4e79719daca2d0b8a11ba3124e1bd5
wechat:
mpAppId: wx5653d0f930e98414
mpAppSecret: 3473cbd80e891e4e7da1b1b71ae3a5a2
redirectUri: https://35gm72cu2458.vicp.fun/wechat/userInfo
# 生成微信授权
authorizedUrl: https://open.weixin.qq.com/connect/oauth2/authorize?appid=mpAppId&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
# 获取code后,请求以下链接获取access_token
access_token: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET
# 拉取用户信息(需scope为 snsapi_userinfo)
userinfo: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
# 消息推送url
pushUrl: https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
baseUrl: https://35gm72cu2458.vicp.fun

46
mh-admin/src/main/resources/logback.xml

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<configuration> <configuration>
<!-- 日志存放路径 --> <!-- 日志存放路径 -->
<property name="log.path" value="/home/mh/mz/logs" /> <property name="log.path" value="/home/mh/gh_ers/logs" />
<!-- 日志输出格式 --> <!-- 日志输出格式 -->
<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
@ -13,27 +13,27 @@
</appender> </appender>
<!-- 系统日志输出 --> <!-- 系统日志输出 -->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<file>${log.path}/sys-info.log</file> <!-- <file>${log.path}/sys-info.log</file>-->
<!-- 循环政策:基于时间创建日志文件 --> <!-- &lt;!&ndash; 循环政策:基于时间创建日志文件 &ndash;&gt;-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!-- 日志文件名格式 --> <!-- &lt;!&ndash; 日志文件名格式 &ndash;&gt;-->
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!-- 日志最大的历史 60天 --> <!-- &lt;!&ndash; 日志最大的历史 60天 &ndash;&gt;-->
<maxHistory>1</maxHistory> <!-- <maxHistory>1</maxHistory>-->
</rollingPolicy> <!-- </rollingPolicy>-->
<encoder> <!-- <encoder>-->
<pattern>${log.pattern}</pattern> <!-- <pattern>${log.pattern}</pattern>-->
</encoder> <!-- </encoder>-->
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!-- 过滤的级别 --> <!-- &lt;!&ndash; 过滤的级别 &ndash;&gt;-->
<level>INFO</level> <!-- <level>INFO</level>-->
<!-- 匹配时的操作:接收(记录) --> <!-- &lt;!&ndash; 匹配时的操作:接收(记录) &ndash;&gt;-->
<onMatch>ACCEPT</onMatch> <!-- <onMatch>ACCEPT</onMatch>-->
<!-- 不匹配时的操作:拒绝(不记录) --> <!-- &lt;!&ndash; 不匹配时的操作:拒绝(不记录) &ndash;&gt;-->
<onMismatch>DENY</onMismatch> <!-- <onMismatch>DENY</onMismatch>-->
</filter> <!-- </filter>-->
</appender> <!-- </appender>-->
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}/sys-error.log</file> <file>${log.path}/sys-error.log</file>
@ -82,7 +82,7 @@
<!--系统操作日志--> <!--系统操作日志-->
<root level="info"> <root level="info">
<appender-ref ref="file_info" /> <!-- <appender-ref ref="file_info" />-->
<appender-ref ref="file_error" /> <appender-ref ref="file_error" />
</root> </root>

BIN
mh-admin/src/main/resources/节能岛改造每日能耗统计表.xlsx

Binary file not shown.

158
mh-admin/src/test/java/com/mh/MHApplicationTest.java

@ -2,21 +2,29 @@ package com.mh;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.mh.common.core.domain.dto.ProProfileDTO;
import com.mh.common.core.domain.entity.DeviceReport; import com.mh.common.core.domain.entity.DeviceReport;
import com.mh.common.core.domain.entity.SysParams; import com.mh.common.core.domain.entity.SysParams;
import com.mh.common.core.domain.entity.SysUser; import com.mh.common.core.domain.entity.SysUser;
import com.mh.common.core.domain.entity.WeatherData; import com.mh.common.core.domain.entity.WeatherData;
import com.mh.common.core.domain.vo.EnergyQueryVO;
import com.mh.common.utils.DateUtils; import com.mh.common.utils.DateUtils;
import com.mh.common.utils.StringUtils; import com.mh.common.utils.StringUtils;
import com.mh.quartz.task.DealDataTask; import com.mh.quartz.task.*;
import com.mh.quartz.task.GetWeatherDataTask;
import com.mh.system.mapper.device.DataProcessMapper; import com.mh.system.mapper.device.DataProcessMapper;
import com.mh.system.service.ISysParamsService; import com.mh.system.service.ISysParamsService;
import com.mh.system.service.ISysUserService; import com.mh.system.service.ISysUserService;
import com.mh.system.service.device.IDeviceQrManageService; import com.mh.system.service.device.IDeviceQrManageService;
import com.mh.system.service.operation.IAlarmRecordsService;
import com.mh.system.service.overview.IProOverviewService;
import com.mh.system.service.report.IComprehensiveReportService;
import com.mh.system.service.report.IMeterReadingsHisService;
import com.mh.system.service.report.IReportHotWaterService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.checkerframework.checker.units.qual.A; import org.checkerframework.checker.units.qual.A;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@ -34,12 +42,158 @@ import java.util.List;
@SpringBootTest @SpringBootTest
public class MHApplicationTest { public class MHApplicationTest {
private static final Logger log = LoggerFactory.getLogger(MHApplicationTest.class);
@Autowired @Autowired
private IDeviceQrManageService deviceQrManageService; private IDeviceQrManageService deviceQrManageService;
@Autowired @Autowired
private ISysUserService sysUserService; private ISysUserService sysUserService;
@Autowired
private HotWaterTask hotWaterTask;
@Autowired
private IAlarmRecordsService alarmRecordsService;
@Autowired
private IMeterReadingsHisService meterReadingsHisService;
@Autowired
private IReportHotWaterService reportHotWaterService;
@Autowired
private IProOverviewService proOverviewService;
@Autowired
private IComprehensiveReportService comprehensiveReportService;
@Autowired
private DealOnOrOffData dealOnOrOffData;
@Autowired
private GetOtherSysDataJob getOtherSysDataJob;
@Test
public void getBSDData() {
getOtherSysDataJob.getBSDData("","");
}
@Test
public void setDealOnOrOffData() throws Exception {
dealOnOrOffData.dealDeviceLedger();
}
@Test
public void comprehensiveReport() {
long startTime = System.currentTimeMillis();
EnergyQueryVO vo = new EnergyQueryVO();
vo.setStartTime("2025-12-24 00:00:00");
vo.setEndTime("2025-12-24 23:59:59");
vo.setPageNum(1);
vo.setPageSize(10);
vo.setTimeType("hour");
System.out.println("开始查询");
List<?> report = comprehensiveReportService.report(vo);
System.out.println("报表耗时:" + (System.currentTimeMillis() - startTime) + "ms");
}
@Test
public void testHome() throws Exception {
// 开始计时
long startTime = System.currentTimeMillis();
List<ProProfileDTO> proProfile = proOverviewService.getProProfile();
System.out.println("耗时:" + (System.currentTimeMillis() - startTime) + "ms");
}
@Test
public void reportHotWater() {
reportHotWaterService.execProRunParamHis();
}
@Test
public void testExecProMeterReadingsHis() {
meterReadingsHisService.execProMeterReadingsHis("2025-12-11");
}
@Test
public void createAlarmTask() {
alarmRecordsService.insertOrUpdateAlarmRecord("e1a3034edw6a9b3a79a86332886b24896");
}
@Test
public void calcAnalysisData() {
for (int i = 9; i < 10; i++) {
hotWaterTask.calcAnalysisData("2025-07-0"+i);
}
}
@Test
public void testDate() {
Date date = new Date();
boolean sameDay = DateUtils.isSameDay(DateUtils.stringToDate("2025-09-24 00:00:00", "yyyy-MM-dd HH:mm:ss"), date);
System.out.println(sameDay);
}
@Test
public void calcEnergyData() {
for (int i = 1; i < 17; i++) {
// i < 10,则前面添加0
if (i < 10) {
hotWaterTask.calcEnergyData("2025-10-0"+i+" 00:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 01:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 02:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 03:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 04:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 05:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 06:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 07:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 08:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 09:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 10:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 11:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 12:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 13:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 14:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 15:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 16:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 17:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 18:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 19:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 20:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 21:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 22:00:00");
hotWaterTask.calcEnergyData("2025-10-0"+i+" 23:00:00");
} else {
hotWaterTask.calcEnergyData("2025-10-" + i + " 00:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 01:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 02:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 03:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 04:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 05:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 06:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 07:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 08:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 09:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 10:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 11:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 12:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 13:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 14:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 15:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 16:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 17:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 18:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 19:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 20:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 21:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 22:00:00");
hotWaterTask.calcEnergyData("2025-10-" + i + " 23:00:00");
}
}
}
@Test @Test
public void test() throws Exception { public void test() throws Exception {
SysUser sysUser = sysUserService.selectUserById(1L); SysUser sysUser = sysUserService.selectUserById(1L);

40
mh-admin/src/test/java/com/mh/web/controller/ai/AiFileControllerTest.java

@ -0,0 +1,40 @@
package com.mh.web.controller.ai;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@SpringBootTest
@AutoConfigureMockMvc
public class AiFileControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testGetFileDownload() throws Exception {
// 测试GET请求下载文件
mockMvc.perform(get("/ai/files/测试文件.txt"))
.andExpect(status().isNotFound()); // 文件不存在返回404
}
@Test
public void testPostDeviceAnalyzeExport() throws Exception {
// 测试POST请求设备分析导出
mockMvc.perform(post("/ai/files/设备分析报表.xlsx"))
.andExpect(status().isNotFound()); // 文件不存在返回404
}
@Test
public void testChineseFileNameHandling() throws Exception {
// 测试中文文件名处理
mockMvc.perform(get("/ai/files/能耗报表_2026-02-27.docx"))
.andExpect(status().isNotFound()); // 文件不存在返回404,但不应出现映射冲突
}
}

52
mh-admin/src/test/java/com/mh/web/controller/ai/FileNameEncodingTest.java

@ -0,0 +1,52 @@
package com.mh.web.controller.ai;
import org.junit.jupiter.api.Test;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class FileNameEncodingTest {
@Test
public void testChineseFileNameEncoding() throws Exception {
String chineseFileName = "能耗报表_2026-02-27.docx";
// 测试RFC 5987格式编码
String encodedFileName = URLEncoder.encode(chineseFileName, StandardCharsets.UTF_8.toString());
String disposition = String.format("attachment; filename*=UTF-8''%s", encodedFileName);
System.out.println("原始文件名: " + chineseFileName);
System.out.println("编码后文件名: " + encodedFileName);
System.out.println("完整Content-Disposition头: " + disposition);
// 验证编码后的字符串不包含中文字符
assertTrue(encodedFileName.matches("[A-Za-z0-9%_-]+"));
// 验证包含预期的编码字符
assertTrue(encodedFileName.contains("%"));
}
@Test
public void testDifferentChineseFileNames() throws Exception {
String[] testFiles = {
"系统报表.xlsx",
"数据分析报告.pdf",
"能耗统计_2026年2月.docx",
"设备运行状态.csv"
};
for (String fileName : testFiles) {
String encoded = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
String disposition = String.format("attachment; filename*=UTF-8''%s", encoded);
System.out.println("文件名: " + fileName);
System.out.println("编码: " + encoded);
System.out.println("Disposition: " + disposition);
System.out.println("---");
// 验证编码正确
assertTrue(encoded.matches("[A-Za-z0-9%_-]+"));
}
}
}

13
mh-common/pom.xml

@ -159,6 +159,19 @@
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.4.8-jre</version>
<scope>compile</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.binarywang/weixin-java-mp -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>4.7.6.B</version>
</dependency>
</dependencies> </dependencies>

28
mh-common/src/main/java/com/mh/common/config/wechat/RestTemplateConfig.java

@ -0,0 +1,28 @@
package com.mh.common.config.wechat;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.BufferingClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description restTemplate配置
* @date 2025-06-30 14:35:10
*/
@Configuration
public class RestTemplateConfig {
// 配置类中定义Bean(全局禁用分块传输)
@Bean
public RestTemplate restTemplate() {
return new RestTemplateBuilder()
.requestFactory(() -> new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()))
.build();
}
}

94
mh-common/src/main/java/com/mh/common/config/wechat/WechatMpConfig.java

@ -0,0 +1,94 @@
package com.mh.common.config.wechat;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.net.URLEncoder;
/**
* @author chison
* @date 2020-04-03 15:42
* @Description 微信网页授权信息配置类
*/
@Component
@Configuration
public class WechatMpConfig {
@Value("${wechat.mpAppId}")
private String mpAppId;
@Value("${wechat.mpAppSecret}")
private String mpAppSecret;
@Value("${wechat.redirectUri}")
private String redirectUri;
@Value("${wechat.authorizedUrl}")
private String authorizedUrl;
@Value("${wechat.access_token}")
private String accessToken;
@Value("${wechat.userinfo}")
private String userinfo;
@Value("${wechat.pushUrl}")
private String pushUrl;
@Value("${wechat.baseUrl}")
private String baseUrl;
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
public String getAuthorizedUrl() {
return authorizedUrl.replace("mpAppId", mpAppId).replace("REDIRECT_URI", URLEncoder.encode(redirectUri));
}
public String getAccessTokenUrl() {
return accessToken.replace("APPID", mpAppId).replace("SECRET", mpAppSecret);
}
public String getUserInfo(String accessToken, String openId) {
return userinfo.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId);
}
public String getPushMsgUrl(String accessToken) {
return pushUrl.replace("ACCESS_TOKEN", accessToken);
}
public String getMpAppId() {
return mpAppId;
}
public String getMpAppSecret() {
return mpAppSecret;
}
/**
* 配置WxMpService所需信息
*
* @return
*/
@Bean // 此注解指定在Spring容器启动时,就执行该方法并将该方法返回的对象交由Spring容器管理
public WxMpService wxMpService() {
WxMpService wxMpService = new WxMpServiceImpl();
// 设置配置信息的存储位置
wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
return wxMpService;
}
public WxMpConfigStorage wxMpConfigStorage() {
// 使用这个实现类则表示将配置信息存储在内存中
WxMpDefaultConfigImpl wxMpInMemoryConfigStorage = new WxMpDefaultConfigImpl();
wxMpInMemoryConfigStorage.setAppId(getMpAppId());
wxMpInMemoryConfigStorage.setSecret(getMpAppSecret());
return wxMpInMemoryConfigStorage;
}
}

62
mh-common/src/main/java/com/mh/common/config/wechat/WechatSignUtil.java

@ -0,0 +1,62 @@
package com.mh.common.config.wechat;
import lombok.extern.slf4j.Slf4j;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.Map;
import java.util.TreeMap;
/**
* @Author : Rainbow
* @date : 2024-09-14
*/
@Slf4j
public class WechatSignUtil {
/**
* SHA-1加密
* @param params
* @return
*/
public static String generateSignature(Map<String, String> params) {
// 使用TreeMap进行自然排序(按照key的ASCII码排序)
TreeMap<String, String> sortedParams = new TreeMap<>(params);
// 拼接字符串
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<String, String> entry : sortedParams.entrySet()) {
if (stringBuilder.length() > 0) {
stringBuilder.append("&");
}
stringBuilder.append(entry.getKey()).append("=").append(entry.getValue());
}
String string1 = stringBuilder.toString();
// SHA-1加密
try {
// 获取SHA-1实例
MessageDigest digest = MessageDigest.getInstance("SHA-1");
// 将输入字符串转换为字节数组
byte[] encodedHash = digest.digest(string1.getBytes());
// 可选:将字节数组转换为Base64字符串,便于显示和传输
String base64Encoded = Base64.getEncoder().encodeToString(encodedHash);
log.info("SHA-1 (Base64 Encoded): {}", base64Encoded);
// 或者,直接以16进制形式输出
StringBuilder hexString = new StringBuilder();
for (byte b : encodedHash) {
String hex = Integer.toHexString(0xff & b);
if(hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
log.info("SHA-1 (Hexadecimal): {}", hexString);
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("SHA-1 algorithm not found", e);
}
}
}

10
mh-common/src/main/java/com/mh/common/constant/CacheConstants.java

@ -41,4 +41,14 @@ public class CacheConstants
* 登录账户密码错误次数 redis key * 登录账户密码错误次数 redis key
*/ */
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:"; public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
/**
* 获取项目概况
*/
public static final String PRO_PROFILE = "pro_profile";
/**
* 首页各个采集类型月数据
*/
public static final String ENERGY_ANALYSIS = "energy_analysis";
} }

5
mh-common/src/main/java/com/mh/common/constant/Constants.java

@ -80,6 +80,8 @@ public class Constants {
*/ */
public static final String SUPER_ADMIN = "mhtech"; public static final String SUPER_ADMIN = "mhtech";
public static final String SUPER_ADMIN_TWO = "18675333710";
/** /**
* 角色权限分隔符 * 角色权限分隔符
*/ */
@ -183,10 +185,13 @@ public class Constants {
public static final String CLOSE_HOST = "close_host_device_id"; // 关闭主机的设备id public static final String CLOSE_HOST = "close_host_device_id"; // 关闭主机的设备id
public static final String OPEN_VALVE = "open_valve_device_id"; // 开启蝶阀的设备id public static final String OPEN_VALVE = "open_valve_device_id"; // 开启蝶阀的设备id
public static final String CHILLERS = "chillers"; public static final String CHILLERS = "chillers";
public static final String BOILER = "boiler"; // 锅炉
public static final String OTHER = "other"; public static final String OTHER = "other";
public static final String DEVICE = "devices"; public static final String DEVICE = "devices";
public static final String CHILLERS_TYPE = "0"; // 主机类型设备 public static final String CHILLERS_TYPE = "0"; // 主机类型设备
public static final String OTHER_TYPE = "1"; // 其他设备 public static final String OTHER_TYPE = "1"; // 其他设备
public static final String BOILER_TYPE = "12"; // 锅炉设备
public static final String ERS = "ers"; // 热回收系统
public static boolean CONTROL_WEB_FLAG = false; public static boolean CONTROL_WEB_FLAG = false;
public static boolean SEND_STATUS = false; // 指令发送状态 public static boolean SEND_STATUS = false; // 指令发送状态
public static boolean FLAG = false; public static boolean FLAG = false;

15
mh-common/src/main/java/com/mh/common/constant/DateConstant.java

@ -0,0 +1,15 @@
package com.mh.common.constant;
import java.text.SimpleDateFormat;
/**
* @Author : Rainbow
* @date : 2023/7/10
*/
public class DateConstant {
public final static SimpleDateFormat DAY_SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public final static SimpleDateFormat MONTH = new SimpleDateFormat("yyyy-MM");
public final static SimpleDateFormat DAY = new SimpleDateFormat("yyyy-MM-dd");
public final static SimpleDateFormat MONTH_SDF = new SimpleDateFormat("yyyy-MM-dd");
public final static SimpleDateFormat YEAR_SDF = new SimpleDateFormat("yyyy");
}

25
mh-common/src/main/java/com/mh/common/constant/EnergyType.java

@ -0,0 +1,25 @@
package com.mh.common.constant;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description
* @date 2025-06-18 16:32:56
*/
public enum EnergyType {
HOUR("hour"),
DAY("day"),
MONTH("month"),
YEAR("year");
private final String code;
EnergyType(String code) {
this.code = code;
}
public String getCode() {
return code;
}
}

170
mh-common/src/main/java/com/mh/common/core/domain/dto/BFloorReportHotWaterDTO.java

@ -0,0 +1,170 @@
package com.mh.common.core.domain.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.*;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
//import java.math.String;
/**
* @author LJF
* @version 1.0
* @project NewZhujiang_Server
* @description 三楼热水系统参数报表
* @date 2024-05-30 11:00:12
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@HeadRowHeight(25)
@HeadFontStyle(fontHeightInPoints = 14)
@ContentFontStyle(fontHeightInPoints = 13)
@ContentRowHeight(25)
@ContentStyle(
horizontalAlignment = HorizontalAlignmentEnum.CENTER,
borderBottom = BorderStyleEnum.THIN,
borderLeft = BorderStyleEnum.THIN,
borderRight = BorderStyleEnum.THIN,
borderTop = BorderStyleEnum.THIN
)
@ColumnWidth(10)
public class BFloorReportHotWaterDTO {
/**
* 当前时间
*/
@ColumnWidth(17)
@ExcelProperty(value = {"${deviceType}", "时间", "时间"}, index = 0)
private String curTime;
// /**
// * 班次
// */
// @ColumnWidth(10)
// @ExcelProperty(value = {"${deviceType}", "班次", "班次"}, index = 1)
// private String classes;
/**
* 设定温度
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "1号热泵", "设定温度℃"}, index = 1)
private BigDecimal tempSetHotPumpOne;
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "1号热泵", "实际温度℃"}, index = 2)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpOne;
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "1号热泵", "设备开关机"}, index = 3)
@ColumnWidth(10)
private String statusSwitchHotPumpOneStr;
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "1号热泵", "设备运行状态"}, index = 4)
@ColumnWidth(10)
private String statusRunHotPumpOneStr;
/**
* 设定温度
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "2号热泵", "设定温度℃"}, index = 5)
private BigDecimal tempSetHotPumpTwo;
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "2号热泵", "实际温度℃"}, index = 6)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpTwo;
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "2号热泵", "设备开关机"}, index = 7)
@ColumnWidth(10)
private String statusSwitchHotPumpTwoStr;
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "2号热泵", "设备运行状态"}, index = 8)
@ColumnWidth(10)
private String statusRunHotPumpTwoStr;
// 高区/裙楼设定压力(bar)
@ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "设定压力bar"}, index = 9)
@ColumnWidth(10)
private BigDecimal presSetSupplyPumpAreaOne;
// 高区/裙楼实际压力(bar)
@ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "实际压力bar"}, index = 10)
@ColumnWidth(10)
private BigDecimal presRealSupplyPumpAreaOne;
// 高区/裙楼1号泵运行状态
@ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "1号泵运行状态"}, index = 11)
@ColumnWidth(10)
private String statusRunSupplyPumpOneStr;
// 高区/裙楼2号泵运行状态
@ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "2号泵运行状态"}, index = 12)
@ColumnWidth(10)
private String statusRunSupplyPumpTwoStr;
// 中区/中厨设定压力(bar)
@ExcelProperty(value = {"${deviceType}", "中厨变频泵", "设定压力bar"}, index = 13)
@ColumnWidth(10)
private BigDecimal presSetSupplyPumpAreaTwo;
// 中区/中厨实际压力(bar)
@ExcelProperty(value = {"${deviceType}", "中厨变频泵", "实际压力bar"}, index = 14)
@ColumnWidth(10)
private BigDecimal presRealSupplyPumpAreaTwo;
// 中区/中厨1号泵运行状态
@ExcelProperty(value = {"${deviceType}", "中厨变频泵", "1号泵运行状态"}, index = 15)
@ColumnWidth(10)
private String statusRunSupplyPumpThreeStr;
// 中区/中厨2号泵运行状态
@ExcelProperty(value = {"${deviceType}", "中厨变频泵", "2号泵运行状态"}, index = 16)
@ColumnWidth(10)
private String statusRunSupplyPumpFourStr;
// 高区/裙楼液位(米)
@ExcelProperty(value = {"${deviceType}", "水箱液位", "裙楼液位%"}, index = 17)
@ColumnWidth(10)
private BigDecimal levelWaterTankOne;
// 中区/中厨液位(米)
@ExcelProperty(value = {"${deviceType}", "水箱液位", "中厨液位%"}, index = 18)
@ColumnWidth(10)
private BigDecimal levelWaterTankTwo;
// 巡查记录人
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 19)
@ColumnWidth(20)
private String recorder;
// 备注信息
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 20)
@ColumnWidth(20)
private String remark;
}

74
mh-common/src/main/java/com/mh/common/core/domain/dto/CompreReportDTO.java

@ -0,0 +1,74 @@
package com.mh.common.core.domain.dto;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 综合系统能耗查询DTO
* @date 2025-10-09 10:17:26
*/
public class CompreReportDTO {
private String time;
private String electValue;
private String coldValue;
private String hotValue;
private String steamValue;
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getElectValue() {
return electValue;
}
public void setElectValue(String electValue) {
this.electValue = electValue;
}
public String getColdValue() {
return coldValue;
}
public void setColdValue(String coldValue) {
this.coldValue = coldValue;
}
public String getHotValue() {
return hotValue;
}
public void setHotValue(String hotValue) {
this.hotValue = hotValue;
}
public String getSteamValue() {
return steamValue;
}
public void setSteamValue(String steamValue) {
this.steamValue = steamValue;
}
@Override
public String toString() {
return new StringJoiner(", ", CompreReportDTO.class.getSimpleName() + "[", "]")
.add("time='" + time + "'")
.add("electValue='" + electValue + "'")
.add("coldValue='" + coldValue + "'")
.add("hotValue='" + hotValue + "'")
.add("steamValue='" + steamValue + "'")
.toString();
}
}

68
mh-common/src/main/java/com/mh/common/core/domain/dto/DataResultDTO.java

@ -0,0 +1,68 @@
package com.mh.common.core.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class DataResultDTO {
private Long id;
private String buildingId;
private String buildingName;
private String deviceNum;
private String deviceName;
private String deviceCode;
private String deviceType;
private BigDecimal lastValue;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date lastTime;
private double curValue;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date curTime;
private BigDecimal usedValue;
private int ratio;
private BigDecimal calcValue;
private int grade;
private String registerAddr;
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.append("buildingId", buildingId)
.append("buildingName", buildingName)
.append("deviceNum", deviceNum)
.append("deviceName", deviceName)
.append("deviceCode", deviceCode)
.append("deviceType", deviceType)
.append("lastValue", lastValue)
.append("lastTime", lastTime)
.append("curValue", curValue)
.append("curTime", curTime)
.append("usedValue", usedValue)
.append("ratio", ratio)
.append("calcValue", calcValue)
.append("grade", grade)
.append("registerAddr", registerAddr)
.toString();
}
}

14
mh-common/src/main/java/com/mh/common/core/domain/dto/HotWaterNowDataDTO.java

@ -22,8 +22,10 @@ public class HotWaterNowDataDTO {
private String waterTemp; //水箱水温 private String waterTemp; //水箱水温
private String runState; //运行状态 private String runState; //运行状态
private String isFault; //是否故障 private String isFault; //是否故障
private String levelSet; //水位设置 private String levelSet1; //水位设置
private String waterLevel; //实际水位 private String levelSet2; //水位设置
private String waterLevel1; //实际水位
private String waterLevel2; //实际水位
private String tankId; //水箱编号 private String tankId; //水箱编号
private String tankName; //水箱名称 private String tankName; //水箱名称
private String envTemp; //环境温度 private String envTemp; //环境温度
@ -36,6 +38,14 @@ public class HotWaterNowDataDTO {
private String freq2; // 供水频率2 private String freq2; // 供水频率2
private String upWaterState3; // 供水3泵状态
private String freq3; // 供水频率3
private String upWaterState4; // 供水4泵状态
private String freq4; // 供水频率4
private String useWaterState; // 补水状态 private String useWaterState; // 补水状态
private String backWaterState; // 回水状态 private String backWaterState; // 回水状态

284
mh-common/src/main/java/com/mh/common/core/domain/dto/MaglevReportSysParamDTO.java

@ -0,0 +1,284 @@
package com.mh.common.core.domain.dto;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.*;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
//import java.math.String;
/**
* @author LJF
* @version 1.0
* @project NewZhujiang_Server
* @description 磁悬浮主机系统参数报表
* @date 2024-05-30 11:00:12
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@HeadRowHeight(25)
@HeadFontStyle(fontHeightInPoints = 14)
@ContentFontStyle(fontHeightInPoints = 13)
@ContentRowHeight(25)
@ContentStyle(
horizontalAlignment = HorizontalAlignmentEnum.CENTER,
borderBottom = BorderStyleEnum.THIN,
borderLeft = BorderStyleEnum.THIN,
borderRight = BorderStyleEnum.THIN,
borderTop = BorderStyleEnum.THIN
)
@ColumnWidth(10)
public class MaglevReportSysParamDTO {
/**
* 当前时间
*/
@ColumnWidth(17)
@ExcelProperty(value = {"${deviceType}", "时间", "时间"}, index = 0)
private String curTime;
// /**
// * 班次
// */
// @ColumnWidth(10)
// @ExcelProperty(value = {"${deviceType}", "班次", "班次"}, index = 1)
// private String classes;
/**
* 冷冻水进水温度
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "蒸发器", "冷冻水进水温度℃"}, index = 1)
private BigDecimal tempInChillerWater;
/**
* 冷冻水出水温度
*/
@ExcelProperty(value = {"${deviceType}", "蒸发器", "冷冻水出水温度℃"}, index = 2)
@ColumnWidth(10)
private BigDecimal tempOutChillerWater;
/**
* 设计流量%
*/
@ExcelProperty(value = {"${deviceType}", "蒸发器", "设计流量%"}, index = 3)
@ColumnWidth(10)
private BigDecimal designFlow;
/**
* 蒸发器压力kpa
*/
@ExcelProperty(value = {"${deviceType}", "蒸发器", "蒸发器压力kpa"}, index = 4)
@ColumnWidth(10)
private BigDecimal pressEvapSaturation;
/**
* 蒸发器饱和温度
*/
@ExcelProperty(value = {"${deviceType}", "蒸发器", "蒸发器饱和温度℃"}, index = 5)
@ColumnWidth(10)
private BigDecimal tempEvapSaturation;
/**
* 趋近温度
*/
@ExcelProperty(value = {"${deviceType}", "蒸发器", "趋近温度℃"}, index = 6)
@ColumnWidth(10)
private BigDecimal tempEvapApproaching;
/**
* 冷却水进水温度
*/
@ExcelProperty(value = {"${deviceType}", "冷凝器", "冷却水进水温度℃"}, index = 7)
@ColumnWidth(10)
private BigDecimal tempInCoolingWater;
/**
* 冷却水出水温度
*/
@ExcelProperty(value = {"${deviceType}", "冷凝器", "冷却水出水温度℃"}, index = 8)
@ColumnWidth(10)
private BigDecimal tempOutCoolingWater;
/**
* 冷凝器压力kpa
*/
@ExcelProperty(value = {"${deviceType}", "冷凝器", "冷凝器压力kpa"}, index = 9)
@ColumnWidth(10)
private BigDecimal pressCondenserSaturation;
/**
* 冷凝器饱和温度
*/
@ExcelProperty(value = {"${deviceType}", "冷凝器", "冷凝器饱和温度℃"}, index = 10)
@ColumnWidth(10)
private BigDecimal tempCondenserSaturation;
/**
* 冷凝器趋近温度
*/
@ExcelProperty(value = {"${deviceType}", "冷凝器", "趋近温度℃"}, index = 11)
@ColumnWidth(10)
private BigDecimal tempCondenserApproaching;
/**
* 冷冻水设定值
*/
@ExcelProperty(value = {"${deviceType}", "系统", "冷冻水设定值℃"}, index = 12)
@ColumnWidth(10)
private BigDecimal setChillerWater;
/**
* 冷水机需求%
*/
@ExcelProperty(value = {"${deviceType}", "系统", "冷水机需求%"}, index = 13)
@ColumnWidth(10)
private BigDecimal setLoad;
/**
* 总电流A
*/
@ExcelProperty(value = {"${deviceType}", "系统", "总电流A"}, index = 14)
@ColumnWidth(10)
private BigDecimal currentTotal;
/**
* 总输入功率kw
*/
@ExcelProperty(value = {"${deviceType}", "系统", "总输入功率kw"}, index = 15)
@ColumnWidth(10)
private BigDecimal inputPowerTotal;
/**
* 压缩比
*/
// @ExcelProperty(value = {"${deviceType}", "系统", "压缩比"}, index = 16)
// @ColumnWidth(10)
// private BigDecimal ratioComp;
/**
* 压缩比1
*/
@ExcelProperty(value = {"${deviceType}", "系统", "1#压缩机压缩比"}, index = 16)
@ColumnWidth(10)
private BigDecimal ratioCompOne;
/**
* 压缩比2
*/
@ExcelProperty(value = {"${deviceType}", "系统", "2#压缩机压缩比"}, index = 17)
@ColumnWidth(10)
private BigDecimal ratioCompTwo;
/**
* 压缩比3
*/
@ExcelProperty(value = {"${deviceType}", "系统", "3#压缩机压缩比"}, index = 18)
@ColumnWidth(10)
private BigDecimal ratioCompThree;
/**
* 膨胀阀开度%
*/
@ExcelProperty(value = {"${deviceType}", "系统", "膨胀阀开度%"}, index = 19)
@ColumnWidth(10)
private BigDecimal openExv;
/**
* 运行中的压缩机数量
*/
@ExcelProperty(value = {"${deviceType}", "系统", "运行中的压缩机数量"}, index = 20)
@ColumnWidth(10)
private Integer runCompNum;
/**
* 冷冻水泵频率hz
*/
@ExcelProperty(value = {"${deviceType}", "冷冻泵", "冷冻水泵频率hz"}, index = 21)
@ColumnWidth(10)
private BigDecimal frequencyChiller;
/**
* 冷冻水进水压力kpa
*/
@ExcelProperty(value = {"${deviceType}", "冷冻泵", "冷冻水进水压力kpa"}, index = 22)
@ColumnWidth(10)
private BigDecimal pressInChillerWater;
/**
* 冷冻水出水压力kpa
*/
@ExcelProperty(value = {"${deviceType}", "冷冻泵", "冷冻水出水压力kpa"}, index = 23)
@ColumnWidth(10)
private BigDecimal pressOutChillerWater;
/**
* 冷却水泵频率hz
*/
@ExcelProperty(value = {"${deviceType}", "冷却泵", "冷却水泵频率hz"}, index = 24)
@ColumnWidth(10)
private BigDecimal frequencyCooling;
/**
* 冷却水进水压力kpa
*/
@ExcelProperty(value = {"${deviceType}", "冷却泵", "冷却水进水压力kpa"}, index = 25)
@ColumnWidth(10)
private BigDecimal pressInCoolingWater;
/**
* 冷却水出水压力kpa
*/
@ExcelProperty(value = {"${deviceType}", "冷却泵", "冷却水出水压力kpa"}, index = 26)
@ColumnWidth(10)
private BigDecimal pressOutCoolingWater;
/**
* 冷却塔频率hz
*/
@ExcelProperty(value = {"${deviceType}", "冷却塔", "冷却塔频率hz"}, index = 27)
private BigDecimal frequencyCoolingTower;
/**
* 冷却塔运行数量原注释可能有误根据列名调整
*/
@ExcelProperty(value = {"${deviceType}", "冷却塔", "冷却塔运行数量"}, index = 28)
private Integer runCoolingTower;
/**
* 室外温度
*/
@ExcelProperty(value = {"${deviceType}", "室外温度℃", "室外温度℃"}, index = 29)
@ColumnWidth(10)
private BigDecimal tempOutdoor;
/**
* 室外湿度%
*/
@ExcelProperty(value = {"${deviceType}", "室外湿度%", "室外湿度%"}, index = 30)
@ColumnWidth(10)
private BigDecimal humidityOutdoor;
/**
* 恒压补水罐压力
*/
@ExcelProperty(value = {"${deviceType}", "恒压补水罐压力MPa", "恒压补水罐压力MPa"}, index = 31)
@ColumnWidth(10)
private BigDecimal pressConstantWaterTank;
/**
* 巡查记录人
*/
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 32)
@ColumnWidth(20)
private String recorder;
}

179
mh-common/src/main/java/com/mh/common/core/domain/dto/ReportHeatingRunParamDTO.java

@ -0,0 +1,179 @@
package com.mh.common.core.domain.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.*;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project NewZhujiang_Server
* @description 采暖系统参数报表
* @date 2024-05-30 11:00:12
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@HeadRowHeight(25)
@HeadFontStyle(fontHeightInPoints = 14)
@ContentFontStyle(fontHeightInPoints = 13)
@ContentRowHeight(20)
@ContentStyle(
horizontalAlignment = HorizontalAlignmentEnum.CENTER,
borderBottom = BorderStyleEnum.THIN,
borderLeft = BorderStyleEnum.THIN,
borderRight = BorderStyleEnum.THIN,
borderTop = BorderStyleEnum.THIN
)
@ColumnWidth(10)
public class ReportHeatingRunParamDTO {
/**
* 当前时间
*/
@ColumnWidth(17)
@ExcelProperty(value = {"${deviceType}", "时间"}, index = 0)
private String curTime;
/**
* 当前状态
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "运行状态"}, index = 1)
private String runStatusBoilerOne;
/**
* 设定温度
*/
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "设定温度(℃)"}, index = 2)
@ColumnWidth(10)
private BigDecimal tempSetBoilerOne;
/**
* 出水温度
*/
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "出水温度(℃)"}, index = 3)
@ColumnWidth(10)
private BigDecimal tempOutBoilerOne;
/**
* 回水温度
*/
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "回水温度(℃)"}, index = 4)
@ColumnWidth(10)
private BigDecimal tempInBoilerOne;
/**
* 炉水温度
*/
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "炉水温度(℃)"}, index = 5)
@ColumnWidth(10)
private BigDecimal tempWaterBoilerOne;
/**
* 烟道温度
*/
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "烟道温度(℃)"}, index = 6)
@ColumnWidth(10)
private BigDecimal tempFlueGasBoilerOne;
/**
* 当前状态
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "运行状态"}, index = 7)
private String runStatusBoilerTwo;
/**
* 设定温度
*/
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "设定温度(℃)"}, index = 8)
@ColumnWidth(10)
private BigDecimal tempSetBoilerTwo;
/**
* 出水温度
*/
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "出水温度(℃)"}, index = 9)
@ColumnWidth(10)
private BigDecimal tempOutBoilerTwo;
/**
* 回水温度
*/
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "回水温度(℃)"}, index = 10)
@ColumnWidth(10)
private BigDecimal tempInBoilerTwo;
/**
* 炉水温度
*/
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "炉水温度(℃)"}, index = 11)
@ColumnWidth(10)
private BigDecimal tempWaterBoilerTwo;
/**
* 烟道温度
*/
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "烟道温度(℃)"}, index = 12)
@ColumnWidth(10)
private BigDecimal tempFlueGasBoilerTwo;
/**
* 当前状态
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "1号采暖泵", "运行状态"}, index = 13)
private String runStatusPumpOne;
/**
* 频率
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "1号采暖泵", "频率(Hz)"}, index = 14)
private BigDecimal frequencyPumpOne;
/**
* 当前状态
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "2号采暖泵", "运行状态"}, index = 15)
private String runStatusPumpTwo;
/**
* 频率
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "2号采暖泵", "频率(Hz)"}, index = 16)
private BigDecimal frequencyPumpTwo;
/**
* 当前状态
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "3号采暖泵", "运行状态"}, index = 17)
private String runStatusPumpThree;
/**
* 频率
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "3号采暖泵", "频率(Hz)"}, index = 18)
private BigDecimal frequencyPumpThree;
// 巡查记录人
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 19)
@ColumnWidth(20)
private String recorder;
// 备注信息
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 20)
@ColumnWidth(20)
private String remark;
}

135
mh-common/src/main/java/com/mh/common/core/domain/dto/ReportSteamRunParamDTO.java

@ -0,0 +1,135 @@
package com.mh.common.core.domain.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.*;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project NewZhujiang_Server
* @description 蒸汽机系统参数报表
* @date 2024-05-30 11:00:12
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@HeadRowHeight(25)
@HeadFontStyle(fontHeightInPoints = 14)
@ContentFontStyle(fontHeightInPoints = 13)
@ContentRowHeight(20)
@ContentStyle(
horizontalAlignment = HorizontalAlignmentEnum.CENTER,
borderBottom = BorderStyleEnum.THIN,
borderLeft = BorderStyleEnum.THIN,
borderRight = BorderStyleEnum.THIN,
borderTop = BorderStyleEnum.THIN
)
@ColumnWidth(10)
public class ReportSteamRunParamDTO {
/**
* 当前时间
*/
@ColumnWidth(17)
@ExcelProperty(value = {"${deviceType}", "时间"}, index = 0)
private String curTime;
/**
* 当前状态
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "当前状态", "当前状态"}, index = 1)
private String curStatus;
/**
* 火焰强度
*/
@ExcelProperty(value = {"${deviceType}", "火焰强度", "火焰强度"}, index = 2)
@ColumnWidth(10)
private BigDecimal flameIntensity;
/**
* 烟气温度
*/
@ExcelProperty(value = {"${deviceType}", "烟气温度(℃)", "烟气温度(℃)"}, index = 3)
@ColumnWidth(10)
private BigDecimal tempFlueGas;
/**
* 火焰百分比%
*/
@ExcelProperty(value = {"${deviceType}", "火焰百分比(%)", "火焰百分比(%)"}, index = 4)
@ColumnWidth(10)
private BigDecimal percentFlameIntensity;
/**
* 液位%
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "液位(%)", "液位(%)"}, index = 5)
private BigDecimal waterLevel;
/**
* 蒸汽温度
*/
@ExcelProperty(value = {"${deviceType}", "蒸汽温度(℃)", "蒸汽温度(℃)"}, index = 6)
@ColumnWidth(10)
private BigDecimal tempCur;
/**
* 当前压力Mpa
*/
@ExcelProperty(value = {"${deviceType}", "当前压力(Mpa)", "当前压力(Mpa)"}, index = 7)
@ColumnWidth(10)
private BigDecimal pressCur;
/**
* 压力设定值Mpa
*/
@ExcelProperty(value = {"${deviceType}", "压力设定值(Mpa)", "压力设定值(Mpa)"}, index = 8)
@ColumnWidth(10)
private BigDecimal pressSet;
// 启动压差(Mpa)
@ExcelProperty(value = {"${deviceType}", "启动压差(Mpa)", "启动压差(Mpa)"}, index = 9)
@ColumnWidth(10)
private BigDecimal pressStartDiff;
// 停止压差(Mpa)
@ExcelProperty(value = {"${deviceType}", "停止压差(Mpa)", "停止压差(Mpa)"}, index = 10)
@ColumnWidth(10)
private BigDecimal pressShutdownDiff;
// 瞬时压力(Mpa)
@ExcelProperty(value = {"${deviceType}", "瞬时压力(Mpa)", "瞬时压力(Mpa)"}, index = 11)
@ColumnWidth(10)
private BigDecimal pressInstance;
// 瞬时流量(t/h)
@ExcelProperty(value = {"${deviceType}", "瞬时流量(t/h)", "瞬时流量(t/h)"}, index = 12)
@ColumnWidth(10)
private BigDecimal flowInstance;
// 累积流量(t)
@ExcelProperty(value = {"${deviceType}", "累积流量(t)", "累积流量(t)"}, index = 13)
@ColumnWidth(10)
private BigDecimal flowTotal;
// 巡查记录人
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 14)
@ColumnWidth(20)
private String recorder;
// 备注信息
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 15)
@ColumnWidth(20)
private String remark;
}

210
mh-common/src/main/java/com/mh/common/core/domain/dto/ThreeFloorReportHotWaterDTO.java

@ -0,0 +1,210 @@
package com.mh.common.core.domain.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.*;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
//import java.math.String;
/**
* @author LJF
* @version 1.0
* @project NewZhujiang_Server
* @description 三楼热水系统参数报表
* @date 2024-05-30 11:00:12
*/
@Data
@NoArgsConstructor
@Accessors(chain = true)
@HeadRowHeight(25)
@HeadFontStyle(fontHeightInPoints = 14)
@ContentFontStyle(fontHeightInPoints = 13)
@ContentRowHeight(25)
@ContentStyle(
horizontalAlignment = HorizontalAlignmentEnum.CENTER,
borderBottom = BorderStyleEnum.THIN,
borderLeft = BorderStyleEnum.THIN,
borderRight = BorderStyleEnum.THIN,
borderTop = BorderStyleEnum.THIN
)
@ColumnWidth(10)
public class ThreeFloorReportHotWaterDTO {
/**
* 当前时间
*/
@ColumnWidth(17)
@ExcelProperty(value = {"${deviceType}", "时间", "时间"}, index = 0)
private String curTime;
// /**
// * 班次
// */
// @ColumnWidth(10)
// @ExcelProperty(value = {"${deviceType}", "班次", "班次"}, index = 1)
// private String classes;
/**
* 设定温度
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "1号热泵", "设定温度℃"}, index = 1)
private BigDecimal tempSetHotPumpOne;
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "1号热泵", "实际温度℃"}, index = 2)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpOne;
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "1号热泵", "设备开关机"}, index = 3)
@ColumnWidth(10)
private String statusSwitchHotPumpOneStr;
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "1号热泵", "设备运行状态"}, index = 4)
@ColumnWidth(10)
private String statusRunHotPumpOneStr;
/**
* 设定温度
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "2号热泵", "设定温度℃"}, index = 5)
private BigDecimal tempSetHotPumpTwo;
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "2号热泵", "实际温度℃"}, index = 6)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpTwo;
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "2号热泵", "设备开关机"}, index = 7)
@ColumnWidth(10)
private String statusSwitchHotPumpTwoStr;
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "2号热泵", "设备运行状态"}, index = 8)
@ColumnWidth(10)
private String statusRunHotPumpTwoStr;
// 3号热泵设定温度(℃)
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "3号热泵", "设定温度℃"}, index = 9)
private BigDecimal tempSetHotPumpThree;
// 3号热泵实际温度(℃)
@ExcelProperty(value = {"${deviceType}", "3号热泵", "实际温度℃"}, index = 10)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpThree;
// 3号热泵启停状态
@ExcelProperty(value = {"${deviceType}", "3号热泵", "设备开关机"}, index = 11)
@ColumnWidth(10)
private String statusSwitchHotPumpThreeStr;
// 3号热泵运行状态
@ExcelProperty(value = {"${deviceType}", "3号热泵", "设备运行状态"}, index = 12)
@ColumnWidth(10)
private String statusRunHotPumpThreeStr;
// 4号热泵设定温度(℃)
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "4号热泵", "设定温度℃"}, index = 13)
private BigDecimal tempSetHotPumpFour;
// 4号热泵实际温度(℃)
@ExcelProperty(value = {"${deviceType}", "4号热泵", "实际温度℃"}, index = 14)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpFour;
// 4号热泵启停状态
@ExcelProperty(value = {"${deviceType}", "4号热泵", "设备开关机"}, index = 15)
@ColumnWidth(10)
private String statusSwitchHotPumpFourStr;
// 4号热泵运行状态
@ExcelProperty(value = {"${deviceType}", "4号热泵", "设备运行状态"}, index = 16)
@ColumnWidth(10)
private String statusRunHotPumpFourStr;
// 高区/高区设定压力(bar)
@ExcelProperty(value = {"${deviceType}", "高区变频泵", "设定压力bar"}, index = 17)
@ColumnWidth(10)
private BigDecimal presSetSupplyPumpAreaOne;
// 高区/高区实际压力(bar)
@ExcelProperty(value = {"${deviceType}", "高区变频泵", "实际压力bar"}, index = 18)
@ColumnWidth(10)
private BigDecimal presRealSupplyPumpAreaOne;
// 高区/高区1号泵运行状态
@ExcelProperty(value = {"${deviceType}", "高区变频泵", "1号泵运行状态"}, index = 19)
@ColumnWidth(10)
private String statusRunSupplyPumpOneStr;
// 高区/高区2号泵运行状态
@ExcelProperty(value = {"${deviceType}", "高区变频泵", "2号泵运行状态"}, index = 20)
@ColumnWidth(10)
private String statusRunSupplyPumpTwoStr;
// 中区/中区设定压力(bar)
@ExcelProperty(value = {"${deviceType}", "中区变频泵", "设定压力bar"}, index = 21)
@ColumnWidth(10)
private BigDecimal presSetSupplyPumpAreaTwo;
// 中区/中区实际压力(bar)
@ExcelProperty(value = {"${deviceType}", "中区变频泵", "实际压力bar"}, index = 22)
@ColumnWidth(10)
private BigDecimal presRealSupplyPumpAreaTwo;
// 中区/中区1号泵运行状态
@ExcelProperty(value = {"${deviceType}", "中区变频泵", "1号泵运行状态"}, index = 23)
@ColumnWidth(10)
private String statusRunSupplyPumpThreeStr;
// 中区/中区2号泵运行状态
@ExcelProperty(value = {"${deviceType}", "中区变频泵", "2号泵运行状态"}, index = 24)
@ColumnWidth(10)
private String statusRunSupplyPumpFourStr;
// 高区/高区液位(米)
@ExcelProperty(value = {"${deviceType}", "水箱液位", "高区液位%"}, index = 25)
@ColumnWidth(10)
private BigDecimal levelWaterTankOne;
// 中区/中区液位(米)
@ExcelProperty(value = {"${deviceType}", "水箱液位", "中区液位%"}, index = 26)
@ColumnWidth(10)
private BigDecimal levelWaterTankTwo;
// 巡查记录人
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 27)
@ColumnWidth(20)
private String recorder;
// 备注信息
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 28)
@ColumnWidth(20)
private String remark;
}

63
mh-common/src/main/java/com/mh/common/core/domain/dto/WeatherDataDTO.java

@ -0,0 +1,63 @@
package com.mh.common.core.domain.dto;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 天气温度历史记录查询
* @date 2025-06-16 11:21:48
*/
@Data
public class WeatherDataDTO {
/**
* 时间
*/
private String weatherDate;
/**
* 日期和星期
*/
private String dateAndWeek;
/**
* 最高温度
*/
private String maxTemp;
/**
* 最低温度
*/
private String minTemp;
/**
* 天气
*/
private String weatherConditions;
/**
* 风向
*/
private String windDirection;
/**
* 风速
*/
private String windPower;
@Override
public String toString() {
return new ToStringBuilder(this)
.append("weatherDate", weatherDate)
.append("dateAndWeek", dateAndWeek)
.append("maxTemp", maxTemp)
.append("minTemp", minTemp)
.append("weatherConditions", weatherConditions)
.append("windDirection", windDirection)
.append("windPower", windPower)
.toString();
}
}

26
mh-common/src/main/java/com/mh/common/core/domain/entity/AlarmRecords.java

@ -83,6 +83,32 @@ public class AlarmRecords implements Serializable {
*/ */
private int status; private int status;
/**
* 是否发送通知 0未发送 1已发送
*/
private int isSend;
/**
* 推送次数大于3次不再推送
*/
private int sendNum;
public int getSendNum() {
return sendNum;
}
public void setSendNum(int sendNum) {
this.sendNum = sendNum;
}
public int getIsSend() {
return isSend;
}
public void setIsSend(int isSend) {
this.isSend = isSend;
}
public int getStatus() { public int getStatus() {
return status; return status;
} }

46
mh-common/src/main/java/com/mh/common/core/domain/entity/AnalysisMonth.java

@ -0,0 +1,46 @@
package com.mh.common.core.domain.entity;
import lombok.Data;
@Data
public class AnalysisMonth {
private Long id;
private String curDate;
private String itemType;
private String day01;
private String day02;
private String day03;
private String day04;
private String day05;
private String day06;
private String day07;
private String day08;
private String day09;
private String day10;
private String day11;
private String day12;
private String day13;
private String day14;
private String day15;
private String day16;
private String day17;
private String day18;
private String day19;
private String day20;
private String day21;
private String day22;
private String day23;
private String day24;
private String day25;
private String day26;
private String day27;
private String day28;
private String day29;
private String day30;
private String day31;
private String day32;
private String totalValue;
private String buildingId;
private String buildingName;
}

27
mh-common/src/main/java/com/mh/common/core/domain/entity/AnalysisYear.java

@ -0,0 +1,27 @@
package com.mh.common.core.domain.entity;
import lombok.Data;
@Data
public class AnalysisYear {
private Long id;
private String curDate;
private String itemType;
private String month01;
private String month02;
private String month03;
private String month04;
private String month05;
private String month06;
private String month07;
private String month08;
private String month09;
private String month10;
private String month11;
private String month12;
private String totalValue;
private String buildingId;
private String buildingName;
}

81
mh-common/src/main/java/com/mh/common/core/domain/entity/CollectionParamsManage.java

@ -14,6 +14,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.StringJoiner;
/** /**
* @author LJF * @author LJF
@ -144,6 +145,11 @@ public class CollectionParamsManage extends BaseEntity {
*/ */
private String communicationType; private String communicationType;
/**
* 通信质量
*/
private String quality;
/** /**
* 读取响应的寄存器大小创建指令的时候需要 * 读取响应的寄存器大小创建指令的时候需要
*/ */
@ -192,42 +198,49 @@ public class CollectionParamsManage extends BaseEntity {
*/ */
private String terminalDeviceType; private String terminalDeviceType;
/**
* 价格
*/
private BigDecimal price;
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this) return new StringJoiner(", ", CollectionParamsManage.class.getSimpleName() + "[", "]")
.append("id", id) .add("id='" + id + "'")
.append("deviceLedgerId", deviceLedgerId) .add("deviceLedgerId='" + deviceLedgerId + "'")
.append("mtType", mtType) .add("mtType='" + mtType + "'")
.append("mtNum", mtNum) .add("mtNum='" + mtNum + "'")
.append("mtCode", mtCode) .add("mtCode='" + mtCode + "'")
.append("registerAddr", registerAddr) .add("registerAddr='" + registerAddr + "'")
.append("funcCode", funcCode) .add("funcCode='" + funcCode + "'")
.append("identifyCode", identifyCode) .add("identifyCode='" + identifyCode + "'")
.append("mtCaliberPulse", mtCaliberPulse) .add("mtCaliberPulse='" + mtCaliberPulse + "'")
.append("mtRange", mtRange) .add("mtRange=" + mtRange)
.append("mtRatio", mtRatio) .add("mtRatio=" + mtRatio)
.append("mtInitValue", mtInitValue) .add("mtInitValue=" + mtInitValue)
.append("digits", digits) .add("digits=" + digits)
.append("dataType", dataType) .add("dataType=" + dataType)
.append("curValue", curValue) .add("curValue=" + curValue)
.append("curTime", curTime) .add("curTime=" + curTime)
.append("mtIsSum", mtIsSum) .add("mtIsSum=" + mtIsSum)
.append("unit", unit) .add("unit='" + unit + "'")
.append("orderNum", orderNum) .add("orderNum=" + orderNum)
.append("gatewayId", gatewayId) .add("gatewayId='" + gatewayId + "'")
.append("communicationParamId", communicationParamId) .add("communicationParamId='" + communicationParamId + "'")
.append("protocolType", protocolType) .add("protocolType='" + protocolType + "'")
.append("communicationType", communicationType) .add("communicationType='" + communicationType + "'")
.append("registerSize", registerSize) .add("quality='" + quality + "'")
.append("isUse", isUse) .add("registerSize=" + registerSize)
.append("otherName", otherName) .add("isUse=" + isUse)
.append("grade", grade) .add("otherName='" + otherName + "'")
.append("searchValue", searchValue) .add("grade=" + grade)
.append("params", params) .add("searchValue='" + searchValue + "'")
.append("paramType", paramType) .add("params=" + params)
.append("systemType", systemType) .add("paramType='" + paramType + "'")
.append("collectionType", collectionType) .add("systemType='" + systemType + "'")
.append("terminalDeviceType", terminalDeviceType) .add("collectionType='" + collectionType + "'")
.add("terminalDeviceType='" + terminalDeviceType + "'")
.add("price=" + price)
.toString(); .toString();
} }
} }

9
mh-common/src/main/java/com/mh/common/core/domain/entity/CpmSpaceRelation.java

@ -30,6 +30,14 @@ public class CpmSpaceRelation extends BaseEntity {
@TableId(value = "id", type = IdType.ASSIGN_UUID) @TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id; private String id;
/** 删除标志(0代表存在 2代表删除) */
private String delFlag;
/**
* 台账id
*/
private String ledgerId;
/** /**
* 采集参数id * 采集参数id
*/ */
@ -76,6 +84,7 @@ public class CpmSpaceRelation extends BaseEntity {
public String toString() { public String toString() {
return new ToStringBuilder(this) return new ToStringBuilder(this)
.append("id", id) .append("id", id)
.append("ledgerId", ledgerId)
.append("cpmId", cpmId) .append("cpmId", cpmId)
.append("areaId", areaId) .append("areaId", areaId)
.append("buildingId", buildingId) .append("buildingId", buildingId)

81
mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java

@ -110,6 +110,87 @@ public class DeviceLedger extends BaseEntity {
*/ */
private Integer orderNum; private Integer orderNum;
// 增加所属分区ID、安装位置、生产日期、购置日期、品牌责任人这些属性值
/**
* 所属分区ID
*/
private String zoneId;
/**
* 安装位置
*/
private String installLocation;
/**
* 生产日期
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date productionTime;
/**
* 购置日期
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date purchaseTime;
/**
* 品牌
*/
private String brand;
/**
* 品牌负责人
*/
private String personInCharge;
public String getZoneId() {
return zoneId;
}
public void setZoneId(String zoneId) {
this.zoneId = zoneId;
}
public String getInstallLocation() {
return installLocation;
}
public void setInstallLocation(String installLocation) {
this.installLocation = installLocation;
}
public Date getProductionTime() {
return productionTime;
}
public void setProductionTime(Date productionTime) {
this.productionTime = productionTime;
}
public Date getPurchaseTime() {
return purchaseTime;
}
public void setPurchaseTime(Date purchaseTime) {
this.purchaseTime = purchaseTime;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getPersonInCharge() {
return personInCharge;
}
public void setPersonInCharge(String personInCharge) {
this.personInCharge = personInCharge;
}
public Integer getOrderNum() { public Integer getOrderNum() {
return orderNum; return orderNum;
} }

88
mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceState.java

@ -0,0 +1,88 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* @author LJF
* @version 1.0
* @date 2025-02-14 09:30:47
* @description 设备统计状态表
*/
@Data
@TableName("device_state")
public class DeviceState {
/**
* 当前时间
*/
@TableId(type = IdType.INPUT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date curDate;
/**
* 设备数目
*/
private int deviceNum;
/**
* 电表数目
*/
private int electNum;
/**
* 水表数目
*/
private int waterNum;
/**
* 泵数目
*/
private int pumpNum;
/**
* 压力表数目
*/
private int pressureNum;
/**
* 在线设备数目
*/
private int onlineNum;
/**
* 离线设备数目
*/
private int offlineNum;
/**
* 故障设备数目
*/
private int faultNum;
/**
* 上次故障数目
*/
private int lastFaultNum;
/**
* 故障环比
*/
private String faultP;
/**
* 热泵正在运行的数目
*/
private int pumpOnline;
/**
* 其他设备数目
*/
private int otherNum;
}

89
mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyDay.java

@ -0,0 +1,89 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@Data
@TableName("energy_day")
public class EnergyDay {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 时间
*/
private String curDate;
/**
* 建筑id
*/
private String buildingId;
/**
* 产热量
*/
private BigDecimal hotWaterValue;
/**
* 使用用量
*/
private BigDecimal useHotWater;
/**
* 用电量
*/
private BigDecimal electValue;
/**
* 单耗
*/
private BigDecimal electWater;
/**
* 入住人数
*/
private int checkInCount;
/**
* 人均用电
*/
private BigDecimal perElect;
/**
* 人均用水
*/
private BigDecimal perWater;
/**
* 更新标志
*/
private String updateFlag;
/**
* 建筑名称
*/
private String buildingName;
/**
* 当前电表读数
*/
private BigDecimal electCurValue;
/**
* 当前水表读数
*/
private BigDecimal wtCurValue;
}

74
mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyDaySum.java

@ -0,0 +1,74 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@Data
@TableName("energy_day_sum")
public class EnergyDaySum {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 时间
*/
private String curDate;
/**
* 建筑id
*/
private String buildingId;
/**
* 补水
*/
private BigDecimal fillWater;
/**
* 补水与昨日比
*/
private String fillWaterP;
/**
* 用水
*/
private BigDecimal waterValue;
/**
* 用水与昨日比
*/
private String waterP;
/**
* 用电量
*/
private BigDecimal electValue;
/**
* 用电与昨日比
*/
private String electP;
/**
* 单耗
*/
private BigDecimal electWater;
/**
* 单耗与昨日比
*/
private String electWaterP;
}

220
mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyHour.java

@ -0,0 +1,220 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@TableName("energy_hour")
public class EnergyHour {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 时间
*/
private String curDate;
/**
* 建筑id
*/
private String buildingId;
/**
* 产热量
*/
private BigDecimal hotWaterValue;
/**
* 使用用量
*/
private BigDecimal useHotWater;
/**
* 用电量
*/
private BigDecimal electValue;
/**
* 单耗
*/
private BigDecimal electWater;
/**
* 入住人数
*/
private int checkInCount;
/**
* 人均用电
*/
private BigDecimal perElect;
/**
* 人均用水
*/
private BigDecimal perWater;
/**
* 更新标志
*/
private String updateFlag;
/**
* 建筑名称
*/
private String buildingName;
/**
* 当前电表读数
*/
private BigDecimal electCurValue;
/**
* 当前水表读数
*/
private BigDecimal wtCurValue;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCurDate() {
return curDate;
}
public void setCurDate(String curDate) {
this.curDate = curDate;
}
public String getBuildingId() {
return buildingId;
}
public void setBuildingId(String buildingId) {
this.buildingId = buildingId;
}
public BigDecimal getHotWaterValue() {
return hotWaterValue;
}
public void setHotWaterValue(BigDecimal hotWaterValue) {
this.hotWaterValue = hotWaterValue;
}
public BigDecimal getUseHotWater() {
return useHotWater;
}
public void setUseHotWater(BigDecimal useHotWater) {
this.useHotWater = useHotWater;
}
public BigDecimal getElectValue() {
return electValue;
}
public void setElectValue(BigDecimal electValue) {
this.electValue = electValue;
}
public BigDecimal getElectWater() {
return electWater;
}
public void setElectWater(BigDecimal electWater) {
this.electWater = electWater;
}
public int getCheckInCount() {
return checkInCount;
}
public void setCheckInCount(int checkInCount) {
this.checkInCount = checkInCount;
}
public BigDecimal getPerElect() {
return perElect;
}
public void setPerElect(BigDecimal perElect) {
this.perElect = perElect;
}
public BigDecimal getPerWater() {
return perWater;
}
public void setPerWater(BigDecimal perWater) {
this.perWater = perWater;
}
public String getUpdateFlag() {
return updateFlag;
}
public void setUpdateFlag(String updateFlag) {
this.updateFlag = updateFlag;
}
public String getBuildingName() {
return buildingName;
}
public void setBuildingName(String buildingName) {
this.buildingName = buildingName;
}
public BigDecimal getElectCurValue() {
return electCurValue;
}
public void setElectCurValue(BigDecimal electCurValue) {
this.electCurValue = electCurValue;
}
public BigDecimal getWtCurValue() {
return wtCurValue;
}
public void setWtCurValue(BigDecimal wtCurValue) {
this.wtCurValue = wtCurValue;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.append("curDate", curDate)
.append("buildingId", buildingId)
.append("hotWaterValue", hotWaterValue)
.append("useHotWater", useHotWater)
.append("electValue", electValue)
.append("electWater", electWater)
.append("checkInCount", checkInCount)
.append("perElect", perElect)
.append("perWater", perWater)
.append("updateFlag", updateFlag)
.append("buildingName", buildingName)
.append("electCurValue", electCurValue)
.append("wtCurValue", wtCurValue)
.toString();
}
}

89
mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyMonth.java

@ -0,0 +1,89 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@Data
@TableName("energy_month")
public class EnergyMonth {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 时间
*/
private String curDate;
/**
* 建筑id
*/
private String buildingId;
/**
* 产热量
*/
private BigDecimal hotWaterValue;
/**
* 使用用量
*/
private BigDecimal useHotWater;
/**
* 用电量
*/
private BigDecimal electValue;
/**
* 单耗
*/
private BigDecimal electWater;
/**
* 入住人数
*/
private int checkInCount;
/**
* 人均用电
*/
private BigDecimal perElect;
/**
* 人均用水
*/
private BigDecimal perWater;
/**
* 更新标志
*/
private String updateFlag;
/**
* 建筑名称
*/
private String buildingName;
/**
* 当前电表读数
*/
private BigDecimal electCurValue;
/**
* 当前水表读数
*/
private BigDecimal wtCurValue;
}

74
mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyMonthSum.java

@ -0,0 +1,74 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@Data
@TableName("energy_month_sum")
public class EnergyMonthSum {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 时间
*/
private String curDate;
/**
* 建筑id
*/
private String buildingId;
/**
* 补水
*/
private BigDecimal fillWater;
/**
* 补水与昨日比
*/
private String fillWaterP;
/**
* 用水
*/
private BigDecimal waterValue;
/**
* 用水与昨日比
*/
private String waterP;
/**
* 用电量
*/
private BigDecimal electValue;
/**
* 用电与昨日比
*/
private String electP;
/**
* 单耗
*/
private BigDecimal electWater;
/**
* 单耗与昨日比
*/
private String electWaterP;
}

89
mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyYear.java

@ -0,0 +1,89 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@Data
@TableName("energy_year")
public class EnergyYear {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 时间
*/
private String curDate;
/**
* 建筑id
*/
private String buildingId;
/**
* 产热量
*/
private BigDecimal hotWaterValue;
/**
* 使用用量
*/
private BigDecimal useHotWater;
/**
* 用电量
*/
private BigDecimal electValue;
/**
* 单耗
*/
private BigDecimal electWater;
/**
* 入住人数
*/
private int checkInCount;
/**
* 人均用电
*/
private BigDecimal perElect;
/**
* 人均用水
*/
private BigDecimal perWater;
/**
* 更新标志
*/
private String updateFlag;
/**
* 建筑名称
*/
private String buildingName;
/**
* 当前电表读数
*/
private BigDecimal electCurValue;
/**
* 当前水表读数
*/
private BigDecimal wtCurValue;
}

74
mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyYearSum.java

@ -0,0 +1,74 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@Data
@TableName("energy_month_sum")
public class EnergyYearSum {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 时间
*/
private String curDate;
/**
* 建筑id
*/
private String buildingId;
/**
* 补水
*/
private BigDecimal fillWater;
/**
* 补水与昨日比
*/
private String fillWaterP;
/**
* 用水
*/
private BigDecimal waterValue;
/**
* 用水与昨日比
*/
private String waterP;
/**
* 用电量
*/
private BigDecimal electValue;
/**
* 用电与昨日比
*/
private String electP;
/**
* 单耗
*/
private BigDecimal electWater;
/**
* 单耗与昨日比
*/
private String electWaterP;
}

9
mh-common/src/main/java/com/mh/common/core/domain/entity/GatewayManage.java

@ -35,6 +35,7 @@ public class GatewayManage extends BaseEntity {
private int communicationType; // 通讯类型 private int communicationType; // 通讯类型
private int grade; // 标志位(连接状态) 0:正常;1:不在线;2:异常 private int grade; // 标志位(连接状态) 0:正常;1:不在线;2:异常
private Integer status; // (连接状态) 0:正常;1:不在线;2:异常 private Integer status; // (连接状态) 0:正常;1:不在线;2:异常
private String heartBeat; // 心跳包
@JsonIgnore @JsonIgnore
@TableField(exist = false) @TableField(exist = false)
@ -47,6 +48,14 @@ public class GatewayManage extends BaseEntity {
@JsonInclude(JsonInclude.Include.NON_EMPTY) @JsonInclude(JsonInclude.Include.NON_EMPTY)
private Map<String, Object> params; private Map<String, Object> params;
public String getHeartBeat() {
return heartBeat;
}
public void setHeartBeat(String heartBeat) {
this.heartBeat = heartBeat;
}
public Integer getStatus() { public Integer getStatus() {
return status; return status;
} }

15
mh-common/src/main/java/com/mh/common/core/domain/entity/HistoryEntity.java

@ -0,0 +1,15 @@
package com.mh.common.core.domain.entity;
import lombok.Data;
/**
* @Author : Rainbow
* @date : 2023/7/11
*/
@Data
public class HistoryEntity {
private int id;
private String name;
private String date;
private double value;
}

15
mh-common/src/main/java/com/mh/common/core/domain/entity/HouseInfo.java

@ -12,6 +12,7 @@ import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringBuilder;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -92,6 +93,20 @@ public class HouseInfo extends BaseEntity {
private int orderNum; private int orderNum;
/**
* 台账id
*/
// @JsonIgnore
@TableField(exist = false)
private List<String> ledgerId;
/**
* 采集节点id
*/
// @JsonIgnore
@TableField(exist = false)
private List<String> cpmId;
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this) return new ToStringBuilder(this)

274
mh-common/src/main/java/com/mh/common/core/domain/entity/ProjectInfo.java

@ -0,0 +1,274 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.mh.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
/**
* @author EEMCS
* @version 1.0
* @project EEMCS
* @description 项目信息管理
* @date 2026-06-11
*/
@TableName("project_info")
public class ProjectInfo extends BaseEntity {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 用户项目编码
*/
private String projectCode;
/**
* 项目名称
*/
private String projectName;
/**
* 项目地址
*/
private String projectAddress;
/**
* 安装日期
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date installDate;
/**
* 验收日期
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date acceptanceDate;
/**
* 上线日期
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date onlineDate;
/**
* 设备数量
*/
private Integer deviceCount;
/**
* 在线设备数量
*/
private Integer onlineDeviceCount;
/**
* 离线设备数量
*/
private Integer offlineDeviceCount;
/**
* 网关数量
*/
private Integer gatewayCount;
/**
* 在线网关数量
*/
private Integer onlineGatewayCount;
/**
* 离线网关数量
*/
private Integer offlineGatewayCount;
/**
* 项目负责人
*/
private String projectManager;
/**
* 电单价
*/
private BigDecimal electricityPrice;
@JsonIgnore
@TableField(exist = false)
private String searchValue;
/** 请求参数 */
@TableField(exist = false)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private Map<String, Object> params;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProjectCode() {
return projectCode;
}
public void setProjectCode(String projectCode) {
this.projectCode = projectCode;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getProjectAddress() {
return projectAddress;
}
public void setProjectAddress(String projectAddress) {
this.projectAddress = projectAddress;
}
public Date getInstallDate() {
return installDate;
}
public void setInstallDate(Date installDate) {
this.installDate = installDate;
}
public Date getAcceptanceDate() {
return acceptanceDate;
}
public void setAcceptanceDate(Date acceptanceDate) {
this.acceptanceDate = acceptanceDate;
}
public Date getOnlineDate() {
return onlineDate;
}
public void setOnlineDate(Date onlineDate) {
this.onlineDate = onlineDate;
}
public Integer getDeviceCount() {
return deviceCount;
}
public void setDeviceCount(Integer deviceCount) {
this.deviceCount = deviceCount;
}
public Integer getOnlineDeviceCount() {
return onlineDeviceCount;
}
public void setOnlineDeviceCount(Integer onlineDeviceCount) {
this.onlineDeviceCount = onlineDeviceCount;
}
public Integer getOfflineDeviceCount() {
return offlineDeviceCount;
}
public void setOfflineDeviceCount(Integer offlineDeviceCount) {
this.offlineDeviceCount = offlineDeviceCount;
}
public Integer getGatewayCount() {
return gatewayCount;
}
public void setGatewayCount(Integer gatewayCount) {
this.gatewayCount = gatewayCount;
}
public Integer getOnlineGatewayCount() {
return onlineGatewayCount;
}
public void setOnlineGatewayCount(Integer onlineGatewayCount) {
this.onlineGatewayCount = onlineGatewayCount;
}
public Integer getOfflineGatewayCount() {
return offlineGatewayCount;
}
public void setOfflineGatewayCount(Integer offlineGatewayCount) {
this.offlineGatewayCount = offlineGatewayCount;
}
public String getProjectManager() {
return projectManager;
}
public void setProjectManager(String projectManager) {
this.projectManager = projectManager;
}
public BigDecimal getElectricityPrice() {
return electricityPrice;
}
public void setElectricityPrice(BigDecimal electricityPrice) {
this.electricityPrice = electricityPrice;
}
@Override
public String getSearchValue() {
return searchValue;
}
@Override
public void setSearchValue(String searchValue) {
this.searchValue = searchValue;
}
@Override
public Map<String, Object> getParams() {
return params;
}
@Override
public void setParams(Map<String, Object> params) {
this.params = params;
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.append("projectCode", projectCode)
.append("projectName", projectName)
.append("projectAddress", projectAddress)
.append("installDate", installDate)
.append("acceptanceDate", acceptanceDate)
.append("onlineDate", onlineDate)
.append("deviceCount", deviceCount)
.append("onlineDeviceCount", onlineDeviceCount)
.append("offlineDeviceCount", offlineDeviceCount)
.append("gatewayCount", gatewayCount)
.append("onlineGatewayCount", onlineGatewayCount)
.append("offlineGatewayCount", offlineGatewayCount)
.append("projectManager", projectManager)
.append("electricityPrice", electricityPrice)
.append("searchValue", searchValue)
.append("params", params)
.toString();
}
}

217
mh-common/src/main/java/com/mh/common/core/domain/entity/ReportHeatingRunParamHis.java

@ -0,0 +1,217 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.mh.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Map;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 采暖系统运行记录表
* @date 2025-10-21 10:26:12
*/
@Data
@TableName("report_heating_run_param_his") // 指定数据库表名
public class ReportHeatingRunParamHis extends BaseEntity {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
// 日期
@TableField("cur_date") // 字段映射(可选,若字段名与属性名不一致时需指定)
private LocalDate curDate;
// 时间
@TableField("cur_time")
private String curTime; // 字符串类型直接映射
// 班次
@TableField("classes")
private String classes;
// 锅炉1状态
@TableField("cur_status_boiler_one")
private Integer curStatusBoilerOne;
// 锅炉1状态
@TableField(exist = false)
private String runStatusBoilerOne;
// 锅炉1出水温度(℃)
@TableField("temp_out_boiler_one")
private BigDecimal tempOutBoilerOne; // 精度要求高时使用BigDecimal
// 锅炉1设定温度(℃)
@TableField("temp_set_boiler_one")
private BigDecimal tempSetBoilerOne; // 精度要求高时使用BigDecimal
// 锅炉1回水温度(℃)
@TableField("temp_in_boiler_one")
private BigDecimal tempInBoilerOne;
// 锅炉1炉水温度(℃)
@TableField("temp_water_boiler_one")
private BigDecimal tempWaterBoilerOne;
// 锅炉1烟道温度(℃)
@TableField("temp_flue_gas_boiler_one")
private BigDecimal tempFlueGasBoilerOne;
// 锅炉2状态
@TableField("cur_status_boiler_two")
private Integer curStatusBoilerTwo;
// 锅炉2状态
@TableField(exist = false)
private String runStatusBoilerTwo;
// 锅炉2设定温度(℃)
@TableField("temp_set_boiler_two")
private BigDecimal tempSetBoilerTwo; // 精度要求高时使用BigDecimal
// 锅炉2出水温度(℃)
@TableField("temp_out_boiler_two")
private BigDecimal tempOutBoilerTwo;
// 锅炉2回水温度(℃)
@TableField("temp_in_boiler_two")
private BigDecimal tempInBoilerTwo;
// 锅炉2炉水温度(℃)
@TableField("temp_water_boiler_two")
private BigDecimal tempWaterBoilerTwo;
// 锅炉2烟道温度(℃)
@TableField("temp_flue_gas_boiler_two")
private BigDecimal tempFlueGasBoilerTwo;
// 采暖泵1状态
@TableField("cur_status_pump_one")
private Integer curStatusPumpOne;
// 采暖泵1状态
@TableField(exist = false)
private String runStatusPumpOne;
// 采暖泵1频率(Hz)
@TableField("frequency_pump_one")
private BigDecimal frequencyPumpOne;
// 采暖泵2状态
@TableField("cur_status_pump_two")
private Integer curStatusPumpTwo;
// 采暖泵2状态
@TableField(exist = false)
private String runStatusPumpTwo;
// 采暖泵2频率(Hz)
@TableField("frequency_pump_two")
private BigDecimal frequencyPumpTwo;
// 采暖泵3状态
@TableField("cur_status_pump_three")
private Integer curStatusPumpThree;
// 采暖泵3状态
@TableField(exist = false)
private String runStatusPumpThree;
// 采暖泵3频率(Hz)
@TableField("frequency_pump_three")
private BigDecimal frequencyPumpThree;
// 巡查记录人
@TableField("recorder")
private String recorder;
// 备注
@TableField("remark")
private String remark;
// 创建时间(自动填充)
@TableField(value = "create_date", fill = FieldFill.INSERT) // 插入时自动填充
private LocalDateTime createDate;
@JsonIgnore
@TableField(exist = false)
private String searchValue;
/**
* 请求参数
*/
@TableField(exist = false)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private Map<String, Object> params;
/** 创建者 */
@JsonIgnore
@TableField(exist = false)
private String createBy;
/** 创建时间 */
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 更新者 */
@JsonIgnore
@TableField(exist = false)
private String updateBy;
/** 更新时间 */
@JsonIgnore
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 更新者 */
@TableField(exist = false)
private int pageNum;
/** 更新者 */
@TableField(exist = false)
private int pageSize;
@Override
public String toString() {
return new StringJoiner(", ", ReportHeatingRunParamHis.class.getSimpleName() + "[", "]")
.add("id='" + id + "'")
.add("curDate=" + curDate)
.add("curTime='" + curTime + "'")
.add("classes='" + classes + "'")
.add("curStatusBoilerOne=" + curStatusBoilerOne)
.add("tempOutBoilerOne=" + tempOutBoilerOne)
.add("tempInBoilerOne=" + tempInBoilerOne)
.add("tempWaterBoilerOne=" + tempWaterBoilerOne)
.add("tempFlueGasBoilerOne=" + tempFlueGasBoilerOne)
.add("curStatusBoilerTwo=" + curStatusBoilerTwo)
.add("tempOutBoilerTwo=" + tempOutBoilerTwo)
.add("tempInBoilerTwo=" + tempInBoilerTwo)
.add("tempWaterBoilerTwo=" + tempWaterBoilerTwo)
.add("tempFlueGasBoilerTwo=" + tempFlueGasBoilerTwo)
.add("curStatusPumpOne=" + curStatusPumpOne)
.add("frequencyPumpOne=" + frequencyPumpOne)
.add("curStatusPumpTwo=" + curStatusPumpTwo)
.add("frequencyPumpTwo=" + frequencyPumpTwo)
.add("curStatusPumpThree=" + curStatusPumpThree)
.add("frequencyPumpThree=" + frequencyPumpThree)
.add("recorder='" + recorder + "'")
.add("remark='" + remark + "'")
.add("createDate=" + createDate)
.toString();
}
}

232
mh-common/src/main/java/com/mh/common/core/domain/entity/ReportHotWaterParamHis.java

@ -0,0 +1,232 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.mh.common.core.domain.BaseEntity;
import lombok.Getter;
import lombok.Setter;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Map;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 生活热水供水热泵运行情况
* @date 2025-10-22 17:40:03
*/
@Setter
@Getter
@TableName("report_hot_water_param_his")
public class ReportHotWaterParamHis extends BaseEntity implements Serializable {
// 主键
@Serial
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
// 楼层ID
private String floorId;
// 记录日期
private LocalDate curDate;
// 记录时间(varchar格式)
private String curTime;
// 班次
private String classes;
// 1号热泵设定温度(℃)
private BigDecimal tempSetHotPumpOne;
// 1号热泵实际温度(℃)
private BigDecimal tempRealHotPumpOne;
// 1号热泵启停状态(0-关闭,1-开启)
private Integer statusSwitchHotPumpOne;
// 1号热泵运行状态(0-故障,1-正常)
private Integer statusRunHotPumpOne;
// 2号热泵设定温度(℃)
private BigDecimal tempSetHotPumpTwo;
// 2号热泵实际温度(℃)
private BigDecimal tempRealHotPumpTwo;
// 2号热泵启停状态
private Integer statusSwitchHotPumpTwo;
// 2号热泵运行状态
private Integer statusRunHotPumpTwo;
// 3号热泵设定温度(℃)
private BigDecimal tempSetHotPumpThree;
// 3号热泵实际温度(℃)
private BigDecimal tempRealHotPumpThree;
// 3号热泵启停状态
private Integer statusSwitchHotPumpThree;
// 3号热泵运行状态
private Integer statusRunHotPumpThree;
// 4号热泵设定温度(℃)
private BigDecimal tempSetHotPumpFour;
// 4号热泵实际温度(℃)
private BigDecimal tempRealHotPumpFour;
// 4号热泵启停状态
private Integer statusSwitchHotPumpFour;
// 4号热泵运行状态
private Integer statusRunHotPumpFour;
// 高区/裙楼设定压力(MPa)
private BigDecimal presSetSupplyPumpAreaOne;
// 高区/裙楼实际压力(MPa)
private BigDecimal presRealSupplyPumpAreaOne;
// 高区/裙楼1号泵运行状态
private Integer statusRunSupplyPumpOne;
// 高区/裙楼2号泵运行状态
private Integer statusRunSupplyPumpTwo;
// 中区/中厨设定压力(MPa)
private BigDecimal presSetSupplyPumpAreaTwo;
// 中区/中厨实际压力(MPa)
private BigDecimal presRealSupplyPumpAreaTwo;
// 中区/中厨1号泵运行状态
private Integer statusRunSupplyPumpThree;
// 中区/中厨2号泵运行状态
private Integer statusRunSupplyPumpFour;
// 高区/裙楼液位(米)
private BigDecimal levelWaterTankOne;
// 中区/中厨液位(米)
private BigDecimal levelWaterTankTwo;
// 巡查记录人
private String recorder;
// 备注信息
private String remark;
@JsonIgnore
@TableField(exist = false)
private String searchValue;
/**
* 请求参数
*/
@TableField(exist = false)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private Map<String, Object> params;
/** 创建者 */
@JsonIgnore
@TableField(exist = false)
private String createBy;
/** 创建时间 */
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 更新者 */
@JsonIgnore
@TableField(exist = false)
private String updateBy;
/** 更新时间 */
@JsonIgnore
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 更新者 */
@TableField(exist = false)
private int pageNum;
/** 更新者 */
@TableField(exist = false)
private int pageSize;
// 无参构造
public ReportHotWaterParamHis() {
}
// Getter/Setter 方法(此处省略,实际开发中建议使用 Lombok @Data)
// 业务方法示例:判断热泵1是否正常运行
public boolean isHotPump1Normal() {
return statusRunHotPumpOne != null && statusRunHotPumpOne == 1;
}
// 业务方法示例:获取当前压力差值(高区)
public BigDecimal getHighAreaPressureDiff() {
return presRealSupplyPumpAreaOne.subtract(presSetSupplyPumpAreaOne);
}
@Override
public String toString() {
return new StringJoiner(", ", ReportHotWaterParamHis.class.getSimpleName() + "[", "]")
.add("id='" + id + "'")
.add("floorId='" + floorId + "'")
.add("curDate=" + curDate)
.add("curTime='" + curTime + "'")
.add("classes='" + classes + "'")
.add("tempSetHotPumpOne=" + tempSetHotPumpOne)
.add("tempRealHotPumpOne=" + tempRealHotPumpOne)
.add("statusSwitchHotPumpOne=" + statusSwitchHotPumpOne)
.add("statusRunHotPumpOne=" + statusRunHotPumpOne)
.add("tempSetHotPumpTwo=" + tempSetHotPumpTwo)
.add("tempRealHotPumpTwo=" + tempRealHotPumpTwo)
.add("statusSwitchHotPumpTwo=" + statusSwitchHotPumpTwo)
.add("statusRunHotPumpTwo=" + statusRunHotPumpTwo)
.add("tempSetHotPumpThree=" + tempSetHotPumpThree)
.add("tempRealHotPumpThree=" + tempRealHotPumpThree)
.add("statusSwitchHotPumpThree=" + statusSwitchHotPumpThree)
.add("statusRunHotPumpThree=" + statusRunHotPumpThree)
.add("tempSetHotPumpFour=" + tempSetHotPumpFour)
.add("tempRealHotPumpFour=" + tempRealHotPumpFour)
.add("statusSwitchHotPumpFour=" + statusSwitchHotPumpFour)
.add("statusRunHotPumpFour=" + statusRunHotPumpFour)
.add("presSetSupplyPumpAreaOne=" + presSetSupplyPumpAreaOne)
.add("presRealSupplyPumpAreaOne=" + presRealSupplyPumpAreaOne)
.add("statusRunSupplyPumpOne=" + statusRunSupplyPumpOne)
.add("statusRunSupplyPumpTwo=" + statusRunSupplyPumpTwo)
.add("presSetSupplyPumpAreaTwo=" + presSetSupplyPumpAreaTwo)
.add("presRealSupplyPumpAreaTwo=" + presRealSupplyPumpAreaTwo)
.add("statusRunSupplyPumpThree=" + statusRunSupplyPumpThree)
.add("statusRunSupplyPumpFour=" + statusRunSupplyPumpFour)
.add("levelWaterTankOne=" + levelWaterTankOne)
.add("levelWaterTankTwo=" + levelWaterTankTwo)
.add("recorder='" + recorder + "'")
.add("remark='" + remark + "'")
.toString();
}
}

114
mh-common/src/main/java/com/mh/common/core/domain/entity/ReportMeterReadingsHis.java

@ -0,0 +1,114 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.Date;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 设备抄表记录表
* @date 2025-10-21 10:26:12
*/
@Setter
@Getter
public class ReportMeterReadingsHis {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 设备类型
*/
private String mtType;
/**
* 设备位置
*/
private String location;
/**
* 设备编号
*/
private String mtNum;
/**
* 昨日抄表读数
*/
private BigDecimal yesterdayReading;
/**
* 昨日抄表时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date yesterdayTimestamp;
/**
* 当日抄表读数
*/
private BigDecimal todayReading;
/**
* 当日抄表时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date todayTimestamp;
/**
* 设备倍率
*/
private int mtRatio;
/**
* 当日总读数*设备倍率
*/
private BigDecimal total;
/**
* 当日单价
*/
private BigDecimal unitPrice;
/**
* 当日金额
*/
private BigDecimal cost;
/**
* 记录创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 排序序号
*/
private int sortOrder;
@Override
public String toString() {
return new StringJoiner(", ", ReportMeterReadingsHis.class.getSimpleName() + "[", "]")
.add("id='" + id + "'")
.add("mtType='" + mtType + "'")
.add("location='" + location + "'")
.add("mtNum='" + mtNum + "'")
.add("yesterdayReading=" + yesterdayReading)
.add("yesterdayTimestamp=" + yesterdayTimestamp)
.add("todayReading=" + todayReading)
.add("todayTimestamp=" + todayTimestamp)
.add("mtRatio=" + mtRatio)
.add("total=" + total)
.add("unitPrice=" + unitPrice)
.add("cost=" + cost)
.add("createTime=" + createTime)
.add("sortOrder=" + sortOrder)
.toString();
}
}

170
mh-common/src/main/java/com/mh/common/core/domain/entity/ReportSteamRunParamHis.java

@ -0,0 +1,170 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.mh.common.core.domain.BaseEntity;
import lombok.Getter;
import lombok.Setter;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import java.util.Map;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 生活热水供水热泵运行情况
* @date 2025-10-22 17:40:03
*/
@Setter
@Getter
@TableName("report_steam_run_param_his")
public class ReportSteamRunParamHis extends BaseEntity implements Serializable {
// 主键
@Serial
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
// 记录日期
private LocalDate curDate;
// 记录时间(varchar格式)
private String curTime;
// 班次
private String classes;
// 蒸汽机状态字
private Integer curStatus;
// 运行状态
// @JsonIgnore
@TableField(exist = false)
private String runStatus;
// 火焰强度
private BigDecimal flameIntensity;
// 烟气温度(℃)
private BigDecimal tempFlueGas;
// 火焰百分比(%)
private BigDecimal percentFlameIntensity;
// 液位(%)
private BigDecimal waterLevel;
// 蒸汽温度(℃)
private BigDecimal tempCur;
// 当前压力(Mpa)
private BigDecimal pressCur;
// 压力设定值(Mpa)
private BigDecimal pressSet;
// 启动压差(Mpa)
private BigDecimal pressStartDiff;
// 停止压差(Mpa)
private BigDecimal pressShutdownDiff;
// 瞬时压力(Mpa)
private BigDecimal pressInstance;
// 瞬时流量(t/h)
private BigDecimal flowInstance;
// 累积流量(t)
private BigDecimal flowTotal;
// 巡查记录人
private String recorder;
// 备注信息
private String remark;
@JsonIgnore
@TableField(exist = false)
private String searchValue;
/**
* 请求参数
*/
@TableField(exist = false)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private Map<String, Object> params;
/** 创建者 */
@JsonIgnore
@TableField(exist = false)
private String createBy;
/** 创建时间 */
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 更新者 */
@JsonIgnore
@TableField(exist = false)
private String updateBy;
/** 更新时间 */
@JsonIgnore
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 更新者 */
@TableField(exist = false)
private int pageNum;
/** 更新者 */
@TableField(exist = false)
private int pageSize;
@Override
public String toString() {
return new StringJoiner(", ", ReportSteamRunParamHis.class.getSimpleName() + "[", "]")
.add("id='" + id + "'")
.add("curDate=" + curDate)
.add("curTime='" + curTime + "'")
.add("classes='" + classes + "'")
.add("curStatus=" + curStatus)
.add("flameIntensity=" + flameIntensity)
.add("tempFlueGas=" + tempFlueGas)
.add("percentFlameIntensity=" + percentFlameIntensity)
.add("waterLevel=" + waterLevel)
.add("tempCur=" + tempCur)
.add("pressCur=" + pressCur)
.add("pressSet=" + pressSet)
.add("pressStartDiff=" + pressStartDiff)
.add("pressShutdownDiff=" + pressShutdownDiff)
.add("pressInstance=" + pressInstance)
.add("flowInstance=" + flowInstance)
.add("flowTotal=" + flowTotal)
.add("recorder='" + recorder + "'")
.add("remark='" + remark + "'")
.add("searchValue='" + searchValue + "'")
.add("params=" + params)
.add("createBy='" + createBy + "'")
.add("createTime=" + createTime)
.add("updateBy='" + updateBy + "'")
.add("updateTime=" + updateTime)
.toString();
}
}

310
mh-common/src/main/java/com/mh/common/core/domain/entity/ReportSysRunParamHis.java

@ -0,0 +1,310 @@
package com.mh.common.core.domain.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.mh.common.core.domain.BaseEntity;
import lombok.*;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.springframework.data.annotation.Id;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import java.util.Map;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 系统参数设备运行历史记录
* @date 2025-08-12 10:44:36
*/
@Data
@TableName("report_sys_run_param_his")
public class ReportSysRunParamHis extends BaseEntity {
/**
* 自增主键
*/
@Id
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 主机id
*/
private String deviceNum;
/**
* 日期
*/
private LocalDate curDate;
/**
* 时间格式建议与数据库存储一致 "HH:mm:ss" "yyyy-MM-dd HH:mm:ss"
*/
private String curTime;
// /**
// * 班次
// */
// private String classes;
/**
* 冷冻水进水温度
*/
private BigDecimal tempInChillerWater;
/**
* 冷冻水出水温度
*/
private BigDecimal tempOutChillerWater;
/**
* 设计流量%修正列名 "design flow" 含空格
*/
private BigDecimal designFlow;
/**
* 蒸发器压力kpa--磁悬浮
*/
private BigDecimal pressEvapSaturation;
/**
* 蒸发器饱和温度
*/
private BigDecimal tempEvapSaturation;
/**
* 蒸发器趋近温度
*/
private BigDecimal tempEvapApproaching;
/**
* 冷却水进水温度
*/
private BigDecimal tempInCoolingWater;
/**
* 冷却水出水温度
*/
private BigDecimal tempOutCoolingWater;
/**
* 冷凝器压力kpa--磁悬浮
*/
private BigDecimal pressCondenserSaturation;
/**
* 冷凝器饱和温度
*/
private BigDecimal tempCondenserSaturation;
/**
* 冷凝器趋近温度
*/
private BigDecimal tempCondenserApproaching;
/**
* 冷冻水设定值
*/
private BigDecimal setChillerWater;
/**
* 冷水机需求%
*/
private BigDecimal setLoad;
/**
* 总电流%
*/
private BigDecimal currentTotal;
/**
* 总输入功率kw
*/
private BigDecimal inputPowerTotal;
/**
* 压缩比1
*/
private BigDecimal ratioCompOne;
/**
* 压缩比1
*/
private BigDecimal ratioCompTwo;
/**
* 压缩比1
*/
private BigDecimal ratioCompThree;
/**
* 膨胀阀开度%
*/
private BigDecimal openExv;
/**
* 运行中的压缩机数量
*/
private Integer runCompNum;
/**
* 冷冻水泵频率hz
*/
private BigDecimal frequencyChiller;
/**
* 冷冻水出水压力kpa
*/
private BigDecimal pressOutChillerWater;
/**
* 冷冻水进水压力kpa
*/
private BigDecimal pressInChillerWater;
/**
* 冷却水泵频率hz
*/
private BigDecimal frequencyCooling;
/**
* 冷却水出水压力kpa
*/
private BigDecimal pressOutCoolingWater;
/**
* 冷却水进水压力kpa
*/
private BigDecimal pressInCoolingWater;
/**
* 冷却塔水泵频率hz
*/
private BigDecimal frequencyCoolingTower;
/**
* 冷却塔运行数量原注释可能有误根据列名调整
*/
private Integer runCoolingTower;
/**
* 恒压补水罐压力
*/
private BigDecimal pressConstantWaterTank;
/**
* 室外温度
*/
private BigDecimal tempOutdoor;
/**
* 室外湿度%
*/
private BigDecimal humidityOutdoor;
/**
* 巡查记录人
*/
private String recorder;
/**
* 备注
*/
private String remark;
@JsonIgnore
@TableField(exist = false)
private String searchValue;
/**
* 请求参数
*/
@TableField(exist = false)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private Map<String, Object> params;
/** 创建者 */
@TableField(exist = false)
private String createBy;
/** 创建时间 */
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/** 更新者 */
@TableField(exist = false)
private String updateBy;
/** 更新时间 */
@TableField(exist = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/** 更新者 */
@TableField(exist = false)
private int pageNum;
/** 更新者 */
@TableField(exist = false)
private int pageSize;
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.append("deviceNum", deviceNum)
.append("curDate", curDate)
.append("curTime", curTime)
.append("tempInChillerWater", tempInChillerWater)
.append("tempOutChillerWater", tempOutChillerWater)
.append("designFlow", designFlow)
.append("pressEvapSaturation", pressEvapSaturation)
.append("tempEvapSaturation", tempEvapSaturation)
.append("tempEvapApproaching", tempEvapApproaching)
.append("tempInCoolingWater", tempInCoolingWater)
.append("tempOutCoolingWater", tempOutCoolingWater)
.append("pressCondenserSaturation", pressCondenserSaturation)
.append("tempCondenserSaturation", tempCondenserSaturation)
.append("tempCondenserApproaching", tempCondenserApproaching)
.append("setChillerWater", setChillerWater)
.append("setLoad", setLoad)
.append("currentTotal", currentTotal)
.append("inputPowerTotal", inputPowerTotal)
.append("ratioCompOne", ratioCompOne)
.append("ratioCompTwo", ratioCompTwo)
.append("ratioCompThree", ratioCompThree)
.append("openExv", openExv)
.append("runCompNum", runCompNum)
.append("frequencyChiller", frequencyChiller)
.append("pressOutChillerWater", pressOutChillerWater)
.append("pressInChillerWater", pressInChillerWater)
.append("frequencyCooling", frequencyCooling)
.append("pressOutCoolingWater", pressOutCoolingWater)
.append("pressInCoolingWater", pressInCoolingWater)
.append("frequencyCoolingTower", frequencyCoolingTower)
.append("runCoolingTower", runCoolingTower)
.append("pressConstantWaterTank", pressConstantWaterTank)
.append("tempOutdoor", tempOutdoor)
.append("humidityOutdoor", humidityOutdoor)
.append("recorder", recorder)
.append("remark", remark)
.append("searchValue", searchValue)
.append("params", params)
.append("createBy", createBy)
.append("createTime", createTime)
.append("updateBy", updateBy)
.append("updateTime", updateTime)
.toString();
}
}

2
mh-common/src/main/java/com/mh/common/core/domain/entity/SysRole.java

@ -91,7 +91,7 @@ public class SysRole extends BaseEntity
public static boolean isAdmin(Long roleId) public static boolean isAdmin(Long roleId)
{ {
return roleId != null && 1L == roleId; return roleId != null && (1L == roleId || 10005L == roleId);
} }
@NotBlank(message = "角色名称不能为空") @NotBlank(message = "角色名称不能为空")

2
mh-common/src/main/java/com/mh/common/core/domain/entity/SysUser.java

@ -121,7 +121,7 @@ public class SysUser extends BaseEntity
public static boolean isAdmin(Long userId) public static boolean isAdmin(Long userId)
{ {
return userId != null && 1L == userId; return userId != null && (1L == userId || 10005L == userId);
} }
public Long getDeptId() public Long getDeptId()

117
mh-common/src/main/java/com/mh/common/core/domain/entity/WaterLevel.java

@ -0,0 +1,117 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.util.Date;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水液位
* @date 2025-06-19 16:18:12
*/
@Data
@TableName("water_level")
public class WaterLevel {
private String id;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date curDate;
private String buildingId;
private String buildingName;
private String deviceNum;
private String deviceName;
private String temp00;
private String temp01;
private String temp02;
private String temp03;
private String temp04;
private String temp05;
private String temp06;
private String temp07;
private String temp08;
private String temp09;
private String temp10;
private String temp11;
private String temp12;
private String temp13;
private String temp14;
private String temp15;
private String temp16;
private String temp17;
private String temp18;
private String temp19;
private String temp20;
private String temp21;
private String temp22;
private String temp23;
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.append("curDate", curDate)
.append("buildingId", buildingId)
.append("buildingName", buildingName)
.append("deviceNum", deviceNum)
.append("deviceName", deviceName)
.append("temp00", temp00)
.append("temp01", temp01)
.append("temp02", temp02)
.append("temp03", temp03)
.append("temp04", temp04)
.append("temp05", temp05)
.append("temp06", temp06)
.append("temp07", temp07)
.append("temp08", temp08)
.append("temp09", temp09)
.append("temp10", temp10)
.append("temp11", temp11)
.append("temp12", temp12)
.append("temp13", temp13)
.append("temp14", temp14)
.append("temp15", temp15)
.append("temp16", temp16)
.append("temp17", temp17)
.append("temp18", temp18)
.append("temp19", temp19)
.append("temp20", temp20)
.append("temp21", temp21)
.append("temp22", temp22)
.append("temp23", temp23)
.toString();
}
}

117
mh-common/src/main/java/com/mh/common/core/domain/entity/WaterTemp.java

@ -0,0 +1,117 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.util.Date;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水温度
* @date 2025-06-19 16:18:12
*/
@Data
@TableName("water_temp")
public class WaterTemp {
private String id;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date curDate;
private String buildingId;
private String buildingName;
private String deviceNum;
private String deviceName;
private String temp00;
private String temp01;
private String temp02;
private String temp03;
private String temp04;
private String temp05;
private String temp06;
private String temp07;
private String temp08;
private String temp09;
private String temp10;
private String temp11;
private String temp12;
private String temp13;
private String temp14;
private String temp15;
private String temp16;
private String temp17;
private String temp18;
private String temp19;
private String temp20;
private String temp21;
private String temp22;
private String temp23;
@Override
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.append("curDate", curDate)
.append("buildingId", buildingId)
.append("buildingName", buildingName)
.append("deviceNum", deviceNum)
.append("deviceName", deviceName)
.append("temp00", temp00)
.append("temp01", temp01)
.append("temp02", temp02)
.append("temp03", temp03)
.append("temp04", temp04)
.append("temp05", temp05)
.append("temp06", temp06)
.append("temp07", temp07)
.append("temp08", temp08)
.append("temp09", temp09)
.append("temp10", temp10)
.append("temp11", temp11)
.append("temp12", temp12)
.append("temp13", temp13)
.append("temp14", temp14)
.append("temp15", temp15)
.append("temp16", temp16)
.append("temp17", temp17)
.append("temp18", temp18)
.append("temp19", temp19)
.append("temp20", temp20)
.append("temp21", temp21)
.append("temp22", temp22)
.append("temp23", temp23)
.toString();
}
}

30
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/AxisLine.java

@ -0,0 +1,30 @@
package com.mh.common.core.domain.entity.chart;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-10
* @throws
*/
@Setter
@Getter
public class AxisLine {
private boolean show;
private LineStyle lineStyle;
private String color = "";
public AxisLine(boolean show, LineStyle lineStyle) {
this.show = show;
this.lineStyle = lineStyle;
}
public AxisLine(boolean show, LineStyle lineStyle, String color) {
this.show = show;
this.lineStyle = lineStyle;
this.color = color;
}
}

45
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/BaseChartEntity.java

@ -0,0 +1,45 @@
package com.mh.common.core.domain.entity.chart;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title 基础数据获取实体类
* @description
* @updateTime 2020-07-13
* @throws
*/
@Setter
@Getter
public class BaseChartEntity {
private String chartTime;
private String indexName;
private String indexType;
private String displayType;
private int indexId;
private int width;
private String chartName;
private String timeName;
private int chartId;
private String unit;
private double data;
@Override
public String toString() {
return "BaseChartEntity{" +
"chartTime='" + chartTime + '\'' +
", indexName='" + indexName + '\'' +
", indexType='" + indexType + '\'' +
", displayType='" + displayType + '\'' +
", indexId=" + indexId +
", width=" + width +
", chartName='" + chartName + '\'' +
", timeName='" + timeName + '\'' +
", chartId=" + chartId +
", unit='" + unit + '\'' +
", data=" + data +
'}';
}
}

54
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/ChartEntity.java

@ -0,0 +1,54 @@
package com.mh.common.core.domain.entity.chart;
import com.alibaba.fastjson2.annotation.JSONType;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @author LJF
* @title 图表实体类
* @description
* @updateTime 2020-07-10
* @throws
*/
@Setter
@Getter
@JSONType(orders = {"title","feature","legend","xAxis","yAxis","series","timeName"})
public class ChartEntity {
private Title title;
private Feature feature;
private Legend legend;
private ToolTip toolTip;
private XAxis xAxis;
private List<YAxis> yAxis;
private List<Series> series;
public ChartEntity() {
}
public ChartEntity(Title title, Feature feature, Legend legend, XAxis xAxis, List<YAxis> yAxis, List<Series> series) {
this.title = title;
this.feature = feature;
this.legend = legend;
this.xAxis = xAxis;
this.yAxis = yAxis;
this.series = series;
}
@Override
public String toString() {
return "ChartEntity{" +
"title=" + title +
", feature=" + feature +
", legend=" + legend +
", xAxis=" + xAxis +
", yAxis=" + yAxis +
", series=" + series +
'}';
}
}

17
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/ChartParams.java

@ -0,0 +1,17 @@
package com.mh.common.core.domain.entity.chart;
import lombok.Data;
/**
* @author 铭汉科技LJF
* @date 2023-03-23 15:25
* @Description
*/
@Data
public class ChartParams {
private String beginTime;
private String endTime;
private String dayType;
private String charType;
private String chooseId;
}

31
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Feature.java

@ -0,0 +1,31 @@
package com.mh.common.core.domain.entity.chart;
import com.alibaba.fastjson2.annotation.JSONType;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-10
* @throws
*/
@Getter
@Setter
@JSONType(orders = {"state","tile","icon","name"})
public class Feature {
private boolean[] state;
private String[] title;
private String[] icon;
private String[] name;
private String[] yAxisName;
public Feature(boolean[] state, String[] title, String[] icon, String[] name, String[] yAxisName) {
this.state = state;
this.title = title;
this.icon = icon;
this.name = name;
this.yAxisName = yAxisName;
}
}

35
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/GetChartParams.java

@ -0,0 +1,35 @@
package com.mh.common.core.domain.entity.chart;
import lombok.Getter;
import lombok.Setter;
import java.util.Arrays;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-17
* @throws
*/
@Setter
@Getter
public class GetChartParams {
private int chartId;
private int[] chooseIndexId;
private String beginTime;
private String endTime;
private String type; // 'today' 'yesterday' 'twentyFourHour' 'thisWeek' 'fourWeek' 'twelveMonth' 'fourYear'
@Override
public String toString() {
return "GetChartParams{" +
"chartId=" + chartId +
", chooseIndexId=" + Arrays.toString(chooseIndexId) +
", beginTime='" + beginTime + '\'' +
", endTime='" + endTime + '\'' +
", type='" + type + '\'' +
'}';
}
}

30
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Legend.java

@ -0,0 +1,30 @@
package com.mh.common.core.domain.entity.chart;
import com.alibaba.fastjson2.annotation.JSONType;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-10
* @throws
*/
@Setter
@Getter
@JSONType(orders = {"data","width","indexId"})
public class Legend {
private String[] data;
private int width;
private int[] indexId;
public Legend() {
}
public Legend(String[] data, int width, int[] indexId) {
this.data = data;
this.width = width;
this.indexId = indexId;
}
}

21
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/LineStyle.java

@ -0,0 +1,21 @@
package com.mh.common.core.domain.entity.chart;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-10
* @throws
*/
@Setter
@Getter
public class LineStyle {
private String color;
public LineStyle(String color) {
this.color = color;
}
}

38
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Series.java

@ -0,0 +1,38 @@
package com.mh.common.core.domain.entity.chart;
import com.alibaba.fastjson2.annotation.JSONType;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-10
* @throws
*/
@Setter
@Getter
@JSONType(orders = {"name","type","yAxisIndex","data","sampling"})
public class Series {
private String name;
private String type;
private int yAxisIndex = 0;
private Double[] data;
private String sampling = "average";
public Series(String name, String type, int yAxisIndex, Double[] data) {
this.name = name;
this.type = type;
this.yAxisIndex = yAxisIndex;
this.data = data;
}
public Series(String name, String type, int yAxisIndex, Double[] data, String sampling) {
this.name = name;
this.type = type;
this.yAxisIndex = yAxisIndex;
this.data = data;
this.sampling = sampling;
}
}

21
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/SplitLine.java

@ -0,0 +1,21 @@
package com.mh.common.core.domain.entity.chart;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-10
* @throws
*/
@Setter
@Getter
public class SplitLine {
private boolean show;
public SplitLine(boolean show) {
this.show = show;
}
}

25
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Title.java

@ -0,0 +1,25 @@
package com.mh.common.core.domain.entity.chart;
import com.alibaba.fastjson2.annotation.JSONType;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-10
* @throws
*/
@Setter
@Getter
@JSONType(orders = {"state","name"})
public class Title {
private boolean state;
private String name;
public Title(boolean state, String name) {
this.state = state;
this.name = name;
}
}

16
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/ToolTip.java

@ -0,0 +1,16 @@
package com.mh.common.core.domain.entity.chart;
import lombok.Data;
/**
* @Author : Rainbow
* @date : 2023/7/11
*/
@Data
public class ToolTip {
private String trigger;
public ToolTip(String trigger) {
this.trigger = trigger;
}
}

37
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Unit.java

@ -0,0 +1,37 @@
package com.mh.common.core.domain.entity.chart;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description 单位实体类
* @updateTime 2020-07-13
* @throws
*/
@Setter
@Getter
public class Unit {
private int id;
private String unitName;
private String unit;
private String icon;
private String grade;
private String indexName;
private String otherName;
@Override
public String toString() {
return "Unit{" +
"id=" + id +
", unitName='" + unitName + '\'' +
", unit='" + unit + '\'' +
", icon='" + icon + '\'' +
", grade='" + grade + '\'' +
", indexName='" + indexName + '\'' +
", otherName='" + otherName + '\'' +
'}';
}
}

21
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/XAxis.java

@ -0,0 +1,21 @@
package com.mh.common.core.domain.entity.chart;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-10
* @throws
*/
@Setter
@Getter
public class XAxis {
private String[] data;
public XAxis(String[] data) {
this.data = data;
}
}

31
mh-common/src/main/java/com/mh/common/core/domain/entity/chart/YAxis.java

@ -0,0 +1,31 @@
package com.mh.common.core.domain.entity.chart;
import com.alibaba.fastjson2.annotation.JSONType;
import lombok.Getter;
import lombok.Setter;
/**
* @author LJF
* @title
* @description
* @updateTime 2020-07-10
* @throws
*/
@Setter
@Getter
@JSONType(orders = {"type","name","splitLine","axisLine","show"})
public class YAxis {
private String type;
private String name;
private SplitLine splitLine;
private AxisLine axisLine;
private boolean show;
public YAxis(String type, String name, SplitLine splitLine, AxisLine axisLine, boolean show) {
this.type = type;
this.name = name;
this.splitLine = splitLine;
this.axisLine = axisLine;
this.show = show;
}
}

53
mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageDataVO.java

@ -0,0 +1,53 @@
package com.mh.common.core.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 辅助计算类
* @date 2026-01-28 14:27:20
*/
@Data
public class CollectionParamsManageDataVO {
// getter方法
private String deviceName;
private String mtNum;
private Integer orderNum;
private String systemType;
private String deviceType;
private String otherName;
private String paramType;
private BigDecimal curValue;
private Date curTime;
private Integer grade;
private Integer status;
// 构造函数
public CollectionParamsManageDataVO(Map<String, Object> map) {
this.deviceName = (String) map.get("device_name");
this.mtNum = (String) map.get("mt_num");
this.orderNum = map.get("order_num") instanceof Integer ?
(Integer) map.get("order_num") :
(map.get("order_num") != null ? Integer.valueOf(map.get("order_num").toString()) : null);
this.systemType = (String) map.get("system_type");
this.deviceType = (String) map.get("device_type");
this.otherName = (String) map.get("other_name");
this.paramType = (String) map.get("param_type");
this.curValue = map.get("cur_value") instanceof BigDecimal ?
(BigDecimal) map.get("cur_value") :
(map.get("cur_value") != null ? new BigDecimal(map.get("cur_value").toString()) : BigDecimal.ZERO);
this.curTime = (Date) map.get("cur_time");
this.grade = map.get("grade") instanceof Integer ?
(Integer) map.get("grade") :
(map.get("grade") != null ? Integer.valueOf(map.get("grade").toString()) : null);
this.status = (Integer) map.get("status");
}
}

5
mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageVO.java

@ -46,6 +46,11 @@ public class CollectionParamsManageVO {
private int mtRatio; private int mtRatio;
/**
* 通信质量
*/
private String quality;
public BigDecimal getCurValue() { public BigDecimal getCurValue() {
return curValue; return curValue;
} }

5
mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceMonitorVO.java

@ -62,6 +62,11 @@ public class DeviceMonitorVO {
private int orderNum; private int orderNum;
/**
* 采集值质量
*/
private String quality;
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this) return new ToStringBuilder(this)

14
mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyConsumptionVO.java

@ -45,6 +45,20 @@ public class EnergyConsumptionVO implements Serializable {
*/ */
private String systemType; private String systemType;
/**
* 房间id
* @return
*/
private String houseId;
public String getHouseId() {
return houseId;
}
public void setHouseId(String houseId) {
this.houseId = houseId;
}
public String getSystemType() { public String getSystemType() {
return systemType; return systemType;
} }

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save