diff --git a/doc/梅州豪生控制点表xls.xls b/doc/梅州豪生控制点表xls.xls index 5709cd0..ba73561 100644 Binary files a/doc/梅州豪生控制点表xls.xls and b/doc/梅州豪生控制点表xls.xls differ 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; } }