From 859a0e5f1fb9e7b822f9108d904b5dd3c205f856 Mon Sep 17 00:00:00 2001 From: 25604 Date: Tue, 3 Mar 2026 15:59:03 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=83=AD=E6=B0=B4=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E7=95=8C=E9=9D=A2=E6=B7=BB=E5=8A=A0=E4=BC=A0?= =?UTF-8?q?=E6=84=9F=E5=99=A8=E5=8F=82=E6=95=B0=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 2 +- mh-admin/src/main/resources/application.yml | 2 +- .../core/domain/vo/HotWaterControlVO.java | 29 +++++ .../CollectionParamsManageServiceImpl.java | 31 +++++- .../impl/CoolingSystemMonitorServiceImpl.java | 102 +++++++++++++++++- 5 files changed, 159 insertions(+), 7 deletions(-) diff --git a/mh-admin/src/main/resources/application-dev.yml b/mh-admin/src/main/resources/application-dev.yml index 0699c0e..d511bcc 100644 --- a/mh-admin/src/main/resources/application-dev.yml +++ b/mh-admin/src/main/resources/application-dev.yml @@ -16,7 +16,7 @@ mh: # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 - port: 8080 + port: 8081 servlet: # 应用的访问路径 context-path: / diff --git a/mh-admin/src/main/resources/application.yml b/mh-admin/src/main/resources/application.yml index 44f7920..c3ae7c3 100644 --- a/mh-admin/src/main/resources/application.yml +++ b/mh-admin/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: prod + active: dev # 用户配置 user: diff --git a/mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java b/mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java index e39c05e..f9cf3dc 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/vo/HotWaterControlVO.java @@ -119,6 +119,35 @@ public class HotWaterControlVO { private int minSet; private String minSetId; + // 校准值 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0") + private BigDecimal calibrationValue; + private String calibrationValueId; + + // 工程量最低值 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0") + private BigDecimal engineeringMinValue; + private String engineeringMinValueId; + + // 工程量最高值 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0") + private BigDecimal engineeringMaxValue; + private String engineeringMaxValueId; + + // 数字量最低值 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0") + private BigDecimal digitalMinValue; + private String digitalMinValueId; + + // 数字量最高值 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0") + private BigDecimal digitalMaxValue; + private String digitalMaxValueId; + + // 中间值 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "0") + private BigDecimal middleValue; + private String middleValueId; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date curTime; 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 f4be75b..ed9b08f 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 @@ -10,9 +10,7 @@ import com.mh.common.core.domain.dto.PumpInfoDTO; import com.mh.common.core.domain.entity.*; import com.mh.common.core.domain.vo.*; import com.mh.common.core.redis.RedisCache; -import com.mh.common.utils.CRC16; import com.mh.common.utils.DateUtils; -import com.mh.common.utils.ExchangeStringUtil; import com.mh.common.utils.StringUtils; import com.mh.system.mapper.device.CollectionParamsManageMapper; import com.mh.system.mapper.device.DataProcessMapper; @@ -980,6 +978,9 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag dlItems.forEach(item -> { switch (item.getParamType()) { + case "0": + handleCalibrationParameters(vo, item); + break; case "1": case "48": if (item.getParamType().equals("1")) { @@ -1095,6 +1096,32 @@ public class CollectionParamsManageServiceImpl implements ICollectionParamsManag .collect(Collectors.toList()); } + private void handleCalibrationParameters(HotWaterControlVO deviceCalibrationVo, HotWaterControlListVO item) { + String otherName = item.getOtherName(); + BigDecimal value = item.getCurValue(); + String cpmId = item.getCpmId(); + + if (otherName.contains("工程量上限")) { + deviceCalibrationVo.setEngineeringMaxValue(value); + deviceCalibrationVo.setEngineeringMaxValueId(cpmId); + } else if (otherName.contains("工程量下限")) { + deviceCalibrationVo.setEngineeringMinValue(value); + deviceCalibrationVo.setEngineeringMinValueId(cpmId); + } else if (otherName.contains("数字量上限")) { + deviceCalibrationVo.setDigitalMaxValue(value); + deviceCalibrationVo.setDigitalMaxValueId(cpmId); + } else if (otherName.contains("数字量下限")) { + deviceCalibrationVo.setDigitalMinValue(value); + deviceCalibrationVo.setDigitalMinValueId(cpmId); + } else if (otherName.contains("校准值")) { + deviceCalibrationVo.setCalibrationValue(value); + deviceCalibrationVo.setCalibrationValueId(cpmId); + } else if (otherName.contains("中间值")) { + deviceCalibrationVo.setMiddleValue(value); + deviceCalibrationVo.setMiddleValueId(cpmId); + } + } + @Override public List selectMonitorListBySystemTypeAndHouseId(String systemType, String houseId) { // 根据系统类型查询出对应的设备 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 c4da5f2..d241067 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 @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mh.common.core.domain.dto.SysPerformanceDTO; import com.mh.common.core.domain.dto.WeatherDataDTO; import com.mh.common.core.domain.entity.CollectionParamsManage; +import com.mh.common.core.domain.entity.SysDictData; import com.mh.common.core.domain.entity.SysParams; import com.mh.common.core.domain.entity.WeatherData; import com.mh.common.core.domain.vo.DeviceOperateMonitorVO; @@ -13,6 +14,7 @@ import com.mh.common.utils.WeatherUtil; import com.mh.system.mapper.SysParamsMapper; import com.mh.system.mapper.WeatherDataMapper; import com.mh.system.mapper.device.CollectionParamsManageMapper; +import com.mh.system.mapper.energy.OverviewMapper; import com.mh.system.service.device.ICollectionParamsManageService; import com.mh.system.service.device.ICoolingSystemMonitorService; import lombok.extern.slf4j.Slf4j; @@ -21,9 +23,12 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; /** * @author LJF @@ -42,10 +47,13 @@ public class CoolingSystemMonitorServiceImpl implements ICoolingSystemMonitorSer private final CollectionParamsManageMapper collectionParamsManageMapper; - public CoolingSystemMonitorServiceImpl(SysParamsMapper sysParamsMapper, WeatherDataMapper weatherDataMapper, CollectionParamsManageMapper collectionParamsManageMapper) { + private final OverviewMapper overviewMapper; + + public CoolingSystemMonitorServiceImpl(SysParamsMapper sysParamsMapper, WeatherDataMapper weatherDataMapper, CollectionParamsManageMapper collectionParamsManageMapper, OverviewMapper overviewMapper) { this.sysParamsMapper = sysParamsMapper; this.weatherDataMapper = weatherDataMapper; this.collectionParamsManageMapper = collectionParamsManageMapper; + this.overviewMapper = overviewMapper; } @Override @@ -245,6 +253,80 @@ public class CoolingSystemMonitorServiceImpl implements ICoolingSystemMonitorSer sysPerformanceDTO.setRealCold(totalRealCold); } + // 计算今年电量、冷量 + // 今年开始时间,格式是yyyy-01-01 00:00:00 + LocalDate now = LocalDate.now(); + LocalDateTime startTime = now.with(TemporalAdjusters.firstDayOfYear()).atStartOfDay(); + // 今年结束时间,格式是yyyy-MM-dd 23:59:59.999999999 + LocalDateTime endTime = now.atTime(23, 59, 59, 999_000_000); + + // 批量构建查询条件 + String[] paramTypes = {"16", "17"}; + List> queryConditions = new ArrayList<>(); + for (String paramType : paramTypes) { + Map condition = new HashMap<>(); + condition.put("paramType", paramType); + condition.put("sysType", "0"); + condition.put("startTime", startTime); + condition.put("endTime", endTime); + queryConditions.add(condition); + } + // 并行处理所有查询条件 + List>> futures = queryConditions.stream() + .map(condition -> CompletableFuture.supplyAsync(() -> { + String paramType = (String) condition.get("paramType"); + String sysType = (String) condition.get("sysType"); + + QueryWrapper queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.eq("param_type", paramType); + queryWrapper1.eq("system_type", sysType); + queryWrapper1.eq("grade", 40); + queryWrapper1.eq("mt_is_sum", 0); + queryWrapper1.eq("is_use", 0); + + Long count = collectionParamsManageMapper.selectCount(queryWrapper1); + HashMap totalData = new HashMap<>(); + + if (count > 0) { + totalData = getTotalData(paramType, queryWrapper1, startTime, endTime); + } else { + queryWrapper1 = new QueryWrapper<>(); + queryWrapper1.eq("param_type", paramType); + queryWrapper1.eq("system_type", sysType); + queryWrapper1.eq("grade", 40); + queryWrapper1.eq("mt_is_sum", 1); + totalData = getTotalData(paramType, queryWrapper, startTime, endTime); + } + + Map result = new HashMap<>(); + result.put("paramType", paramType); + result.put("yearValue", totalData.get("yearValue") == null ? BigDecimal.ZERO : totalData.get("yearValue")); + return result; + })) + .toList(); + + // 收集所有结果 + List> results = futures.stream() + .map(CompletableFuture::join) + .toList(); + + // 汇总结果 + for (Map result : results) { + String paramType = (String) result.get("paramType"); + BigDecimal yearValue = (BigDecimal) result.get("yearValue"); + if (yearValue != null) { + switch (Integer.parseInt(paramType)) { + case 16: + sysPerformanceDTO.setYearPower(yearValue); + break; + case 17: + sysPerformanceDTO.setYearCold(yearValue); + break; + default: + break; + } + } + } // 开始计算瞬时EER和累计EER BigDecimal yearPower = sysPerformanceDTO.getYearPower(); @@ -255,7 +337,7 @@ public class CoolingSystemMonitorServiceImpl implements ICoolingSystemMonitorSer // 计算瞬时EER if (realPower != null && realCold != null) { if (realPower.compareTo(BigDecimal.ZERO) == 0) { - sysPerformanceDTO.setRealEER(BigDecimal.ZERO.setScale(1)); // 除数为0时赋值为0.0 + sysPerformanceDTO.setRealEER(BigDecimal.ZERO.setScale(1, RoundingMode.HALF_UP)); // 除数为0时赋值为0.0 } else { BigDecimal eer = realCold.divide(realPower, 1, RoundingMode.HALF_UP); sysPerformanceDTO.setRealEER(eer); @@ -265,7 +347,7 @@ public class CoolingSystemMonitorServiceImpl implements ICoolingSystemMonitorSer // 计算累计EER if (yearPower != null && yearCold != null) { if (yearPower.compareTo(BigDecimal.ZERO) == 0) { - sysPerformanceDTO.setYearEER(BigDecimal.ZERO.setScale(1)); // 除数为0时赋值为0.0 + sysPerformanceDTO.setYearEER(BigDecimal.ZERO.setScale(1, RoundingMode.HALF_UP)); // 除数为0时赋值为0.0 } else { BigDecimal yearEer = yearCold.divide(yearPower, 1, RoundingMode.HALF_UP); sysPerformanceDTO.setYearEER(yearEer); @@ -274,6 +356,20 @@ public class CoolingSystemMonitorServiceImpl implements ICoolingSystemMonitorSer return sysPerformanceDTO; } + private HashMap getTotalData(String paramType, + QueryWrapper queryWrapper, LocalDateTime startTime, LocalDateTime endTime) { + List collectionParamsManages = collectionParamsManageMapper.selectList(queryWrapper); + HashMap result = new HashMap<>(); + // 计算得出今年的各个参数用量 + if (!collectionParamsManages.isEmpty()) { + // 开始计时 + BigDecimal yearValue = overviewMapper.queryByDeviceNum(collectionParamsManages, DateUtils.localDateToStr(startTime), DateUtils.localDateToStr(endTime)); + result.put("yearValue", yearValue == null ? BigDecimal.ZERO : yearValue); + } + return result; + + } + @Override public Map getWeatherData() { Map result = new HashMap<>();