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 ++++++++++++++-----
 zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java                             |   72 ++++++++++++++++++++++++
 2 files changed, 114 insertions(+), 16 deletions(-)

diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
index 3299e26..93d8031 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
@@ -844,4 +844,76 @@
         }
         return resultList;
     }
+
+    /**
+     * 閫氳繃鏃堕棿绫诲瀷杩斿洖瀵瑰簲鐨勬椂闂磍ist
+     * <p>
+     * 鍙傛暟锛�
+     * timeType="YEAR",dataTime="2025-01-01 00:00:00"
+     * timeType="MONTH",dataTime="2025-01-01 00:00:00"
+     * timeType="DAY",dataTime="2025-01-01 00:00:00"
+     * 杩斿洖鏍煎紡锛�
+     * [
+     * {"datatime":"2025-01-01 00:00:00","value":"value1"},
+     * {"datatime":"2025-02-01 00:00:00","value":"value2"},
+     * {"datatime":"2025-03-01 00:00:00","value":"value3"},
+     * {"datatime":"2025-04-01 00:00:00","value":"value4"},
+     * {"datatime":"2025-05-01 00:00:00","value":"value5"},
+     * {"datatime":"2025-06-01 00:00:00","value":"value6"},
+     * {"datatime":"2025-07-01 00:00:00","value":"value7"},
+     * {"datatime":"2025-08-01 00:00:00","value":"value8"},
+     * {"datatime":"2025-09-01 00:00:00","value":"value9"},
+     * {"datatime":"2025-10-01 00:00:00","value":"value10"},
+     * {"datatime":"2025-11-01 00:00:00","value":"value11"},
+     * {"datatime":"2025-12-01 00:00:00","value":"value12"}
+     * ]
+     *
+     * @param timeType
+     * @param dataTime
+     * @return
+     */
+    public static List<TypeTime> getDateTimeListSame(String timeType, Date dataTime) {
+
+        List<TypeTime> resultList = new ArrayList<>();
+        Date beginTime;
+        switch (timeType) {
+            case TimeTypeConst.TIME_TYPE_DAY:
+                beginTime = DateUtil.beginOfDay(dataTime);
+                for (int i = 1; i <= 24; i++) {
+                    TypeTime typeTime = new TypeTime();
+                    typeTime.setDataTime(DateUtil.format(beginTime, COMMON_PATTERN));
+                    typeTime.setTimeCode(CommonConst.WORD_H + DateUtil.format(beginTime, COMMON_PATTERN_HOUR));
+                    typeTime.setDateTime(beginTime);
+                    typeTime.setValue("value" + i);
+                    resultList.add(typeTime);
+                    beginTime = addHours(beginTime, 1);
+                }
+                break;
+            case TimeTypeConst.TIME_TYPE_MONTH:
+                beginTime = DateUtil.beginOfMonth(dataTime);
+                for (int i = 1; i <= 31; i++) {
+                    TypeTime typeTime = new TypeTime();
+                    typeTime.setDataTime(DateUtil.format(beginTime, COMMON_PATTERN));
+                    typeTime.setTimeCode(CommonConst.WORD_D + DateUtil.format(beginTime, COMMON_PATTERN_DAY));
+                    typeTime.setDateTime(beginTime);
+                    typeTime.setValue("value" + i);
+                    resultList.add(typeTime);
+                    beginTime = addDays(beginTime, 1);
+                }
+                break;
+            case TimeTypeConst.TIME_TYPE_YEAR:
+                beginTime = DateUtil.beginOfYear(dataTime);
+                for (int i = 1; i <= 12; i++) {
+                    TypeTime typeTime = new TypeTime();
+                    typeTime.setDataTime(DateUtil.format(beginTime, COMMON_PATTERN));
+                    typeTime.setTimeCode(CommonConst.WORD_M + DateUtil.format(beginTime, COMMON_PATTERN_MONTH));
+                    typeTime.setDateTime(beginTime);
+                    typeTime.setValue("value" + i);
+                    resultList.add(typeTime);
+                    beginTime = addMonths(beginTime, 1);
+                }
+                break;
+        }
+        return resultList;
+    }
 }
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