From 5d2f2b3f74c51766421154f5b819f98cb25611a4 Mon Sep 17 00:00:00 2001 From: v-lijf43 <3067418132@qq.com> Date: Sun, 19 Oct 2025 00:34:51 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96=E7=94=A8=E8=83=BD?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/service/impl/SummaryServiceImpl.java | 112 +++++++++++------- .../com/mh/user/strategy/WtMeterStrategy.java | 22 ++-- 2 files changed, 78 insertions(+), 56 deletions(-) diff --git a/user-service/src/main/java/com/mh/user/service/impl/SummaryServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/SummaryServiceImpl.java index 9f0cff4..8060a51 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/SummaryServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/SummaryServiceImpl.java @@ -10,10 +10,12 @@ import com.mh.user.mapper.SummaryMapper; import com.mh.user.service.BuildingService; import com.mh.user.service.DealDataService; import com.mh.user.service.SummaryService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDate; import java.time.Year; import java.time.YearMonth; @@ -23,6 +25,7 @@ import java.util.List; import static java.lang.Double.parseDouble; +@Slf4j @Service public class SummaryServiceImpl implements SummaryService { @@ -120,55 +123,62 @@ public class SummaryServiceImpl implements SummaryService { } // curList每一个参数求和,得出 EnergySumEntity - EnergySumEntity curSum = new EnergySumEntity(); - if (curList.isEmpty()) { - curSum.setWaterValue("0"); - curSum.setElectValue("0"); - curSum.setElectWater("0"); - } else { - curSum.setFillWater(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getFillWater())).sum())); - curSum.setWaterValue(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getWaterValue())).sum())); - curSum.setElectValue(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getElectValue())).sum())); - curSum.setElectWater(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getElectWater())).sum())); - } + EnergySumEntity result = null; + try { + EnergySumEntity curSum = new EnergySumEntity(); + if (curList.isEmpty()) { + curSum.setWaterValue("0"); + curSum.setElectValue("0"); + curSum.setElectWater("0"); + } else { + curSum.setFillWater(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getFillWater())).sum())); + curSum.setWaterValue(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getWaterValue())).sum())); + curSum.setElectValue(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getElectValue())).sum())); + curSum.setElectWater(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getElectWater())).sum())); + } - // lastList每一个参数求和,得出 EnergySumEntity - EnergySumEntity lastSum = new EnergySumEntity(); - if (lastList.isEmpty()) { - lastSum.setFillWater("0"); - lastSum.setWaterValue("0"); - lastSum.setElectValue("0"); - lastSum.setElectWater("0"); - } else { - lastSum.setFillWater(String.valueOf(lastList.stream().mapToDouble(e -> parseDouble(e.getFillWater())).sum())); - lastSum.setWaterValue(String.valueOf(lastList.stream().mapToDouble(e -> parseDouble(e.getWaterValue())).sum())); - lastSum.setElectValue(String.valueOf(lastList.stream().mapToDouble(e -> parseDouble(e.getElectValue())).sum())); - lastSum.setElectWater(String.valueOf(lastList.stream().mapToDouble(e -> parseDouble(e.getElectWater())).sum())); - } + // lastList每一个参数求和,得出 EnergySumEntity + EnergySumEntity lastSum = new EnergySumEntity(); + if (lastList.isEmpty()) { + lastSum.setFillWater("0"); + lastSum.setWaterValue("0"); + lastSum.setElectValue("0"); + lastSum.setElectWater("0"); + } else { + lastSum.setFillWater(String.valueOf(lastList.stream().mapToDouble(e -> parseDouble(e.getFillWater())).sum())); + lastSum.setWaterValue(String.valueOf(lastList.stream().mapToDouble(e -> parseDouble(e.getWaterValue())).sum())); + lastSum.setElectValue(String.valueOf(lastList.stream().mapToDouble(e -> parseDouble(e.getElectValue())).sum())); + lastSum.setElectWater(String.valueOf(lastList.stream().mapToDouble(e -> parseDouble(e.getElectWater())).sum())); + } + + // 昨日的EnergySumEntity和今日的EnergySumEntity,对比计算出补水昨日比、用水与昨日比、用电与昨日比、单耗与昨日比 + result = new EnergySumEntity(); + if (curList.isEmpty()) { + result.setWaterValue("0"); + result.setElectValue("0"); + result.setElectWater("0"); + } else { + result.setFillWater(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getFillWater())).sum())); + result.setWaterValue(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getWaterValue())).sum())); + result.setElectValue(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getElectValue())).sum())); + result.setElectWater(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getElectWater())).sum())); + } - // 昨日的EnergySumEntity和今日的EnergySumEntity,对比计算出补水昨日比、用水与昨日比、用电与昨日比、单耗与昨日比 - EnergySumEntity result = new EnergySumEntity(); - if (curList.isEmpty()) { - result.setWaterValue("0"); - result.setElectValue("0"); - result.setElectWater("0"); - } else { - result.setFillWater(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getFillWater())).sum())); - result.setWaterValue(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getWaterValue())).sum())); - result.setElectValue(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getElectValue())).sum())); - result.setElectWater(String.valueOf(curList.stream().mapToDouble(e -> parseDouble(e.getElectWater())).sum())); - } + // 计算与昨日的比较百分比 + result.setFillWaterP(calculateRatio(curSum.getFillWater(), lastSum.getFillWater())); + result.setWaterP(calculateRatio(curSum.getWaterValue(), lastSum.getWaterValue())); + result.setElectP(calculateRatio(curSum.getElectValue(), lastSum.getElectValue())); - // 计算与昨日的比较百分比 - result.setFillWaterP(calculateRatio(curSum.getFillWater(), lastSum.getFillWater())); - result.setWaterP(calculateRatio(curSum.getWaterValue(), lastSum.getWaterValue())); - result.setElectP(calculateRatio(curSum.getElectValue(), lastSum.getElectValue())); + // 计算单耗比较 + // 计算单耗比较 + String curPerElect = count != 0 ? new BigDecimal(curSum.getElectValue()).divide(new BigDecimal(count), 2, RoundingMode.HALF_UP).toString() : "0"; + String lastPerElect = count != 0 ? new BigDecimal(lastSum.getElectValue()).divide(new BigDecimal(count), 2, RoundingMode.HALF_UP).toString() : "0"; + result.setElectWaterP(calculateRatio(curPerElect, lastPerElect)); - // 计算单耗比较 - String curPerElect = count != 0 ? new BigDecimal(curSum.getElectValue()).divide(new BigDecimal(count)).toString() : "0"; - String lastPerElect = count != 0 ? new BigDecimal(lastSum.getElectValue()).divide(new BigDecimal(count)).toString() : "0"; - result.setElectWaterP(calculateRatio(curPerElect, lastPerElect)); + } catch (Exception e) { + log.error("计算百分比异常", e); + } return result; } else if (level == 0) { @@ -204,15 +214,25 @@ public class SummaryServiceImpl implements SummaryService { * @param previous 前一个值 * @return 比率(百分比形式) */ + /** + * 计算比率的方法 + * + * @param current 当前值 + * @param previous 前一个值 + * @return 比率(百分比形式,保留两位小数) + */ private String calculateRatio(String current, String previous) { if (parseDouble(previous) == 0) { - return parseDouble(current) > 0 ? "100" : "0"; // 避免除零错误 + return parseDouble(current) > 0 ? "100.00%" : "0.00%"; // 避免除零错误 } - return String.valueOf(((parseDouble(current) - parseDouble(previous)) / parseDouble(previous)) * 100); + + double result = ((parseDouble(current) - parseDouble(previous)) / parseDouble(previous)) * 100; + return String.format("%.2f%%", result); } + @Override public MaintainSumEntity queryMaintainSum(String buildingId, String curDate) { return summaryMapper.queryMaintainSum(buildingId,curDate); diff --git a/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java b/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java index 79cfcbc..d21576f 100644 --- a/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java +++ b/user-service/src/main/java/com/mh/user/strategy/WtMeterStrategy.java @@ -112,20 +112,22 @@ public class WtMeterStrategy implements DeviceStrategy { } log.info("水表表号: " + meterId + ",水表读数:" + data); try { - DataResultEntity dataResultEntity = new DataResultEntity(); - dataResultEntity.setDeviceAddr(meterId);//通讯编号 - dataResultEntity.setDeviceType("水表"); - dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 - Date date = new Date(); - dataResultEntity.setCurDate(date); //当前日期 - dataResultEntity.setBuildingId(buildingId); - dataResultService.saveDataResult(dataResultEntity); - log.info("水表数据保存数据库成功!楼栋名称:" + buildingName); + if (!StringUtils.isBlank(data)) { + DataResultEntity dataResultEntity = new DataResultEntity(); + dataResultEntity.setDeviceAddr(meterId);//通讯编号 + dataResultEntity.setDeviceType("水表"); + dataResultEntity.setCurValue(Double.parseDouble(data)); //当前读数 + Date date = new Date(); + dataResultEntity.setCurDate(date); //当前日期 + dataResultEntity.setBuildingId(buildingId); + dataResultService.saveDataResult(dataResultEntity); + log.info("水表数据保存数据库成功!楼栋名称:" + buildingName); + } } catch (Exception e) { e.printStackTrace(); log.error("水表数据保存数据库失败!楼栋名称:" + buildingName); } - if (StringUtils.isBlank(data)) { + if (!StringUtils.isBlank(data)) { data = String.valueOf(Double.valueOf(data)); } return data;