From 3aaa8a80e8d21559b065a33f3f552ccab537a6af Mon Sep 17 00:00:00 2001 From: mh Date: Tue, 11 Mar 2025 17:48:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=B7=E6=BA=90=E7=AB=99=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/梅州豪生控制点表xls.xls | Bin 54272 -> 54784 bytes .../device/OperationController.java | 2 +- .../domain/vo/DeviceOperateMonitorVO.java | 103 ++----------- .../CollectionParamsManageServiceImpl.java | 139 +++++------------- 4 files changed, 49 insertions(+), 195 deletions(-) diff --git a/doc/梅州豪生控制点表xls.xls b/doc/梅州豪生控制点表xls.xls index 5709cd040824ab73a7c7c0bec21c39e182110bd3..ba735613bd8a6450c5a058be01e550a027cb0d77 100644 GIT binary patch literal 54784 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 q#&lVn%i&iWR$CqZSlmc(oH`u)Z literal 54272 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 diff --git a/mh-admin/src/main/java/com/mh/web/controller/device/OperationController.java b/mh-admin/src/main/java/com/mh/web/controller/device/OperationController.java index 2ec062c..0839624 100644 --- a/mh-admin/src/main/java/com/mh/web/controller/device/OperationController.java +++ b/mh-admin/src/main/java/com/mh/web/controller/device/OperationController.java @@ -60,7 +60,7 @@ public class OperationController extends BaseController { * @return */ @PreAuthorize("@ss.hasPermi('device:cpm:operation')") - @PostMapping("/operation/list") + @GetMapping("/operation/list") public TableDataInfo operationDeviceList(@RequestParam(name = "systemType") String systemType) { try { List deviceOperateMonitorVOS = iCollectionParamsManageService.operationDeviceList(systemType); diff --git a/mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceOperateMonitorVO.java b/mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceOperateMonitorVO.java index 6a0c531..88a8138 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceOperateMonitorVO.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceOperateMonitorVO.java @@ -7,6 +7,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import java.math.BigDecimal; import java.util.Date; +import java.util.List; /** * @author LJF @@ -25,112 +26,34 @@ public class DeviceOperateMonitorVO { private String id; /** - * 设备台账ID + * 设备名称或者别名 */ - private String deviceLedgerId; + private String name; /** - * 点位名称 + * 点位值 */ - private String collectName; - - /** - * 设备类型 - */ - private String deviceType; + private String value; /** * 采集时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date collectTime; + private Date time; - /** - * 运行状态 - */ - private Integer runStatus; + private String paramType; - /** - * 设置启停 - */ - private Integer setRunOrStop; - - /** - * 故障报警状态 - */ - private Integer alarmStatus; - - /** - * 手自动状态 - */ - private Integer handOrAuto; - - /** - * 阀门状态 - */ - private Integer valveStatus; - - /** - * 设置阀门开度 - */ - private Integer setValveOpen; - - /** - * 设置阀门关闭 - */ - private Integer setValveClose; - - /** - * 频率 - */ - private BigDecimal frequency; - - /** - * 频率设置 - */ - private BigDecimal setFrequency; - - /** - * 供水温度 - */ - private BigDecimal outTemp; - - /** - * 回水温度 - */ - private BigDecimal inTemp; - - /** - * 供水压力 - */ - private BigDecimal outPressure; - - /** - * 回水压力 - */ - private BigDecimal inPressure; + private List children; @Override public String toString() { return new ToStringBuilder(this) .append("id", id) - .append("deviceLedgerId", deviceLedgerId) - .append("collectName", collectName) - .append("deviceType", deviceType) - .append("collectTime", collectTime) - .append("runStatus", runStatus) - .append("alarmStatus", alarmStatus) - .append("handOrAuto", handOrAuto) - .append("valveStatus", valveStatus) - .append("setValveOpen", setValveOpen) - .append("setValveClose", setValveClose) - .append("frequency", frequency) - .append("setFrequency", setFrequency) - .append("outTemp", outTemp) - .append("inTemp", inTemp) - .append("outPressure", outPressure) - .append("inPressure", inPressure) + .append("name", name) + .append("value", value) + .append("time", time) + .append("paramType", paramType) + .append("children", children) .toString(); } - } diff --git a/mh-system/src/main/java/com/mh/system/service/device/impl/CollectionParamsManageServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/device/impl/CollectionParamsManageServiceImpl.java index df0a2c2..1fdc040 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/impl/CollectionParamsManageServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/device/impl/CollectionParamsManageServiceImpl.java @@ -257,114 +257,45 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag if (collectionParamsManages.isEmpty()) { return List.of(); } - // 得出的collectionParamsManages进行数据赋值,如果paramType="1',则是运行状态,则赋值给runStatus, - // 如果paramType="5",则是故障报警,则赋值给alarmStatus - // 如果paramType="6",则是手自动状态,则赋值给handOrAuto - // 如果paramType="4",则是频率反馈,则赋值给frequency - // 使用Stream API处理数据 - Map> groupedByDeviceType = collectionParamsManages.stream() - .collect(Collectors.groupingBy(CollectionParamsManageVO::getId)) - .values() - .stream() - .map(params -> { - DeviceOperateMonitorVO deviceOperateMonitorVO = new DeviceOperateMonitorVO(); - for (CollectionParamsManageVO param : params) { - switch (param.getParamType()) { - case "1": - deviceOperateMonitorVO.setRunStatus(param.getCurValue().intValue()); - break; - case "2": - deviceOperateMonitorVO.setRunStatus(param.getCurValue().intValue()); - break; - case "3": - deviceOperateMonitorVO.setSetFrequency(param.getCurValue()); - break; - case "4": - deviceOperateMonitorVO.setFrequency(param.getCurValue()); - break; - case "5": - deviceOperateMonitorVO.setAlarmStatus(param.getCurValue().intValue()); - break; - case "6": - deviceOperateMonitorVO.setHandOrAuto(param.getCurValue().intValue()); - break; - case "7": - if ("阀开反馈".contains(param.getOtherName()) && param.getCurValue().intValue() == 1) { - deviceOperateMonitorVO.setValveStatus(1); - } else if ("阀关反馈".contains(param.getOtherName()) && param.getCurValue().intValue() == 1) { - deviceOperateMonitorVO.setValveStatus(0); - } else { - deviceOperateMonitorVO.setValveStatus(0); - } - case "8": - deviceOperateMonitorVO.setSetValveOpen(param.getCurValue().intValue()); - break; - case "9": - deviceOperateMonitorVO.setSetValveClose(param.getCurValue().intValue()); - break; - default: - // 处理未知的paramType - break; - } - deviceOperateMonitorVO.setId(param.getId()); - deviceOperateMonitorVO.setDeviceType(param.getMtType()); - deviceOperateMonitorVO.setCollectName(param.getDeviceName()); - deviceOperateMonitorVO.setCollectTime(param.getCurTime()); - deviceOperateMonitorVO.setDeviceLedgerId(param.getDeviceLedgerId()); - } - return deviceOperateMonitorVO; - }) - .collect(Collectors.groupingBy(DeviceOperateMonitorVO::getDeviceLedgerId)); - // 根据得出的分组数据之后,同样类型的分组数据进行合并起来变成一条数据,这里合并的规则就是某个值为空的,拿同样另一个值不为空的补上,得出List结果集 - // 创建最终结果集合 - List result = new ArrayList<>(); + // 根据deviceLedgerId进行分组,然后得出deviceLedgerId,deviceName赋值给DeviceOperateMonitorVO的id和name + // 按设备台账ID分组 + Map> groupedByDevice = collectionParamsManages.stream() + .collect(Collectors.groupingBy(CollectionParamsManageVO::getDeviceLedgerId)); - // 遍历分组后的数据 - groupedByDeviceType.forEach((deviceLedgerId, voList) -> { - // 创建合并后的VO对象 - DeviceOperateMonitorVO mergedVO = new DeviceOperateMonitorVO(); + // 转换分组结果为监控VO列表 + List monitorData = groupedByDevice.values().stream() + .map(group -> { + // 取组内第一个元素获取公共信息(假设同设备台账ID的设备名称相同) + CollectionParamsManageVO firstItem = group.get(0); - // 设置设备类型 - mergedVO.setDeviceLedgerId(deviceLedgerId); + DeviceOperateMonitorVO vo = new DeviceOperateMonitorVO(); + vo.setId(firstItem.getDeviceLedgerId()); + vo.setName(firstItem.getDeviceName()); - // 设置设备类型 - mergedVO.setDeviceType(voList.getFirst().getDeviceType()); + // 可补充其他需要聚合的字段 + // vo.setStatus(calculateStatus(group)); - // 遍历同类型设备的所有监控数据 - voList.forEach(vo -> { - // 合并规则:当目标字段为空时,用当前VO的对应字段值补上 - if (mergedVO.getRunStatus() == null) { - mergedVO.setRunStatus(vo.getRunStatus()); - } - if (mergedVO.getAlarmStatus() == null) { - mergedVO.setAlarmStatus(vo.getAlarmStatus()); - } - if (mergedVO.getHandOrAuto() == null) { - mergedVO.setHandOrAuto(vo.getHandOrAuto()); - } - if (mergedVO.getFrequency() == null) { - mergedVO.setFrequency(vo.getFrequency()); - } - if (mergedVO.getValveStatus() == null) { - mergedVO.setValveStatus(vo.getValveStatus()); - } - - // 合并基础字段(取第一个有效值) - if (mergedVO.getId() == null) { - mergedVO.setId(vo.getId()); - } - if (mergedVO.getCollectName() == null) { - mergedVO.setCollectName(vo.getCollectName()); - } - if (mergedVO.getCollectTime() == null || - vo.getCollectTime().after(mergedVO.getCollectTime())) { - // 取最新的采集时间 - mergedVO.setCollectTime(vo.getCollectTime()); - } - }); - - result.add(mergedVO); + return vo; + }) + .toList(); + // 在遍历monitorData,根据deviceLedgerId查询出collectionParamsManages集合对应的设备id,otherName对应name,curValue对应value,curTime对应time,paramType对应paramType,然后拼接到monitorData中children中 + // 处理子节点数据 + monitorData.forEach(mainVO -> { + // 根据主设备ID过滤参数 + List children = collectionParamsManages.stream() + .filter(p -> mainVO.getId().equals(p.getDeviceLedgerId())) + .map(param -> { + DeviceOperateMonitorVO child = new DeviceOperateMonitorVO(); + child.setId(param.getId()); + child.setName(param.getOtherName()); + child.setValue(String.valueOf(param.getCurValue())); + child.setTime(param.getCurTime()); + child.setParamType(param.getParamType()); + return child; + }) + .collect(Collectors.toList()); + mainVO.setChildren(children); }); - return result; + return monitorData; } }