From 8b3b97865cb3ef4000b34ca6a3e643ecd58e841d Mon Sep 17 00:00:00 2001
From: zt916916 <1903964620@qq.com>
Date: 星期四, 27 三月 2025 11:33:25 +0800
Subject: [PATCH] 支路用能分析优化

---
 zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java |   58 ++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 42 insertions(+), 16 deletions(-)

diff --git a/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java
index 73859cb..fecff12 100644
--- a/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java
@@ -9,6 +9,7 @@
 import com.zhitan.common.utils.DateTimeUtil;
 import com.zhitan.branchanalysis.service.IBranchAnalysisService;
 import com.zhitan.common.utils.PropUtils;
+import com.zhitan.common.utils.TypeTime;
 import com.zhitan.dataitem.mapper.DataItemMapper;
 import com.zhitan.model.domain.vo.ModelNodeIndexInfo;
 import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
@@ -18,8 +19,11 @@
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.List;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -49,43 +53,65 @@
             return new BranchAnalysisVO();
         }
 
-        ModelNodeIndexInfo info = nodeIndexInfo.stream().findFirst().get();
-
+        String pattern;
+        List<TypeTime> dateTimeList;
         //鏍规嵁鏃堕棿绫诲瀷璋冩暣鏃堕棿鑼冨洿
         switch (dto.getTimeType()) {
             case TimeTypeConst.TIME_TYPE_DAY:
                 timeType = TimeTypeConst.TIME_TYPE_HOUR;
                 endTime = DateUtil.endOfDay(beginTime);
+                pattern = "HH";
+                dateTimeList = DateTimeUtil.getDateTimeListSame(TimeTypeConst.TIME_TYPE_DAY, beginTime);
                 break;
             case TimeTypeConst.TIME_TYPE_MONTH:
                 timeType = TimeTypeConst.TIME_TYPE_DAY;
                 endTime = DateUtil.endOfMonth(beginTime);
+                pattern = "dd";
+                dateTimeList = DateTimeUtil.getDateTimeListSame(TimeTypeConst.TIME_TYPE_MONTH, beginTime);
                 break;
             case TimeTypeConst.TIME_TYPE_YEAR:
                 timeType = TimeTypeConst.TIME_TYPE_MONTH;
                 endTime = DateUtil.endOfYear(beginTime);
+                pattern = "MM";
+                dateTimeList = DateTimeUtil.getDateTimeListSame(TimeTypeConst.TIME_TYPE_YEAR, beginTime);
                 break;
             default:
                 throw new ServiceException("鏃堕棿鏍煎紡閿欒");
         }
-
+        BranchAnalysisVO vo = new BranchAnalysisVO();
+        if (ObjectUtil.isEmpty(indexlist)) {
+            return vo;
+        }
         List<DataItem> dataItemlist = dataItemMapper.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, timeType, indexlist);
 
-        BranchAnalysisVO vo = new BranchAnalysisVO();
         double sum = dataItemlist.stream().mapToDouble(DataItem::getValue).sum();
         vo.setTotal(sum);
-        if (ObjectUtil.isNotEmpty(info.getIndexId())) {
-            vo.setUntil(info.getUnitId());
-        }
+        vo.setNodeId(dto.getNodeId());
+        vo.setNodeName(nodeIndexInfo.get(0).getName());
+        Map<Date, List<DataItem>> dateListMap = dataItemlist.stream().collect(Collectors.groupingBy(DataItem::getDataTime));
 
-        vo.setNodeId(info.getNodeId());
-        vo.setNodeName(info.getName());
-        for (int i = 0; i < dataItemlist.size(); i++) {
-            PropUtils.setValue(vo, "value" + i, dataItemlist.get(i).getValue());
+        List<DataItem> results = new ArrayList<>();
+        dateListMap.forEach((key, value) -> {
+            DataItem dataItem = new DataItem();
+            dataItem.setDataTime(key);
+            //淇濈暀鍥涗綅灏忔暟
+            double totalValue = value.stream().map(data -> BigDecimal.valueOf(data.getValue()))
+                    .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_UP).doubleValue();
+            dataItem.setValue(totalValue);
+            results.add(dataItem);
+        });
+        //鏍规嵁鏃堕棿鎺掑簭
+        results.sort(Comparator.comparing(DataItem::getDataTime));
+        for (int i = 0; i < dateTimeList.size(); i++) {
+            TypeTime typeTime = dateTimeList.get(i);
+            Optional<DataItem> dataItem = results.stream().filter(result -> result.getDataTime().equals(typeTime.getDateTime())).findFirst();
+            if (dataItem.isPresent()) {
+                DataItem item = dataItem.get();
+                PropUtils.setValue(vo, "value" + i, item.getValue());
+            } else {
+                PropUtils.setValue(vo, "value" + i, null);
+            }
         }
-
         return vo;
-
-
     }
 }

--
Gitblit v1.9.3