From 81fe5824f21a24332ad107d4407430a547c76c26 Mon Sep 17 00:00:00 2001 From: "3067418132@qq.com" Date: Thu, 16 Jul 2026 08:54:41 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=A2=85=E5=B7=9E=E7=9B=91=E8=A7=86?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/ChillersParamsController.java | 1 + .../test/java/com/mh/MHApplicationTest.java | 55 ++++++++++++ .../core/domain/dto/SysPerformanceDTO.java | 7 ++ .../device/CollectionParamsManageMapper.java | 4 +- .../impl/CoolingSystemMonitorServiceImpl.java | 83 +++++++++++++++++++ .../overview/impl/ProOverviewServiceImpl.java | 6 +- 6 files changed, 151 insertions(+), 5 deletions(-) diff --git a/mh-admin/src/main/java/com/mh/web/controller/device/ChillersParamsController.java b/mh-admin/src/main/java/com/mh/web/controller/device/ChillersParamsController.java index 7fc3174..ba0bc45 100644 --- a/mh-admin/src/main/java/com/mh/web/controller/device/ChillersParamsController.java +++ b/mh-admin/src/main/java/com/mh/web/controller/device/ChillersParamsController.java @@ -90,6 +90,7 @@ public class ChillersParamsController extends BaseController { // 使用正则表达式去掉“号主机”及之前的内容 String result = otherName != null ? otherName.replaceFirst(".*号主机", "") : otherName; result = result != null ? result.replace("-", "") : result; + result = result != null ? result.replace("系统1", "") : result; item.setOtherName(result); }); // list中的CollectionParamsManage对象赋值到CollectionParamsManageVO2形成List diff --git a/mh-admin/src/test/java/com/mh/MHApplicationTest.java b/mh-admin/src/test/java/com/mh/MHApplicationTest.java index 6b00b3d..25c06ff 100644 --- a/mh-admin/src/test/java/com/mh/MHApplicationTest.java +++ b/mh-admin/src/test/java/com/mh/MHApplicationTest.java @@ -22,6 +22,7 @@ import com.mh.system.service.overview.IProOverviewService; import com.mh.system.service.report.IComprehensiveReportService; import com.mh.system.service.report.IMeterReadingsHisService; import com.mh.system.service.report.IReportHotWaterService; +import com.mh.web.controller.monitor.CoolingSystemMonitorController; import jakarta.annotation.Resource; import org.checkerframework.checker.units.qual.A; import org.junit.jupiter.api.Test; @@ -29,6 +30,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.web.client.RestTemplate; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Date; import java.util.List; @@ -66,6 +69,58 @@ public class MHApplicationTest { @Autowired private IComprehensiveReportService comprehensiveReportService; + @Autowired + private CoolingSystemMonitorController iCoolingSystemMonitorService; + @Test + public void getSys() { +// iCoolingSystemMonitorService.getSysPerformance(); + // 蒸发器侧(冷冻水):Qev = (冷冻水流量 × (冷冻回水温度 - 冷冻供水温度)) / 0.86 + BigDecimal freezingFlow = new BigDecimal("260"); + BigDecimal freezingSupplyTemp = new BigDecimal("15.8"); + BigDecimal freezingReturnTemp = new BigDecimal("18.7"); + + // 冷凝器侧(冷却水):Qcd = (冷却水流量 × (冷却回水温度 - 冷却供水温度)) / 0.86 + BigDecimal coolingFlow = new BigDecimal("280.280"); + BigDecimal coolingSupplyTemp = new BigDecimal("34.030"); + BigDecimal coolingReturnTemp = new BigDecimal("30.890"); + + // 主机3瞬时读数(功率) + BigDecimal chillerPower = new BigDecimal("113.7"); + + BigDecimal qev = null; + BigDecimal qcd = null; + + // 计算蒸发器制冷量 Qev + if (freezingFlow != null && freezingSupplyTemp != null && freezingReturnTemp != null) { + BigDecimal deltaT = freezingReturnTemp.subtract(freezingSupplyTemp).abs(); + qev = freezingFlow.multiply(deltaT) + .divide(new BigDecimal("0.86"), 2, RoundingMode.HALF_UP); + } + + // 计算冷凝器排热量 Qcd + if (coolingFlow != null && coolingSupplyTemp != null && coolingReturnTemp != null) { + BigDecimal deltaT = coolingReturnTemp.subtract(coolingSupplyTemp).abs(); + qcd = coolingFlow.multiply(deltaT) + .divide(new BigDecimal("0.86"), 2, RoundingMode.HALF_UP); + } + + // 计算热平衡率 = Qev / (Qcd - 主机3瞬时读数) × 100% + if (qev != null && qcd != null && chillerPower != null) { + BigDecimal denominator = qcd.subtract(chillerPower); + if (denominator.compareTo(BigDecimal.ZERO) > 0) { + BigDecimal heatBalance = qev.divide(denominator, 4, RoundingMode.HALF_UP) + .multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); + // 这里再增加一个判断,数据有效区间95%~105%。如果高于105%,则设置为105%。如果低于95%,则设置为95%。 + if (heatBalance.compareTo(new BigDecimal("105")) > 0) { + heatBalance = new BigDecimal("105"); + } else if (heatBalance.compareTo(new BigDecimal("95")) < 0) { + heatBalance = new BigDecimal("95"); + } + System.out.println(heatBalance); + } + } + } + @Test public void comprehensiveReport() { long startTime = System.currentTimeMillis(); diff --git a/mh-common/src/main/java/com/mh/common/core/domain/dto/SysPerformanceDTO.java b/mh-common/src/main/java/com/mh/common/core/domain/dto/SysPerformanceDTO.java index 7374fc8..ac3f840 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/dto/SysPerformanceDTO.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/dto/SysPerformanceDTO.java @@ -22,12 +22,19 @@ public class SysPerformanceDTO { private BigDecimal realCold; + // 热平衡率 + private BigDecimal heatBalance; + private BigDecimal yearEER; private BigDecimal yearPower; private BigDecimal yearCold; + public void setHeatBalance(BigDecimal heatBalance) { + this.heatBalance = heatBalance; + } + public void setRealEER(BigDecimal realEER) { this.realEER = realEER.setScale(1, BigDecimal.ROUND_HALF_UP); } 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 63d5446..88a6730 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 @@ -151,14 +151,14 @@ public interface CollectionParamsManageMapper extends BaseMapper= CURRENT_DATE AND ar.create_time < CURRENT_DATE + interval '1 day' " + + " WHEN ar.create_time >= CURRENT_TIMESTAMP - interval '1 hour' " + " THEN 1 " + " ELSE 0 " + " END as alarm_status, " + " ROW_NUMBER() OVER ( " + " PARTITION BY csr.house_id " + " ORDER BY " + - " CASE WHEN ar.create_time >= CURRENT_DATE AND ar.create_time < CURRENT_DATE + interval '1 day' THEN 0 ELSE 1 END, " + + " CASE WHEN ar.create_time >= CURRENT_TIMESTAMP - interval '1 hour' THEN 0 ELSE 1 END, " + " cpm.cur_time DESC " + " ) as row_num " + " FROM " + diff --git a/mh-system/src/main/java/com/mh/system/service/device/impl/CoolingSystemMonitorServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/device/impl/CoolingSystemMonitorServiceImpl.java index d241067..18540e7 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/impl/CoolingSystemMonitorServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/device/impl/CoolingSystemMonitorServiceImpl.java @@ -353,6 +353,74 @@ public class CoolingSystemMonitorServiceImpl implements ICoolingSystemMonitorSer sysPerformanceDTO.setYearEER(yearEer); } } + // 查询热平衡率 + // 查询总表的数据 + QueryWrapper queryWrapper1 = new QueryWrapper() + .eq("system_type", "0") + .in("param_type", Arrays.asList("12", "13", "16", "31")) + .in("other_name", Arrays.asList("总冷量计瞬时流量", + "冷冻供水温度", + "冷冻回水温度", + "总冷却冷量计瞬时流量", + "冷却供水温度", + "冷却回水温度", + "主机3瞬时读数")); + List collectionParamsManages1 = collectionParamsManageMapper.selectList(queryWrapper1); + // 流量单位:推断为 m³/h(立方米/小时)。 + //水的比热容Cp:取 4.186 kJ/(kg·℃)。 + //水的密度ρ:取 1000 kg/m³。 + //换算系数:将 m³/h 换算为 kW 的快捷系数为 0.86(因为 1 kW = 1 kJ/s,1小时=3600秒,系数≈ 3600/4186)。 + if (null != collectionParamsManages1 && !collectionParamsManages1.isEmpty()) { + // 蒸发器侧(冷冻水):Qev = (冷冻水流量 × (冷冻回水温度 - 冷冻供水温度)) / 0.86 + BigDecimal freezingFlow = findCurValue(collectionParamsManages1, "总冷量计瞬时流量"); + BigDecimal freezingSupplyTemp = findCurValue(collectionParamsManages1, "冷冻供水温度"); + BigDecimal freezingReturnTemp = findCurValue(collectionParamsManages1, "冷冻回水温度"); + + // 冷凝器侧(冷却水):Qcd = (冷却水流量 × (冷却回水温度 - 冷却供水温度)) / 0.86 + BigDecimal coolingFlow = findCurValue(collectionParamsManages1, "总冷却冷量计瞬时流量"); + BigDecimal coolingSupplyTemp = findCurValue(collectionParamsManages1, "冷却供水温度"); + BigDecimal coolingReturnTemp = findCurValue(collectionParamsManages1, "冷却回水温度"); + + // 主机3瞬时读数(功率) + BigDecimal chillerPower = findCurValue(collectionParamsManages1, "主机3瞬时读数"); + + BigDecimal qev = null; + BigDecimal qcd = null; + + // 计算蒸发器制冷量 Qev + if (freezingFlow != null && freezingSupplyTemp != null && freezingReturnTemp != null) { + BigDecimal deltaT = freezingReturnTemp.subtract(freezingSupplyTemp).abs(); + qev = freezingFlow.multiply(deltaT) + .divide(new BigDecimal("0.86"), 2, RoundingMode.HALF_UP); + } + + // 计算冷凝器排热量 Qcd + if (coolingFlow != null && coolingSupplyTemp != null && coolingReturnTemp != null) { + BigDecimal deltaT = coolingReturnTemp.subtract(coolingSupplyTemp).abs(); + qcd = coolingFlow.multiply(deltaT) + .divide(new BigDecimal("0.86"), 2, RoundingMode.HALF_UP); + } + + // 计算热平衡率 = Qev / (Qcd - 主机3瞬时读数) × 100% + if (qev != null && qcd != null && chillerPower != null) { + BigDecimal denominator = qcd.subtract(chillerPower); + if (denominator.compareTo(BigDecimal.ZERO) > 0) { + BigDecimal heatBalance = qev.divide(denominator, 4, RoundingMode.HALF_UP) + .multiply(new BigDecimal("100")).setScale(1, RoundingMode.HALF_UP); + // 这里再增加一个判断,数据有效区间95%~105%。如果高于105%,则设置为105%。如果低于95%,则设置为95%。 + if (heatBalance.compareTo(new BigDecimal("105")) > 0) { + heatBalance = new BigDecimal("105.0"); + } else if (heatBalance.compareTo(new BigDecimal("95")) < 0) { + heatBalance = new BigDecimal("95.0"); + } + sysPerformanceDTO.setHeatBalance(heatBalance); + } else { + log.warn("热平衡率计算:分母(Qcd - 主机功率) <= 0,跳过计算。Qcd={}, chillerPower={}", qcd, chillerPower); + } + } else { + log.warn("热平衡率计算:部分参数缺失。qev={}, qcd={}, chillerPower={}", qev, qcd, chillerPower); + } + } return sysPerformanceDTO; } @@ -427,4 +495,19 @@ public class CoolingSystemMonitorServiceImpl implements ICoolingSystemMonitorSer } return result; } + + /** + * 从列表中根据 otherName 查找对应记录的 curValue + * @param list 数据列表 + * @param otherName 别名 + * @return curValue,未找到或值为null则返回null + */ + private BigDecimal findCurValue(List list, String otherName) { + return list.stream() + .filter(item -> otherName.equals(item.getOtherName())) + .map(CollectionParamsManage::getCurValue) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); + } } diff --git a/mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java index f9bd2b0..ab1abaa 100644 --- a/mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/overview/impl/ProOverviewServiceImpl.java @@ -239,7 +239,7 @@ public class ProOverviewServiceImpl implements IProOverviewService { // 初始化结果列表 List result = Collections.synchronizedList(new ArrayList<>()); // 使用Map存储不同类型的能源DTO - Map energyMap = new HashMap<>(); + LinkedHashMap energyMap = new LinkedHashMap<>(); energyMap.put("16", new OverviewEnergyDTO()); energyMap.put("17", new OverviewEnergyDTO()); energyMap.put("18", new OverviewEnergyDTO()); @@ -332,11 +332,11 @@ public class ProOverviewServiceImpl implements IProOverviewService { private String getEnergyLabel(String paramType) { switch (paramType) { case "16": - return "总用电量"; + return "总耗电量"; case "17": return "总产冷量"; case "18": - return "总用水量"; + return "总热水补水"; case "19": return "总蒸汽流量"; default: