From 06d3d15a5a08637041cc601101c063b11b07a346 Mon Sep 17 00:00:00 2001
From: net <net@netdeMBP.lan>
Date: 星期五, 14 二月 2025 17:25:21 +0800
Subject: [PATCH]  合并理去杀杀人

---
 zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java |  159 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 156 insertions(+), 3 deletions(-)

diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
index 0b82a1d..2256b65 100644
--- a/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java
@@ -1,16 +1,32 @@
 package com.zhitan.dataitem.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.zhitan.common.enums.TimeType;
 import com.zhitan.dataitem.domain.StagseDataEntry;
+import com.zhitan.dataitem.domain.vo.NodeIndexValueVO;
 import com.zhitan.dataitem.mapper.DataItemMapper;
 import com.zhitan.dataitem.service.IDataItemService;
+import com.zhitan.model.domain.ModelNode;
+import com.zhitan.model.mapper.EnergyIndexMapper;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.model.mapper.NodeIndexMapper;
 import com.zhitan.realtimedata.domain.DataItem;
+import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO;
+import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsItemVO;
+import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsVO;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * stagseDataEntryService涓氬姟灞傚鐞�
@@ -22,7 +38,14 @@
 @AllArgsConstructor
 public class DataItemServiceImpl implements IDataItemService {
 
-    private final DataItemMapper dataItemMapper;
+    @Resource
+    private DataItemMapper dataItemMapper;
+    @Resource
+    private ModelNodeMapper modelNodeMapper;
+    @Resource
+    private EnergyIndexMapper energyIndexMapper;
+    @Resource
+    private NodeIndexMapper nodeIndexMapper;
 
 
     /**
@@ -103,4 +126,134 @@
     public BigDecimal getDataItemValueByIndexIds(String timeCode, List<String> indexIds) {
         return dataItemMapper.getDataItemValueByIndexIds(timeCode, indexIds);
     }
+
+    /**
+     * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇㈠皬鏃剁殑dataitem淇℃伅
+     *
+     * @param beginTime 寮�濮嬫椂闂�
+     * @param endTime   鎴鏃堕棿
+     * @param timeType  鏃堕棿绫诲瀷
+     * @param indexIds  鐐逛綅闆嗗悎
+     * @return
+     */
+    @Override
+    public List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds) {
+        return dataItemMapper.getDataItemHourInforByIndexIds(beginTime, endTime, timeType, indexIds);
+    }
+
+    /**
+     * 鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽
+     *
+     * @param dto 璇锋眰鍙傛暟
+     * @return 缁撴灉
+     */
+    @Override
+    public FlowChartsVO getFlowCharts(FlowChartsDTO dto) {
+        FlowChartsVO flowChartsVO = new FlowChartsVO();
+        // 鐖惰妭鐐筰d
+        LambdaQueryWrapper<ModelNode> wrapper = Wrappers.<ModelNode>lambdaQuery()
+                .eq(ModelNode::getModelCode, dto.getModelCode())
+                .isNull(ModelNode::getParentId);
+        List<ModelNode> modelNodes = modelNodeMapper.selectList(wrapper);
+        if(ObjectUtils.isEmpty(modelNodes)){
+            throw new RuntimeException("鏈煡璇㈠埌妯″瀷淇℃伅");
+        }
+        ModelNode modelNode = modelNodes.stream().findFirst().get();
+        String nodeId = modelNode.getNodeId();
+        dto.setNodeId(nodeId);
+        String energyType = dto.getEnergyType();
+        LocalDate queryTime = dto.getQueryTime();
+        TimeType timeType = dto.getTimeType();
+
+        // 鑾峰彇鏌ヨ鏃堕棿
+        Map<String, LocalDateTime> dateTimeMap = getDataItemByIndexId(timeType, queryTime);
+
+        // 鑾峰彇鑺傜偣鍜岀偣浣嶇殑绱Н閲�
+        List<NodeIndexValueVO> parentDataItemList = modelNodeMapper.getDataItemByNodeId(nodeId, energyType, timeType, dateTimeMap);
+
+        // 鑾峰彇瀛愯妭鐐逛笅鐨勭偣浣嶇殑绱Н閲�
+        List<NodeIndexValueVO> childDataItemList = modelNodeMapper.getDataItemByParentNodeId(nodeId, energyType, timeType, dateTimeMap);
+
+        // 鑾峰彇鐖惰妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰
+        if (ObjectUtils.isNotEmpty(parentDataItemList)) {
+            // 鐖惰妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰
+            BigDecimal totalValue = parentDataItemList.stream().map(NodeIndexValueVO::getValue)
+                    .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+            // 鎬荤疮绉噺
+            flowChartsVO.setTotalAccumulatedAmount(totalValue);
+        }
+        // 鑾峰彇瀛愯妭鐐逛笅鐨勮兘鑰楁暟鎹�
+        if (ObjectUtils.isNotEmpty(childDataItemList)) {
+            // 瀛愯妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰
+            BigDecimal childTotalValue = childDataItemList.stream().map(NodeIndexValueVO::getValue)
+                    .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+            // 瀛愯妭鐐圭疮绉噺
+            flowChartsVO.setChildNodeAccumulatedAmount(childTotalValue);
+
+            // 鏍规嵁瀛愯妭鐐筰d鍒嗙粍
+            Map<String, List<NodeIndexValueVO>> voMap = childDataItemList.stream()
+                    .collect(Collectors.groupingBy(NodeIndexValueVO::getNodeId));
+            List<FlowChartsItemVO> itemList = new ArrayList<>();
+
+            for (String childNodeId : voMap.keySet()) {
+                FlowChartsItemVO vo = new FlowChartsItemVO();
+                vo.setSource(modelNode.getName());
+                List<NodeIndexValueVO> valueList = voMap.getOrDefault(childNodeId, Collections.emptyList());
+                if (ObjectUtils.isNotEmpty(valueList)) {
+                    // 鍚勪釜瀛愯妭鐐圭殑鑳借�楁暟鎹�诲拰
+                    BigDecimal value = valueList.stream().map(NodeIndexValueVO::getValue)
+                            .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    valueList.stream().findFirst().ifPresent(nodeIndexValueVO -> vo.setTarget(nodeIndexValueVO.getNodeName()));
+                    vo.setValue(value);
+                }
+                itemList.add(vo);
+            }
+            flowChartsVO.setItemVOList(itemList);
+        }
+        return flowChartsVO;
+    }
+
+    /**
+     * 鏍规嵁indexId鏌ヨ鑳借�楁暟鎹�
+     */
+    private Map<String, LocalDateTime> getDataItemByIndexId(TimeType timeType, LocalDate queryTime) {
+        LocalDateTime startTime;
+        LocalDateTime endTime;
+        LocalDate startDate;
+        LocalDate endDate;
+        switch (timeType) {
+            case DAY:
+                // 褰撳ぉ鐨勫紑濮嬫椂闂�
+                startTime = LocalDateTime.of(queryTime, LocalTime.MIN);
+                // 褰撳ぉ鐨勭粨鏉熸椂闂�
+                endTime = LocalDateTime.of(queryTime, LocalTime.MAX);
+                break;
+            case MONTH:
+                // 褰撴湀鐨勫紑濮嬫椂闂�
+                startDate = queryTime.with(TemporalAdjusters.firstDayOfMonth());
+                startTime = LocalDateTime.of(startDate, LocalTime.MIN);
+                // 褰撴湀鐨勭粨鏉熸椂闂�
+                endDate = queryTime.with(TemporalAdjusters.lastDayOfMonth());
+                endTime = LocalDateTime.of(endDate, LocalTime.MAX);
+                break;
+            case YEAR:
+                // 褰撳勾鐨勫紑濮嬫椂闂�
+                startDate = queryTime.with(TemporalAdjusters.firstDayOfYear());
+                startTime = LocalDateTime.of(startDate, LocalTime.MIN);
+                // 褰撳勾鐨勭粨鏉熸椂闂�
+                endDate = queryTime.with(TemporalAdjusters.lastDayOfYear());
+                endTime = LocalDateTime.of(endDate, LocalTime.MAX);
+                break;
+            default:
+                // 褰撳ぉ鐨勫紑濮嬫椂闂�
+                startTime = LocalDateTime.of(queryTime, LocalTime.MIN);
+                // 褰撳ぉ鐨勭粨鏉熸椂闂�
+                endTime = LocalDateTime.of(queryTime, LocalTime.MAX);
+                break;
+        }
+        Map<String, LocalDateTime> localDateTimeMap = new HashMap<>();
+        localDateTimeMap.put("startTime", startTime);
+        localDateTimeMap.put("endTime", endTime);
+        return localDateTimeMap;
+    }
 }

--
Gitblit v1.9.3