Compare commits

..

24 Commits

Author SHA1 Message Date
3067418132@qq.com bde7a2669c 1、参数设置改成可以设置小数 1 day ago
3067418132@qq.com 9e0bf9b7ee 1、添加日志 4 weeks ago
3067418132@qq.com 440eab0f8c 1、优化微信异常数据推送 1 month ago
3067418132@qq.com 455bc79c5a 1、增加收益分析相关接口逻辑处理 2 months ago
3067418132@qq.com 364886f4cc 1、热泵运行记录存储过程、查询接口、导出接口编写 2 months ago
3067418132@qq.com 668f8e3fb2 1、冷量修改成五分钟存储一次 2 months ago
3067418132@qq.com 1150bf4cac 1、温湿度传感器解析代码修复 2 months ago
3067418132@qq.com e43244596a 1、netty添加工厂策略。 2 months ago
3067418132@qq.com cc19ab5afd 1、修复液位控制 2 months ago
3067418132@qq.com 7dd7b9866d 1、水表接入系统 2 months ago
3067418132@qq.com 4a00010e3e 1、netty液位控制器采集解析程序; 2 months ago
3067418132@qq.com a12030c83c 1、PLC相关参数 2 months ago
3067418132@qq.com 9854414719 1、增加温湿度采集解析 2 months ago
3067418132@qq.com 63985b2bd8 1、增加循环泵相关数据展示; 3 months ago
3067418132@qq.com beb4bc866e 1、去掉log.info; 3 months ago
3067418132@qq.com 837e662c8d 1、热水系统监控界面显示内容接口更改; 3 months ago
3067418132@qq.com 2ceb622eb6 1、添加中央热水系统相关api; 3 months ago
25604 4fd5c674b5 1、主机监控、详情页数据优化 4 months ago
25604 1871e06353 1、减少日志打印; 6 months ago
25604 fc98e3bd6d 1、修复定时报警,数据处理问题; 10 months ago
25604 c83403c4cd 1、优化策略管理排序问题。 1 year ago
25604 5210bcdd58 1、报警添加微信通知功能,增加模板。 1 year ago
25604 ebabe3d17a 1、报警添加微信通知功能,增加模板。 1 year ago
25604 c4eaa3b97b 1、报警添加微信通知功能。 1 year ago
  1. BIN
      doc/节能改造每日能耗统计表.xlsx
  2. 357
      doc/项目信息管理API接口文档.md
  3. 8
      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. 14
      mh-admin/src/main/java/com/mh/web/controller/device/ChillersParamsController.java
  7. 41
      mh-admin/src/main/java/com/mh/web/controller/device/OperationController.java
  8. 58
      mh-admin/src/main/java/com/mh/web/controller/energy/HowWaterRevenueEnergyController.java
  9. 8
      mh-admin/src/main/java/com/mh/web/controller/energy/SysEnergyConsumptionController.java
  10. 44
      mh-admin/src/main/java/com/mh/web/controller/energy/SysEnergyQueryController.java
  11. 6
      mh-admin/src/main/java/com/mh/web/controller/monitor/CoolingSystemMonitorController.java
  12. 45
      mh-admin/src/main/java/com/mh/web/controller/monitor/ERSMonitorController.java
  13. 70
      mh-admin/src/main/java/com/mh/web/controller/monitor/HeatingPumpMonitorController.java
  14. 76
      mh-admin/src/main/java/com/mh/web/controller/monitor/HomeController.java
  15. 57
      mh-admin/src/main/java/com/mh/web/controller/monitor/SteamBoilerMonitorController.java
  16. 2
      mh-admin/src/main/java/com/mh/web/controller/mqtt/MqttSubsController.java
  17. 2
      mh-admin/src/main/java/com/mh/web/controller/mqtt/MqttTopicController.java
  18. 85
      mh-admin/src/main/java/com/mh/web/controller/project/ProjectInfoController.java
  19. 96
      mh-admin/src/main/java/com/mh/web/controller/report/ReportHeatingController.java
  20. 72
      mh-admin/src/main/java/com/mh/web/controller/report/ReportHotWaterController.java
  21. 131
      mh-admin/src/main/java/com/mh/web/controller/report/ReportMeterReadingsController.java
  22. 156
      mh-admin/src/main/java/com/mh/web/controller/report/ReportSteamController.java
  23. 100
      mh-admin/src/main/java/com/mh/web/controller/report/ReportSysController.java
  24. 8
      mh-admin/src/main/java/com/mh/web/controller/space/BuildingInfoController.java
  25. 2
      mh-admin/src/main/java/com/mh/web/controller/system/SysLoginController.java
  26. 16
      mh-admin/src/main/resources/application-dev.yml
  27. 2
      mh-admin/src/main/resources/application-druid.yml
  28. 26
      mh-admin/src/main/resources/application-prod.yml
  29. 12
      mh-admin/src/main/resources/application-test.yml
  30. 2
      mh-admin/src/main/resources/application.yml
  31. 46
      mh-admin/src/main/resources/logback.xml
  32. BIN
      mh-admin/src/main/resources/节能岛改造每日能耗统计表.xlsx
  33. 189
      mh-admin/src/test/java/com/mh/MHApplicationTest.java
  34. 40
      mh-admin/src/test/java/com/mh/web/controller/ai/AiFileControllerTest.java
  35. 52
      mh-admin/src/test/java/com/mh/web/controller/ai/FileNameEncodingTest.java
  36. 6
      mh-common/pom.xml
  37. 4
      mh-common/src/main/java/com/mh/common/config/wechat/WechatSignUtil.java
  38. 10
      mh-common/src/main/java/com/mh/common/constant/CacheConstants.java
  39. 5
      mh-common/src/main/java/com/mh/common/constant/Constants.java
  40. 15
      mh-common/src/main/java/com/mh/common/constant/DateConstant.java
  41. 232
      mh-common/src/main/java/com/mh/common/core/domain/dto/BFloorReportHotWaterDTO.java
  42. 74
      mh-common/src/main/java/com/mh/common/core/domain/dto/CompreReportDTO.java
  43. 29
      mh-common/src/main/java/com/mh/common/core/domain/dto/HotWaterNowDataDTO.java
  44. 77
      mh-common/src/main/java/com/mh/common/core/domain/dto/HotWaterRevenueSumDTO.java
  45. 284
      mh-common/src/main/java/com/mh/common/core/domain/dto/MaglevReportSysParamDTO.java
  46. 179
      mh-common/src/main/java/com/mh/common/core/domain/dto/ReportHeatingRunParamDTO.java
  47. 135
      mh-common/src/main/java/com/mh/common/core/domain/dto/ReportSteamRunParamDTO.java
  48. 172
      mh-common/src/main/java/com/mh/common/core/domain/dto/ThreeFloorReportHotWaterDTO.java
  49. 19
      mh-common/src/main/java/com/mh/common/core/domain/entity/AlarmRecords.java
  50. 1
      mh-common/src/main/java/com/mh/common/core/domain/entity/CpmSpaceRelation.java
  51. 81
      mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java
  52. 6
      mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceState.java
  53. 70
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyBaseSum.java
  54. 54
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyDaySum.java
  55. 54
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyMonthSum.java
  56. 54
      mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyYearSum.java
  57. 15
      mh-common/src/main/java/com/mh/common/core/domain/entity/HistoryEntity.java
  58. 274
      mh-common/src/main/java/com/mh/common/core/domain/entity/ProjectInfo.java
  59. 217
      mh-common/src/main/java/com/mh/common/core/domain/entity/ReportHeatingRunParamHis.java
  60. 54
      mh-common/src/main/java/com/mh/common/core/domain/entity/ReportHotWaterParamHis.java
  61. 114
      mh-common/src/main/java/com/mh/common/core/domain/entity/ReportMeterReadingsHis.java
  62. 170
      mh-common/src/main/java/com/mh/common/core/domain/entity/ReportSteamRunParamHis.java
  63. 2
      mh-common/src/main/java/com/mh/common/core/domain/entity/SysRole.java
  64. 2
      mh-common/src/main/java/com/mh/common/core/domain/entity/SysUser.java
  65. 20
      mh-common/src/main/java/com/mh/common/core/domain/entity/WeatherData.java
  66. 30
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/AxisLine.java
  67. 45
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/BaseChartEntity.java
  68. 54
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/ChartEntity.java
  69. 17
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/ChartParams.java
  70. 31
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Feature.java
  71. 35
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/GetChartParams.java
  72. 30
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Legend.java
  73. 21
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/LineStyle.java
  74. 38
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Series.java
  75. 21
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/SplitLine.java
  76. 25
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Title.java
  77. 16
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/ToolTip.java
  78. 37
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/Unit.java
  79. 21
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/XAxis.java
  80. 31
      mh-common/src/main/java/com/mh/common/core/domain/entity/chart/YAxis.java
  81. 53
      mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageDataVO.java
  82. 5
      mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageVO.java
  83. 6
      mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceMonitorVO.java
  84. 14
      mh-common/src/main/java/com/mh/common/core/domain/vo/EnergyConsumptionVO.java
  85. 67
      mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java
  86. 31
      mh-common/src/main/java/com/mh/common/core/page/TableDataInfo.java
  87. 9
      mh-common/src/main/java/com/mh/common/model/request/AdvantechDatas.java
  88. 74
      mh-common/src/main/java/com/mh/common/model/request/AdvantechJsonParser.java
  89. 39
      mh-common/src/main/java/com/mh/common/model/response/ParseResult.java
  90. 165
      mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java
  91. 18
      mh-common/src/main/java/com/mh/common/utils/BigDecimalUtils.java
  92. 50
      mh-common/src/main/java/com/mh/common/utils/DateUtils.java
  93. 36
      mh-common/src/main/java/com/mh/common/utils/ModbusUtils.java
  94. 6
      mh-common/src/main/java/com/mh/common/utils/SecurityUtils.java
  95. 5
      mh-common/src/main/java/com/mh/common/utils/SendOrderUtils.java
  96. 79
      mh-common/src/main/java/com/mh/common/utils/TableUtils.java
  97. 24
      mh-common/src/main/java/com/mh/common/utils/WeatherUtil.java
  98. 49
      mh-common/src/main/java/com/mh/common/utils/file/handle/ReportDayAndMonthParamHandler.java
  99. 15
      mh-common/src/main/java/com/mh/common/utils/http/HttpUtils.java
  100. 7
      mh-framework/pom.xml
  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

@ -1,357 +0,0 @@
# 项目信息管理 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` - 项目删除

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

@ -10,7 +10,6 @@ import com.mh.system.service.device.IGatewayManageService;
import com.mh.system.service.mqtt.IMqttSubscriptionService;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import java.util.List;
@ -24,7 +23,6 @@ import java.util.stream.Collectors;
* @date 2025-02-14 16:35:50
*/
@Component
@ConditionalOnProperty(prefix = "mqttSpring", name = "enabled", havingValue = "true", matchIfMissing = true)
public class MHRunner implements ApplicationRunner {
private final IMqttSubscriptionService iMqttSubscriptionService;
@ -45,11 +43,11 @@ public class MHRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
// 初始化mqtt订阅记录
// initializeMqttSubscription();
initializeMqttSubscription();
// 生成DTU采集参数
// createDtuCollectionParams();
createDtuCollectionParams();
// 启动netty服务端
// startNettyServer();
startNettyServer();
}
private void startNettyServer() {

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

@ -1,55 +0,0 @@
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,27 +91,4 @@ public class ProOverviewController extends BaseController {
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());
}
}

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

@ -52,15 +52,13 @@ public class ChillersParamsController extends BaseController {
*/
@GetMapping("/list")
public TableDataInfo list(CollectionParamsManage collectionParamsManage) {
collectionParamsManage.setIsUse(0);
List<CollectionParamsManage> list = iCollectionParamsManageService.selectCollectionParamsManageList(collectionParamsManage);
// list中的CollectionParamsManage中的other_name去掉“号主机”之前数据
list.forEach(item -> {
String otherName = item.getOtherName();
// 使用正则表达式去掉“号主机”及之前的内容
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);
});
// list中的CollectionParamsManage对象赋值到CollectionParamsManageVO2形成List<CollectionParamsManageVO2>
@ -70,10 +68,6 @@ public class ChillersParamsController extends BaseController {
CollectionParamsManageVO2 vo = new CollectionParamsManageVO2();
BeanUtils.copyProperties(item, vo);
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()) {
case "1": // 运行状态
@ -88,7 +82,7 @@ public class ChillersParamsController extends BaseController {
break;
case "5": // 故障
if (!StringUtils.isEmpty(vo.getCurValue())) {
vo.setCurValue(new BigDecimal(vo.getCurValue()).intValue() == 1 ? "故障" : "无故障");
vo.setCurValue(new BigDecimal(vo.getCurValue()).intValue() == 1 ? "故障" : "正常");
}
break;
case "6": // 手自动切换
@ -120,8 +114,8 @@ public class ChillersParamsController extends BaseController {
return map;
}).collect(Collectors.toList());
result.sort((map1, map2) -> {
Integer mtType1 = Integer.parseInt((String) map1.get("mtType"));
Integer mtType2 = Integer.parseInt((String) map2.get("mtType"));
Integer mtType1 = Integer.parseInt((String)map1.get("mtType"));
Integer mtType2 = Integer.parseInt((String)map2.get("mtType"));
return mtType1.compareTo(mtType2); // 升序
});
return getDataTable(result);

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

@ -40,17 +40,23 @@ public class OperationController extends BaseController {
@Autowired
private MHConfig mhConfig;
@Autowired
private ICollectionParamsManageService iCollectionParamsManageService;
private final ICollectionParamsManageService iCollectionParamsManageService;
@Autowired
private IOperationDeviceService iOperationService;
private final IOperationDeviceService iOperationService;
private final IMqttGatewayService iMqttGatewayService;
@Autowired(required = false)
private IMqttGatewayService iMqttGatewayService;
private final INettyService nettyService;
@Autowired
private INettyService nettyService;
public OperationController(ICollectionParamsManageService iCollectionParamsManageService,
IOperationDeviceService iOperationService,
IMqttGatewayService iMqttGatewayService, INettyService nettyService) {
this.iCollectionParamsManageService = iCollectionParamsManageService;
this.iOperationService = iOperationService;
this.iMqttGatewayService = iMqttGatewayService;
this.nettyService = nettyService;
}
/**
* 获取监控列表内容数据
@ -93,28 +99,13 @@ public class OperationController extends BaseController {
@ControlDeviceAno(value = "设备操作")
public AjaxResult operationDevice(@RequestBody List<OrderEntity> changeValues) {
try {
// 增加判断是否是昆仑通态触摸屏的MQTT设备
if (!iOperationService.isKuLunTouchScreen(changeValues)) {
String sendOrder = iOperationService.operationKLTTDevice(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 if (!iOperationService.isAdvanTech(changeValues)) {
// 判断id是否是DTU设备类型
// 判断id是否是DTU设备类型
if (!iOperationService.isAdvanTech(changeValues)) {
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未启用,无法发送控制指令");
}
iMqttGatewayService.publish(name + "/" + controlTopic, sendOrder, 1);
} else {
// 目前只有DTU设备需要发送4G指令
if (nettyService.sendOrder(changeValues)) {

58
mh-admin/src/main/java/com/mh/web/controller/energy/HowWaterRevenueEnergyController.java

@ -0,0 +1,58 @@
package com.mh.web.controller.energy;
import com.mh.common.core.controller.BaseController;
import com.mh.common.core.page.PageDomain;
import com.mh.common.core.page.TableDataInfo;
import com.mh.common.core.page.TableSupport;
import com.mh.system.service.energy.IEnergyQueryService;
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-05-13 08:37:12
*/
@RestController
@RequestMapping("/hot_water_revenue")
public class HowWaterRevenueEnergyController extends BaseController {
private final IEnergyQueryService energyQueryService;
public HowWaterRevenueEnergyController(IEnergyQueryService iEnergyQueryService) {
this.energyQueryService = iEnergyQueryService;
}
@GetMapping(value = "/energySum")
public TableDataInfo queryEnergySum(@RequestParam(value = "buildingId", required = false) String buildingId,
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate,
@RequestParam(value = "type", required = true) Integer type) {
startPage();
List<?> result = energyQueryService.queryRevenueEnergyDataSumList(buildingId, startDate, endDate, type);
return getDataTable(result);
}
@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.queryRevenueEnergyDataList(buildingId, startDate, endDate, type);
TableDataInfo dataTable = getDataTable(result);
// 或者总条数数据
PageDomain pageDomain = TableSupport.buildPageRequest();
pageDomain.setPageNum(0);
List<?> result1 = energyQueryService.queryRevenueEnergyDataList(buildingId, startDate, endDate, type);
dataTable.setTotal(result1.size());
return dataTable;
}
}

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

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

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

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

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

@ -111,10 +111,4 @@ public class CoolingSystemMonitorController extends BaseController {
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

@ -1,45 +0,0 @@
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

@ -1,70 +0,0 @@
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

@ -1,76 +0,0 @@
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();
}
}

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

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

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

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

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

@ -1,85 +0,0 @@
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

@ -1,96 +0,0 @@
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("下载报表异常");
}
}
}

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

@ -6,6 +6,7 @@ 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.FloorInfo;
import com.mh.common.core.domain.entity.ReportHotWaterParamHis;
import com.mh.common.core.domain.entity.ReportSysRunParamHis;
import com.mh.common.core.page.TableDataInfo;
@ -14,6 +15,7 @@ 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 com.mh.system.service.space.IFloorInfoService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@ -37,9 +39,12 @@ import java.util.stream.Collectors;
public class ReportHotWaterController extends BaseController {
private final IReportHotWaterService reportHotWaterService;
private final IFloorInfoService floorInfoService;
private ReportHotWaterController(IReportHotWaterService reportHotWaterService) {
private ReportHotWaterController(IReportHotWaterService reportHotWaterService, IFloorInfoService floorInfoService) {
this.reportHotWaterService = reportHotWaterService;
this.floorInfoService = floorInfoService;
}
@PostMapping("/list")
@ -48,6 +53,12 @@ public class ReportHotWaterController extends BaseController {
if (reportHotWaterParamHis.getPageNum() != 0) {
PageHelper.startPage(reportHotWaterParamHis.getPageNum(), reportHotWaterParamHis.getPageSize());
}
FloorInfo floorInfo = floorInfoService.selectFloorInfoById(reportHotWaterParamHis.getFloorId());
if (floorInfo == null) {
throw new IllegalArgumentException("Floor not found");
} else {
reportHotWaterParamHis.setFloorId(reportHotWaterParamHis.getFloorId() + "_" + floorInfo.getFloorName());
}
List<ReportHotWaterParamHis> list = reportHotWaterService.selectList(reportHotWaterParamHis);
return getDataTable(list);
}
@ -55,6 +66,12 @@ public class ReportHotWaterController extends BaseController {
@PutMapping("/edit")
public AjaxResult edit(@RequestBody ReportHotWaterParamHis reportHotWaterParamHis)
{
// FloorInfo floorInfo = floorInfoService.selectFloorInfoById(reportHotWaterParamHis.getFloorId());
// if (floorInfo == null) {
// throw new IllegalArgumentException("Floor not found");
// } else {
// reportHotWaterParamHis.setFloorId(reportHotWaterParamHis.getFloorId() + "_" + floorInfo.getFloorName());
// }
return toAjax(reportHotWaterService.updateRunParams(reportHotWaterParamHis));
}
@ -64,14 +81,21 @@ public class ReportHotWaterController extends BaseController {
try {
String fileName = "热水热泵运行记录表.xlsx";
String floorId = reportHotWaterParamHis.getFloorId();
FloorInfo floorInfo = floorInfoService.selectFloorInfoById(floorId);
if (floorInfo == null) {
throw new IllegalArgumentException("Floor not found");
} else {
floorId = floorId + "_" + floorInfo.getFloorName();
reportHotWaterParamHis.setFloorId(floorId);
}
String headTitle = "热水热泵运行记录表";
if (!StringUtils.isBlank(floorId)) {
if (floorId.contains("-1楼")) {
fileName = "-1楼热水热泵运行记录表.xlsx";
headTitle = "-1楼热水热泵运行记录表";
if (floorId.contains("楼")) {
fileName = "楼热水热泵运行记录表.xlsx";
headTitle = "楼热水热泵运行记录表";
} else {
fileName = "3楼热水热泵运行记录表.xlsx";
headTitle = "3楼热水热泵运行记录表";
fileName = "贵宾楼热水热泵运行记录表.xlsx";
headTitle = "贵宾楼热水热泵运行记录表";
}
}
// 从数据库获取数据
@ -83,7 +107,7 @@ public class ReportHotWaterController extends BaseController {
response.setCharacterEncoding("UTF-8");
ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler();
int headSize = 3;
if (floorId.contains("-1楼")) {
if (floorId.contains("贵宾楼")) {
List<BFloorReportHotWaterDTO> infoDTOS = list.stream().map(info -> {
BFloorReportHotWaterDTO deviceInfoDTO = new BFloorReportHotWaterDTO();
BeanUtils.copyProperties(info, deviceInfoDTO);
@ -92,10 +116,18 @@ public class ReportHotWaterController extends BaseController {
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 ? "运行" : "不运行");
deviceInfoDTO.setStatusRunHotPumpThreeStr(info.getStatusRunHotPumpThree() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpThreeStr(info.getStatusSwitchHotPumpThree() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunHotPumpFourStr(info.getStatusRunHotPumpFour() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpFourStr(info.getStatusSwitchHotPumpFour() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunHotPumpFiveStr(info.getStatusRunHotPumpFive() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpFiveStr(info.getStatusSwitchHotPumpFive() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunHotPumpSixStr(info.getStatusRunHotPumpSix() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpSixStr(info.getStatusSwitchHotPumpSix() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunHotPumpSevenStr(info.getStatusRunHotPumpSeven() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpSevenStr(info.getStatusSwitchHotPumpSeven() == 1 ? "开机" : "关机");
deviceInfoDTO.setStatusRunHotPumpEightStr(info.getStatusRunHotPumpEight() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusSwitchHotPumpEightStr(info.getStatusSwitchHotPumpEight() == 1 ? "开机" : "关机");
return deviceInfoDTO;
}).collect(Collectors.toList());
@ -115,14 +147,16 @@ public class ReportHotWaterController extends BaseController {
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 ? "运行" : "不运行");
deviceInfoDTO.setStatusRunCyclePumpOneStr(info.getStatusRunCyclePumpOne() == 1 ? "运行" : "不运行");
deviceInfoDTO.setStatusRunCyclePumpTwoStr(info.getStatusRunCyclePumpTwo() == 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());

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

@ -1,131 +0,0 @@
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

@ -1,156 +0,0 @@
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

@ -1,100 +0,0 @@
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("下载报表异常");
}
}
}

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

@ -94,13 +94,11 @@ public class BuildingInfoController extends BaseController {
* 获取楼栋管理列表内容数据
*/
@GetMapping("/hot_list")
public TableDataInfo hotWaterList(@RequestParam("systemType") String systemType)
public TableDataInfo hotWaterList()
{
List<Map<String, Object>> list = energyQueryService.queryFloorInfo(systemType);
List<Map<String, Object>> list = energyQueryService.queryFloorInfo();
// 在当前list首个坐标加个值
if (systemType.equals("1")) {
list.addFirst(Map.of("id", "所有", "building_name", "所有"));
}
list.addFirst(Map.of("id", "所有", "building_name", "所有"));
return getDataTable(list);
}

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

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

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

@ -1,11 +1,11 @@
# 项目相关配置
mh:
# 名称
name: bl_dev
name: MH
# 版本
version: 1.0.0
# 版权年份
copyrightYear: 2026
copyrightYear: 2024
# 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath)
profile: D:/mh/uploadPath
# 获取ip地址开关
@ -63,7 +63,7 @@ spring:
# 端口,默认为6379
port: 6379
# 数据库索引
database: 3
database: 0
# 密码
password:
# 连接超时时间
@ -84,7 +84,7 @@ spring:
port: 5672
username: eemcs
password: mh@803
virtual-host: /eemcs_bl_dev
virtual-host: /eemcs
listener:
direct:
prefetch: 2
@ -98,8 +98,8 @@ spring:
# 主库数据源
master:
#添加allowMultiQueries=true 在批量更新时才不会出错
url: jdbc:postgresql://127.0.0.1:5432/eemcs_blzj
# url: jdbc:postgresql://106.55.173.225:5505/eemcs
url: jdbc:postgresql://127.0.0.1:5432/eemcs_hw_dev
# url: jdbc:postgresql://127.0.0.1:5432/eemcs
username: postgres
password: mh@803
# 从库数据源
@ -188,8 +188,6 @@ xss:
urlPatterns: /system/*,/monitor/*,/tool/*
mqttSpring:
# 是否启用MQTT,默认false
enabled: false
# BASIC parameters are required.
BASIC:
protocol: MQTT
@ -202,7 +200,7 @@ mqttSpring:
# port: 1883
# username: sa
# password: sa123
client-id: mqtt_bl_producer_dev
client-id: mqtt_mz_producer_dev
# If the protocol is ws/wss, this value is required.
path:
# Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",".

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

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

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

@ -1,13 +1,13 @@
# 项目相关配置
mh:
# 名称
name: bl_eems
name: hw
# 版本
version: 1.0.0
# 版权年份
copyrightYear: 2026
copyrightYear: 2024
# 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath)
profile: D:/mh_data/uploadPath
profile: E:/mh/uploadPath
# 获取ip地址开关
addressEnabled: false
# 验证码类型 math 数字计算 char 字符验证
@ -16,7 +16,7 @@ mh:
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
port: 8091
port: 8090
servlet:
# 应用的访问路径
context-path: /
@ -63,7 +63,7 @@ spring:
# 端口,默认为6379
port: 6379
# 数据库索引
database: 1
database: 0
# 密码
password:
# 连接超时时间
@ -84,7 +84,7 @@ spring:
port: 5672
username: eemcs
password: mh@803
virtual-host: eems_bl
virtual-host: /eemcs
listener:
direct:
prefetch: 2
@ -98,8 +98,8 @@ spring:
# 主库数据源
master:
#添加allowMultiQueries=true 在批量更新时才不会出错
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_hw
# url: jdbc:postgresql://127.0.0.1:5505/eemcs
username: postgres
password: mhtech@803
# 从库数据源
@ -188,16 +188,14 @@ xss:
urlPatterns: /system/*,/monitor/*,/tool/*
mqttSpring:
# 是否启用MQTT,默认false
enabled: false
# BASIC parameters are required.
BASIC:
protocol: MQTT
host: mqtt.mhito.net
port: 1883
username: eemcs_gh_ers
password: mhtech@ghers
client-id: eemcs_gh_ers_mqtt_pro
username: sa
password: sa123
client-id: eemcs_hw_mqtt_pro
# If the protocol is ws/wss, this value is required.
path:
# Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",".
@ -210,7 +208,7 @@ mqttSpring:
port: 8083
path: /mqtt
control:
topic: mh_control/events_upload/devices/dev
topic: mh_control/events_upload/devices
amap:
key: fc4e79719daca2d0b8a11ba3124e1bd5

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

@ -1,11 +1,11 @@
# 项目相关配置
mh:
# 名称
name: gh_ers
name: MH
# 版本
version: 1.0.0
# 版权年份
copyrightYear: 2026
copyrightYear: 2024
# 文件路径 示例( Windows配置D:/mh/uploadPath,Linux配置 /home/mh/uploadPath)
profile: D:/mh/uploadPath
# 获取ip地址开关
@ -63,7 +63,7 @@ spring:
# 端口,默认为6379
port: 6379
# 数据库索引
database: 1
database: 0
# 密码
password:
# 连接超时时间
@ -98,7 +98,7 @@ spring:
# 主库数据源
master:
#添加allowMultiQueries=true 在批量更新时才不会出错
url: jdbc:postgresql://106.55.173.225:5505/eemcs_gh_ers_dev
url: jdbc:postgresql://106.55.173.225:5505/eemcs_hw
username: postgres
password: mhtech@803
# 从库数据源
@ -187,8 +187,6 @@ xss:
urlPatterns: /system/*,/monitor/*,/tool/*
mqttSpring:
# 是否启用MQTT,默认false
enabled: false
# BASIC parameters are required.
BASIC:
protocol: MQTT
@ -196,7 +194,7 @@ mqttSpring:
port: 2883
username: mh
password: mhtech@803
client-id: mqtt_gh_ers_producer_test
client-id: mqtt_mz_producer_dev
# If the protocol is ws/wss, this value is required.
path:
# Topics that need to be subscribed when initially connecting to mqtt, multiple topics are divided by ",".

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

@ -1,6 +1,6 @@
spring:
profiles:
active: dev
active: prod
# 用户配置
user:

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

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

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

Binary file not shown.

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

@ -2,33 +2,28 @@ package com.mh;
import com.alibaba.fastjson2.JSON;
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.SysParams;
import com.mh.common.core.domain.entity.SysUser;
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.StringUtils;
import com.mh.quartz.task.*;
import com.mh.quartz.task.DealDataTask;
import com.mh.quartz.task.GGDataTask;
import com.mh.quartz.task.GetWeatherDataTask;
import com.mh.quartz.task.HotWaterTask;
import com.mh.system.mapper.device.DataProcessMapper;
import com.mh.system.service.ISysParamsService;
import com.mh.system.service.ISysUserService;
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 org.checkerframework.checker.units.qual.A;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -42,7 +37,6 @@ import java.util.List;
@SpringBootTest
public class MHApplicationTest {
private static final Logger log = LoggerFactory.getLogger(MHApplicationTest.class);
@Autowired
private IDeviceQrManageService deviceQrManageService;
@ -52,146 +46,48 @@ public class MHApplicationTest {
@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("","");
public void hotWaterTask() {
hotWaterTask.calcEnergyData("2026-04-10 11:00:00");
}
@Test
public void setDealOnOrOffData() throws Exception {
dealOnOrOffData.dealDeviceLedger();
}
public void hotWaterTaskWithTimeRange() {
// 定义起始时间和结束时间
String startTimeStr = "2026-05-12 00:00:00";
String endTimeStr = "2026-05-12 23:00:00";
@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();
}
try {
java.time.LocalDateTime startTime = java.time.LocalDateTime.parse(startTimeStr,
java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
java.time.LocalDateTime endTime = java.time.LocalDateTime.parse(endTimeStr,
java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
@Test
public void testExecProMeterReadingsHis() {
meterReadingsHisService.execProMeterReadingsHis("2025-12-11");
}
java.time.LocalDateTime currentTime = startTime;
int count = 0;
@Test
public void createAlarmTask() {
alarmRecordsService.insertOrUpdateAlarmRecord("e1a3034edw6a9b3a79a86332886b24896");
}
while (!currentTime.isAfter(endTime)) {
String timeStr = currentTime.format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("正在处理时间: " + timeStr);
@Test
public void calcAnalysisData() {
for (int i = 9; i < 10; i++) {
hotWaterTask.calcAnalysisData("2025-07-0"+i);
}
}
try {
hotWaterTask.calcFloorEnergyData(timeStr);
count++;
} catch (Exception e) {
System.err.println("处理时间 " + timeStr + " 时发生错误: " + e.getMessage());
e.printStackTrace();
}
@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);
}
// 增加一小时
currentTime = currentTime.plusHours(1);
}
@Test
public void calcEnergyData() {
System.out.println("完成!共处理了 " + count + " 个时间点的数据");
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");
}
} catch (Exception e) {
System.err.println("时间范围处理过程中发生错误: " + e.getMessage());
e.printStackTrace();
}
}
@Test
@ -204,6 +100,14 @@ public class MHApplicationTest {
@Autowired
private DealDataTask dealDeviceData;
@Autowired
private GGDataTask gGDataTask;
@Test
public void gGDataTask() {
gGDataTask.calcWeatherData();
}
@Test
public void dealDeviceData() {
dealDeviceData.dealDeviceData();
@ -225,6 +129,13 @@ public class MHApplicationTest {
@Autowired
private ISysParamsService sysParamsService;
@Test
public void test1() {
BigDecimal bigDecimal = new BigDecimal(165);
bigDecimal = bigDecimal.multiply(new BigDecimal(550)).divide(new BigDecimal(1650)).subtract(new BigDecimal(40));
System.out.println(bigDecimal);
}
@Test
public void getWeatherInfo() {
getWeatherDataTask.getWeatherInfo();

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

@ -1,40 +0,0 @@
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

@ -1,52 +0,0 @@
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%_-]+"));
}
}
}

6
mh-common/pom.xml

@ -159,12 +159,6 @@
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</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>

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

@ -44,7 +44,7 @@ public class WechatSignUtil {
// 可选:将字节数组转换为Base64字符串,便于显示和传输
String base64Encoded = Base64.getEncoder().encodeToString(encodedHash);
log.info("SHA-1 (Base64 Encoded): {}", base64Encoded);
// log.info("SHA-1 (Base64 Encoded): {}", base64Encoded);
// 或者,直接以16进制形式输出
StringBuilder hexString = new StringBuilder();
@ -53,7 +53,7 @@ public class WechatSignUtil {
if(hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
log.info("SHA-1 (Hexadecimal): {}", hexString);
// 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,14 +41,4 @@ public class CacheConstants
* 登录账户密码错误次数 redis key
*/
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,8 +80,6 @@ public class Constants {
*/
public static final String SUPER_ADMIN = "mhtech";
public static final String SUPER_ADMIN_TWO = "18675333710";
/**
* 角色权限分隔符
*/
@ -185,13 +183,10 @@ public class Constants {
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 CHILLERS = "chillers";
public static final String BOILER = "boiler"; // 锅炉
public static final String OTHER = "other";
public static final String DEVICE = "devices";
public static final String CHILLERS_TYPE = "0"; // 主机类型设备
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 SEND_STATUS = false; // 指令发送状态
public static boolean FLAG = false;

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

@ -1,15 +0,0 @@
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");
}

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

@ -107,63 +107,231 @@ public class BFloorReportHotWaterDTO {
@ColumnWidth(10)
private String statusRunHotPumpTwoStr;
// 高区/裙楼设定压力(bar)
@ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "设定压力bar"}, index = 9)
/**
* 设定温度
*/
@ColumnWidth(10)
private BigDecimal presSetSupplyPumpAreaOne;
@ExcelProperty(value = {"${deviceType}", "3号热泵", "设定温度℃"}, index = 9)
private BigDecimal tempSetHotPumpThree;
// 高区/裙楼实际压力(bar)
@ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "实际压力bar"}, index = 10)
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "3号热泵", "实际温度℃"}, index = 10)
@ColumnWidth(10)
private BigDecimal presRealSupplyPumpAreaOne;
private BigDecimal tempRealHotPumpThree;
// 高区/裙楼1号泵运行状态
@ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "1号泵运行状态"}, index = 11)
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "3号热泵", "设备开关机"}, index = 11)
@ColumnWidth(10)
private String statusRunSupplyPumpOneStr;
private String statusSwitchHotPumpThreeStr;
// 高区/裙楼2号泵运行状态
@ExcelProperty(value = {"${deviceType}", "裙楼变频泵", "2号泵运行状态"}, index = 12)
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "3号热泵", "设备运行状态"}, index = 12)
@ColumnWidth(10)
private String statusRunSupplyPumpTwoStr;
private String statusRunHotPumpThreeStr;
// 中区/中厨设定压力(bar)
@ExcelProperty(value = {"${deviceType}", "中厨变频泵", "设定压力bar"}, index = 13)
/**
* 设定温度
*/
@ColumnWidth(10)
private BigDecimal presSetSupplyPumpAreaTwo;
@ExcelProperty(value = {"${deviceType}", "4号热泵", "设定温度℃"}, index = 13)
private BigDecimal tempSetHotPumpFour;
// 中区/中厨实际压力(bar)
@ExcelProperty(value = {"${deviceType}", "中厨变频泵", "实际压力bar"}, index = 14)
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "4号热泵", "实际温度℃"}, index = 14)
@ColumnWidth(10)
private BigDecimal presRealSupplyPumpAreaTwo;
private BigDecimal tempRealHotPumpFour;
// 中区/中厨1号泵运行状态
@ExcelProperty(value = {"${deviceType}", "中厨变频泵", "1号泵运行状态"}, index = 15)
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "4号热泵", "设备开关机"}, index = 15)
@ColumnWidth(10)
private String statusRunSupplyPumpThreeStr;
private String statusSwitchHotPumpFourStr;
// 中区/中厨2号泵运行状态
@ExcelProperty(value = {"${deviceType}", "中厨变频泵", "2号泵运行状态"}, index = 16)
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "4号热泵", "设备运行状态"}, index = 16)
@ColumnWidth(10)
private String statusRunSupplyPumpFourStr;
private String statusRunHotPumpFourStr;
// 高区/裙楼液位(米)
@ExcelProperty(value = {"${deviceType}", "水箱液位", "裙楼液位%"}, index = 17)
/**
* 设定温度
*/
@ColumnWidth(10)
private BigDecimal levelWaterTankOne;
@ExcelProperty(value = {"${deviceType}", "5号热泵", "设定温度℃"}, index = 17)
private BigDecimal tempSetHotPumpFive;
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "5号热泵", "实际温度℃"}, index = 18)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpFive;
// 中区/中厨液位(米)
@ExcelProperty(value = {"${deviceType}", "水箱液位", "中厨液位%"}, index = 18)
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "5号热泵", "设备开关机"}, index = 19)
@ColumnWidth(10)
private BigDecimal levelWaterTankTwo;
private String statusSwitchHotPumpFiveStr;
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "5号热泵", "设备运行状态"}, index = 20)
@ColumnWidth(10)
private String statusRunHotPumpFiveStr;
/**
* 设定温度
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "6号热泵", "设定温度℃"}, index = 21)
private BigDecimal tempSetHotPumpSix;
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "6号热泵", "实际温度℃"}, index = 22)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpSix;
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "6号热泵", "设备开关机"}, index = 23)
@ColumnWidth(10)
private String statusSwitchHotPumpSixStr;
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "6号热泵", "设备运行状态"}, index = 24)
@ColumnWidth(10)
private String statusRunHotPumpSixStr;
/**
* 设定温度
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "7号热泵", "设定温度℃"}, index = 25)
private BigDecimal tempSetHotPumpSeven;
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "7号热泵", "实际温度℃"}, index = 26)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpSeven;
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "7号热泵", "设备开关机"}, index = 27)
@ColumnWidth(10)
private String statusSwitchHotPumpSevenStr;
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "7号热泵", "设备运行状态"}, index = 28)
@ColumnWidth(10)
private String statusRunHotPumpSevenStr;
/**
* 设定温度
*/
@ColumnWidth(10)
@ExcelProperty(value = {"${deviceType}", "8号热泵", "设定温度℃"}, index = 29)
private BigDecimal tempSetHotPumpEight;
/**
* 实际温度
*/
@ExcelProperty(value = {"${deviceType}", "8号热泵", "实际温度℃"}, index = 30)
@ColumnWidth(10)
private BigDecimal tempRealHotPumpEight;
/**
* 设备开关机
*/
@ExcelProperty(value = {"${deviceType}", "8号热泵", "设备开关机"}, index = 31)
@ColumnWidth(10)
private String statusSwitchHotPumpEightStr;
/**
* 设备运行状态
*/
@ExcelProperty(value = {"${deviceType}", "8号热泵", "设备运行状态"}, index = 32)
@ColumnWidth(10)
private String statusRunHotPumpEightStr;
// // 高区/裙楼设定压力(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;
// 贵宾楼液位1(米)
@ExcelProperty(value = {"${deviceType}", "水箱液位", "水箱1液位(米)"}, index = 33)
@ColumnWidth(10)
private BigDecimal levelWaterTankOne;
// 主楼液位2(米)
// @ExcelProperty(value = {"${deviceType}", "水箱液位", "水箱2液位(米)"}, index = 34)
// @ColumnWidth(10)
// private BigDecimal levelWaterTankTwo;
// 巡查记录人
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 19)
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 34)
@ColumnWidth(20)
private String recorder;
// 备注信息
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 20)
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 35)
@ColumnWidth(20)
private String remark;

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

@ -1,74 +0,0 @@
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();
}
}

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

@ -20,14 +20,19 @@ public class HotWaterNowDataDTO {
private String pumpName; //热泵名称
private String tempSet; //水温设定
private String waterTemp; //水箱水温
private String runState; //运行状态
private String runState; //运行状态:0:关机,4:运行,9:待机
private String openCloseState;// 开关机状态 0:关机,4:制热
private String isFault; //是否故障
private String levelSet1; //水位设置
private String levelSet2; //水位设置
private String waterLevel1; //实际水位
private String waterLevel2; //实际水位
private String levelSet; //水位1设置
private String levelSet2; //水位2设置
private String waterLevel1; //实际1水位
private String waterLevel2; //实际2水位
private String tankId; //水箱编号
private String tankName; //水箱名称
private String tankWaterTemp; // 水箱1温度
private String tankWaterTemp2; // 水箱2温度
private String tankId2; //水箱2编号
private String tankName2; //水箱2名称
private String envTemp; //环境温度
private String upWaterState1; // 供水1泵状态
@ -38,18 +43,16 @@ public class HotWaterNowDataDTO {
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 backWaterState; // 回水状态
private String loopPumpState1; // 1循环泵状态:0:关机 1:运行 2:故障
private String loopPumpState2; // 2循环泵状态:0:关机 1:运行 2:故障
private String gatewayStatus; // 网关状态 0:离线,1:在线
private int orderNum;
}

77
mh-common/src/main/java/com/mh/common/core/domain/dto/HotWaterRevenueSumDTO.java

@ -0,0 +1,77 @@
package com.mh.common.core.domain.dto;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.util.StringJoiner;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水收益总的收益情况
* @date 2026-05-13 09:33:27
*/
@Setter
@Getter
public class HotWaterRevenueSumDTO {
/**
* 时间
*/
private String curDate;
/**
* 建筑id
*/
private String buildingId;
// 电表用量
private BigDecimal totalUseEleAmount;
// 电量单价
private BigDecimal electPrice;
// 用电金额
private BigDecimal totalUseEle;
// 水表用量
private BigDecimal totalUseWaterAmount;
// 水价
private BigDecimal waterPrice;
// 用水金额
private BigDecimal totalUseWater;
// 平均电表用量
private BigDecimal avgUseEle;
// 平均水表用量
private BigDecimal avgUseWater;
// 单耗
private BigDecimal unitConsumption;
// 收益总额
private BigDecimal totalIncome;
@Override
public String toString() {
return new StringJoiner(", ", HotWaterRevenueSumDTO.class.getSimpleName() + "[", "]")
.add("curDate='" + curDate + "'")
.add("buildingId='" + buildingId + "'")
.add("totalUseEleAmount=" + totalUseEleAmount)
.add("electPrice=" + electPrice)
.add("totalUseEle=" + totalUseEle)
.add("totalUseWaterAmount=" + totalUseWaterAmount)
.add("waterPrice=" + waterPrice)
.add("totalUseWater=" + totalUseWater)
.add("avgUseEle=" + avgUseEle)
.add("avgUseWater=" + avgUseWater)
.add("unitConsumption=" + unitConsumption)
.add("totalIncome=" + totalIncome)
.toString();
}
}

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

@ -1,284 +0,0 @@
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

@ -1,179 +0,0 @@
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

@ -1,135 +0,0 @@
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;
}

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

@ -107,103 +107,113 @@ public class ThreeFloorReportHotWaterDTO {
@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;
// // 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;
// 中区/中区1号泵运行状态
@ExcelProperty(value = {"${deviceType}", "中区变频泵", "1号泵运行状态"}, index = 23)
// 主楼与贵宾楼1号循环泵运行状态
@ExcelProperty(value = {"${deviceType}", "主楼与贵宾楼循环泵", "1号循环泵运行状态"}, index = 9)
@ColumnWidth(10)
private String statusRunSupplyPumpThreeStr;
private String statusRunCyclePumpOneStr;
// 中区/中区2号泵运行状态
@ExcelProperty(value = {"${deviceType}", "中区变频泵", "2号泵运行状态"}, index = 24)
// 主楼与贵宾楼2号循环泵运行状态
@ExcelProperty(value = {"${deviceType}", "主楼与贵宾楼循环泵", "2号循环泵运行状态"}, index = 10)
@ColumnWidth(10)
private String statusRunSupplyPumpFourStr;
private String statusRunCyclePumpTwoStr;
// 高区/高区液位(米)
@ExcelProperty(value = {"${deviceType}", "水箱液位", "高区液位%"}, index = 25)
// 主楼水箱1
@ExcelProperty(value = {"${deviceType}", "水箱液位", "水箱1液位(米)"}, index = 11)
@ColumnWidth(10)
private BigDecimal levelWaterTankOne;
// 中区/中区液位(米)
@ExcelProperty(value = {"${deviceType}", "水箱液位", "中区液位%"}, index = 26)
// 主楼水箱2
@ExcelProperty(value = {"${deviceType}", "水箱液位", "水箱2液位(米)"}, index = 12)
@ColumnWidth(10)
private BigDecimal levelWaterTankTwo;
// 巡查记录人
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 27)
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 13)
@ColumnWidth(20)
private String recorder;
// 备注信息
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 28)
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 14)
@ColumnWidth(20)
private String remark;

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

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

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

@ -84,7 +84,6 @@ public class CpmSpaceRelation extends BaseEntity {
public String toString() {
return new ToStringBuilder(this)
.append("id", id)
.append("ledgerId", ledgerId)
.append("cpmId", cpmId)
.append("areaId", areaId)
.append("buildingId", buildingId)

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

@ -110,87 +110,6 @@ public class DeviceLedger extends BaseEntity {
*/
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() {
return orderNum;
}

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

@ -1,8 +1,6 @@
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.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@ -15,13 +13,11 @@ import java.util.Date;
* @description 设备统计状态表
*/
@Data
@TableName("device_state")
public class DeviceState {
/**
* 当前时间
*/
@TableId(type = IdType.INPUT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date curDate;

70
mh-common/src/main/java/com/mh/common/core/domain/entity/EnergyBaseSum.java

@ -0,0 +1,70 @@
package com.mh.common.core.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 热水Sum基础类
* @date 2026-05-13 09:50:45
*/
@Data
public class EnergyBaseSum {
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;
}

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

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
@ -14,61 +15,12 @@ import java.math.BigDecimal;
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("energy_day_sum")
public class EnergyDaySum {
public class EnergyDaySum extends EnergyBaseSum {
@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;
}

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

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
@ -14,61 +15,12 @@ import java.math.BigDecimal;
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("energy_month_sum")
public class EnergyMonthSum {
public class EnergyMonthSum extends EnergyBaseSum {
@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;
}

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

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
@ -14,61 +15,12 @@ import java.math.BigDecimal;
* @description 热水时间能耗实体类
* @date 2025-06-18 14:28:30
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("energy_month_sum")
public class EnergyYearSum {
public class EnergyYearSum extends EnergyBaseSum {
@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;
}

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

@ -1,15 +0,0 @@
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;
}

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

@ -1,274 +0,0 @@
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

@ -1,217 +0,0 @@
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();
}
}

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

@ -99,6 +99,54 @@ public class ReportHotWaterParamHis extends BaseEntity implements Serializable {
// 4号热泵运行状态
private Integer statusRunHotPumpFour;
// 5号热泵设定温度(℃)
private BigDecimal tempSetHotPumpFive;
// 5号热泵实际温度(℃)
private BigDecimal tempRealHotPumpFive;
// 5号热泵启停状态(0-关闭,1-开启)
private Integer statusSwitchHotPumpFive;
// 5号热泵运行状态(0-故障,1-正常)
private Integer statusRunHotPumpFive;
// 6号热泵设定温度(℃)
private BigDecimal tempSetHotPumpSix;
// 6号热泵实际温度(℃)
private BigDecimal tempRealHotPumpSix;
// 6号热泵启停状态
private Integer statusSwitchHotPumpSix;
// 6号热泵运行状态
private Integer statusRunHotPumpSix;
// 7号热泵设定温度(℃)
private BigDecimal tempSetHotPumpSeven;
// 7号热泵实际温度(℃)
private BigDecimal tempRealHotPumpSeven;
// 7号热泵启停状态
private Integer statusSwitchHotPumpSeven;
// 7号热泵运行状态
private Integer statusRunHotPumpSeven;
// 8号热泵设定温度(℃)
private BigDecimal tempSetHotPumpEight;
// 8号热泵实际温度(℃)
private BigDecimal tempRealHotPumpEight;
// 8号热泵启停状态
private Integer statusSwitchHotPumpEight;
// 8号热泵运行状态
private Integer statusRunHotPumpEight;
// 高区/裙楼设定压力(MPa)
private BigDecimal presSetSupplyPumpAreaOne;
@ -128,6 +176,12 @@ public class ReportHotWaterParamHis extends BaseEntity implements Serializable {
// 中区/中厨液位(米)
private BigDecimal levelWaterTankTwo;
// 主楼与贵宾楼循环泵1
private Integer statusRunCyclePumpOne;
// 主楼与贵宾楼循环泵2
private Integer statusRunCyclePumpTwo;
// 巡查记录人
private String recorder;

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

@ -1,114 +0,0 @@
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

@ -1,170 +0,0 @@
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();
}
}

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)
{
return roleId != null && (1L == roleId || 10005L == roleId);
return roleId != null && 1L == roleId;
}
@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)
{
return userId != null && (1L == userId || 10005L == userId);
return userId != null && 1L == userId;
}
public Long getDeptId()

20
mh-common/src/main/java/com/mh/common/core/domain/entity/WeatherData.java

@ -77,6 +77,26 @@ public class WeatherData {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createdTime;
/**
* 含湿量 g/kg
*/
private Double humidityContent;
/**
* 焓值kJ/kg
*/
private Double enthalpy;
/**
* 露点温度摄氏度
*/
private Double dewPointTemp;
/**
* 湿球温度
*/
private Double wetBulbTemp;
@Override
public String toString() {
return new ToStringBuilder(this)

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

@ -1,30 +0,0 @@
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

@ -1,45 +0,0 @@
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

@ -1,54 +0,0 @@
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

@ -1,17 +0,0 @@
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

@ -1,31 +0,0 @@
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

@ -1,35 +0,0 @@
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

@ -1,30 +0,0 @@
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

@ -1,21 +0,0 @@
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

@ -1,38 +0,0 @@
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

@ -1,21 +0,0 @@
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

@ -1,25 +0,0 @@
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

@ -1,16 +0,0 @@
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

@ -1,37 +0,0 @@
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

@ -1,21 +0,0 @@
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

@ -1,31 +0,0 @@
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

@ -1,53 +0,0 @@
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,11 +46,6 @@ public class CollectionParamsManageVO {
private int mtRatio;
/**
* 通信质量
*/
private String quality;
public BigDecimal getCurValue() {
return curValue;
}

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

@ -62,10 +62,7 @@ public class DeviceMonitorVO {
private int orderNum;
/**
* 采集值质量
*/
private String quality;
private String gatewayId;
@Override
public String toString() {
@ -79,6 +76,7 @@ public class DeviceMonitorVO {
.append("collectValue", collectValue)
.append("paramType", paramType)
.append("orderNum", orderNum)
.append("gatewayId", gatewayId)
.toString();
}
}

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

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

67
mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java

@ -62,6 +62,21 @@ public class HotWaterControlVO {
private BigDecimal waterLevelSet;
private String waterLevelSetId;
// 水位设置 10
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0")
private BigDecimal waterLevelSet1;
private String waterLevelSetId1;
// 水位误差设置 46
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0")
private BigDecimal waterLevelErrorSet;
private String waterLevelErrorSetId;
// 水位误差设置 46
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0")
private BigDecimal waterLevelErrorSet1;
private String waterLevelErrorSetId1;
// 水位 11
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0.0")
private BigDecimal waterLevel;
@ -116,15 +131,65 @@ public class HotWaterControlVO {
private String emergencyStopStatusId;
// 最低设置值 44
private int minSet;
private BigDecimal minSet;
private String minSetId;
// 设定值上限
private BigDecimal maxValueSet;
private String maxValueSetId;
// 设定值下限
private BigDecimal minValueSet;
private String minValueSetId;
// 校准值
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0")
private BigDecimal calibrationValue;
private String calibrationValueId;
// 工程量最低值
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0")
private BigDecimal engineeringMinValue;
private String engineeringMinValueId;
// 工程量最高值
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0")
private BigDecimal engineeringMaxValue;
private String engineeringMaxValueId;
// 数字量最低值
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0")
private BigDecimal digitalMinValue;
private String digitalMinValueId;
// 数字量最高值
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0")
private BigDecimal digitalMaxValue;
private String digitalMaxValueId;
// 中间值
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0")
private BigDecimal middleValue;
private String middleValueId;
// 累积运行时长:小时单位
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0")
private BigDecimal runningTime;
private String runningTimeId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date curTime;
// 异常复位:45
private int exceptionReset;
private String exceptionResetId;
private int orderNum;
// 本地远程状态 22: 0-本地 1-远程
private int localRemoteStatus;
private String localRemoteStatusId;
public void setCounterSet(BigDecimal counterSet) {
if (counterSet != null) {
counterSet = counterSet.setScale(0, BigDecimal.ROUND_HALF_UP);

31
mh-common/src/main/java/com/mh/common/core/page/TableDataInfo.java

@ -1,9 +1,6 @@
package com.mh.common.core.page;
import com.mh.common.constant.HttpStatus;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
/**
@ -46,34 +43,6 @@ public class TableDataInfo implements Serializable
this.total = total;
}
/**
* 返回成功数据无分页
*
* @param data 数据对象
* @return TableDataInfo
*/
public static TableDataInfo ok(Object data)
{
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功");
rspData.setRows(Collections.singletonList(data));
return rspData;
}
/**
* 返回成功无数据
*
* @return TableDataInfo
*/
public static TableDataInfo ok()
{
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功");
return rspData;
}
public long getTotal()
{
return total;

9
mh-common/src/main/java/com/mh/common/model/request/AdvantechDatas.java

@ -10,7 +10,7 @@ import lombok.Data;
* @date 2025-01-22 14:47:25
*/
@Data
public class AdvantechDatas<T extends Number> {
public class AdvantechDatas<T extends Number> {
/**
* 对应研华的标签值
@ -27,11 +27,4 @@ public class AdvantechDatas<T extends Number> {
*/
private T quality;
public AdvantechDatas() {}
public AdvantechDatas(String tag, T value) {
this.tag = tag;
this.value = value;
}
}

74
mh-common/src/main/java/com/mh/common/model/request/AdvantechJsonParser.java

@ -1,74 +0,0 @@
package com.mh.common.model.request;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 昆仑通态触摸屏数据转换
* @date 2026-02-02 15:29:47
*/
public class AdvantechJsonParser {
/**
* 将JSON字符串解析为 AdvantechReceiver<AdvantechDatas<Number>>
* @param json 原始MQTT JSON
* @param defaultQuality quality默认值如192表示Good传null则不设置
* @return 解析后的接收对象
*/
public static AdvantechReceiver<AdvantechDatas<Number>> parse(
String json,
Number defaultQuality) {
JSONObject root = JSON.parseObject(json);
AdvantechReceiver<AdvantechDatas<Number>> receiver = new AdvantechReceiver<>();
// 1. 提取ts(保留原始字符串格式)
// "2026-02-02T18:33:57.712049"时间格式是这个,转成yyyy-MM-dd HH:mm:ss
root.put("ts", root.getString("ts").replace("T", " ").substring(0, 19));
receiver.setTs(root.getString("ts"));
// 2. 解析d数组:展开所有键值对 → AdvantechDatas
List<AdvantechDatas<Number>> dataList = new ArrayList<>();
JSONArray dArray = root.getJSONArray("d");
if (dArray != null) {
for (int i = 0; i < dArray.size(); i++) {
JSONObject item = dArray.getJSONObject(i);
if (item == null || item.isEmpty()) continue;
for (Map.Entry<String, Object> entry : item.entrySet()) {
String tag = entry.getKey();
Object val = entry.getValue();
if (val instanceof Number) {
AdvantechDatas<Number> data = new AdvantechDatas<>();
data.setTag(tag);
data.setValue((Number) val);
if (defaultQuality != null) {
data.setQuality(defaultQuality);
}
dataList.add(data);
}
// 非数值字段自动跳过(可扩展日志)
}
}
}
receiver.setD(dataList);
return receiver;
}
// 便捷重载:不设置quality
public static AdvantechReceiver<AdvantechDatas<Number>> parse(String json) {
return parse(json, 0);
}
}

39
mh-common/src/main/java/com/mh/common/model/response/ParseResult.java

@ -0,0 +1,39 @@
package com.mh.common.model.response;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
* @project EEMCS
* @description 定义统一的数据解析结果对象
* @date 2026-04-28 11:41:34
*/
@Data
public class ParseResult {
private boolean success;
private BigDecimal value;
private String tagName;
private int quality;
private String errorMessage;
public static ParseResult success(BigDecimal value, String tagName) {
ParseResult result = new ParseResult();
result.setSuccess(true);
result.setValue(value);
result.setTagName(tagName);
result.setQuality(0);
return result;
}
public static ParseResult fail(String errorMessage) {
ParseResult result = new ParseResult();
result.setSuccess(false);
result.setErrorMessage(errorMessage);
return result;
}
}

165
mh-common/src/main/java/com/mh/common/utils/AnalysisReceiveOrder485.java

@ -25,7 +25,7 @@ public class AnalysisReceiveOrder485 {
// private final DecimalFormat df = new DecimalFormat("#.##");
//解析冷量表
public String analysisCloudOrder485(final String dataStr1, final CollectionParamsManage deviceCodeParam) {
public void analysisCloudOrder485(final String dataStr1, final CollectionParamsManage deviceCodeParam) {
// 去掉空格
String dataStr = dataStr1.replace(" ", "").toUpperCase();
// 检验报文
@ -36,6 +36,9 @@ public class AnalysisReceiveOrder485 {
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) {
//创建SimpleDateFormat对象,指定样式 2019-05-13 22:39:30
// Date date = new Date();
// String dateStr = sdf1.format(date);
//保留两位小数处理
DecimalFormat decimalFormat = new DecimalFormat("0.00");
// 表号
@ -48,35 +51,25 @@ public class AnalysisReceiveOrder485 {
+ dataStr.substring(dataStr.length() - 10, dataStr.length() - 8);
String registerAddr = deviceCodeParam.getRegisterAddr();
// if (ExchangeStringUtil.isInDate(date, "00:00:00", "00:00:30")) {
// dateStr = dateStr.substring(0, 17) + "00";
// } else if (ExchangeStringUtil.isInDate(date, "00:00:30", "00:00:59")) {
// dateStr = dateStr.substring(0, 17) + "30";
// }
try {
if (registerAddr.equals("32")
|| registerAddr.equals("33")
|| registerAddr.equals("35")
|| registerAddr.equals("36")
|| registerAddr.equals("0001") // 慧创冷量计
|| registerAddr.equals("0003") // 慧创冷量计
|| registerAddr.equals("0033") // 慧创冷量计
|| registerAddr.equals("0035") // 慧创冷量计
|| registerAddr.equals("0121") // 慧创冷量计
) {
if (registerAddr.equals("32") || registerAddr.equals("33") || registerAddr.equals("35") || registerAddr.equals("36")) {
data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型
log.info("冷量计==>{},寄存器地址==>{},读数==>{}", cloudId, registerAddr, data);
// log.info("冷量计==>{},寄存器地址==>{},读数==>{}", cloudId, registerAddr, data);
} else if (registerAddr.equals("31") || registerAddr.equals("34")) {
long lData = Long.parseLong(ExchangeStringUtil.hexToDec(data));
log.info("冷量计==>{},寄存器地址==>{},累计读数==>{}", cloudId, registerAddr, lData);
}
// 判断data大于99999999,就返回空
if (new BigDecimal(data).intValue() > 99999999) {
return "";
// log.info("冷量计==>{},寄存器地址==>{},累计读数==>{}", cloudId, registerAddr, lData);
}
return data;
} catch (Exception e) {
log.error("保存冷量计数据失败!", e);
}
} else {
log.info("冷量计校验失败===>{}", dataStr);
// log.info("冷量计校验失败===>{}", dataStr);
}
return "";
}
/**
@ -120,7 +113,7 @@ public class AnalysisReceiveOrder485 {
try {
if (dataType == 3) {
data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型
log.info("水表==>{},寄存器地址==>{},读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
// log.info("水表==>{},寄存器地址==>{},读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
} else if (dataType == 2) {
data = dataStr.substring(dataStr.length() - 12, dataStr.length() - 10)
+ dataStr.substring(dataStr.length() - 10, dataStr.length() - 8)
@ -130,7 +123,7 @@ public class AnalysisReceiveOrder485 {
BigDecimal bigDecimal = new BigDecimal(data);
bigDecimal = bigDecimal.divide(new BigDecimal((int) Math.pow(10, deviceCodeParam.getDigits()))).setScale(2, RoundingMode.HALF_UP); // 除以1000并保留整数
data = bigDecimal.toString();
log.info("水表==>{},寄存器地址==>{},累计读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
// log.info("水表==>{},寄存器地址==>{},累计读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
}
// 判断data大于99999999,就返回空
if (new BigDecimal(data).intValue() > 99999999) {
@ -141,7 +134,7 @@ public class AnalysisReceiveOrder485 {
log.error("保存水表数据失败!", e);
}
} else {
log.info("水表===>{}", dataStr);
// log.info("水表===>{}", dataStr);
return "";
}
return "";
@ -172,7 +165,7 @@ public class AnalysisReceiveOrder485 {
DecimalFormat decimalFormat = new DecimalFormat("0.00");
// 表号
String cloudId = ExchangeStringUtil.hexToDec(dataStr.substring(0, 2));
// 读数
// 读数 02 04 04 00 04 4D 1F FD DD
String data = "";
data = dataStr.substring(dataStr.length() - 8, dataStr.length() - 6)
+ dataStr.substring(dataStr.length() - 6, dataStr.length() - 4)
@ -190,10 +183,20 @@ public class AnalysisReceiveOrder485 {
try {
if (dataType == 3) {
data = decimalFormat.format(Math.abs(ExchangeStringUtil.hexToSingle(data)));//十六进制字符串转IEEE754浮点型
log.info("电表==>{},寄存器地址==>{},读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
// log.info("电表==>{},寄存器地址==>{},读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
} else if (dataType == 2) {
data = ExchangeStringUtil.hexToDec(data);
log.info("电表==>{},寄存器地址==>{},累计读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
// log.info("电表==>{},寄存器地址==>{},累计读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
} else if (dataType == 4) {
data = dataStr.substring(dataStr.length() - 12, dataStr.length() - 10)
+ dataStr.substring(dataStr.length() - 10, dataStr.length() - 8)
+ dataStr.substring(dataStr.length() - 8, dataStr.length() - 6)
+ dataStr.substring(dataStr.length() - 6, dataStr.length() - 4);
data = ExchangeStringUtil.hexToDec(data);
BigDecimal bigDecimal = new BigDecimal(data);
bigDecimal = bigDecimal.divide(new BigDecimal((int) Math.pow(10, deviceCodeParam.getDigits()))).setScale(2, RoundingMode.HALF_UP); // 除以1000并保留整数
data = bigDecimal.toString();
// log.info("电表==>{},寄存器地址==>{},累计读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
}
// 判断data大于99999999,就返回空
if (new BigDecimal(data).intValue() > 99999999) {
@ -204,7 +207,7 @@ public class AnalysisReceiveOrder485 {
log.error("保存电表数据失败!", e);
}
} else {
log.info("电表===>{}", dataStr);
// log.info("电表===>{}", dataStr);
return "";
}
return "";
@ -277,13 +280,13 @@ public class AnalysisReceiveOrder485 {
)) {
data = ExchangeStringUtil.hexToDec(data);
}
log.info("热泵==>{},寄存器地址==>{},读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
// log.info("热泵==>{},寄存器地址==>{},读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
return data;
} catch (Exception e) {
log.error("保存热泵数据失败!", e);
}
} else {
log.info("热泵===>{}", dataStr);
// log.info("热泵===>{}", dataStr);
return "";
}
return "";
@ -324,7 +327,7 @@ public class AnalysisReceiveOrder485 {
BigDecimal bigDecimal = new BigDecimal(data);
bigDecimal = bigDecimal.divide(new BigDecimal((int) Math.pow(10, deviceCodeParam.getDigits()))).setScale(3, RoundingMode.HALF_UP); // 除以1000并保留整数
data = bigDecimal.toString();
log.info("液位==>{},寄存器地址==>{},实时读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
// log.info("液位==>{},寄存器地址==>{},实时读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
}
// 判断data大于99999999,就返回空
if (new BigDecimal(data).intValue() > 100) {
@ -335,9 +338,109 @@ public class AnalysisReceiveOrder485 {
log.error("保存液位数据失败!", e);
}
} else {
log.info("液位===>{}", dataStr);
// log.info("液位===>{}", dataStr);
return "";
}
return "";
}
public String analysisTempHumiditySensorOrder485(String receiveStr, CollectionParamsManage deviceCodeParam) {
// 去掉空格
String dataStr = receiveStr.replace(" ", "").toUpperCase();
// 检验报文
String checkStr = dataStr.substring(0, dataStr.length() - 4);
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr);
int checkNum = CRC16.CRC16_MODBUS(strOrder);
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum));
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) {
// 表号
String cloudId = ExchangeStringUtil.hexToDec(dataStr.substring(0, 2));
// 读数
String data = "";
data = dataStr.substring(dataStr.length() - 8, dataStr.length() - 4);
int dataType = deviceCodeParam.getDataType();
try {
if (dataType == 2) {
data = ExchangeStringUtil.hexToDec(data);
BigDecimal bigDecimal = new BigDecimal(data);
if (deviceCodeParam.getParamType().equals("12")){
// 温度
bigDecimal = bigDecimal.multiply(new BigDecimal(165)).divide(new BigDecimal(1650)).subtract(new BigDecimal(40));
} else if (deviceCodeParam.getParamType().equals("35")) {
// 湿度
bigDecimal = bigDecimal.multiply(new BigDecimal(100));
}
bigDecimal = bigDecimal.divide(new BigDecimal((int) Math.pow(10, deviceCodeParam.getDigits()))).setScale(3, RoundingMode.HALF_UP); // 除以1000并保留整数
data = bigDecimal.toString();
// log.info("液位==>{},寄存器地址==>{},实时读数==>{}", cloudId, deviceCodeParam.getRegisterAddr(), data);
}
// // 判断data大于99999999,就返回空
// if (new BigDecimal(data).intValue() > 130) {
// return "";
// }
return data;
} catch (Exception e) {
log.error("保存液位数据失败!", e);
}
} else {
// log.info("液位===>{}", dataStr);
return "";
}
return "";
}
public String analysisLiquidControlOrder485(String receiveStr, CollectionParamsManage deviceCodeParam) {
// log.error("接收数据:{},{}", receiveStr,deviceCodeParam.toString());
String dataStr = receiveStr.replace(" ", "").toUpperCase();
// 检验报文
String checkStr = dataStr.substring(0, dataStr.length() - 4);
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(checkStr);
int checkNum = CRC16.CRC16_MODBUS(strOrder);
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum));
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
if (checkWord.equalsIgnoreCase(dataStr.substring(dataStr.length() - 4))) {
// 表号
String cloudId = ExchangeStringUtil.hexToDec(dataStr.substring(0, 2));
// 读数
String data = "";
data = dataStr.substring(dataStr.length() - 12, dataStr.length() - 8);
// 保留小数位数
String dot = "";
dot = dataStr.substring(dataStr.length() - 8, dataStr.length() - 4);
int dataType = deviceCodeParam.getDataType();
try {
if (dataType == 2) {
data = ExchangeStringUtil.hexToDec(data);
dot = ExchangeStringUtil.hexToDec(dot);
BigDecimal bigDecimal = new BigDecimal(data);
bigDecimal = bigDecimal.divide(BigDecimal.valueOf(Math.pow(10, Integer.parseInt(dot)))).setScale(3, RoundingMode.HALF_UP); // 除以1000并保留整数
data = bigDecimal.toString();
// log.error("贵宾楼液位报文==>{},地址==>{},寄存器地址==>{},实时读数==>{}", receiveStr, cloudId, deviceCodeParam.getRegisterAddr(), data);
}
// 判断data大于99999999,就返回空
if (new BigDecimal(data).intValue() > 10) {
return "";
}
return data;
} catch (Exception e) {
log.error("保存液位数据失败!", e);
}
} else {
// log.info("液位===>{}", dataStr);
return "";
}
return "";
}
public static void main(String[] args) {
CollectionParamsManage collectionParamsManage = new CollectionParamsManage();
collectionParamsManage.setDataType(2);
collectionParamsManage.setDigits(2);
System.out.println(new AnalysisReceiveOrder485().analysisWaterOrder485("2103040012D68765F6", collectionParamsManage));
}
}

18
mh-common/src/main/java/com/mh/common/utils/BigDecimalUtils.java

@ -42,22 +42,4 @@ public class BigDecimalUtils {
}
return predicate.test(a, b);
}
public static void main(String[] args) {
BigDecimal a = new BigDecimal("10.00");
BigDecimal b = new BigDecimal("10.00");
System.out.println(compare(">", a, b));
System.out.println(compare(">=", a, b));
System.out.println(compare("<", a, b));
System.out.println(compare("<=", a, b));
System.out.println(compare("==", a, b));
System.out.println(compare("!=", a, b));
String dataStr = "01030406513F9E3B32";
String data = dataStr.substring(dataStr.length() - 8, dataStr.length() - 6)
+ dataStr.substring(dataStr.length() - 6, dataStr.length() - 4)
+ dataStr.substring(dataStr.length() - 12, dataStr.length() - 10)
+ dataStr.substring(dataStr.length() - 10, dataStr.length() - 8);
System.out.println(data);
}
}

50
mh-common/src/main/java/com/mh/common/utils/DateUtils.java

@ -39,17 +39,6 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
/**
* 判断日期是否为今天
*/
public static boolean isToday(Date date) {
if (date == null) return false;
LocalDate localDate = date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
return localDate.equals(LocalDate.now());
}
public static String localDateToStr(LocalDateTime timeType) {
return timeType.format(DATE_TIME_FORMATTER);
}
@ -517,4 +506,43 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
}
return null;
}
public static int dayDiff(String startDate, String endDate) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date start = sdf.parse(startDate);
Date end = sdf.parse(endDate);
long diff = (end.getTime() - start.getTime()) / (24 * 60 * 60 * 1000);
return Math.abs((int) diff) + 1;
} catch (ParseException e) {
return 0;
}
}
public static int monthDiff(String startDate, String endDate) {
try {
if (startDate == null || endDate == null || startDate.isEmpty() || endDate.isEmpty()) {
return 0;
}
LocalDate start = LocalDate.parse(startDate + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate end = LocalDate.parse(endDate + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
Period period = Period.between(start, end);
int months = period.getYears() * 12 + period.getMonths();
return Math.abs(months)+1;
} catch (Exception e) {
return 0;
}
}
public static int yearDiff(String startDate, String endDate) {
try {
// startDate和endDate传入的值是“yyyy”
return Math.abs(Integer.parseInt(endDate) - Integer.parseInt(startDate))+1;
} catch (Exception e) {
return 0;
}
}
}

36
mh-common/src/main/java/com/mh/common/utils/ModbusUtils.java

@ -5,6 +5,8 @@ import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
/**
* @author LJF
* @version 1.0
@ -32,7 +34,7 @@ public class ModbusUtils {
public static String createControlCode(String mtCode, Integer type, String registerAddr, String param) {
String orderStr;
mtCode = ExchangeStringUtil.addZeroForNum(mtCode, 2);
mtCode = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(mtCode), 2);
registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4);
param = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(param), 4);
orderStr = mtCode + "06" + registerAddr + param;
@ -41,7 +43,7 @@ public class ModbusUtils {
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum));
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
// 发送的指令
log.info("发送指令:{}", orderStr+checkWord);
// log.info("发送指令:{}", orderStr+checkWord);
return orderStr + checkWord;
}
@ -64,4 +66,34 @@ public class ModbusUtils {
buffer.writeBytes(ExchangeStringUtil.hexStrToBinaryStr(sendStr));//对接需要16进制
return buffer;
}
public static String createTenControlCode(String mtCode, Integer type, String registerAddr, Integer digits, String param) {
// 14 10 01 08 00 02 04 07 08 00 03 7A 22
// 14:地址:mtCode
// 10:功能码
// 01 08:寄存器地址 registerAddr
// 寄存器大小: 00 02
// 04:数据长度
// 07 08:数据值
// 00 03:小数位数 digits
// 7A 22:校验码
String orderStr;
mtCode = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(mtCode), 2);
registerAddr = ExchangeStringUtil.addZeroForNum(registerAddr, 4);
param = String.valueOf(new BigDecimal(param).multiply(BigDecimal.valueOf(Math.pow(10, digits))).intValue());
param = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(param), 4);
String dot = ExchangeStringUtil.addZeroForNum(ExchangeStringUtil.decToHex(String.valueOf(digits)), 4);
orderStr = mtCode + "10" + registerAddr + "0002" + "04" + param + dot;
byte[] strOrder = ExchangeStringUtil.hexStrToBinaryStr(orderStr);
int checkNum = CRC16.CRC16_MODBUS(strOrder);
String checkWord = ExchangeStringUtil.decToHex(String.valueOf(checkNum));
checkWord = checkWord.substring(2, 4) + checkWord.substring(0, 2);
// 发送的指令
return orderStr+checkWord;
}
public static void main(String[] args) {
System.out.println(createTenControlCode("20", 1, "0108", 3, "2.1"));
}
}

6
mh-common/src/main/java/com/mh/common/utils/SecurityUtils.java

@ -102,7 +102,7 @@ public class SecurityUtils {
* @return 结果
*/
public static boolean isAdmin(Long userId) {
return userId != null && (1L == userId ||10005L == userId);
return userId != null && 1L == userId;
}
/**
@ -148,9 +148,7 @@ public class SecurityUtils {
*/
public static boolean hasRole(Collection<String> roles, String role) {
return roles.stream().filter(StringUtils::hasText)
.anyMatch(x -> Constants.SUPER_ADMIN.equals(x)
|| Constants.SUPER_ADMIN_TWO.equals(x)
|| PatternMatchUtils.simpleMatch(x, role));
.anyMatch(x -> Constants.SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role));
}
}

5
mh-common/src/main/java/com/mh/common/utils/SendOrderUtils.java

@ -19,9 +19,6 @@ public class SendOrderUtils {
public static void sendAllOrder(CollectionParamsManage paramsManage, ChannelHandlerContext ctx, int num, int size) {
// 开始创建指令
String mtCode = paramsManage.getMtCode(); // 采集编号
if (paramsManage.getParamType().equals("17")) {
mtCode = paramsManage.getMtNum();
}
String funCode = paramsManage.getFuncCode(); // 功能码
String registerAddr = paramsManage.getRegisterAddr(); // 寄存器地址
String registerNum = String.valueOf(paramsManage.getRegisterSize()); // 寄存器数量
@ -38,7 +35,7 @@ public class SendOrderUtils {
ByteBuf buffer = getByteBuf(ctx, sendOrderStr);
// 发送数据
ctx.channel().writeAndFlush(buffer);
log.info("sends :{},num:{},records:{}", sendOrderStr, num, size);
// log.info("sends :" + sendOrderStr + ",num:" + num + ",records:" + size);
try {
Thread.sleep(500);
} catch (InterruptedException e) {

79
mh-common/src/main/java/com/mh/common/utils/TableUtils.java

@ -1,79 +0,0 @@
package com.mh.common.utils;
import java.util.ArrayList;
import java.util.List;
/**
* @Author : Rainbow
* @date : 2023/7/10
*/
public class TableUtils {
/**
* 主机
*/
public final static String CHILLER = "chiller";
/**
* 电表等参数
*/
public final static String DEVICE = "device";
/**
* 返回表明列表
*
* @param dateType 分钟小时日月年
* @param dataType 主机参数电表等参数
* @param startTime 开始时间
* @param endTime 结束时间
* @return 表名集合
*/
public static List<String> getTableName(String dateType, String dataType, String startTime, String endTime) {
int start = Integer.parseInt(startTime.substring(0, 4));
int end = Integer.parseInt(endTime.substring(0, 4));
if (end < start) {
throw new RuntimeException("时间不正确");
}
List<String> tabNames = new ArrayList<>();
StringBuilder tableName = new StringBuilder();
for (int i = start; i <= end; i++) {
//清空
tableName.setLength(0);
switch (dataType){
case CHILLER:
tableName.append("chillers_data_").append(dateType).append(i);
break;
case DEVICE:
tableName.append("data_").append(dateType).append(i);
break;
default:
break;
}
tabNames.add(tableName.toString());
}
return tabNames;
}
/**
* 返回表名字
*
* @param dateType 分钟小时日月年
* @param dataType 主机参数电表等参数
* @param date 时间
* @return 一个表名
*/
public static String getTableName(String dateType, String dataType, String date) {
StringBuilder tableName = new StringBuilder();
switch (dataType) {
case CHILLER:
tableName.append("chillers_data_");
break;
case DEVICE:
tableName.append("data_");
break;
default:
break;
}
tableName.append(dateType).append(date.substring(0, 4));
return tableName.toString();
}
}

24
mh-common/src/main/java/com/mh/common/utils/WeatherUtil.java

@ -2,9 +2,6 @@ package com.mh.common.utils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* @author LJF
@ -19,27 +16,6 @@ public class WeatherUtil {
private static final double A = 17.27;
private static final double B = 237.7;
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
/**
* 根据日期字符串yyyy-MM-dd获取星期几中文
*/
public static String getWeek(String dateStr) {
LocalDate date = LocalDate.parse(dateStr, DATE_FORMATTER);
DayOfWeek dayOfWeek = date.getDayOfWeek();
switch (dayOfWeek) {
case MONDAY: return "星期一";
case TUESDAY: return "星期二";
case WEDNESDAY: return "星期三";
case THURSDAY: return "星期四";
case FRIDAY: return "星期五";
case SATURDAY: return "星期六";
case SUNDAY: return "星期日";
default: return "未知";
}
}
public double E(double t) {
// 饱和水汽压:E(t)=611.2exp(17.67t/(243.5+t))
return 611.2 * Math.exp(17.67 * t / (243.5 + t));

49
mh-common/src/main/java/com/mh/common/utils/file/handle/ReportDayAndMonthParamHandler.java

@ -1,49 +0,0 @@
package com.mh.common.utils.file.handle;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.Row;
import org.springframework.util.PropertyPlaceholderHelper;
import java.util.List;
import java.util.Properties;
/**
* @author LJF
* @version 1.0
* @project NewZhujiang_Server
* @description 报表handle
* @date 2024-05-31 17:36:38
*/
public class ReportDayAndMonthParamHandler implements CellWriteHandler {
private final String title;
private final String value;
PropertyPlaceholderHelper placeholderHelper = new PropertyPlaceholderHelper("${", "}");
public ReportDayAndMonthParamHandler(String value, String title) {
this.title = title;
this.value = value;
}
@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {
if (head != null) {
List<String> headNameList = head.getHeadNameList();
if (CollectionUtils.isNotEmpty(headNameList)) {
Properties properties = new Properties();
properties.setProperty(title, value);
for (int i = 0; i < headNameList.size(); i++) {
headNameList.set(i, placeholderHelper.replacePlaceholders(headNameList.get(i), properties));
}
}
}
}
}

15
mh-common/src/main/java/com/mh/common/utils/http/HttpUtils.java

@ -69,7 +69,7 @@ public class HttpUtils
try
{
String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
log.info("sendGet - {}", urlNameString);
// log.info("sendGet - {}", urlNameString);
URL realUrl = new URL(urlNameString);
URLConnection connection = realUrl.openConnection();
connection.setRequestProperty("accept", "*/*");
@ -82,7 +82,7 @@ public class HttpUtils
{
result.append(line);
}
log.info("recv - {}", result);
// log.info("recv - {}", result);
}
catch (ConnectException e)
{
@ -131,15 +131,14 @@ public class HttpUtils
StringBuilder result = new StringBuilder();
try
{
log.info("sendPost - {}", url);
log.info("sendPost param - {}", param);
// log.info("sendPost - {}", url);
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
conn.setRequestProperty("Accept-Charset", "utf-8");
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
conn.setRequestProperty("contentType", "utf-8");
conn.setDoOutput(true);
conn.setDoInput(true);
out = new PrintWriter(conn.getOutputStream());
@ -151,7 +150,7 @@ public class HttpUtils
{
result.append(line);
}
log.info("recv - {}", result);
// log.info("recv - {}", result);
}
catch (ConnectException e)
{
@ -196,7 +195,7 @@ public class HttpUtils
String urlNameString = url + "?" + param;
try
{
log.info("sendSSLPost - {}", urlNameString);
// log.info("sendSSLPost - {}", urlNameString);
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
URL console = new URL(urlNameString);
@ -222,7 +221,7 @@ public class HttpUtils
result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
}
}
log.info("recv - {}", result);
// log.info("recv - {}", result);
conn.disconnect();
br.close();
}

7
mh-framework/pom.xml

@ -64,13 +64,6 @@
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.4.8-jre</version>
</dependency>
</dependencies>
</project>

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

Loading…
Cancel
Save