Compare commits
57 Commits
dev
...
dev_bl_new
| Author | SHA1 | Date |
|---|---|---|
|
|
0579af014f | 3 months ago |
|
|
fc450900c7 | 3 months ago |
|
|
d6f030e552 | 3 months ago |
|
|
12e93c9b78 | 3 months ago |
|
|
3b25a9e235 | 3 months ago |
|
|
1b27a0c287 | 3 months ago |
|
|
f81769b738 | 3 months ago |
|
|
0288f2cffb | 4 months ago |
|
|
e5e5cee85a | 4 months ago |
|
|
786da07f68 | 4 months ago |
|
|
0a76509188 | 5 months ago |
|
|
a383aa7cd7 | 5 months ago |
|
|
cc1a258a4f | 5 months ago |
|
|
981ddd6126 | 6 months ago |
|
|
577e98b7b3 | 6 months ago |
|
|
c9e81f4ab0 | 6 months ago |
|
|
da80ade668 | 6 months ago |
|
|
1d132511c6 | 6 months ago |
|
|
a4739b576f | 6 months ago |
|
|
bf81ca52c9 | 6 months ago |
|
|
1be07e2157 | 6 months ago |
|
|
e0df3ad93a | 7 months ago |
|
|
22ce82f641 | 7 months ago |
|
|
90f667ca72 | 7 months ago |
|
|
2b9f736dbb | 7 months ago |
|
|
bc2ab582ea | 7 months ago |
|
|
6046c172a6 | 7 months ago |
|
|
bc7087a559 | 7 months ago |
|
|
42b108d055 | 7 months ago |
|
|
fe759a75f4 | 7 months ago |
|
|
f0ecb0f048 | 8 months ago |
|
|
3c02d03a12 | 8 months ago |
|
|
60a954bcd3 | 8 months ago |
|
|
4d64b681a9 | 8 months ago |
|
|
99501add71 | 8 months ago |
|
|
3754345b3d | 9 months ago |
|
|
f8dad021d8 | 9 months ago |
|
|
0c0cf2bdf1 | 9 months ago |
|
|
77124eff14 | 9 months ago |
|
|
5fb572cd4d | 9 months ago |
|
|
3ee23dea5a | 9 months ago |
|
|
5167e0c702 | 10 months ago |
|
|
9b4d5faf18 | 10 months ago |
|
|
d2c9fca950 | 10 months ago |
|
|
065e8df394 | 11 months ago |
|
|
ff709ec621 | 11 months ago |
|
|
4d696317f2 | 11 months ago |
|
|
b8d5667431 | 11 months ago |
|
|
4ad037f002 | 11 months ago |
|
|
dcc9307d54 | 11 months ago |
|
|
e457861976 | 11 months ago |
|
|
81c8a35c76 | 11 months ago |
|
|
6973b889c8 | 11 months ago |
|
|
36d60e0b79 | 12 months ago |
|
|
1603247df1 | 12 months ago |
|
|
b22ba182dc | 12 months ago |
|
|
d268edfce2 | 12 months ago |
199 changed files with 11543 additions and 2814 deletions
Binary file not shown.
@ -0,0 +1,84 @@ |
|||||||
|
package com.mh.web.controller.ai; |
||||||
|
|
||||||
|
import com.mh.common.config.MHConfig; |
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import org.springframework.core.io.FileSystemResource; |
||||||
|
import org.springframework.core.io.Resource; |
||||||
|
import org.springframework.http.HttpHeaders; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.PathVariable; |
||||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
|
||||||
|
/** |
||||||
|
* AI文件下载控制器 |
||||||
|
* 处理AI生成的报表文件下载请求 |
||||||
|
* |
||||||
|
* @author mh |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/ai/files") |
||||||
|
public class AiFileController extends BaseController { |
||||||
|
|
||||||
|
/** |
||||||
|
* 下载AI生成的文件 |
||||||
|
* |
||||||
|
* @param filename 文件名 |
||||||
|
* @return 文件响应 |
||||||
|
*/ |
||||||
|
@GetMapping("/{filename:.+}") |
||||||
|
public ResponseEntity<Resource> downloadFile(@PathVariable String filename) { |
||||||
|
return getResourceResponseEntity(filename); |
||||||
|
} |
||||||
|
|
||||||
|
private ResponseEntity<Resource> getResourceResponseEntity(@PathVariable String filename) { |
||||||
|
try { |
||||||
|
// 构建文件路径
|
||||||
|
String storageDir = MHConfig.getProfile(); |
||||||
|
File file = new File(storageDir, filename); |
||||||
|
|
||||||
|
// 检查文件是否存在
|
||||||
|
if (!file.exists()) { |
||||||
|
return ResponseEntity.notFound().build(); |
||||||
|
} |
||||||
|
|
||||||
|
// 创建资源
|
||||||
|
Resource resource = new FileSystemResource(file); |
||||||
|
|
||||||
|
// 使用RFC 5987标准格式,支持UTF-8编码
|
||||||
|
String encodedFileName = URLEncoder.encode(filename, StandardCharsets.UTF_8); |
||||||
|
String disposition = String.format("attachment; filename*=UTF-8''%s", encodedFileName); |
||||||
|
|
||||||
|
HttpHeaders headers = new HttpHeaders(); |
||||||
|
headers.add(HttpHeaders.CONTENT_DISPOSITION, disposition); |
||||||
|
headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, HttpHeaders.CONTENT_DISPOSITION); |
||||||
|
|
||||||
|
return ResponseEntity.ok() |
||||||
|
.headers(headers) |
||||||
|
.contentLength(file.length()) |
||||||
|
.contentType(MediaType.APPLICATION_OCTET_STREAM) |
||||||
|
.body(resource); |
||||||
|
|
||||||
|
} catch (Exception e) { |
||||||
|
return ResponseEntity.internalServerError().build(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 设备分析导出 |
||||||
|
* |
||||||
|
* @param filename 文件名 |
||||||
|
* @return 文件响应 |
||||||
|
*/ |
||||||
|
@PostMapping("/{filename:.+}") |
||||||
|
public ResponseEntity<Resource> deviceAnalyzeExport(@PathVariable String filename) { |
||||||
|
return getResourceResponseEntity(filename); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,48 @@ |
|||||||
|
package com.mh.web.controller.ai; |
||||||
|
|
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.domain.dto.AsyncTaskDTO; |
||||||
|
import com.mh.system.service.ai.impl.AsyncReportServiceImpl; |
||||||
|
import com.mh.system.service.ai.impl.TaskStoreService; |
||||||
|
import org.springframework.http.MediaType; |
||||||
|
import org.springframework.http.ResponseEntity; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; |
||||||
|
|
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 一步报表controller |
||||||
|
* @date 2026-02-27 11:36:57 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/ai/reports/async") |
||||||
|
public class AsyncReportController extends BaseController { |
||||||
|
private final AsyncReportServiceImpl asyncReportService; |
||||||
|
private final TaskStoreService taskStore; |
||||||
|
|
||||||
|
public AsyncReportController(AsyncReportServiceImpl asyncReportService, TaskStoreService taskStore) { |
||||||
|
this.asyncReportService = asyncReportService; |
||||||
|
this.taskStore = taskStore; |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping |
||||||
|
public ResponseEntity<Map<String, String>> submitTask(@RequestBody String userMessage) { |
||||||
|
String taskId = asyncReportService.createAsyncTask(userMessage); |
||||||
|
return ResponseEntity.accepted().body(Map.of("taskId", taskId)); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping(value = "/{taskId}/subscribe", produces = MediaType.TEXT_EVENT_STREAM_VALUE) |
||||||
|
public SseEmitter subscribe(@PathVariable String taskId) { |
||||||
|
return asyncReportService.registerEmitter(taskId); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/{taskId}") |
||||||
|
public ResponseEntity<AsyncTaskDTO> getTask(@PathVariable String taskId) { |
||||||
|
AsyncTaskDTO task = taskStore.get(taskId); |
||||||
|
return task != null ? ResponseEntity.ok(task) : ResponseEntity.notFound().build(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,55 @@ |
|||||||
|
package com.mh.web.controller.comprehensive; |
||||||
|
|
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.domain.vo.EnergyQueryVO; |
||||||
|
import com.mh.common.core.page.TableDataInfo; |
||||||
|
import com.mh.system.service.report.IComprehensiveReportService; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Classname CompreReportController |
||||||
|
* Todo: 综合报表 |
||||||
|
* @Date 2025-10-05 13:59 |
||||||
|
* @Created by LJF |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/compre") |
||||||
|
public class CompreReportController extends BaseController { |
||||||
|
|
||||||
|
private final IComprehensiveReportService proOverviewService; |
||||||
|
|
||||||
|
public CompreReportController(IComprehensiveReportService proOverviewService) { |
||||||
|
this.proOverviewService = proOverviewService; |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/report") |
||||||
|
public TableDataInfo report(@RequestBody EnergyQueryVO vo) { |
||||||
|
TableDataInfo dataTable = getDataTable(proOverviewService.report(vo)); |
||||||
|
// 优化分页逻辑,防止出现数组越界异常
|
||||||
|
List<?> rows = dataTable.getRows(); |
||||||
|
int total = rows.size(); |
||||||
|
// 如果 pageNum 小于等于0,则返回全部
|
||||||
|
if (vo.getPageNum() <= 0) { |
||||||
|
return dataTable; |
||||||
|
} |
||||||
|
int pageNum = vo.getPageNum() <= 0 ? 1 : vo.getPageNum(); |
||||||
|
int pageSize = vo.getPageSize() <= 0 ? 10 : vo.getPageSize(); |
||||||
|
|
||||||
|
// 计算起始索引和结束索引
|
||||||
|
int startIndex = (pageNum - 1) * pageSize; |
||||||
|
int endIndex = Math.min(startIndex + pageSize, total); |
||||||
|
|
||||||
|
// 边界检查
|
||||||
|
if (startIndex >= total || startIndex < 0) { |
||||||
|
dataTable.setRows(List.of()); // 返回空列表而不是抛出异常
|
||||||
|
} else { |
||||||
|
dataTable.setRows(rows.subList(startIndex, endIndex)); |
||||||
|
} |
||||||
|
|
||||||
|
return dataTable; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,45 @@ |
|||||||
|
package com.mh.web.controller.monitor; |
||||||
|
|
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.domain.dto.DeviceMonitorDTO; |
||||||
|
import com.mh.common.core.page.TableDataInfo; |
||||||
|
import com.mh.system.service.device.ICollectionParamsManageService; |
||||||
|
import jakarta.annotation.Resource; |
||||||
|
import org.springframework.security.access.prepost.PreAuthorize; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 热回收系统工业流程图 |
||||||
|
* @date 2026-01-28 13:48:13 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/device/ers") |
||||||
|
public class ERSMonitorController extends BaseController { |
||||||
|
|
||||||
|
@Resource |
||||||
|
private ICollectionParamsManageService iCollectionParamsManageService; |
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasPermi('device:cpm:list')") |
||||||
|
@GetMapping("/monitor/list") |
||||||
|
public TableDataInfo list(@RequestParam(name = "systemType") String systemType) |
||||||
|
{ |
||||||
|
List<DeviceMonitorDTO> list = iCollectionParamsManageService.selectMonitorListBySystemType(systemType); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
@GetMapping("/monitor/totalDatas") |
||||||
|
public TableDataInfo totalERSDatas(@RequestParam(name = "systemType") String systemType) |
||||||
|
{ |
||||||
|
List<?> list = iCollectionParamsManageService.totalERSDatas(systemType); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,70 @@ |
|||||||
|
package com.mh.web.controller.monitor; |
||||||
|
|
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.domain.dto.DeviceMonitorDTO; |
||||||
|
import com.mh.common.core.domain.entity.CollectionParamsManage; |
||||||
|
import com.mh.common.core.page.TableDataInfo; |
||||||
|
import com.mh.system.service.device.ICollectionParamsManageService; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 三台采暖泵的监测 |
||||||
|
* @date 2025-09-12 09:36:33 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/device") |
||||||
|
public class HeatingPumpMonitorController extends BaseController { |
||||||
|
|
||||||
|
private final ICollectionParamsManageService collectionParamsManageService; |
||||||
|
|
||||||
|
public HeatingPumpMonitorController(ICollectionParamsManageService collectionParamsManageService) { |
||||||
|
this.collectionParamsManageService = collectionParamsManageService; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取 alarmList 列表 |
||||||
|
* @param systemType 3 |
||||||
|
* @param type 0:代表查询报警 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@RequestMapping("/heatPump/alarmList") |
||||||
|
public TableDataInfo list(@RequestParam(name = "systemType") String systemType, |
||||||
|
@RequestParam(name = "type", required = false, defaultValue = "0") String type) { |
||||||
|
List<?> list = collectionParamsManageService.selectHeatPumpAlarmListByParams(systemType, type, "14", "5"); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取 运行热泵统计 列表 |
||||||
|
* @param systemType 3 |
||||||
|
* @param type 0:代表查询报警 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@RequestMapping("/heatPump/online") |
||||||
|
public TableDataInfo online(@RequestParam(name = "systemType") String systemType, |
||||||
|
@RequestParam(name = "type", required = false, defaultValue = "0") String type) { |
||||||
|
List<?> list = collectionParamsManageService.selectHeatPumpOnlineByParams(systemType, type); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取 采暖泵 列表 |
||||||
|
* @param systemType 3 |
||||||
|
* @param type 0:代表查询动画界面数据 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@RequestMapping("/heatPump/list") |
||||||
|
public TableDataInfo heatPumpList(@RequestParam(name = "systemType") String systemType, |
||||||
|
@RequestParam(name = "type", required = false, defaultValue = "0") String type) { |
||||||
|
List<DeviceMonitorDTO> list = collectionParamsManageService.selectHotWaterBoilerListByParams(systemType, type, "14"); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,57 @@ |
|||||||
|
package com.mh.web.controller.monitor; |
||||||
|
|
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.domain.dto.DeviceMonitorDTO; |
||||||
|
import com.mh.common.core.domain.entity.CollectionParamsManage; |
||||||
|
import com.mh.common.core.page.TableDataInfo; |
||||||
|
import com.mh.system.service.device.ICollectionParamsManageService; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 蒸汽热水锅炉监测 |
||||||
|
* @date 2025-09-12 09:36:33 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/device") |
||||||
|
public class SteamBoilerMonitorController extends BaseController { |
||||||
|
|
||||||
|
private final ICollectionParamsManageService collectionParamsManageService; |
||||||
|
|
||||||
|
public SteamBoilerMonitorController(ICollectionParamsManageService collectionParamsManageService) { |
||||||
|
this.collectionParamsManageService = collectionParamsManageService; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取 steamBoiler 列表 |
||||||
|
* @param systemType 3 |
||||||
|
* @param type 0:代表查询动画界面数据,1:代表查询模拟量监测数据,2:代表查询继电器数据,3:查询端口输入数据,4:代表查询报警数据 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@RequestMapping("/steamBoiler/list") |
||||||
|
public TableDataInfo list(@RequestParam(name = "systemType") String systemType, |
||||||
|
@RequestParam(name = "type") String type) { |
||||||
|
List<CollectionParamsManage> list = collectionParamsManageService.selectSteamBoilerListByParams(systemType, type); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取 热水锅炉 列表 |
||||||
|
* @param systemType 3 |
||||||
|
* @param type 0:代表查询动画界面数据 |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@RequestMapping("/hotWaterBoiler/list") |
||||||
|
public TableDataInfo hotWaterBoilerList(@RequestParam(name = "systemType") String systemType, |
||||||
|
@RequestParam(name = "type", required = false, defaultValue = "0") String type) { |
||||||
|
List<DeviceMonitorDTO> list = collectionParamsManageService.selectHotWaterBoilerListByParams(systemType, type, "13"); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,96 @@ |
|||||||
|
package com.mh.web.controller.report; |
||||||
|
|
||||||
|
import com.alibaba.excel.EasyExcel; |
||||||
|
import com.github.pagehelper.PageHelper; |
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.domain.AjaxResult; |
||||||
|
import com.mh.common.core.domain.dto.ReportHeatingRunParamDTO; |
||||||
|
import com.mh.common.core.domain.dto.ReportSteamRunParamDTO; |
||||||
|
import com.mh.common.core.domain.entity.ReportHeatingRunParamHis; |
||||||
|
import com.mh.common.core.domain.entity.ReportSteamRunParamHis; |
||||||
|
import com.mh.common.core.page.PageDomain; |
||||||
|
import com.mh.common.core.page.TableDataInfo; |
||||||
|
import com.mh.common.core.page.TableSupport; |
||||||
|
import com.mh.common.utils.file.handle.ExcelFillCellMergeHandler; |
||||||
|
import com.mh.common.utils.file.handle.ReportSysParamHandler; |
||||||
|
import com.mh.common.utils.file.handle.RowHeightStyleHandler; |
||||||
|
import com.mh.common.utils.sql.SqlUtil; |
||||||
|
import com.mh.system.service.report.IReportHeatingService; |
||||||
|
import com.mh.system.service.report.IReportSteamService; |
||||||
|
import jakarta.servlet.http.HttpServletResponse; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.beans.BeanUtils; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
import java.util.List; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project eemcs |
||||||
|
* @description 采暖系统运行参数报表 |
||||||
|
* @date 2024-05-30 08:45:57 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/reportHeating") |
||||||
|
@Slf4j |
||||||
|
public class ReportHeatingController extends BaseController { |
||||||
|
|
||||||
|
private final IReportHeatingService reportHeatingService; |
||||||
|
|
||||||
|
private ReportHeatingController(IReportHeatingService reportHeatingService) { |
||||||
|
this.reportHeatingService = reportHeatingService; |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/list") |
||||||
|
public TableDataInfo list(@RequestBody ReportHeatingRunParamHis reportHeatingRunParamHis) { |
||||||
|
if (reportHeatingRunParamHis.getPageNum() != 0) { |
||||||
|
PageHelper.startPage(reportHeatingRunParamHis.getPageNum(), reportHeatingRunParamHis.getPageSize()); |
||||||
|
} |
||||||
|
List<ReportHeatingRunParamHis> list = reportHeatingService.selectHeatingList(reportHeatingRunParamHis); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
@PutMapping("/edit") |
||||||
|
public AjaxResult edit(@RequestBody ReportHeatingRunParamHis reportHeatingRunParamHis) { |
||||||
|
return toAjax(reportHeatingService.updateRunParams(reportHeatingRunParamHis)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/export") |
||||||
|
public void exportExcel(@RequestBody ReportHeatingRunParamHis reportSteamRunParamHis, HttpServletResponse response) { |
||||||
|
// 文件名
|
||||||
|
try { |
||||||
|
String fileName = "采暖系统运行记录表.xlsx"; |
||||||
|
String headTitle = "采暖系统运行记录表"; |
||||||
|
// 从数据库获取数据
|
||||||
|
List<ReportHeatingRunParamHis> list = reportHeatingService.selectHeatingList(reportSteamRunParamHis); |
||||||
|
if (list != null) { |
||||||
|
// 设置响应格式
|
||||||
|
response.setContentType("application/vdn.ms-excel;charset=utf-8"); |
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, StandardCharsets.UTF_8) + "\""); |
||||||
|
response.setCharacterEncoding(String.valueOf(StandardCharsets.UTF_8)); |
||||||
|
ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler(); |
||||||
|
List<ReportHeatingRunParamDTO> infoDTOS = list.stream().map(info -> { |
||||||
|
ReportHeatingRunParamDTO deviceInfoDTO = new ReportHeatingRunParamDTO(); |
||||||
|
BeanUtils.copyProperties(info, deviceInfoDTO); |
||||||
|
return deviceInfoDTO; |
||||||
|
}).collect(Collectors.toList()); |
||||||
|
|
||||||
|
// 内容格式
|
||||||
|
EasyExcel.write(response.getOutputStream(), ReportHeatingRunParamDTO.class) |
||||||
|
.registerWriteHandler(new ReportSysParamHandler(headTitle)) |
||||||
|
.registerWriteHandler(mergePrevCol) |
||||||
|
.registerWriteHandler(new RowHeightStyleHandler()) |
||||||
|
.sheet(fileName.replace(".xlsx", "")) |
||||||
|
.doWrite(infoDTOS); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
throw new RuntimeException("下载报表异常"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,131 @@ |
|||||||
|
package com.mh.web.controller.report; |
||||||
|
|
||||||
|
import com.alibaba.excel.EasyExcel; |
||||||
|
import com.alibaba.excel.ExcelWriter; |
||||||
|
import com.alibaba.excel.write.metadata.WriteSheet; |
||||||
|
import com.alibaba.excel.write.metadata.fill.FillWrapper; |
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.domain.dto.WeatherDataDTO; |
||||||
|
import com.mh.common.core.domain.entity.ReportMeterReadingsHis; |
||||||
|
import com.mh.common.core.page.TableDataInfo; |
||||||
|
import com.mh.common.utils.DateUtils; |
||||||
|
import com.mh.system.service.device.ICoolingSystemMonitorService; |
||||||
|
import com.mh.system.service.report.IMeterReadingsHisService; |
||||||
|
import jakarta.servlet.http.HttpServletResponse; |
||||||
|
import org.apache.poi.ss.usermodel.*; |
||||||
|
import org.springframework.core.io.ClassPathResource; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream; |
||||||
|
import java.io.File; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 每日抄表记录查询 |
||||||
|
* @date 2025-10-21 16:04:09 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/reportMeterReadings") |
||||||
|
public class ReportMeterReadingsController extends BaseController { |
||||||
|
|
||||||
|
private final IMeterReadingsHisService meterReadingsHisService; |
||||||
|
|
||||||
|
private final ICoolingSystemMonitorService coolingSystemMonitorService; |
||||||
|
|
||||||
|
public ReportMeterReadingsController(IMeterReadingsHisService meterReadingsHisService, ICoolingSystemMonitorService coolingSystemMonitorService) { |
||||||
|
this.meterReadingsHisService = meterReadingsHisService; |
||||||
|
this.coolingSystemMonitorService = coolingSystemMonitorService; |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/list") |
||||||
|
public TableDataInfo list(@RequestBody ReportMeterReadingsHis todayTimestamp) |
||||||
|
{ |
||||||
|
List<ReportMeterReadingsHis> list = meterReadingsHisService.selectList(todayTimestamp); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/export") |
||||||
|
public void exportExcel(@RequestBody ReportMeterReadingsHis reportMeterReadingsHis, HttpServletResponse response) { |
||||||
|
// 文件名
|
||||||
|
try { |
||||||
|
String fileName = "节能岛改造每日能耗统计表"+ DateUtils.dateToString(reportMeterReadingsHis.getTodayTimestamp(), "yyyyMMdd")+".xlsx"; |
||||||
|
// 读取资源文件
|
||||||
|
ClassPathResource classPathResource = new ClassPathResource(File.separator + "节能岛改造每日能耗统计表.xlsx"); |
||||||
|
// 获取数据
|
||||||
|
List<ReportMeterReadingsHis> list = meterReadingsHisService.selectList(reportMeterReadingsHis); |
||||||
|
// 组织并填充模板数据
|
||||||
|
ByteArrayOutputStream byteArrayOutputStream = compositeFill(classPathResource.getInputStream(), reportMeterReadingsHis.getTodayTimestamp(), list); |
||||||
|
|
||||||
|
// 设置响应格式
|
||||||
|
response.setContentType("application/vdn.ms-excel;charset=utf-8"); |
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\""); |
||||||
|
response.setCharacterEncoding("UTF-8"); |
||||||
|
|
||||||
|
// 将文件内容写入响应输出流,浏览器可以直接触发下载
|
||||||
|
response.getOutputStream().write(byteArrayOutputStream.toByteArray()); |
||||||
|
response.getOutputStream().flush(); |
||||||
|
} catch (IOException e) { |
||||||
|
throw new RuntimeException("下载报表异常"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private ByteArrayOutputStream compositeFill(InputStream templateInputStream, Date todayTimestamp, List<ReportMeterReadingsHis> list) throws IOException { |
||||||
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); |
||||||
|
// 使用EasyExcel的模板填充功能,在这里指定合并单元格,这里应该是easyExcel的bug,第一列无法合并,其他列都可以,所以第一列单独用原生poi进行合并
|
||||||
|
try (ExcelWriter excelWriter = EasyExcel.write(byteArrayOutputStream).withTemplate(templateInputStream) |
||||||
|
.build()) { |
||||||
|
WriteSheet writeSheet = EasyExcel.writerSheet().build(); |
||||||
|
// 防止上面两个表格覆盖下面两个表格,每一行都采用新增一行的方式
|
||||||
|
// FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
|
||||||
|
// 使用模板填充,必须使用FillWrapper,这是官方要求,并且每行两个表格只能有一个表格设置增行,否则会存在一个表格有空行,这里是造的测试数据
|
||||||
|
for (int i = 0; i < list.size(); i++) { |
||||||
|
excelWriter.fill(new FillWrapper("data"+(i+1), List.of(list.get(i))), writeSheet); |
||||||
|
} |
||||||
|
|
||||||
|
// 设置表格外的填充数据,例如总计、日期等数据
|
||||||
|
HashMap<String, Object> map = new HashMap<>(); |
||||||
|
|
||||||
|
List<WeatherDataDTO> weatherTemp = (List<WeatherDataDTO>) coolingSystemMonitorService.getWeatherTemp(DateUtils.dateToString(todayTimestamp, "yyyy-MM-dd"), DateUtils.dateToString(todayTimestamp, "yyyy-MM-dd")); |
||||||
|
if (!weatherTemp.isEmpty()) { |
||||||
|
String maxTemp = weatherTemp.getFirst().getMaxTemp(); |
||||||
|
map.put("maxTemp", maxTemp); |
||||||
|
String minTemp = weatherTemp.getFirst().getMinTemp(); |
||||||
|
map.put("minTemp", minTemp); |
||||||
|
} |
||||||
|
|
||||||
|
map.put("date", DateUtils.dateToString(todayTimestamp, "yyyy年MM月dd日")); |
||||||
|
excelWriter.fill(map, writeSheet); |
||||||
|
|
||||||
|
// 2. 获取 Workbook 并计算公式
|
||||||
|
Workbook workbook = excelWriter.writeContext() |
||||||
|
.writeWorkbookHolder() |
||||||
|
.getWorkbook(); |
||||||
|
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); |
||||||
|
for (Row row : workbook.getSheetAt(0)) { |
||||||
|
for (Cell cell : row) { |
||||||
|
if (cell.getCellType() == CellType.FORMULA) { |
||||||
|
evaluator.evaluateFormulaCell(cell); // 单元格级计算
|
||||||
|
// evaluator.evaluateAll(); // 全工作簿计算(推荐)
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// 3. 强制刷新计算结果
|
||||||
|
workbook.setForceFormulaRecalculation(true); |
||||||
|
excelWriter.finish(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
// 合并单元格,由于easyExcel自带的OnceAbsoluteMergeStrategy合并策略bug,这里需要用poi合并一下
|
||||||
|
return byteArrayOutputStream; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,156 @@ |
|||||||
|
package com.mh.web.controller.report; |
||||||
|
|
||||||
|
import com.alibaba.excel.EasyExcel; |
||||||
|
import com.github.pagehelper.PageHelper; |
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.domain.AjaxResult; |
||||||
|
import com.mh.common.core.domain.dto.ReportSteamRunParamDTO; |
||||||
|
import com.mh.common.core.domain.dto.ThreeFloorReportHotWaterDTO; |
||||||
|
import com.mh.common.core.domain.entity.ReportSteamRunParamHis; |
||||||
|
import com.mh.common.core.page.TableDataInfo; |
||||||
|
import com.mh.common.utils.file.handle.ExcelFillCellMergeHandler; |
||||||
|
import com.mh.common.utils.file.handle.ReportSysParamHandler; |
||||||
|
import com.mh.common.utils.file.handle.RowHeightStyleHandler; |
||||||
|
import com.mh.system.service.report.IReportSteamService; |
||||||
|
import jakarta.servlet.http.HttpServletResponse; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.beans.BeanUtils; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.util.List; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project eemcs |
||||||
|
* @description 蒸汽系统运行参数报表 |
||||||
|
* @date 2024-05-30 08:45:57 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/reportSteam") |
||||||
|
@Slf4j |
||||||
|
public class ReportSteamController extends BaseController { |
||||||
|
|
||||||
|
private final IReportSteamService reportSteamService; |
||||||
|
|
||||||
|
private ReportSteamController(IReportSteamService reportSteamService) { |
||||||
|
this.reportSteamService = reportSteamService; |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/list") |
||||||
|
public TableDataInfo list(@RequestBody ReportSteamRunParamHis reportSteamRunParamHis) { |
||||||
|
if (reportSteamRunParamHis.getPageNum() != 0) { |
||||||
|
PageHelper.startPage(reportSteamRunParamHis.getPageNum(), reportSteamRunParamHis.getPageSize()); |
||||||
|
} |
||||||
|
List<ReportSteamRunParamHis> list = reportSteamService.selectList(reportSteamRunParamHis); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
@PutMapping("/edit") |
||||||
|
public AjaxResult edit(@RequestBody ReportSteamRunParamHis reportSteamRunParamHis) { |
||||||
|
return toAjax(reportSteamService.updateRunParams(reportSteamRunParamHis)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/export") |
||||||
|
public void exportExcel(@RequestBody ReportSteamRunParamHis reportSteamRunParamHis, HttpServletResponse response) { |
||||||
|
// 文件名
|
||||||
|
try { |
||||||
|
String fileName = "蒸汽机运行记录表.xlsx"; |
||||||
|
String headTitle = "蒸汽机运行记录表"; |
||||||
|
// 从数据库获取数据
|
||||||
|
List<ReportSteamRunParamHis> list = reportSteamService.selectList(reportSteamRunParamHis); |
||||||
|
if (list != null) { |
||||||
|
// 设置响应格式
|
||||||
|
response.setContentType("application/vdn.ms-excel;charset=utf-8"); |
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\""); |
||||||
|
response.setCharacterEncoding("UTF-8"); |
||||||
|
ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler(); |
||||||
|
List<ReportSteamRunParamDTO> infoDTOS = list.stream().map(info -> { |
||||||
|
ReportSteamRunParamDTO deviceInfoDTO = new ReportSteamRunParamDTO(); |
||||||
|
BeanUtils.copyProperties(info, deviceInfoDTO); |
||||||
|
// 单独处理运行状态
|
||||||
|
// 0:上电延时
|
||||||
|
// 1:关机
|
||||||
|
// 2:待机
|
||||||
|
// 3:前清扫
|
||||||
|
// 4:预点火
|
||||||
|
// 5:点火
|
||||||
|
// 6:传火
|
||||||
|
// 7:工作
|
||||||
|
// 8:后清扫
|
||||||
|
// 9:故障
|
||||||
|
// 10:小火保持
|
||||||
|
// 11:自检
|
||||||
|
// 12:检漏
|
||||||
|
// 13:开点火器
|
||||||
|
// 14:启动等待中
|
||||||
|
switch (info.getCurStatus()) { |
||||||
|
case 0: |
||||||
|
deviceInfoDTO.setCurStatus("上电延时"); |
||||||
|
break; |
||||||
|
case 1: |
||||||
|
deviceInfoDTO.setCurStatus("关机"); |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
deviceInfoDTO.setCurStatus("待机"); |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
deviceInfoDTO.setCurStatus("前清扫"); |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
deviceInfoDTO.setCurStatus("预点火"); |
||||||
|
break; |
||||||
|
case 5: |
||||||
|
deviceInfoDTO.setCurStatus("点火"); |
||||||
|
break; |
||||||
|
case 6: |
||||||
|
deviceInfoDTO.setCurStatus("传火"); |
||||||
|
break; |
||||||
|
case 7: |
||||||
|
deviceInfoDTO.setCurStatus("工作"); |
||||||
|
break; |
||||||
|
case 8: |
||||||
|
deviceInfoDTO.setCurStatus("后清扫"); |
||||||
|
break; |
||||||
|
case 9: |
||||||
|
deviceInfoDTO.setCurStatus("故障"); |
||||||
|
break; |
||||||
|
case 10: |
||||||
|
deviceInfoDTO.setCurStatus("小火保持"); |
||||||
|
break; |
||||||
|
case 11: |
||||||
|
deviceInfoDTO.setCurStatus("自检"); |
||||||
|
break; |
||||||
|
case 12: |
||||||
|
deviceInfoDTO.setCurStatus("检漏"); |
||||||
|
break; |
||||||
|
case 13: |
||||||
|
deviceInfoDTO.setCurStatus("开点火器"); |
||||||
|
break; |
||||||
|
case 14: |
||||||
|
deviceInfoDTO.setCurStatus("启动等待中"); |
||||||
|
break; |
||||||
|
default: |
||||||
|
deviceInfoDTO.setCurStatus("未知"); |
||||||
|
break; |
||||||
|
} |
||||||
|
return deviceInfoDTO; |
||||||
|
}).collect(Collectors.toList()); |
||||||
|
|
||||||
|
// 内容格式
|
||||||
|
EasyExcel.write(response.getOutputStream(), ReportSteamRunParamDTO.class) |
||||||
|
.registerWriteHandler(new ReportSysParamHandler(headTitle)) |
||||||
|
.registerWriteHandler(mergePrevCol) |
||||||
|
.registerWriteHandler(new RowHeightStyleHandler()) |
||||||
|
.sheet(fileName.replace(".xlsx", "")) |
||||||
|
.doWrite(infoDTOS); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
throw new RuntimeException("下载报表异常"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,100 @@ |
|||||||
|
package com.mh.web.controller.report; |
||||||
|
|
||||||
|
import com.alibaba.excel.EasyExcel; |
||||||
|
import com.github.pagehelper.PageHelper; |
||||||
|
import com.mh.common.core.controller.BaseController; |
||||||
|
import com.mh.common.core.domain.AjaxResult; |
||||||
|
import com.mh.common.core.domain.dto.MaglevReportSysParamDTO; |
||||||
|
import com.mh.common.core.domain.entity.ReportSysRunParamHis; |
||||||
|
import com.mh.common.core.page.TableDataInfo; |
||||||
|
import com.mh.common.utils.StringUtils; |
||||||
|
import com.mh.common.utils.file.handle.ExcelFillCellMergeHandler; |
||||||
|
import com.mh.common.utils.file.handle.ReportSysParamHandler; |
||||||
|
import com.mh.common.utils.file.handle.RowHeightStyleHandler; |
||||||
|
import com.mh.system.service.report.IReportSysService; |
||||||
|
import jakarta.servlet.http.HttpServletResponse; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.beans.BeanUtils; |
||||||
|
import org.springframework.web.bind.annotation.*; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.util.List; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project NewZhujiang_Server |
||||||
|
* @description 系统参数报表 |
||||||
|
* @date 2024-05-30 08:45:57 |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/reportSys") |
||||||
|
@Slf4j |
||||||
|
public class ReportSysController extends BaseController { |
||||||
|
|
||||||
|
private final IReportSysService reportSysService; |
||||||
|
|
||||||
|
private ReportSysController(IReportSysService reportSysService) { |
||||||
|
this.reportSysService = reportSysService; |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/list") |
||||||
|
public TableDataInfo list(@RequestBody ReportSysRunParamHis reportSysRunParamHis) |
||||||
|
{ |
||||||
|
if (reportSysRunParamHis.getPageNum() != 0) { |
||||||
|
PageHelper.startPage(reportSysRunParamHis.getPageNum(), reportSysRunParamHis.getPageSize()); |
||||||
|
} |
||||||
|
List<ReportSysRunParamHis> list = reportSysService.selectList(reportSysRunParamHis); |
||||||
|
return getDataTable(list); |
||||||
|
} |
||||||
|
|
||||||
|
@PutMapping("/edit") |
||||||
|
public AjaxResult edit(@RequestBody ReportSysRunParamHis reportSysRunParamHis) |
||||||
|
{ |
||||||
|
return toAjax(reportSysService.updateSysRunParams(reportSysRunParamHis)); |
||||||
|
} |
||||||
|
|
||||||
|
@PostMapping("/export") |
||||||
|
public void exportExcel(@RequestBody ReportSysRunParamHis reportSysRunParamHis, HttpServletResponse response) { |
||||||
|
// 文件名
|
||||||
|
try { |
||||||
|
String fileName = "系统参数运行日志报表.xlsx"; |
||||||
|
String deviceNum = (String) reportSysRunParamHis.getParams().get("deviceNum"); |
||||||
|
if (!StringUtils.isBlank(deviceNum)) { |
||||||
|
if ("2".equals(deviceNum)) { |
||||||
|
fileName = "变频螺杆主机系统参数报表.xlsx"; |
||||||
|
} else { |
||||||
|
fileName = "磁悬浮主机系统参数报表.xlsx"; |
||||||
|
} |
||||||
|
} |
||||||
|
// 从数据库获取数据
|
||||||
|
List<ReportSysRunParamHis> list = reportSysService.selectList(reportSysRunParamHis); |
||||||
|
if (list != null) { |
||||||
|
// 设置响应格式
|
||||||
|
response.setContentType("application/vdn.ms-excel;charset=utf-8"); |
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\""); |
||||||
|
response.setCharacterEncoding("UTF-8"); |
||||||
|
ExcelFillCellMergeHandler mergePrevCol = new ExcelFillCellMergeHandler(); |
||||||
|
int headSize = 3; |
||||||
|
List<MaglevReportSysParamDTO> infoDTOS = list.stream().map(info -> { |
||||||
|
MaglevReportSysParamDTO deviceInfoDTO = new MaglevReportSysParamDTO(); |
||||||
|
BeanUtils.copyProperties(info, deviceInfoDTO); |
||||||
|
return deviceInfoDTO; |
||||||
|
}).collect(Collectors.toList()); |
||||||
|
|
||||||
|
// 内容格式
|
||||||
|
EasyExcel.write(response.getOutputStream(), MaglevReportSysParamDTO.class) |
||||||
|
.registerWriteHandler(new ReportSysParamHandler("磁悬浮水冷冷水机组数据运行记录表")) |
||||||
|
.registerWriteHandler(mergePrevCol) |
||||||
|
.registerWriteHandler(new RowHeightStyleHandler()) |
||||||
|
.sheet(fileName.replace(".xlsx", "")) |
||||||
|
.doWrite(infoDTOS); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
throw new RuntimeException("下载报表异常"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
Binary file not shown.
@ -0,0 +1,35 @@ |
|||||||
|
package com.mh.common.config; |
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
import org.springframework.web.servlet.support.ServletUriComponentsBuilder; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.nio.file.Files; |
||||||
|
import java.nio.file.Path; |
||||||
|
import java.nio.file.Paths; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 文件服务类 |
||||||
|
* @date 2026-02-27 11:32:04 |
||||||
|
*/ |
||||||
|
@Component |
||||||
|
public class FileStorageUtil { |
||||||
|
@Value("${mh.profile:/}") |
||||||
|
private String storageDir; |
||||||
|
|
||||||
|
public String saveFile(String filename, byte[] content) throws IOException { |
||||||
|
Path dir = Paths.get(storageDir); |
||||||
|
if (!Files.exists(dir)) Files.createDirectories(dir); |
||||||
|
Path filePath = dir.resolve(filename); |
||||||
|
Files.write(filePath, content); |
||||||
|
// 生成可下载的URL(假设当前应用提供静态资源访问或下载接口)
|
||||||
|
return ServletUriComponentsBuilder.fromCurrentContextPath() |
||||||
|
.path("/ai/files/") |
||||||
|
.path(filename) |
||||||
|
.toUriString(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,24 @@ |
|||||||
|
package com.mh.common.core.domain.dto; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.time.LocalDateTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 任务状态dto |
||||||
|
* @date 2026-02-27 10:22:40 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class AsyncTaskDTO { |
||||||
|
|
||||||
|
private String taskId; |
||||||
|
private String status; // PROCESSING, COMPLETED, FAILED
|
||||||
|
private String message; // 成功时的消息或失败原因
|
||||||
|
private String downloadUrl; // 生成文件的下载URL(成功后填充)
|
||||||
|
private LocalDateTime createTime; |
||||||
|
private LocalDateTime completeTime; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
package com.mh.common.core.domain.dto; |
||||||
|
|
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 异步任务事件dto |
||||||
|
* @date 2026-02-28 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@NoArgsConstructor |
||||||
|
@AllArgsConstructor |
||||||
|
public class AsyncTaskEvent { |
||||||
|
|
||||||
|
private String event; // 事件类型:reasoning, COMPLETED, FAILED
|
||||||
|
private Object data; // 事件数据
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,74 @@ |
|||||||
|
package com.mh.common.core.domain.dto; |
||||||
|
|
||||||
|
import java.util.StringJoiner; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 综合系统能耗查询DTO |
||||||
|
* @date 2025-10-09 10:17:26 |
||||||
|
*/ |
||||||
|
public class CompreReportDTO { |
||||||
|
|
||||||
|
private String time; |
||||||
|
|
||||||
|
private String electValue; |
||||||
|
|
||||||
|
private String coldValue; |
||||||
|
|
||||||
|
private String hotValue; |
||||||
|
|
||||||
|
private String steamValue; |
||||||
|
|
||||||
|
public String getTime() { |
||||||
|
return time; |
||||||
|
} |
||||||
|
|
||||||
|
public void setTime(String time) { |
||||||
|
this.time = time; |
||||||
|
} |
||||||
|
|
||||||
|
public String getElectValue() { |
||||||
|
return electValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setElectValue(String electValue) { |
||||||
|
this.electValue = electValue; |
||||||
|
} |
||||||
|
|
||||||
|
public String getColdValue() { |
||||||
|
return coldValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setColdValue(String coldValue) { |
||||||
|
this.coldValue = coldValue; |
||||||
|
} |
||||||
|
|
||||||
|
public String getHotValue() { |
||||||
|
return hotValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setHotValue(String hotValue) { |
||||||
|
this.hotValue = hotValue; |
||||||
|
} |
||||||
|
|
||||||
|
public String getSteamValue() { |
||||||
|
return steamValue; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSteamValue(String steamValue) { |
||||||
|
this.steamValue = steamValue; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return new StringJoiner(", ", CompreReportDTO.class.getSimpleName() + "[", "]") |
||||||
|
.add("time='" + time + "'") |
||||||
|
.add("electValue='" + electValue + "'") |
||||||
|
.add("coldValue='" + coldValue + "'") |
||||||
|
.add("hotValue='" + hotValue + "'") |
||||||
|
.add("steamValue='" + steamValue + "'") |
||||||
|
.toString(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,99 @@ |
|||||||
|
package com.mh.common.core.domain.dto; |
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonPropertyDescription; |
||||||
|
import lombok.Builder; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description ai机房能效报表 |
||||||
|
* @date 2026-02-27 10:11:57 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@Builder |
||||||
|
public class EnergyReportDTO { |
||||||
|
|
||||||
|
@JsonPropertyDescription("报表生成日期") |
||||||
|
private String reportDate; |
||||||
|
|
||||||
|
@JsonPropertyDescription("整体能效评分 (0-100)") |
||||||
|
private Integer overallScore; |
||||||
|
|
||||||
|
@JsonPropertyDescription("系统综合能效比") |
||||||
|
private Double systemEER; |
||||||
|
|
||||||
|
@JsonPropertyDescription("总能耗 (kWh)") |
||||||
|
private Double totalEnergyConsumption; |
||||||
|
|
||||||
|
@JsonPropertyDescription("各设备能耗明细") |
||||||
|
private List<DeviceEnergy> deviceDetails; |
||||||
|
|
||||||
|
@JsonPropertyDescription("异常情况列表") |
||||||
|
private List<Anomaly> anomalies; |
||||||
|
|
||||||
|
@JsonPropertyDescription("优化建议") |
||||||
|
private List<Suggestion> suggestions; |
||||||
|
|
||||||
|
@Data |
||||||
|
@Builder |
||||||
|
public static class DeviceEnergy { |
||||||
|
@JsonPropertyDescription("设备名称") |
||||||
|
private String deviceName; |
||||||
|
|
||||||
|
@JsonPropertyDescription("设备类型 (冷机/冷冻泵/冷却泵/冷却塔)") |
||||||
|
private String deviceType; |
||||||
|
|
||||||
|
@JsonPropertyDescription("能耗 (kWh)") |
||||||
|
private Double energyConsumption; |
||||||
|
|
||||||
|
@JsonPropertyDescription("运行效率 (%)") |
||||||
|
private Double efficiency; |
||||||
|
|
||||||
|
@JsonPropertyDescription("对比基准的偏差率") |
||||||
|
private Double deviationRate; |
||||||
|
} |
||||||
|
|
||||||
|
@Data |
||||||
|
@Builder |
||||||
|
public static class Anomaly { |
||||||
|
@JsonPropertyDescription("异常设备") |
||||||
|
private String deviceName; |
||||||
|
|
||||||
|
@JsonPropertyDescription("异常类型") |
||||||
|
private String anomalyType; |
||||||
|
|
||||||
|
@JsonPropertyDescription("异常描述") |
||||||
|
private String description; |
||||||
|
|
||||||
|
@JsonPropertyDescription("严重程度 (高/中/低)") |
||||||
|
private String severity; |
||||||
|
|
||||||
|
@JsonPropertyDescription("预估能耗损失 (kWh)") |
||||||
|
private Double estimatedLoss; |
||||||
|
} |
||||||
|
|
||||||
|
@Data |
||||||
|
@Builder |
||||||
|
public static class Suggestion { |
||||||
|
@JsonPropertyDescription("建议标题") |
||||||
|
private String title; |
||||||
|
|
||||||
|
@JsonPropertyDescription("建议详细内容") |
||||||
|
private String description; |
||||||
|
|
||||||
|
@JsonPropertyDescription("预期节能效果 (kWh)") |
||||||
|
private Double expectedSaving; |
||||||
|
|
||||||
|
@JsonPropertyDescription("优先级 (高/中/低)") |
||||||
|
private String priority; |
||||||
|
|
||||||
|
@JsonPropertyDescription("建议执行的操作 (如:检查/维修/调整参数)") |
||||||
|
private String action; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,284 @@ |
|||||||
|
package com.mh.common.core.domain.dto; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnore; |
||||||
|
import com.alibaba.excel.annotation.ExcelProperty; |
||||||
|
import com.alibaba.excel.annotation.write.style.*; |
||||||
|
import com.alibaba.excel.enums.poi.BorderStyleEnum; |
||||||
|
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
|
||||||
|
//import java.math.String;
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project NewZhujiang_Server |
||||||
|
* @description 磁悬浮主机系统参数报表 |
||||||
|
* @date 2024-05-30 11:00:12 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@NoArgsConstructor |
||||||
|
@Accessors(chain = true) |
||||||
|
@HeadRowHeight(25) |
||||||
|
@HeadFontStyle(fontHeightInPoints = 14) |
||||||
|
@ContentFontStyle(fontHeightInPoints = 13) |
||||||
|
@ContentRowHeight(25) |
||||||
|
@ContentStyle( |
||||||
|
horizontalAlignment = HorizontalAlignmentEnum.CENTER, |
||||||
|
borderBottom = BorderStyleEnum.THIN, |
||||||
|
borderLeft = BorderStyleEnum.THIN, |
||||||
|
borderRight = BorderStyleEnum.THIN, |
||||||
|
borderTop = BorderStyleEnum.THIN |
||||||
|
) |
||||||
|
@ColumnWidth(10) |
||||||
|
public class MaglevReportSysParamDTO { |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前时间 |
||||||
|
*/ |
||||||
|
@ColumnWidth(17) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "时间", "时间"}, index = 0) |
||||||
|
private String curTime; |
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 班次
|
||||||
|
// */
|
||||||
|
// @ColumnWidth(10)
|
||||||
|
// @ExcelProperty(value = {"${deviceType}", "班次", "班次"}, index = 1)
|
||||||
|
// private String classes;
|
||||||
|
|
||||||
|
/** |
||||||
|
* 冷冻水进水温度℃ |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "蒸发器", "冷冻水进水温度℃"}, index = 1) |
||||||
|
private BigDecimal tempInChillerWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷冻水出水温度℃ |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "蒸发器", "冷冻水出水温度℃"}, index = 2) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempOutChillerWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设计流量% |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "蒸发器", "设计流量%"}, index = 3) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal designFlow; |
||||||
|
|
||||||
|
/** |
||||||
|
* 蒸发器压力kpa |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "蒸发器", "蒸发器压力kpa"}, index = 4) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressEvapSaturation; |
||||||
|
|
||||||
|
/** |
||||||
|
* 蒸发器饱和温度℃ |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "蒸发器", "蒸发器饱和温度℃"}, index = 5) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempEvapSaturation; |
||||||
|
|
||||||
|
/** |
||||||
|
* 趋近温度℃ |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "蒸发器", "趋近温度℃"}, index = 6) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempEvapApproaching; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷却水进水温度℃ |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷凝器", "冷却水进水温度℃"}, index = 7) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempInCoolingWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷却水出水温度℃ |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷凝器", "冷却水出水温度℃"}, index = 8) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempOutCoolingWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷凝器压力kpa |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷凝器", "冷凝器压力kpa"}, index = 9) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressCondenserSaturation; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷凝器饱和温度℃ |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷凝器", "冷凝器饱和温度℃"}, index = 10) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempCondenserSaturation; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷凝器趋近温度℃ |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷凝器", "趋近温度℃"}, index = 11) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempCondenserApproaching; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷冻水设定值 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "系统", "冷冻水设定值℃"}, index = 12) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal setChillerWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷水机需求% |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "系统", "冷水机需求%"}, index = 13) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal setLoad; |
||||||
|
|
||||||
|
/** |
||||||
|
* 总电流A |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "系统", "总电流A"}, index = 14) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal currentTotal; |
||||||
|
|
||||||
|
/** |
||||||
|
* 总输入功率kw |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "系统", "总输入功率kw"}, index = 15) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal inputPowerTotal; |
||||||
|
|
||||||
|
/** |
||||||
|
* 压缩比 |
||||||
|
*/ |
||||||
|
// @ExcelProperty(value = {"${deviceType}", "系统", "压缩比"}, index = 16)
|
||||||
|
// @ColumnWidth(10)
|
||||||
|
// private BigDecimal ratioComp;
|
||||||
|
|
||||||
|
/** |
||||||
|
* 压缩比1 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "系统", "1#压缩机压缩比"}, index = 16) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal ratioCompOne; |
||||||
|
|
||||||
|
/** |
||||||
|
* 压缩比2 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "系统", "2#压缩机压缩比"}, index = 17) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal ratioCompTwo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 压缩比3 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "系统", "3#压缩机压缩比"}, index = 18) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal ratioCompThree; |
||||||
|
|
||||||
|
/** |
||||||
|
* 膨胀阀开度% |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "系统", "膨胀阀开度%"}, index = 19) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal openExv; |
||||||
|
|
||||||
|
/** |
||||||
|
* 运行中的压缩机数量 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "系统", "运行中的压缩机数量"}, index = 20) |
||||||
|
@ColumnWidth(10) |
||||||
|
private Integer runCompNum; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷冻水泵频率hz |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷冻泵", "冷冻水泵频率hz"}, index = 21) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal frequencyChiller; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷冻水进水压力kpa |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷冻泵", "冷冻水进水压力kpa"}, index = 22) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressInChillerWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷冻水出水压力kpa |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷冻泵", "冷冻水出水压力kpa"}, index = 23) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressOutChillerWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷却水泵频率hz |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷却泵", "冷却水泵频率hz"}, index = 24) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal frequencyCooling; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷却水进水压力kpa |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷却泵", "冷却水进水压力kpa"}, index = 25) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressInCoolingWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷却水出水压力kpa |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷却泵", "冷却水出水压力kpa"}, index = 26) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressOutCoolingWater; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷却塔频率hz |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷却塔", "冷却塔频率hz"}, index = 27) |
||||||
|
private BigDecimal frequencyCoolingTower; |
||||||
|
|
||||||
|
/** |
||||||
|
* 冷却塔运行数量(原注释可能有误,根据列名调整) |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "冷却塔", "冷却塔运行数量"}, index = 28) |
||||||
|
private Integer runCoolingTower; |
||||||
|
|
||||||
|
/** |
||||||
|
* 室外温度℃ |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "室外温度℃", "室外温度℃"}, index = 29) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempOutdoor; |
||||||
|
|
||||||
|
/** |
||||||
|
* 室外湿度% |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "室外湿度%", "室外湿度%"}, index = 30) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal humidityOutdoor; |
||||||
|
|
||||||
|
/** |
||||||
|
* 恒压补水罐压力 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "恒压补水罐压力MPa", "恒压补水罐压力MPa"}, index = 31) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressConstantWaterTank; |
||||||
|
|
||||||
|
/** |
||||||
|
* 巡查记录人 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 32) |
||||||
|
@ColumnWidth(20) |
||||||
|
private String recorder; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,179 @@ |
|||||||
|
package com.mh.common.core.domain.dto; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty; |
||||||
|
import com.alibaba.excel.annotation.write.style.*; |
||||||
|
import com.alibaba.excel.enums.poi.BorderStyleEnum; |
||||||
|
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project NewZhujiang_Server |
||||||
|
* @description 采暖系统参数报表 |
||||||
|
* @date 2024-05-30 11:00:12 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@NoArgsConstructor |
||||||
|
@Accessors(chain = true) |
||||||
|
@HeadRowHeight(25) |
||||||
|
@HeadFontStyle(fontHeightInPoints = 14) |
||||||
|
@ContentFontStyle(fontHeightInPoints = 13) |
||||||
|
@ContentRowHeight(20) |
||||||
|
@ContentStyle( |
||||||
|
horizontalAlignment = HorizontalAlignmentEnum.CENTER, |
||||||
|
borderBottom = BorderStyleEnum.THIN, |
||||||
|
borderLeft = BorderStyleEnum.THIN, |
||||||
|
borderRight = BorderStyleEnum.THIN, |
||||||
|
borderTop = BorderStyleEnum.THIN |
||||||
|
) |
||||||
|
@ColumnWidth(10) |
||||||
|
public class ReportHeatingRunParamDTO { |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前时间 |
||||||
|
*/ |
||||||
|
@ColumnWidth(17) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "时间"}, index = 0) |
||||||
|
private String curTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前状态 |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "运行状态"}, index = 1) |
||||||
|
private String runStatusBoilerOne; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设定温度 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "设定温度(℃)"}, index = 2) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempSetBoilerOne; |
||||||
|
/** |
||||||
|
* 出水温度 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "出水温度(℃)"}, index = 3) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempOutBoilerOne; |
||||||
|
|
||||||
|
/** |
||||||
|
* 回水温度 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "回水温度(℃)"}, index = 4) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempInBoilerOne; |
||||||
|
|
||||||
|
/** |
||||||
|
* 炉水温度 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "炉水温度(℃)"}, index = 5) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempWaterBoilerOne; |
||||||
|
|
||||||
|
/** |
||||||
|
* 烟道温度(℃) |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "1号采暖设备", "烟道温度(℃)"}, index = 6) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempFlueGasBoilerOne; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前状态 |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "运行状态"}, index = 7) |
||||||
|
private String runStatusBoilerTwo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设定温度 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "设定温度(℃)"}, index = 8) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempSetBoilerTwo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 出水温度 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "出水温度(℃)"}, index = 9) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempOutBoilerTwo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 回水温度 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "回水温度(℃)"}, index = 10) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempInBoilerTwo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 炉水温度 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "炉水温度(℃)"}, index = 11) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempWaterBoilerTwo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 烟道温度(℃) |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "2号采暖设备", "烟道温度(℃)"}, index = 12) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempFlueGasBoilerTwo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前状态 |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "1号采暖泵", "运行状态"}, index = 13) |
||||||
|
private String runStatusPumpOne; |
||||||
|
|
||||||
|
/** |
||||||
|
* 频率 |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "1号采暖泵", "频率(Hz)"}, index = 14) |
||||||
|
private BigDecimal frequencyPumpOne; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前状态 |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "2号采暖泵", "运行状态"}, index = 15) |
||||||
|
private String runStatusPumpTwo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 频率 |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "2号采暖泵", "频率(Hz)"}, index = 16) |
||||||
|
private BigDecimal frequencyPumpTwo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前状态 |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "3号采暖泵", "运行状态"}, index = 17) |
||||||
|
private String runStatusPumpThree; |
||||||
|
|
||||||
|
/** |
||||||
|
* 频率 |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "3号采暖泵", "频率(Hz)"}, index = 18) |
||||||
|
private BigDecimal frequencyPumpThree; |
||||||
|
|
||||||
|
// 巡查记录人
|
||||||
|
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 19) |
||||||
|
@ColumnWidth(20) |
||||||
|
private String recorder; |
||||||
|
|
||||||
|
// 备注信息
|
||||||
|
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 20) |
||||||
|
@ColumnWidth(20) |
||||||
|
private String remark; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
package com.mh.common.core.domain.dto; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 接收前端经过deepseek结构化后的请求 |
||||||
|
* @date 2026-02-27 10:18:04 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class ReportRequestDTO { |
||||||
|
|
||||||
|
private String reportType; // 报表类型,如 "能效报表"
|
||||||
|
private String timeRange; // 时间范围,如 "昨天"、"2026-02-01至2026-02-07"
|
||||||
|
private String format; // 输出格式: word, excel, pdf
|
||||||
|
private Boolean watermark; // 是否需要水印 (默认true)
|
||||||
|
private String watermarkText; // 自定义水印文字,若为空则使用默认
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,135 @@ |
|||||||
|
package com.mh.common.core.domain.dto; |
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty; |
||||||
|
import com.alibaba.excel.annotation.write.style.*; |
||||||
|
import com.alibaba.excel.enums.poi.BorderStyleEnum; |
||||||
|
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
import lombok.experimental.Accessors; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project NewZhujiang_Server |
||||||
|
* @description 蒸汽机系统参数报表 |
||||||
|
* @date 2024-05-30 11:00:12 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@NoArgsConstructor |
||||||
|
@Accessors(chain = true) |
||||||
|
@HeadRowHeight(25) |
||||||
|
@HeadFontStyle(fontHeightInPoints = 14) |
||||||
|
@ContentFontStyle(fontHeightInPoints = 13) |
||||||
|
@ContentRowHeight(20) |
||||||
|
@ContentStyle( |
||||||
|
horizontalAlignment = HorizontalAlignmentEnum.CENTER, |
||||||
|
borderBottom = BorderStyleEnum.THIN, |
||||||
|
borderLeft = BorderStyleEnum.THIN, |
||||||
|
borderRight = BorderStyleEnum.THIN, |
||||||
|
borderTop = BorderStyleEnum.THIN |
||||||
|
) |
||||||
|
@ColumnWidth(10) |
||||||
|
public class ReportSteamRunParamDTO { |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前时间 |
||||||
|
*/ |
||||||
|
@ColumnWidth(17) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "时间"}, index = 0) |
||||||
|
private String curTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前状态 |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "当前状态", "当前状态"}, index = 1) |
||||||
|
private String curStatus; |
||||||
|
|
||||||
|
/** |
||||||
|
* 火焰强度 |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "火焰强度", "火焰强度"}, index = 2) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal flameIntensity; |
||||||
|
|
||||||
|
/** |
||||||
|
* 烟气温度(℃) |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "烟气温度(℃)", "烟气温度(℃)"}, index = 3) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempFlueGas; |
||||||
|
|
||||||
|
/** |
||||||
|
* 火焰百分比(%) |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "火焰百分比(%)", "火焰百分比(%)"}, index = 4) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal percentFlameIntensity; |
||||||
|
|
||||||
|
/** |
||||||
|
* 液位(%) |
||||||
|
*/ |
||||||
|
@ColumnWidth(10) |
||||||
|
@ExcelProperty(value = {"${deviceType}", "液位(%)", "液位(%)"}, index = 5) |
||||||
|
private BigDecimal waterLevel; |
||||||
|
|
||||||
|
/** |
||||||
|
* 蒸汽温度(℃) |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "蒸汽温度(℃)", "蒸汽温度(℃)"}, index = 6) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal tempCur; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当前压力(Mpa) |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "当前压力(Mpa)", "当前压力(Mpa)"}, index = 7) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressCur; |
||||||
|
|
||||||
|
/** |
||||||
|
* 压力设定值(Mpa) |
||||||
|
*/ |
||||||
|
@ExcelProperty(value = {"${deviceType}", "压力设定值(Mpa)", "压力设定值(Mpa)"}, index = 8) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressSet; |
||||||
|
|
||||||
|
// 启动压差(Mpa)
|
||||||
|
@ExcelProperty(value = {"${deviceType}", "启动压差(Mpa)", "启动压差(Mpa)"}, index = 9) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressStartDiff; |
||||||
|
|
||||||
|
// 停止压差(Mpa)
|
||||||
|
@ExcelProperty(value = {"${deviceType}", "停止压差(Mpa)", "停止压差(Mpa)"}, index = 10) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressShutdownDiff; |
||||||
|
|
||||||
|
// 瞬时压力(Mpa)
|
||||||
|
@ExcelProperty(value = {"${deviceType}", "瞬时压力(Mpa)", "瞬时压力(Mpa)"}, index = 11) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal pressInstance; |
||||||
|
|
||||||
|
// 瞬时流量(t/h)
|
||||||
|
@ExcelProperty(value = {"${deviceType}", "瞬时流量(t/h)", "瞬时流量(t/h)"}, index = 12) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal flowInstance; |
||||||
|
|
||||||
|
// 累积流量(t)
|
||||||
|
@ExcelProperty(value = {"${deviceType}", "累积流量(t)", "累积流量(t)"}, index = 13) |
||||||
|
@ColumnWidth(10) |
||||||
|
private BigDecimal flowTotal; |
||||||
|
|
||||||
|
// 巡查记录人
|
||||||
|
@ExcelProperty(value = {"${deviceType}", "巡查记录人", "巡查记录人"}, index = 14) |
||||||
|
@ColumnWidth(20) |
||||||
|
private String recorder; |
||||||
|
|
||||||
|
// 备注信息
|
||||||
|
@ExcelProperty(value = {"${deviceType}", "备注", "备注"}, index = 15) |
||||||
|
@ColumnWidth(20) |
||||||
|
private String remark; |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,217 @@ |
|||||||
|
package com.mh.common.core.domain.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.*; |
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore; |
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude; |
||||||
|
import com.mh.common.core.domain.BaseEntity; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.Getter; |
||||||
|
import lombok.Setter; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.time.LocalDate; |
||||||
|
import java.time.LocalDateTime; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.StringJoiner; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 采暖系统运行记录表 |
||||||
|
* @date 2025-10-21 10:26:12 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@TableName("report_heating_run_param_his") // 指定数据库表名
|
||||||
|
public class ReportHeatingRunParamHis extends BaseEntity { |
||||||
|
|
||||||
|
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||||
|
private String id; |
||||||
|
|
||||||
|
// 日期
|
||||||
|
@TableField("cur_date") // 字段映射(可选,若字段名与属性名不一致时需指定)
|
||||||
|
private LocalDate curDate; |
||||||
|
|
||||||
|
// 时间
|
||||||
|
@TableField("cur_time") |
||||||
|
private String curTime; // 字符串类型直接映射
|
||||||
|
|
||||||
|
// 班次
|
||||||
|
@TableField("classes") |
||||||
|
private String classes; |
||||||
|
|
||||||
|
// 锅炉1状态
|
||||||
|
@TableField("cur_status_boiler_one") |
||||||
|
private Integer curStatusBoilerOne; |
||||||
|
|
||||||
|
// 锅炉1状态
|
||||||
|
@TableField(exist = false) |
||||||
|
private String runStatusBoilerOne; |
||||||
|
|
||||||
|
// 锅炉1出水温度(℃)
|
||||||
|
@TableField("temp_out_boiler_one") |
||||||
|
private BigDecimal tempOutBoilerOne; // 精度要求高时使用BigDecimal
|
||||||
|
|
||||||
|
// 锅炉1设定温度(℃)
|
||||||
|
@TableField("temp_set_boiler_one") |
||||||
|
private BigDecimal tempSetBoilerOne; // 精度要求高时使用BigDecimal
|
||||||
|
|
||||||
|
// 锅炉1回水温度(℃)
|
||||||
|
@TableField("temp_in_boiler_one") |
||||||
|
private BigDecimal tempInBoilerOne; |
||||||
|
|
||||||
|
// 锅炉1炉水温度(℃)
|
||||||
|
@TableField("temp_water_boiler_one") |
||||||
|
private BigDecimal tempWaterBoilerOne; |
||||||
|
|
||||||
|
// 锅炉1烟道温度(℃)
|
||||||
|
@TableField("temp_flue_gas_boiler_one") |
||||||
|
private BigDecimal tempFlueGasBoilerOne; |
||||||
|
|
||||||
|
// 锅炉2状态
|
||||||
|
@TableField("cur_status_boiler_two") |
||||||
|
private Integer curStatusBoilerTwo; |
||||||
|
|
||||||
|
// 锅炉2状态
|
||||||
|
@TableField(exist = false) |
||||||
|
private String runStatusBoilerTwo; |
||||||
|
|
||||||
|
// 锅炉2设定温度(℃)
|
||||||
|
@TableField("temp_set_boiler_two") |
||||||
|
private BigDecimal tempSetBoilerTwo; // 精度要求高时使用BigDecimal
|
||||||
|
|
||||||
|
// 锅炉2出水温度(℃)
|
||||||
|
@TableField("temp_out_boiler_two") |
||||||
|
private BigDecimal tempOutBoilerTwo; |
||||||
|
|
||||||
|
// 锅炉2回水温度(℃)
|
||||||
|
@TableField("temp_in_boiler_two") |
||||||
|
private BigDecimal tempInBoilerTwo; |
||||||
|
|
||||||
|
// 锅炉2炉水温度(℃)
|
||||||
|
@TableField("temp_water_boiler_two") |
||||||
|
private BigDecimal tempWaterBoilerTwo; |
||||||
|
|
||||||
|
// 锅炉2烟道温度(℃)
|
||||||
|
@TableField("temp_flue_gas_boiler_two") |
||||||
|
private BigDecimal tempFlueGasBoilerTwo; |
||||||
|
|
||||||
|
// 采暖泵1状态
|
||||||
|
@TableField("cur_status_pump_one") |
||||||
|
private Integer curStatusPumpOne; |
||||||
|
|
||||||
|
// 采暖泵1状态
|
||||||
|
@TableField(exist = false) |
||||||
|
private String runStatusPumpOne; |
||||||
|
|
||||||
|
// 采暖泵1频率(Hz)
|
||||||
|
@TableField("frequency_pump_one") |
||||||
|
private BigDecimal frequencyPumpOne; |
||||||
|
|
||||||
|
// 采暖泵2状态
|
||||||
|
@TableField("cur_status_pump_two") |
||||||
|
private Integer curStatusPumpTwo; |
||||||
|
|
||||||
|
// 采暖泵2状态
|
||||||
|
@TableField(exist = false) |
||||||
|
private String runStatusPumpTwo; |
||||||
|
|
||||||
|
// 采暖泵2频率(Hz)
|
||||||
|
@TableField("frequency_pump_two") |
||||||
|
private BigDecimal frequencyPumpTwo; |
||||||
|
|
||||||
|
// 采暖泵3状态
|
||||||
|
@TableField("cur_status_pump_three") |
||||||
|
private Integer curStatusPumpThree; |
||||||
|
|
||||||
|
// 采暖泵3状态
|
||||||
|
@TableField(exist = false) |
||||||
|
private String runStatusPumpThree; |
||||||
|
|
||||||
|
// 采暖泵3频率(Hz)
|
||||||
|
@TableField("frequency_pump_three") |
||||||
|
private BigDecimal frequencyPumpThree; |
||||||
|
|
||||||
|
// 巡查记录人
|
||||||
|
@TableField("recorder") |
||||||
|
private String recorder; |
||||||
|
|
||||||
|
// 备注
|
||||||
|
@TableField("remark") |
||||||
|
private String remark; |
||||||
|
|
||||||
|
// 创建时间(自动填充)
|
||||||
|
@TableField(value = "create_date", fill = FieldFill.INSERT) // 插入时自动填充
|
||||||
|
private LocalDateTime createDate; |
||||||
|
|
||||||
|
@JsonIgnore |
||||||
|
@TableField(exist = false) |
||||||
|
private String searchValue; |
||||||
|
|
||||||
|
/** |
||||||
|
* 请求参数 |
||||||
|
*/ |
||||||
|
@TableField(exist = false) |
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY) |
||||||
|
private Map<String, Object> params; |
||||||
|
|
||||||
|
/** 创建者 */ |
||||||
|
@JsonIgnore |
||||||
|
@TableField(exist = false) |
||||||
|
private String createBy; |
||||||
|
|
||||||
|
/** 创建时间 */ |
||||||
|
@TableField(exist = false) |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date createTime; |
||||||
|
|
||||||
|
/** 更新者 */ |
||||||
|
@JsonIgnore |
||||||
|
@TableField(exist = false) |
||||||
|
private String updateBy; |
||||||
|
|
||||||
|
/** 更新时间 */ |
||||||
|
@JsonIgnore |
||||||
|
@TableField(exist = false) |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date updateTime; |
||||||
|
|
||||||
|
/** 更新者 */ |
||||||
|
@TableField(exist = false) |
||||||
|
private int pageNum; |
||||||
|
|
||||||
|
/** 更新者 */ |
||||||
|
@TableField(exist = false) |
||||||
|
private int pageSize; |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return new StringJoiner(", ", ReportHeatingRunParamHis.class.getSimpleName() + "[", "]") |
||||||
|
.add("id='" + id + "'") |
||||||
|
.add("curDate=" + curDate) |
||||||
|
.add("curTime='" + curTime + "'") |
||||||
|
.add("classes='" + classes + "'") |
||||||
|
.add("curStatusBoilerOne=" + curStatusBoilerOne) |
||||||
|
.add("tempOutBoilerOne=" + tempOutBoilerOne) |
||||||
|
.add("tempInBoilerOne=" + tempInBoilerOne) |
||||||
|
.add("tempWaterBoilerOne=" + tempWaterBoilerOne) |
||||||
|
.add("tempFlueGasBoilerOne=" + tempFlueGasBoilerOne) |
||||||
|
.add("curStatusBoilerTwo=" + curStatusBoilerTwo) |
||||||
|
.add("tempOutBoilerTwo=" + tempOutBoilerTwo) |
||||||
|
.add("tempInBoilerTwo=" + tempInBoilerTwo) |
||||||
|
.add("tempWaterBoilerTwo=" + tempWaterBoilerTwo) |
||||||
|
.add("tempFlueGasBoilerTwo=" + tempFlueGasBoilerTwo) |
||||||
|
.add("curStatusPumpOne=" + curStatusPumpOne) |
||||||
|
.add("frequencyPumpOne=" + frequencyPumpOne) |
||||||
|
.add("curStatusPumpTwo=" + curStatusPumpTwo) |
||||||
|
.add("frequencyPumpTwo=" + frequencyPumpTwo) |
||||||
|
.add("curStatusPumpThree=" + curStatusPumpThree) |
||||||
|
.add("frequencyPumpThree=" + frequencyPumpThree) |
||||||
|
.add("recorder='" + recorder + "'") |
||||||
|
.add("remark='" + remark + "'") |
||||||
|
.add("createDate=" + createDate) |
||||||
|
.toString(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,114 @@ |
|||||||
|
package com.mh.common.core.domain.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||||
|
import lombok.Getter; |
||||||
|
import lombok.Setter; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.StringJoiner; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 设备抄表记录表 |
||||||
|
* @date 2025-10-21 10:26:12 |
||||||
|
*/ |
||||||
|
@Setter |
||||||
|
@Getter |
||||||
|
public class ReportMeterReadingsHis { |
||||||
|
|
||||||
|
@TableId(value = "id", type = IdType.ASSIGN_UUID) |
||||||
|
private String id; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设备类型 |
||||||
|
*/ |
||||||
|
private String mtType; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设备位置 |
||||||
|
*/ |
||||||
|
private String location; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设备编号 |
||||||
|
*/ |
||||||
|
private String mtNum; |
||||||
|
|
||||||
|
/** |
||||||
|
* 昨日抄表读数 |
||||||
|
*/ |
||||||
|
private BigDecimal yesterdayReading; |
||||||
|
|
||||||
|
/** |
||||||
|
* 昨日抄表时间 |
||||||
|
*/ |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date yesterdayTimestamp; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当日抄表读数 |
||||||
|
*/ |
||||||
|
private BigDecimal todayReading; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当日抄表时间 |
||||||
|
*/ |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date todayTimestamp; |
||||||
|
|
||||||
|
/** |
||||||
|
* 设备倍率 |
||||||
|
*/ |
||||||
|
private int mtRatio; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当日总读数*设备倍率 |
||||||
|
*/ |
||||||
|
private BigDecimal total; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当日单价 |
||||||
|
*/ |
||||||
|
private BigDecimal unitPrice; |
||||||
|
|
||||||
|
/** |
||||||
|
* 当日金额 |
||||||
|
*/ |
||||||
|
private BigDecimal cost; |
||||||
|
|
||||||
|
/** |
||||||
|
* 记录创建时间 |
||||||
|
*/ |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date createTime; |
||||||
|
|
||||||
|
/** |
||||||
|
* 排序序号 |
||||||
|
*/ |
||||||
|
private int sortOrder; |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return new StringJoiner(", ", ReportMeterReadingsHis.class.getSimpleName() + "[", "]") |
||||||
|
.add("id='" + id + "'") |
||||||
|
.add("mtType='" + mtType + "'") |
||||||
|
.add("location='" + location + "'") |
||||||
|
.add("mtNum='" + mtNum + "'") |
||||||
|
.add("yesterdayReading=" + yesterdayReading) |
||||||
|
.add("yesterdayTimestamp=" + yesterdayTimestamp) |
||||||
|
.add("todayReading=" + todayReading) |
||||||
|
.add("todayTimestamp=" + todayTimestamp) |
||||||
|
.add("mtRatio=" + mtRatio) |
||||||
|
.add("total=" + total) |
||||||
|
.add("unitPrice=" + unitPrice) |
||||||
|
.add("cost=" + cost) |
||||||
|
.add("createTime=" + createTime) |
||||||
|
.add("sortOrder=" + sortOrder) |
||||||
|
.toString(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,170 @@ |
|||||||
|
package com.mh.common.core.domain.entity; |
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore; |
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude; |
||||||
|
import com.mh.common.core.domain.BaseEntity; |
||||||
|
import lombok.Getter; |
||||||
|
import lombok.Setter; |
||||||
|
|
||||||
|
import java.io.Serial; |
||||||
|
import java.io.Serializable; |
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.time.LocalDate; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.StringJoiner; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 生活热水供水热泵运行情况 |
||||||
|
* @date 2025-10-22 17:40:03 |
||||||
|
*/ |
||||||
|
@Setter |
||||||
|
@Getter |
||||||
|
@TableName("report_steam_run_param_his") |
||||||
|
public class ReportSteamRunParamHis extends BaseEntity implements Serializable { |
||||||
|
|
||||||
|
// 主键
|
||||||
|
@Serial |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
|
||||||
|
@TableId(value = "id", type = IdType.AUTO) |
||||||
|
private Long id; |
||||||
|
|
||||||
|
// 记录日期
|
||||||
|
private LocalDate curDate; |
||||||
|
|
||||||
|
// 记录时间(varchar格式)
|
||||||
|
private String curTime; |
||||||
|
|
||||||
|
// 班次
|
||||||
|
private String classes; |
||||||
|
|
||||||
|
// 蒸汽机状态字
|
||||||
|
private Integer curStatus; |
||||||
|
|
||||||
|
// 运行状态
|
||||||
|
// @JsonIgnore
|
||||||
|
@TableField(exist = false) |
||||||
|
private String runStatus; |
||||||
|
|
||||||
|
// 火焰强度
|
||||||
|
private BigDecimal flameIntensity; |
||||||
|
|
||||||
|
// 烟气温度(℃)
|
||||||
|
private BigDecimal tempFlueGas; |
||||||
|
|
||||||
|
// 火焰百分比(%)
|
||||||
|
private BigDecimal percentFlameIntensity; |
||||||
|
|
||||||
|
// 液位(%)
|
||||||
|
private BigDecimal waterLevel; |
||||||
|
|
||||||
|
// 蒸汽温度(℃)
|
||||||
|
private BigDecimal tempCur; |
||||||
|
|
||||||
|
// 当前压力(Mpa)
|
||||||
|
private BigDecimal pressCur; |
||||||
|
|
||||||
|
// 压力设定值(Mpa)
|
||||||
|
private BigDecimal pressSet; |
||||||
|
|
||||||
|
// 启动压差(Mpa)
|
||||||
|
private BigDecimal pressStartDiff; |
||||||
|
|
||||||
|
// 停止压差(Mpa)
|
||||||
|
private BigDecimal pressShutdownDiff; |
||||||
|
|
||||||
|
// 瞬时压力(Mpa)
|
||||||
|
private BigDecimal pressInstance; |
||||||
|
|
||||||
|
// 瞬时流量(t/h)
|
||||||
|
private BigDecimal flowInstance; |
||||||
|
|
||||||
|
// 累积流量(t)
|
||||||
|
private BigDecimal flowTotal; |
||||||
|
|
||||||
|
// 巡查记录人
|
||||||
|
private String recorder; |
||||||
|
|
||||||
|
// 备注信息
|
||||||
|
private String remark; |
||||||
|
|
||||||
|
@JsonIgnore |
||||||
|
@TableField(exist = false) |
||||||
|
private String searchValue; |
||||||
|
|
||||||
|
/** |
||||||
|
* 请求参数 |
||||||
|
*/ |
||||||
|
@TableField(exist = false) |
||||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY) |
||||||
|
private Map<String, Object> params; |
||||||
|
|
||||||
|
/** 创建者 */ |
||||||
|
@JsonIgnore |
||||||
|
@TableField(exist = false) |
||||||
|
private String createBy; |
||||||
|
|
||||||
|
/** 创建时间 */ |
||||||
|
@TableField(exist = false) |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date createTime; |
||||||
|
|
||||||
|
/** 更新者 */ |
||||||
|
@JsonIgnore |
||||||
|
@TableField(exist = false) |
||||||
|
private String updateBy; |
||||||
|
|
||||||
|
/** 更新时间 */ |
||||||
|
@JsonIgnore |
||||||
|
@TableField(exist = false) |
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
||||||
|
private Date updateTime; |
||||||
|
|
||||||
|
/** 更新者 */ |
||||||
|
@TableField(exist = false) |
||||||
|
private int pageNum; |
||||||
|
|
||||||
|
/** 更新者 */ |
||||||
|
@TableField(exist = false) |
||||||
|
private int pageSize; |
||||||
|
|
||||||
|
@Override |
||||||
|
public String toString() { |
||||||
|
return new StringJoiner(", ", ReportSteamRunParamHis.class.getSimpleName() + "[", "]") |
||||||
|
.add("id='" + id + "'") |
||||||
|
.add("curDate=" + curDate) |
||||||
|
.add("curTime='" + curTime + "'") |
||||||
|
.add("classes='" + classes + "'") |
||||||
|
.add("curStatus=" + curStatus) |
||||||
|
.add("flameIntensity=" + flameIntensity) |
||||||
|
.add("tempFlueGas=" + tempFlueGas) |
||||||
|
.add("percentFlameIntensity=" + percentFlameIntensity) |
||||||
|
.add("waterLevel=" + waterLevel) |
||||||
|
.add("tempCur=" + tempCur) |
||||||
|
.add("pressCur=" + pressCur) |
||||||
|
.add("pressSet=" + pressSet) |
||||||
|
.add("pressStartDiff=" + pressStartDiff) |
||||||
|
.add("pressShutdownDiff=" + pressShutdownDiff) |
||||||
|
.add("pressInstance=" + pressInstance) |
||||||
|
.add("flowInstance=" + flowInstance) |
||||||
|
.add("flowTotal=" + flowTotal) |
||||||
|
.add("recorder='" + recorder + "'") |
||||||
|
.add("remark='" + remark + "'") |
||||||
|
.add("searchValue='" + searchValue + "'") |
||||||
|
.add("params=" + params) |
||||||
|
.add("createBy='" + createBy + "'") |
||||||
|
.add("createTime=" + createTime) |
||||||
|
.add("updateBy='" + updateBy + "'") |
||||||
|
.add("updateTime=" + updateTime) |
||||||
|
.toString(); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,53 @@ |
|||||||
|
package com.mh.common.core.domain.vo; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 辅助计算类 |
||||||
|
* @date 2026-01-28 14:27:20 |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
public class CollectionParamsManageDataVO { |
||||||
|
|
||||||
|
// getter方法
|
||||||
|
private String deviceName; |
||||||
|
private String mtNum; |
||||||
|
private Integer orderNum; |
||||||
|
private String systemType; |
||||||
|
private String deviceType; |
||||||
|
private String otherName; |
||||||
|
private String paramType; |
||||||
|
private BigDecimal curValue; |
||||||
|
private Date curTime; |
||||||
|
private Integer grade; |
||||||
|
private Integer status; |
||||||
|
|
||||||
|
// 构造函数
|
||||||
|
public CollectionParamsManageDataVO(Map<String, Object> map) { |
||||||
|
this.deviceName = (String) map.get("device_name"); |
||||||
|
this.mtNum = (String) map.get("mt_num"); |
||||||
|
this.orderNum = map.get("order_num") instanceof Integer ? |
||||||
|
(Integer) map.get("order_num") : |
||||||
|
(map.get("order_num") != null ? Integer.valueOf(map.get("order_num").toString()) : null); |
||||||
|
this.systemType = (String) map.get("system_type"); |
||||||
|
this.deviceType = (String) map.get("device_type"); |
||||||
|
this.otherName = (String) map.get("other_name"); |
||||||
|
this.paramType = (String) map.get("param_type"); |
||||||
|
this.curValue = map.get("cur_value") instanceof BigDecimal ? |
||||||
|
(BigDecimal) map.get("cur_value") : |
||||||
|
(map.get("cur_value") != null ? new BigDecimal(map.get("cur_value").toString()) : BigDecimal.ZERO); |
||||||
|
this.curTime = (Date) map.get("cur_time"); |
||||||
|
this.grade = map.get("grade") instanceof Integer ? |
||||||
|
(Integer) map.get("grade") : |
||||||
|
(map.get("grade") != null ? Integer.valueOf(map.get("grade").toString()) : null); |
||||||
|
this.status = (Integer) map.get("status"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,74 @@ |
|||||||
|
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); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -1,39 +0,0 @@ |
|||||||
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; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -0,0 +1,49 @@ |
|||||||
|
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)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,29 @@ |
|||||||
|
package com.mh.framework.config; |
||||||
|
|
||||||
|
import org.springframework.context.annotation.Configuration; |
||||||
|
import org.springframework.scheduling.annotation.EnableAsync; |
||||||
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; |
||||||
|
|
||||||
|
import java.util.concurrent.Executor; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 自定义线程池 |
||||||
|
* @date 2026-02-27 11:41:52 |
||||||
|
*/ |
||||||
|
@Configuration |
||||||
|
@EnableAsync |
||||||
|
public class AsyncConfig { |
||||||
|
// 可选:自定义线程池
|
||||||
|
public Executor taskExecutor() { |
||||||
|
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); |
||||||
|
executor.setCorePoolSize(5); |
||||||
|
executor.setMaxPoolSize(10); |
||||||
|
executor.setQueueCapacity(100); |
||||||
|
executor.setThreadNamePrefix("async-"); |
||||||
|
executor.initialize(); |
||||||
|
return executor; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,11 @@ |
|||||||
|
package com.mh.quartz.domain; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Classname FuzzyLevel |
||||||
|
* Todo: |
||||||
|
* @Date 2025-05-31 14:19 |
||||||
|
* @Created by LJF |
||||||
|
*/ |
||||||
|
public enum FuzzyLevel { |
||||||
|
NB, NM, NS, ZO, PS, PM, PB; // 极小,较小,小,零,稍大,较大,极大
|
||||||
|
} |
||||||
@ -0,0 +1,52 @@ |
|||||||
|
package com.mh.quartz.domain; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description PID参数 |
||||||
|
* @date 2025-05-30 13:51:22 |
||||||
|
*/ |
||||||
|
public class PIDParams { |
||||||
|
|
||||||
|
private volatile double kp; // 比例系数
|
||||||
|
private volatile double ki; // 积分系数
|
||||||
|
private volatile double kd; // 微分系数
|
||||||
|
|
||||||
|
public PIDParams(double kp, double ki, double kd) { |
||||||
|
this.kp = kp; |
||||||
|
this.ki = ki; |
||||||
|
this.kd = kd; |
||||||
|
} |
||||||
|
|
||||||
|
// 动态更新PID参数
|
||||||
|
public void updateParams(double kp, double ki, double kd) { |
||||||
|
this.kp = kp; |
||||||
|
this.ki = ki; |
||||||
|
this.kd = kd; |
||||||
|
} |
||||||
|
|
||||||
|
public double getKp() { |
||||||
|
return kp; |
||||||
|
} |
||||||
|
|
||||||
|
public void setKp(double kp) { |
||||||
|
this.kp = kp; |
||||||
|
} |
||||||
|
|
||||||
|
public double getKi() { |
||||||
|
return ki; |
||||||
|
} |
||||||
|
|
||||||
|
public void setKi(double ki) { |
||||||
|
this.ki = ki; |
||||||
|
} |
||||||
|
|
||||||
|
public double getKd() { |
||||||
|
return kd; |
||||||
|
} |
||||||
|
|
||||||
|
public void setKd(double kd) { |
||||||
|
this.kd = kd; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,387 @@ |
|||||||
|
package com.mh.quartz.task; |
||||||
|
|
||||||
|
import com.mh.common.config.MHConfig; |
||||||
|
import com.mh.common.core.domain.entity.CollectionParamsManage; |
||||||
|
import com.mh.common.core.domain.entity.CpmSpaceRelation; |
||||||
|
import com.mh.common.core.domain.entity.OrderEntity; |
||||||
|
import com.mh.common.core.domain.entity.PolicyManage; |
||||||
|
import com.mh.common.utils.DateUtils; |
||||||
|
import com.mh.framework.mqtt.service.IMqttGatewayService; |
||||||
|
import com.mh.quartz.util.AHUPIDControlUtil; |
||||||
|
import com.mh.quartz.util.FuzzyPIDControlUtil; |
||||||
|
import com.mh.system.service.device.ICollectionParamsManageService; |
||||||
|
import com.mh.system.service.operation.IOperationDeviceService; |
||||||
|
import com.mh.system.service.policy.IPolicyManageService; |
||||||
|
import com.mh.system.service.space.ICpmSpaceRelationService; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.beans.factory.annotation.Value; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.time.LocalTime; |
||||||
|
import java.util.*; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author LJF |
||||||
|
* @version 1.0 |
||||||
|
* @project EEMCS |
||||||
|
* @description 风柜系统任务 |
||||||
|
* @date 2025-05-30 08:36:43 |
||||||
|
*/ |
||||||
|
@Slf4j |
||||||
|
@Component("ahuTask") |
||||||
|
public class AHUTask { |
||||||
|
|
||||||
|
@Value("${control.topic}") |
||||||
|
String controlTopic; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private MHConfig mhConfig; |
||||||
|
|
||||||
|
private final ICollectionParamsManageService collectionParamsManageService; |
||||||
|
|
||||||
|
private final IPolicyManageService policyManageService; |
||||||
|
|
||||||
|
private final ICpmSpaceRelationService cpmSpaceRelationService; |
||||||
|
|
||||||
|
private final IOperationDeviceService iOperationService; |
||||||
|
|
||||||
|
private final IMqttGatewayService iMqttGatewayService; |
||||||
|
|
||||||
|
// 在 AHUTask 类中添加一个 PID 控制器成员变量
|
||||||
|
private final Map<String, FuzzyPIDControlUtil> pidControllers = new HashMap<>(); |
||||||
|
|
||||||
|
private final List<String> ahuList = List.of("ddc13_0211385", // 软件2号
|
||||||
|
"ddc13_0211485", // 软件3号
|
||||||
|
"ddc14_01185", // 硬件2号
|
||||||
|
"ddc14_01285", // 硬件3号
|
||||||
|
"ddc13_1510085", // 远程手自动启停
|
||||||
|
"ddc13_1510185" // 时间表启停
|
||||||
|
); |
||||||
|
|
||||||
|
@Autowired |
||||||
|
public AHUTask(ICollectionParamsManageService collectionParamsManageService, IPolicyManageService policyManageService, ICpmSpaceRelationService cpmSpaceRelationService, IOperationDeviceService iOperationService, IMqttGatewayService iMqttGatewayService) { |
||||||
|
this.collectionParamsManageService = collectionParamsManageService; |
||||||
|
this.policyManageService = policyManageService; |
||||||
|
this.cpmSpaceRelationService = cpmSpaceRelationService; |
||||||
|
this.iOperationService = iOperationService; |
||||||
|
this.iMqttGatewayService = iMqttGatewayService; |
||||||
|
} |
||||||
|
|
||||||
|
public void ddc13SendDataToDDC14() throws InterruptedException { |
||||||
|
HashMap<String, Object> queryMap = new HashMap<>(); |
||||||
|
queryMap.put("systemType", "2"); |
||||||
|
queryMap.put("isUse", 0); |
||||||
|
queryMap.put("mtType", "7"); |
||||||
|
List<CollectionParamsManage> collectionParamsManages = collectionParamsManageService.selectListByParams(queryMap); |
||||||
|
List<CollectionParamsManage> list = collectionParamsManages.stream() |
||||||
|
.filter(collectionParamsManage -> ahuList.contains(collectionParamsManage.getMtNum())) |
||||||
|
.toList(); |
||||||
|
if (list.isEmpty()) { |
||||||
|
return; |
||||||
|
} |
||||||
|
// Optional<CollectionParamsManage> twoHardStartStopList = list.stream().filter(val -> val.getMtNum().equals("ddc13_1510085")).findFirst();
|
||||||
|
// boolean present = twoHardStartStopList.isPresent();
|
||||||
|
// CollectionParamsManage threeHardStartStop = new CollectionParamsManage();
|
||||||
|
// if (present) {
|
||||||
|
// threeHardStartStop = twoHardStartStopList.get();
|
||||||
|
// }
|
||||||
|
Optional<CollectionParamsManage> twoHardParamList = list.stream().filter(val -> val.getMtNum().equals("ddc14_01185")).findFirst(); |
||||||
|
Optional<CollectionParamsManage> threeHardParamList = list.stream().filter(val -> val.getMtNum().equals("ddc14_01285")).findFirst(); |
||||||
|
CollectionParamsManage twoHardParam = new CollectionParamsManage(); |
||||||
|
if (twoHardParamList.isPresent()) { |
||||||
|
twoHardParam = twoHardParamList.get(); |
||||||
|
} |
||||||
|
CollectionParamsManage threeHardParam = new CollectionParamsManage(); |
||||||
|
if (threeHardParamList.isPresent()) { |
||||||
|
threeHardParam = threeHardParamList.get(); |
||||||
|
} |
||||||
|
int twoSoftValue = 0; |
||||||
|
int threeSoftValue = 0; |
||||||
|
// 判断远程启停或者时间表启停是否开启来,判断是否存在getCurValue,且当前时间等于今天的时间
|
||||||
|
if (list.stream().anyMatch(val -> |
||||||
|
(val.getMtNum().equals("ddc13_1510085") || val.getMtNum().equals("ddc13_1510185")) |
||||||
|
&& val.getCurValue() != null)) { |
||||||
|
// 判断curTime是否为今天
|
||||||
|
Date now = new Date(); |
||||||
|
boolean isToday = list.stream().anyMatch(val -> |
||||||
|
(val.getMtNum().equals("ddc13_1510085") || val.getMtNum().equals("ddc13_1510185")) |
||||||
|
&& val.getCurTime() != null && DateUtils.isSameDay(val.getCurTime(), now)); |
||||||
|
if (isToday) { |
||||||
|
// 如果curTime是今天,则执行相关逻辑
|
||||||
|
// 可以在这里添加需要执行的代码
|
||||||
|
for (CollectionParamsManage value : list) { |
||||||
|
if (value.getMtNum().contains("ddc13_0211385")) { |
||||||
|
// 2号软件风阀调节
|
||||||
|
twoSoftValue = value.getCurValue().intValue(); |
||||||
|
sendOrderToMqtt(List.of(new OrderEntity(twoHardParam.getId(), String.valueOf(twoSoftValue), 0, twoHardParam.getOtherName()))); |
||||||
|
} else if (value.getMtNum().contains("ddc13_0211485")) { |
||||||
|
// 3号软件风阀调节
|
||||||
|
threeSoftValue = value.getCurValue().intValue(); |
||||||
|
sendOrderToMqtt(List.of(new OrderEntity(threeHardParam.getId(), String.valueOf(threeSoftValue), 0, threeHardParam.getOtherName()))); |
||||||
|
} |
||||||
|
Thread.sleep(2000); |
||||||
|
} |
||||||
|
} else { |
||||||
|
for (CollectionParamsManage value : list) { |
||||||
|
if (value.getMtNum().contains("ddc13_0211385")) { |
||||||
|
if (twoHardParam.getCurValue() != null && twoHardParam.getCurValue().intValue() != 0) { |
||||||
|
// 发送值给2号硬件风阀控制点位
|
||||||
|
sendOrderToMqtt(List.of(new OrderEntity(twoHardParam.getId(), "0", 0, twoHardParam.getOtherName()))); |
||||||
|
} |
||||||
|
} else if (value.getMtNum().contains("ddc13_0211485")) { |
||||||
|
if (threeHardParam.getCurValue() != null && threeHardParam.getCurValue().intValue() != 0) { |
||||||
|
// 发送值给3号硬件风阀控制点位
|
||||||
|
sendOrderToMqtt(List.of(new OrderEntity(threeHardParam.getId(), "0", 0, threeHardParam.getOtherName()))); |
||||||
|
} |
||||||
|
} |
||||||
|
Thread.sleep(2000); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
// else {
|
||||||
|
// for (CollectionParamsManage value : list) {
|
||||||
|
// if (value.getMtNum().contains("ddc13_0211385")) {
|
||||||
|
// if (twoHardParam.getCurValue() != null && twoHardParam.getCurValue().intValue() != 0) {
|
||||||
|
// // 发送值给2号硬件风阀控制点位
|
||||||
|
// sendOrderToMqtt(List.of(new OrderEntity(twoHardParam.getId(), "0", 0, twoHardParam.getOtherName())));
|
||||||
|
// }
|
||||||
|
// } else if (value.getMtNum().contains("ddc13_0211485")) {
|
||||||
|
// if (threeHardParam.getCurValue() != null && threeHardParam.getCurValue().intValue() != 0) {
|
||||||
|
// // 发送值给3号硬件风阀控制点位
|
||||||
|
// sendOrderToMqtt(List.of(new OrderEntity(threeHardParam.getId(), "0", 0, threeHardParam.getOtherName())));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// Thread.sleep(2000);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public void sendOrderToMqtt(List<OrderEntity> changeValues) { |
||||||
|
try { |
||||||
|
String sendOrder = iOperationService.operationDevice(changeValues); |
||||||
|
String name = mhConfig.getName(); |
||||||
|
// 获取mqtt操作队列(后期通过mqtt队列配置发送主题)
|
||||||
|
log.info("发送主题:{},消息:{}", name + "/" + controlTopic, sendOrder); |
||||||
|
iMqttGatewayService.publish(name + "/" + controlTopic, sendOrder, 1); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error("设备操作失败", e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void adjustWaterValve(String kp, String ki, String kd) { |
||||||
|
// 西餐走廊2、宴会走廊需要调整PID参数,其他的ddc自己已经处理好
|
||||||
|
String[] deviceLedgerIds = new String[]{"ddc0083b3a898d85f3a1205a2d82071e100", "ddc0133b3a898d85f3a1205a2d82071e100"}; |
||||||
|
for (String deviceLedgerId : deviceLedgerIds) { |
||||||
|
// 获取西餐走廊2的启停控制
|
||||||
|
HashMap<String, Object> queryMap = new HashMap<>(); |
||||||
|
queryMap.put("systemType", "2"); |
||||||
|
queryMap.put("deviceLedgerId", deviceLedgerId); |
||||||
|
queryMap.put("isUse", 0); |
||||||
|
// 得出 systemType =2 的数据
|
||||||
|
List<CollectionParamsManage> collectionParamsManages = collectionParamsManageService.selectListByParams(queryMap); |
||||||
|
|
||||||
|
CollectionParamsManage collectionParamsManage = new CollectionParamsManage(); |
||||||
|
// 过滤得出启停状态
|
||||||
|
Optional<CollectionParamsManage> first = collectionParamsManages.stream().filter(item -> item.getCurValue().intValue() == 1 && item.getParamType().equals("2")).findFirst(); |
||||||
|
if (first.isEmpty()) { |
||||||
|
// 如果设备停止了,则同步关掉水阀
|
||||||
|
// 过滤获取水阀调节参数
|
||||||
|
Optional<CollectionParamsManage> fourth = collectionParamsManages |
||||||
|
.stream() |
||||||
|
.filter(item -> item.getOtherName().contains("水阀调节") |
||||||
|
&& item.getParamType().equals("3")).findFirst(); |
||||||
|
if (fourth.isEmpty()) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
// 得出水阀调节参数
|
||||||
|
collectionParamsManage = fourth.get(); |
||||||
|
// 先判断水阀是否已经关闭
|
||||||
|
if (collectionParamsManage.getCurValue().intValue() == 0) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
// 关闭
|
||||||
|
List<OrderEntity> changeValues = new ArrayList<>(); |
||||||
|
changeValues.add(new OrderEntity(collectionParamsManage.getId(), String.valueOf(0), Integer.parseInt(collectionParamsManage.getParamType()), collectionParamsManage.getOtherName())); |
||||||
|
sendOrderToMqtt(changeValues); |
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
// 过滤获取回风温度设置值
|
||||||
|
Optional<CollectionParamsManage> second = collectionParamsManages |
||||||
|
.stream() |
||||||
|
.filter(item -> item.getOtherName().contains("回风温度") |
||||||
|
&& item.getParamType().equals("14")).findFirst(); |
||||||
|
if (second.isEmpty()) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
// 得出回风温度设置值
|
||||||
|
double backTempSet = second.get().getCurValue().doubleValue(); |
||||||
|
|
||||||
|
// 设定目标温度(夏季制冷24℃)
|
||||||
|
// ✅ 如果没有该设备的控制器,则创建一个新的并保存起来
|
||||||
|
FuzzyPIDControlUtil controller = pidControllers.computeIfAbsent(deviceLedgerId, k -> new FuzzyPIDControlUtil(kp, ki, kd)); |
||||||
|
|
||||||
|
log.info("开始模糊PID控制循环,查看对象是否有变化:{}", controller); |
||||||
|
|
||||||
|
// 过滤获取当前回风温度
|
||||||
|
Optional<CollectionParamsManage> third = collectionParamsManages |
||||||
|
.stream() |
||||||
|
.filter(item -> item.getOtherName().contains("回风温度") |
||||||
|
&& item.getParamType().equals("12")).findFirst(); |
||||||
|
if (third.isEmpty()) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
// 得出当前回风温度
|
||||||
|
double temp = third.get().getCurValue().doubleValue(); |
||||||
|
|
||||||
|
// 2. 计算水阀开度(时间间隔1秒)
|
||||||
|
double valveOpening1 = controller.calculate(backTempSet, temp, 1); |
||||||
|
int valveOpening = new BigDecimal(valveOpening1).intValue(); |
||||||
|
// 过滤获取水阀调节参数
|
||||||
|
Optional<CollectionParamsManage> fourth = collectionParamsManages |
||||||
|
.stream() |
||||||
|
.filter(item -> item.getOtherName().contains("水阀调节") |
||||||
|
&& item.getParamType().equals("3")).findFirst(); |
||||||
|
if (fourth.isEmpty()) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
// 得出水阀调节参数
|
||||||
|
collectionParamsManage = fourth.get(); |
||||||
|
// 发送控制指令
|
||||||
|
if (valveOpening > 0 && valveOpening <= 100) { |
||||||
|
// 开启
|
||||||
|
List<OrderEntity> changeValues = new ArrayList<>(); |
||||||
|
changeValues.add(new OrderEntity(collectionParamsManage.getId(), String.valueOf(valveOpening), Integer.parseInt(collectionParamsManage.getParamType()), collectionParamsManage.getOtherName())); |
||||||
|
sendOrderToMqtt(changeValues); |
||||||
|
// 3. 应用水阀开度(实际应用发送给执行机构)
|
||||||
|
log.info("回风温度: {} ℃ | 水阀开度: {} % ", |
||||||
|
temp, valveOpening); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void startOrStopAHU() { |
||||||
|
// 扫描启动了定时开关机的风机,根据当前时间判断是否需要启动或停止
|
||||||
|
// systemType 2: 风柜系统
|
||||||
|
HashMap<String, Object> queryMap = new HashMap<>(); |
||||||
|
queryMap.put("systemType", "2"); |
||||||
|
// 得出 systemType =2 的数据
|
||||||
|
List<CollectionParamsManage> collectionParamsManages = collectionParamsManageService.selectListByParams(queryMap); |
||||||
|
// 判断当前时间是星期几
|
||||||
|
String dayOfWeekValue = DateUtils.dayOfWeekValue(); |
||||||
|
// 过滤otherName包含dayOfWeekValue,paramType=29, curValue=1的数据,代表已经启用定时开关机的功能
|
||||||
|
List<CollectionParamsManage> needStartOrStopDataList = collectionParamsManages |
||||||
|
.stream() |
||||||
|
.filter(item -> item.getOtherName().contains(dayOfWeekValue) |
||||||
|
&& item.getParamType().equals("29") |
||||||
|
&& item.getCurValue().intValue() == 1) |
||||||
|
.toList(); |
||||||
|
// 查询得出对应的houseId
|
||||||
|
List<PolicyManage> policyManageList = policyManageService.selectListByCpmIds(needStartOrStopDataList); |
||||||
|
|
||||||
|
// 开始:根据houseId查询出对应的风机启停id
|
||||||
|
List<CpmSpaceRelation> cpmSpaceRelationList = cpmSpaceRelationService.selectListByHouseId(policyManageList); |
||||||
|
// collectionParamsManages过滤出能够开启风机的点位,paramType=2,isUse=0
|
||||||
|
List<CollectionParamsManage> startDeviceList = collectionParamsManages |
||||||
|
.stream() |
||||||
|
.filter(item -> item.getParamType().equals("2") |
||||||
|
&& item.getIsUse() == 0) |
||||||
|
.toList(); |
||||||
|
// 结束:根据houseId查询出对应的风机启停id
|
||||||
|
|
||||||
|
// 在拼接出启用定时开关机的启动时间、关闭时间
|
||||||
|
Map<String, List<PolicyManage>> groupedByHouseId = policyManageList.stream() |
||||||
|
.collect(Collectors.groupingBy( |
||||||
|
PolicyManage::getHouseId, |
||||||
|
Collectors.toList() |
||||||
|
)); |
||||||
|
// groupedByHouseId for 循环遍历
|
||||||
|
for (Map.Entry<String, List<PolicyManage>> entry : groupedByHouseId.entrySet()) { |
||||||
|
// 得出houseId
|
||||||
|
String houseId = entry.getKey(); |
||||||
|
List<PolicyManage> timeList1 = entry.getValue(); |
||||||
|
if (timeList1.isEmpty()) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
PolicyManage policyManage1 = timeList1.getFirst(); |
||||||
|
// 得出policyManageList
|
||||||
|
List<PolicyManage> timeList = policyManageService.selectPolicyListByHouseId(houseId, policyManage1.getPolicyName()); |
||||||
|
int isHaveTime = 0; |
||||||
|
int startHour = 0; |
||||||
|
int startMinute = 0; |
||||||
|
int endHour = 0; |
||||||
|
int endMinute = 0; |
||||||
|
for (PolicyManage policyManage : timeList) { |
||||||
|
if (policyManage.getPointName().contains("开_时")) { |
||||||
|
startHour = collectionParamsManageService.selectCollectionParamsManageById(policyManage.getCpmId()).getCurValue().intValue(); |
||||||
|
isHaveTime++; |
||||||
|
} |
||||||
|
if (policyManage.getPointName().contains("开_分")) { |
||||||
|
startMinute = collectionParamsManageService.selectCollectionParamsManageById(policyManage.getCpmId()).getCurValue().intValue(); |
||||||
|
isHaveTime++; |
||||||
|
} |
||||||
|
if (policyManage.getPointName().contains("关_时")) { |
||||||
|
endHour = collectionParamsManageService.selectCollectionParamsManageById(policyManage.getCpmId()).getCurValue().intValue(); |
||||||
|
isHaveTime++; |
||||||
|
} |
||||||
|
if (policyManage.getPointName().contains("关_分")) { |
||||||
|
endMinute = collectionParamsManageService.selectCollectionParamsManageById(policyManage.getCpmId()).getCurValue().intValue(); |
||||||
|
isHaveTime++; |
||||||
|
} |
||||||
|
} |
||||||
|
if (isHaveTime == 0) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
LocalTime nowTime = LocalTime.now(); |
||||||
|
LocalTime startTime = LocalTime.of(startHour, startMinute); |
||||||
|
LocalTime endTime = LocalTime.of(endHour, endMinute); |
||||||
|
// collectionParamsManages过滤出能够开启风机的点位,paramType=2,isUse=0
|
||||||
|
Set<String> validCpmIds = cpmSpaceRelationList.stream() |
||||||
|
.filter(item -> item.getHouseId().equals(houseId)) |
||||||
|
.map(CpmSpaceRelation::getCpmId) |
||||||
|
.collect(Collectors.toSet()); |
||||||
|
List<CollectionParamsManage> startDataList = startDeviceList |
||||||
|
.stream() |
||||||
|
.filter(item -> validCpmIds.contains(item.getId())) |
||||||
|
.toList(); |
||||||
|
// 判断当前风机是否在开启状态了
|
||||||
|
if (null == startDataList || startDataList.size() == 0) { |
||||||
|
return; |
||||||
|
} |
||||||
|
CollectionParamsManage first = startDataList.getFirst(); |
||||||
|
// 判断当前时间是否在开启时间范围内
|
||||||
|
if (DateUtils.isBetween(nowTime, startTime, endTime)) { |
||||||
|
// 判断当前风机是否在开启状态了
|
||||||
|
if (first.getCurValue().intValue() == 1) { |
||||||
|
// 当前风机在开启状态,不需要启动
|
||||||
|
log.info("当前风机在开启状态,不需要启动"); |
||||||
|
} else { |
||||||
|
// 当前风机不在开启状态,需要启动
|
||||||
|
log.info("当前风机不在开启状态,需要启动"); |
||||||
|
List<OrderEntity> changeValues = new ArrayList<>(); |
||||||
|
changeValues.add(new OrderEntity(first.getId(), "1", Integer.parseInt(first.getParamType()), first.getOtherName())); |
||||||
|
sendOrderToMqtt(changeValues); |
||||||
|
} |
||||||
|
; |
||||||
|
} else { |
||||||
|
// 判断当前风机是否在关闭状态了
|
||||||
|
if (first.getCurValue().intValue() == 0) { |
||||||
|
// 当前风机在关闭状态,不需要停止
|
||||||
|
log.info("当前风机在关闭状态,不需要停止"); |
||||||
|
} else { |
||||||
|
// 当前风机不在关闭状态,需要停止
|
||||||
|
log.info("当前风机不在关闭状态,需要停止"); |
||||||
|
List<OrderEntity> changeValues = new ArrayList<>(); |
||||||
|
changeValues.add(new OrderEntity(first.getId(), "0", Integer.parseInt(first.getParamType()), first.getOtherName())); |
||||||
|
sendOrderToMqtt(changeValues); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue