From 91d435f06f8e47ab206bc2fc9cd607f8f79bd9b4 Mon Sep 17 00:00:00 2001 From: mh Date: Tue, 11 Mar 2025 16:57:55 +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 -> 54272 bytes .../device/OperationController.java | 26 ++- .../core/domain/dto/DeviceMonitorDTO.java | 32 ++++ .../core/domain/entity/OrderEntity.java | 4 +- .../domain/vo/CollectionParamsManageVO.java | 51 ++++++ .../core/domain/vo/DeviceMonitorVO.java | 76 ++++++++ .../domain/vo/DeviceOperateMonitorVO.java | 136 ++++++++++++++ .../device/CollectionParamsManageMapper.java | 21 +++ .../ICollectionParamsManageService.java | 7 +- .../CollectionParamsManageServiceImpl.java | 172 +++++++++++++++++- 10 files changed, 516 insertions(+), 9 deletions(-) create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceMonitorDTO.java create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageVO.java create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceMonitorVO.java create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceOperateMonitorVO.java diff --git a/doc/梅州豪生控制点表xls.xls b/doc/梅州豪生控制点表xls.xls index c97c04b5164050bd00cd58b051762300767ecbd0..5709cd040824ab73a7c7c0bec21c39e182110bd3 100644 GIT binary patch delta 37 tcmZoz!Q8Ndc|#5htHI}UA`P1hS+;YtGchpwGI%gdHWWzTJWU|$FaY!o3`+n2 delta 36 scmZoz!Q8Ndc|#5hYry(nwG5jJS+;YtF*7juc)3kB6iDAZRUrE?0PU;{f&c&j 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 9975628..2ec062c 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 @@ -3,10 +3,10 @@ package com.mh.web.controller.device; import com.mh.common.annotation.ControlDeviceAno; import com.mh.common.core.controller.BaseController; import com.mh.common.core.domain.AjaxResult; -import com.mh.common.core.domain.entity.CollectionParamsManage; +import com.mh.common.core.domain.dto.DeviceMonitorDTO; import com.mh.common.core.domain.entity.OrderEntity; +import com.mh.common.core.domain.vo.DeviceOperateMonitorVO; import com.mh.common.core.page.TableDataInfo; -import com.mh.common.utils.StringUtils; import com.mh.framework.mqtt.service.IMqttGatewayService; import com.mh.system.service.device.ICollectionParamsManageService; import com.mh.system.service.operation.IOperationDeviceService; @@ -47,12 +47,30 @@ public class OperationController extends BaseController { */ @PreAuthorize("@ss.hasPermi('device:cpm:list')") @GetMapping("/monitor/list") - public TableDataInfo list(CollectionParamsManage communicationParams) + public TableDataInfo list(@RequestParam(name = "systemType") String systemType) { - List list = iCollectionParamsManageService.selectCollectionParamsManageList(communicationParams); + List list = iCollectionParamsManageService.selectMonitorListBySystemType(systemType); return getDataTable(list); } + /** + * 对设备进行操作处理获取对应的列表数据 + * + * @param systemType + * @return + */ + @PreAuthorize("@ss.hasPermi('device:cpm:operation')") + @PostMapping("/operation/list") + public TableDataInfo operationDeviceList(@RequestParam(name = "systemType") String systemType) { + try { + List deviceOperateMonitorVOS = iCollectionParamsManageService.operationDeviceList(systemType); + return getDataTable(deviceOperateMonitorVOS); + } catch (Exception e) { + log.error("设备操作失败", e); + return getDataTable(null); + } + } + /** * 对设备进行操作处理 * diff --git a/mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceMonitorDTO.java b/mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceMonitorDTO.java new file mode 100644 index 0000000..6144f30 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/dto/DeviceMonitorDTO.java @@ -0,0 +1,32 @@ +package com.mh.common.core.domain.dto; + +import com.mh.common.core.domain.vo.DeviceOperateMonitorVO; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 响应给前端的dto数据 + * @date 2025-03-10 15:43:36 + */ +@Setter +@Getter +public class DeviceMonitorDTO { + + private String name; + + private List values; + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("name", name) + .append("values", values) + .toString(); + } +} diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/OrderEntity.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/OrderEntity.java index 58018ff..ac17707 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/OrderEntity.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/OrderEntity.java @@ -15,7 +15,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder; @Getter public class OrderEntity { - private Integer id; + private String id; private String param; private Integer type; // 0:修改频率, // 1:修改开关状态, @@ -30,7 +30,7 @@ public class OrderEntity { public OrderEntity() { } - public OrderEntity(Integer id, String param, Integer type, String otherName) { + public OrderEntity(String id, String param, Integer type, String otherName) { this.id = id; this.param = param; this.type = type; diff --git a/mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageVO.java b/mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageVO.java new file mode 100644 index 0000000..e2f624c --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/vo/CollectionParamsManageVO.java @@ -0,0 +1,51 @@ +package com.mh.common.core.domain.vo; + +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 监控和控制数据传输类 + * @date 2025-03-11 11:26:10 + */ +@Setter +@Getter +public class CollectionParamsManageVO { + + private String id; + + private String mtType; + + private String deviceLedgerId; + + private String deviceName; + + private String otherName; + + private BigDecimal curValue; + + private Date curTime; + + private String paramType; + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("id", id) + .append("mtType", mtType) + .append("deviceLedgerId", deviceLedgerId) + .append("deviceName", deviceName) + .append("otherName", otherName) + .append("curValue", curValue) + .append("curTime", curTime) + .append("paramType", paramType) + .toString(); + } + +} diff --git a/mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceMonitorVO.java b/mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceMonitorVO.java new file mode 100644 index 0000000..51fc476 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceMonitorVO.java @@ -0,0 +1,76 @@ +package com.mh.common.core.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 设备监控响应前端数据格式 + * @date 2025-03-10 15:24:32 + */ +@Setter +@Getter +public class DeviceMonitorVO { + + /** + * id + */ + private String id; + + /** + * 设备台账id + */ + private String deviceLedgerId; + + /** + * 设备名称 + */ + private String deviceName; + + /** + * 点位名称 + */ + private String collectName; + + /** + * 设备类型 + */ + private String deviceType; + + /** + * 采集时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date collectTime; + + /** + * 采集值 + */ + private String collectValue; + + /** + * 采集类型 + */ + private String paramType; + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("id", id) + .append("deviceLedgerId", deviceLedgerId) + .append("deviceName", deviceName) + .append("collectName", collectName) + .append("deviceType", deviceType) + .append("collectTime", collectTime) + .append("collectValue", collectValue) + .append("paramType", paramType) + .toString(); + } +} 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 new file mode 100644 index 0000000..6a0c531 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/vo/DeviceOperateMonitorVO.java @@ -0,0 +1,136 @@ +package com.mh.common.core.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 设备监控响应前端数据格式 + * @date 2025-03-10 15:24:32 + */ +@Setter +@Getter +public class DeviceOperateMonitorVO { + + /** + * ID + */ + private String id; + + /** + * 设备台账ID + */ + private String deviceLedgerId; + + /** + * 点位名称 + */ + private String collectName; + + /** + * 设备类型 + */ + private String deviceType; + + /** + * 采集时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date collectTime; + + /** + * 运行状态 + */ + private Integer runStatus; + + /** + * 设置启停 + */ + 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; + + @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) + .toString(); + } + +} diff --git a/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java b/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java index 21a38a6..b82d232 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java @@ -3,6 +3,7 @@ package com.mh.system.mapper.device; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mh.common.core.domain.dto.TempHumidityDTO; import com.mh.common.core.domain.entity.CollectionParamsManage; +import com.mh.common.core.domain.vo.CollectionParamsManageVO; import org.apache.ibatis.annotations.*; import java.util.List; @@ -143,4 +144,24 @@ public interface CollectionParamsManageMapper extends BaseMapper> selectByHouseIdAndMtType(@Param("houseId") String houseId, @Param("mtType") String mtType); + + + @Select("select " + + " cpm.id, " + + " dl.device_type as mt_type, " + + " cpm.device_ledger_id, " + + " dl.device_name, " + + " cpm.other_name, " + + " cpm.cur_value, " + + " cpm.cur_time, " + + " cpm.param_type " + + "from " + + " collection_params_manage cpm " + + "left join " + + "device_ledger dl on " + + " cpm.device_ledger_id = dl.id " + + " where cpm.system_type = #{systemType} " + + " and cpm.param_type != '0' " + + " order by dl.device_type, cpm.param_type ") + List selectBySystemType(@Param("systemType") String systemType); } diff --git a/mh-system/src/main/java/com/mh/system/service/device/ICollectionParamsManageService.java b/mh-system/src/main/java/com/mh/system/service/device/ICollectionParamsManageService.java index 620e14b..739e9da 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/ICollectionParamsManageService.java +++ b/mh-system/src/main/java/com/mh/system/service/device/ICollectionParamsManageService.java @@ -1,12 +1,13 @@ package com.mh.system.service.device; +import com.mh.common.core.domain.dto.DeviceMonitorDTO; import com.mh.common.core.domain.dto.PumpInfoDTO; import com.mh.common.core.domain.entity.ChillersEntity; import com.mh.common.core.domain.entity.CollectionParamsManage; +import com.mh.common.core.domain.vo.DeviceOperateMonitorVO; import java.util.ArrayList; import java.util.List; -import java.util.Map; /** * @author LJF @@ -36,4 +37,8 @@ public interface ICollectionParamsManageService { List selectPumpListInfo(String registerAddr, String mtType); List lineData(String registerAddr, String mtType); + + List selectMonitorListBySystemType(String systemType); + + List operationDeviceList(String systemType); } 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 f9b3133..df0a2c2 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 @@ -1,10 +1,14 @@ package com.mh.system.service.device.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.mh.common.core.domain.dto.DeviceMonitorDTO; import com.mh.common.core.domain.dto.PumpInfoDTO; import com.mh.common.core.domain.entity.ChillersEntity; import com.mh.common.core.domain.entity.CollectionParamsManage; import com.mh.common.core.domain.entity.DeviceLedger; +import com.mh.common.core.domain.vo.CollectionParamsManageVO; +import com.mh.common.core.domain.vo.DeviceMonitorVO; +import com.mh.common.core.domain.vo.DeviceOperateMonitorVO; import com.mh.common.utils.DateUtils; import com.mh.common.utils.StringUtils; import com.mh.system.mapper.device.CollectionParamsManageMapper; @@ -20,6 +24,7 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author LJF @@ -74,7 +79,7 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag queryWrapper.like("remark", communicationParams.getRemark()); } // 添加时间范围 - if (communicationParams.getParams() != null && !communicationParams.getParams().isEmpty()) { + if (communicationParams.getParams() != null && !communicationParams.getParams().isEmpty()) { String beginTimeStr = (String) communicationParams.getParams().get("beginTime"); String endTimeStr = (String) communicationParams.getParams().get("endTime"); @@ -192,11 +197,174 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag // 截取当前时间yyyy String now = DateUtils.getTime(); String tableName = "chillers_data_min" + now.substring(0, 4); - String registerId = collectionParamsManageMapper.selectIdByMtCodeAndType(registerAddr, mtType); + String registerId = collectionParamsManageMapper.selectIdByMtCodeAndType(registerAddr, mtType); List chillersEntities = dataProcessMapper.selectLineDataByCodeAndRegisterAddr(tableName, registerId); if (chillersEntities.isEmpty()) { return List.of(); } return chillersEntities; } + + @Override + public List selectMonitorListBySystemType(String systemType) { + // 根据系统类型查询出对应的设备 + List collectionParamsManages = collectionParamsManageMapper.selectBySystemType(systemType); + 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 -> { + DeviceMonitorVO deviceMonitorVO = new DeviceMonitorVO(); + for (CollectionParamsManageVO param : params) { + deviceMonitorVO.setId(param.getId()); + deviceMonitorVO.setDeviceLedgerId(param.getDeviceLedgerId()); + deviceMonitorVO.setDeviceName(param.getDeviceName()); + deviceMonitorVO.setDeviceType(param.getMtType()); + deviceMonitorVO.setCollectName(param.getOtherName()); + deviceMonitorVO.setCollectTime(param.getCurTime()); + deviceMonitorVO.setCollectValue(String.valueOf(param.getCurValue())); + deviceMonitorVO.setParamType(param.getParamType()); + } + return deviceMonitorVO; + }) + .collect(Collectors.groupingBy(DeviceMonitorVO::getDeviceType)); + + // 根据deviceType进行分组,赋值给List得出结果集 + List result = groupedByDeviceType.entrySet().stream() + .map(entry -> { + DeviceMonitorDTO deviceMonitorDTO = new DeviceMonitorDTO(); + deviceMonitorDTO.setName(entry.getKey()); + deviceMonitorDTO.setValues(entry.getValue()); + return deviceMonitorDTO; + }) + .collect(Collectors.toList()); + + return result; + } + + @Override + public List operationDeviceList(String systemType) { + // 根据系统类型查询出对应的设备 + List collectionParamsManages = collectionParamsManageMapper.selectBySystemType(systemType); + 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<>(); + + // 遍历分组后的数据 + groupedByDeviceType.forEach((deviceLedgerId, voList) -> { + // 创建合并后的VO对象 + DeviceOperateMonitorVO mergedVO = new DeviceOperateMonitorVO(); + + // 设置设备类型 + mergedVO.setDeviceLedgerId(deviceLedgerId); + + // 设置设备类型 + mergedVO.setDeviceType(voList.getFirst().getDeviceType()); + + // 遍历同类型设备的所有监控数据 + 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 result; + } }