From e6b2fef18d67772b1f87ae832840890301bdb89d Mon Sep 17 00:00:00 2001
From: z1415143022 <z1415143022@163.com>
Date: 星期四, 27 三月 2025 15:45:58 +0800
Subject: [PATCH] 更新 ItemizedEnergyAnalysisServiceImpl.java

---
 zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java |   31 +++++++++++++++++++++++++++++--
 1 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java
index edc291a..1b895d7 100644
--- a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java
@@ -11,6 +11,7 @@
 import com.zhitan.common.exception.ServiceException;
 import com.zhitan.common.utils.DateTimeUtil;
 import com.zhitan.common.utils.PropUtils;
+import com.zhitan.common.utils.TypeTime;
 import com.zhitan.dataitem.service.IDataItemService;
 import com.zhitan.model.domain.vo.ModelNodeIndexInfo;
 import com.zhitan.model.mapper.ModelNodeMapper;
@@ -62,19 +63,23 @@
 
         ModelNodeIndexInfo info = nodeIndexInfo.stream().findFirst().get();
 
+        List<TypeTime> dateTimeList;
         // 鏍规嵁鏃堕棿绫诲瀷璋冩暣鏃堕棿鑼冨洿
         switch (dto.getTimeType()) {
             case TimeTypeConst.TIME_TYPE_DAY:
                 timeType = TimeTypeConst.TIME_TYPE_HOUR;
                 endTime = DateUtil.endOfDay(beginTime);
+                dateTimeList = DateTimeUtil.getDateTimeListSame(TimeTypeConst.TIME_TYPE_DAY, beginTime);
                 break;
             case TimeTypeConst.TIME_TYPE_MONTH:
                 timeType = TimeTypeConst.TIME_TYPE_DAY;
                 endTime = DateUtil.endOfMonth(beginTime);
+                dateTimeList = DateTimeUtil.getDateTimeListSame(TimeTypeConst.TIME_TYPE_MONTH, beginTime);
                 break;
             case TimeTypeConst.TIME_TYPE_YEAR:
                 timeType = TimeTypeConst.TIME_TYPE_MONTH;
                 endTime = DateUtil.endOfYear(beginTime);
+                dateTimeList = DateTimeUtil.getDateTimeListSame(TimeTypeConst.TIME_TYPE_YEAR, beginTime);
                 break;
             default:
                 throw new ServiceException("鏃堕棿鏍煎紡閿欒");
@@ -102,9 +107,31 @@
         itemVO.setNodeId(info.getNodeId());
         itemVO.setNodeName(info.getName());
         itemVO.setTotal(sum);
-        for (int i = 0; i < dataItemList.size(); i++) {
-            PropUtils.setValue(itemVO,"value"+ i, dataItemList.get(i).getValue());
+
+        Map<Date, List<DataItem>> dateListMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getDataTime));
+        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(itemVO, "value" + i, item.getValue());
+            } else {
+                PropUtils.setValue(itemVO, "value" + i, null);
+            }
         }
+
         voList.add(itemVO);
         vo.setDataList(voList);
 

--
Gitblit v1.9.3