From 1b6fe9457a7f76badc4dc5cc95ca93dbb57894ff Mon Sep 17 00:00:00 2001 From: 25604 Date: Wed, 14 Jan 2026 17:22:23 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=B7=BB=E5=8A=A0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=9B=91=E8=A7=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/controller/ProMonitorController.java | 28 ++++ .../com/mh/user/dto/ProDevicesMonitorDTO.java | 155 ++++++++++++++++++ .../com/mh/user/mapper/ProjectInfoMapper.java | 1 + .../mh/user/service/MeterManageService.java | 4 + .../service/impl/MeterManageServiceImpl.java | 144 +++++++++++++++- .../main/java/com/mh/user/utils/AESUtil.java | 2 + .../java/com/mh/user/vo/ProMonitorVO.java | 53 ++++++ 7 files changed, 385 insertions(+), 2 deletions(-) create mode 100644 user-service/src/main/java/com/mh/user/controller/ProMonitorController.java create mode 100644 user-service/src/main/java/com/mh/user/dto/ProDevicesMonitorDTO.java create mode 100644 user-service/src/main/java/com/mh/user/vo/ProMonitorVO.java diff --git a/user-service/src/main/java/com/mh/user/controller/ProMonitorController.java b/user-service/src/main/java/com/mh/user/controller/ProMonitorController.java new file mode 100644 index 0000000..d797b0b --- /dev/null +++ b/user-service/src/main/java/com/mh/user/controller/ProMonitorController.java @@ -0,0 +1,28 @@ +package com.mh.user.controller; + +import com.mh.common.http.HttpResult; +import com.mh.user.service.MeterManageService; +import com.mh.user.vo.ProMonitorVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author LJF + * @version 1.0 + * @project mh_esi + * @description 项目监视管理 + * @date 2026-01-14 09:51:21 + */ +@RestController +@RequestMapping("/proMonitor") +public class ProMonitorController { + + @Autowired + private MeterManageService meterManageService; + + @PostMapping("/list") + HttpResult list(@RequestBody ProMonitorVO proMonitorVO) { + return HttpResult.ok(meterManageService.list(proMonitorVO)); + } + +} diff --git a/user-service/src/main/java/com/mh/user/dto/ProDevicesMonitorDTO.java b/user-service/src/main/java/com/mh/user/dto/ProDevicesMonitorDTO.java new file mode 100644 index 0000000..f0e5d49 --- /dev/null +++ b/user-service/src/main/java/com/mh/user/dto/ProDevicesMonitorDTO.java @@ -0,0 +1,155 @@ +package com.mh.user.dto; + +/** + * @author LJF + * @version 1.0 + * @project mh_esi + * @description 能耗监测 + * @date 2024-11-26 11:51:42 + */ +public class ProDevicesMonitorDTO { + +// private String time; + + /** + * 项目名称 + */ + private String projectName; + + /** + * 项目id + */ + private String projectId; + + /** + * 项目类型 + */ + private String projectType; + + /** + * 仪表编号 + */ + private String mtNum; + + /** + * 仪表位置名称 + */ + private String installAddr; + + /** + * 瞬时量 + */ + private String momentCooling; + + /** + * 进水温度/温度 + */ + private String intTemp; + + /** + * 出水温度/压力 + */ + private String outTemp; + + /** + * 是否在线 + */ + private boolean isOnline; + + public ProDevicesMonitorDTO() { + } + + public ProDevicesMonitorDTO(String projectName, String projectId, String projectType, String mtNum, String installAddr, String momentCooling, String intTemp, String outTemp, boolean isOnline) { + this.projectName = projectName; + this.projectId = projectId; + this.projectType = projectType; + this.mtNum = mtNum; + this.installAddr = installAddr; + this.momentCooling = momentCooling; + this.intTemp = intTemp; + this.outTemp = outTemp; + this.isOnline = isOnline; + } + + public String getProjectType() { + return projectType; + } + + public void setProjectType(String projectType) { + this.projectType = projectType; + } + + public String getMtNum() { + return mtNum; + } + + public void setMtNum(String mtNum) { + this.mtNum = mtNum; + } + + public String getInstallAddr() { + return installAddr; + } + + public void setInstallAddr(String installAddr) { + this.installAddr = installAddr; + } + + public boolean isOnline() { + return isOnline; + } + + public void setOnline(boolean online) { + isOnline = online; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getMomentCooling() { + return momentCooling; + } + + public void setMomentCooling(String momentCooling) { + this.momentCooling = momentCooling; + } + + public String getIntTemp() { + return intTemp; + } + + public void setIntTemp(String intTemp) { + this.intTemp = intTemp; + } + + public String getOutTemp() { + return outTemp; + } + + public void setOutTemp(String outTemp) { + this.outTemp = outTemp; + } + + @Override + public String toString() { + return "DataResultChEntity{" + + ", momentCooling=" + momentCooling + + ", intTemp=" + intTemp + + ", outTemp=" + outTemp + + '}'; + } + +} diff --git a/user-service/src/main/java/com/mh/user/mapper/ProjectInfoMapper.java b/user-service/src/main/java/com/mh/user/mapper/ProjectInfoMapper.java index 8082bde..919f1b9 100644 --- a/user-service/src/main/java/com/mh/user/mapper/ProjectInfoMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/ProjectInfoMapper.java @@ -33,6 +33,7 @@ public interface ProjectInfoMapper extends BaseMapper { "" + " and pi.system_id=#{systemId} " + "" + + " order by pi.id " + "") List queryProjectInfo(@Param("systemId") String systemID, @Param("account") String projectId); diff --git a/user-service/src/main/java/com/mh/user/service/MeterManageService.java b/user-service/src/main/java/com/mh/user/service/MeterManageService.java index 4feb4cf..acbc95e 100644 --- a/user-service/src/main/java/com/mh/user/service/MeterManageService.java +++ b/user-service/src/main/java/com/mh/user/service/MeterManageService.java @@ -1,6 +1,8 @@ package com.mh.user.service; +import com.mh.user.dto.ProDevicesMonitorDTO; import com.mh.user.entity.MeterManageEntity; +import com.mh.user.vo.ProMonitorVO; import java.util.List; @@ -18,4 +20,6 @@ public interface MeterManageService extends BaseService { void updateDataById(Long mmId, String analysisData); int queryIsHotCollection(String systemId, String projectId); + + List list(ProMonitorVO proMonitorVO); } diff --git a/user-service/src/main/java/com/mh/user/service/impl/MeterManageServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/MeterManageServiceImpl.java index de5d214..af9d44b 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/MeterManageServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/MeterManageServiceImpl.java @@ -9,16 +9,22 @@ import com.mh.common.page.PageRequest; import com.mh.common.page.PageResult; import com.mh.common.utils.StringUtils; import com.mh.user.constants.Constant; +import com.mh.user.dto.ProDevicesMonitorDTO; import com.mh.user.entity.MeterManageEntity; +import com.mh.user.entity.ProjectInfoEntity; import com.mh.user.mapper.MeterManageMapper; +import com.mh.user.mapper.ProjectInfoMapper; import com.mh.user.service.DeviceCodeParamService; import com.mh.user.service.MeterManageService; import com.mh.user.utils.ExchangeStringUtil; +import com.mh.user.vo.ProMonitorVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; + +import static java.util.stream.Collectors.toList; /** * @author LJF @@ -36,6 +42,140 @@ public class MeterManageServiceImpl implements MeterManageService { @Autowired private DeviceCodeParamService deviceCodeParamService; + @Autowired + private ProjectInfoMapper projectInfoMapper; + + @Override + public List list(ProMonitorVO proMonitorVO) { + if (StringUtils.isBlank(proMonitorVO.getUserName()) || StringUtils.isBlank(proMonitorVO.getSystemId())) { + return Collections.emptyList(); + } + + // 根据用户名和系统编号查询项目编号 + List projectInfoEntities = projectInfoMapper.queryProjectInfo(proMonitorVO.getSystemId(), proMonitorVO.getUserName()); + if (projectInfoEntities.isEmpty()) { + return Collections.emptyList(); + } + + List projectIds = proMonitorVO.getProjectIds(); + if (null != projectIds && !projectIds.isEmpty()) { + projectInfoEntities = projectInfoEntities.stream().filter(projectInfoEntity -> projectIds.contains(projectInfoEntity.getId().toString())).collect(toList()); + } + + // 构建项目ID到项目信息的映射,避免重复查询 + Map projectIdToNameMap = projectInfoEntities.stream() + .collect(Collectors.toMap(ProjectInfoEntity::getId, ProjectInfoEntity::getProjectName)); + + // 获取有效的项目ID集合 + Set validProjectIds = projectIdToNameMap.keySet(); + + // 查询全部的冷量计类型实时数据 + List meterManageEntities = meterManageMapper.selectList( + new QueryWrapper() + .eq("system_id", proMonitorVO.getSystemId()) + .and(wrapper -> wrapper.eq("mt_type", 2).or().eq("mt_type", 4)) + .in("project_id", validProjectIds) + ); + if (meterManageEntities.isEmpty()) { + return Collections.emptyList(); + } + + // 按projectId分组,再按mtNum分组 + Map>> groupedMeters = meterManageEntities.stream() + .collect(Collectors.groupingBy( + MeterManageEntity::getProjectId, + Collectors.groupingBy(meter -> meter.getMtNum() == null ? "" : meter.getMtNum()) + )); + + // 构建项目ID到设备类型的映射,避免重复查询 + Map projectTypeMap = new HashMap<>(); + for (Long projectId : groupedMeters.keySet()) { + int isHotCollection = queryIsHotCollection(proMonitorVO.getSystemId(), String.valueOf(projectId)); + projectTypeMap.put(projectId, isHotCollection); + } + + // 组装结果数据 + List result = new ArrayList<>(); + + // 遍历每个项目 + for (Map.Entry>> projectEntry : groupedMeters.entrySet()) { + Long projectId = projectEntry.getKey(); + String projectName = projectIdToNameMap.get(projectId); + Integer projectType = projectTypeMap.getOrDefault(projectId, 0); + + // 遍历项目中每个mtNum分组 + for (Map.Entry> mtNumEntry : projectEntry.getValue().entrySet()) { + String mtNum = mtNumEntry.getKey(); + List metersWithSameMtNum = mtNumEntry.getValue(); + + ProDevicesMonitorDTO dto = new ProDevicesMonitorDTO(); + dto.setProjectName(projectName); + dto.setProjectId(String.valueOf(projectId)); + dto.setProjectType(String.valueOf(projectType)); + dto.setMtNum(mtNum); + + for (MeterManageEntity meter : metersWithSameMtNum) { + dto.setInstallAddr(meter.getRemark()); + // 根据设备类型设置不同字段 + if (projectType == 0) { + // 0:冷量计,瞬时冷量,进出水温度 + if ("0020".equalsIgnoreCase(meter.getRegisterAddr())) { + dto.setMomentCooling(formatValue(meter.getCurValue())); + } else if ("0073".equalsIgnoreCase(meter.getRegisterAddr())) { + dto.setOutTemp(formatValue(meter.getCurValue())); + } else if ("0075".equalsIgnoreCase(meter.getRegisterAddr())) { + dto.setIntTemp(formatValue(meter.getCurValue())); + } + } else if (projectType == 1) { + // 1:热量计,瞬时热量,进出水温度 + if ("0020".equalsIgnoreCase(meter.getRegisterAddr())) { + dto.setMomentCooling(formatValue(meter.getCurValue())); + } else if ("0073".equalsIgnoreCase(meter.getRegisterAddr())) { + dto.setOutTemp(formatValue(meter.getCurValue())); + } else if ("0075".equalsIgnoreCase(meter.getRegisterAddr())) { + dto.setIntTemp(formatValue(meter.getCurValue())); + } + } else if (projectType == 2) { + // 2:蒸汽流量计,瞬时流量,压力温度 + if ("0006".equalsIgnoreCase(meter.getRegisterAddr())) { + dto.setMomentCooling(formatValue(meter.getCurValue())); + } else if ("0012".equalsIgnoreCase(meter.getRegisterAddr())) { + dto.setOutTemp(formatValue(meter.getCurValue())); + } else if ("0010".equalsIgnoreCase(meter.getRegisterAddr())) { + dto.setIntTemp(formatValue(meter.getCurValue())); + } + } + // 设置在线状态(根据curTime判断) + dto.setOnline(isOnline(meter.getCurTime())); + } + result.add(dto); + } + } + + return result; + } + + /** + * 格式化数值 + */ + private String formatValue(java.math.BigDecimal value) { + if (value == null) { + return "0.00"; + } + return value.setScale(2, java.math.RoundingMode.HALF_UP).toPlainString(); + } + + /** + * 判断是否在线(超过5分钟未更新视为离线) + */ + private boolean isOnline(Date curTime) { + if (curTime == null) { + return false; + } + long timeDiff = System.currentTimeMillis() - curTime.getTime(); + return timeDiff <= 5 * 60 * 1000; // 5分钟 + } + @Override public List queryBySystemIdAndProjectId(String systemId, String projectId) { QueryWrapper queryWrapper = new QueryWrapper<>(); diff --git a/user-service/src/main/java/com/mh/user/utils/AESUtil.java b/user-service/src/main/java/com/mh/user/utils/AESUtil.java index 020c40d..52d3c9b 100644 --- a/user-service/src/main/java/com/mh/user/utils/AESUtil.java +++ b/user-service/src/main/java/com/mh/user/utils/AESUtil.java @@ -5,6 +5,7 @@ import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; +import java.util.Date; /** * @author chison @@ -25,6 +26,7 @@ public class AESUtil { String data = dataStr.substring(dataStr.length() - 8, dataStr.length() - 6) + dataStr.substring(dataStr.length() - 6, dataStr.length() - 4); System.out.println(data); + Date now = new Date(); } /** diff --git a/user-service/src/main/java/com/mh/user/vo/ProMonitorVO.java b/user-service/src/main/java/com/mh/user/vo/ProMonitorVO.java new file mode 100644 index 0000000..287569c --- /dev/null +++ b/user-service/src/main/java/com/mh/user/vo/ProMonitorVO.java @@ -0,0 +1,53 @@ +package com.mh.user.vo; + +import java.util.List; +import java.util.StringJoiner; + +/** + * @author LJF + * @version 1.0 + * @project mh_esi + * @description 设备类型监控 + * @date 2026-01-14 14:33:40 + */ +public class ProMonitorVO { + + private String userName; + + private String systemId; + + private List projectIds; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getSystemId() { + return systemId; + } + + public void setSystemId(String systemId) { + this.systemId = systemId; + } + + public List getProjectIds() { + return projectIds; + } + + public void setProjectIds(List projectIds) { + this.projectIds = projectIds; + } + + @Override + public String toString() { + return new StringJoiner(", ", ProMonitorVO.class.getSimpleName() + "[", "]") + .add("userName='" + userName + "'") + .add("systemId='" + systemId + "'") + .add("projectIds=" + projectIds) + .toString(); + } +}