From ca39f9dd34b5a578c7a4ff170cb39d42cbc77234 Mon Sep 17 00:00:00 2001
From: 潘晓明 <hahagongzi2006@163.com>
Date: 星期四, 13 二月 2025 11:50:51 +0800
Subject: [PATCH] 成本趋势分析页面接口:不传能源类型时,取所有能源类型。

---
 zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java |  146 ++++++++++++++++++++++++++----------------------
 1 files changed, 80 insertions(+), 66 deletions(-)

diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java
index 6ecc35e..5819d02 100644
--- a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java
@@ -7,6 +7,7 @@
 import com.zhitan.carbonemission.domain.CarbonEmission;
 import com.zhitan.common.constant.CommonConst;
 import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.utils.StringUtils;
 import com.zhitan.dataitem.mapper.DataItemMapper;
 import com.zhitan.model.domain.ModelNode;
 import com.zhitan.model.domain.NodeIndex;
@@ -58,12 +59,13 @@
                                                    String modelCode) {
         //鑳芥簮绫诲瀷淇℃伅
         SysEnergy sysEnergy = new SysEnergy();
-        sysEnergy.setEnersno(energyType);
+        if (StringUtils.isNotEmpty(energyType)) {
+            sysEnergy.setEnersno(energyType);
+        }
         List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy);
         if (sysEnergies.isEmpty()) {
             throw new RuntimeException("鏈煡璇㈠埌鑳芥簮淇℃伅");
         }
-        SysEnergy sysEnergyInfo = sysEnergies.stream().findFirst().get();
         //鑺傜偣淇℃伅
         List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode)
                 .isNull(ModelNode::getParentId));
@@ -78,22 +80,24 @@
             throw new RuntimeException("鏈煡璇㈠埌鐐逛綅淇℃伅");
         }
 
-        // 閬嶅巻鐢ㄨ兘鍗曞厓鑾峰彇琛ㄦ牸涓殑鏁版嵁
-        List<EnergyCostTrendItem> trendItemList = new ArrayList<>();
-        EnergyCostTrendItem energyCostTrendItem = new EnergyCostTrendItem();
-        energyCostTrendItem.setDateCode(timeCode);
         // 鎬昏垂鐢�
         BigDecimal totalCost = BigDecimal.ZERO;
         // 閬嶅巻鑳芥簮绫诲瀷
         List<CostTrendEnergyTypeItem> itemList = new ArrayList<>();
-        CostTrendEnergyTypeItem item = new CostTrendEnergyTypeItem();
-        item.setEnergyType(sysEnergyInfo.getEnersno());
-        item.setEnergyName(sysEnergyInfo.getEnername());
-        // 澶勭悊鏃堕棿
-        Date bsTime = DateTimeUtil.getTime(timeType, timeCode);
-        Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime);
-        totalCost = getEnergyUnitCostTrendAnalysisValueInfo(timeType, bsTime, endTime, totalCost, nodeIndices, sysEnergyInfo.getEnersno(), item);
-        itemList.add(item);
+        for (SysEnergy sysEnergyInfo : sysEnergies) {
+            CostTrendEnergyTypeItem item = new CostTrendEnergyTypeItem();
+            item.setEnergyType(sysEnergyInfo.getEnersno());
+            item.setEnergyName(sysEnergyInfo.getEnername());
+            // 澶勭悊鏃堕棿
+            Date bsTime = DateTimeUtil.getTime(timeType, timeCode);
+            Date endTime = DateTimeUtil.getEndTimeByType(timeType, bsTime);
+            totalCost = getEnergyUnitCostTrendAnalysisValueInfo(timeType, bsTime, endTime, totalCost, nodeIndices, modelNodeInfo.getNodeId(), sysEnergyInfo, item);
+            itemList.add(item);
+        }
+        // 閬嶅巻鐢ㄨ兘鍗曞厓鑾峰彇琛ㄦ牸涓殑鏁版嵁
+        List<EnergyCostTrendItem> trendItemList = new ArrayList<>();
+        EnergyCostTrendItem energyCostTrendItem = new EnergyCostTrendItem();
+        energyCostTrendItem.setDateCode(timeCode);
         energyCostTrendItem.setTotal(totalCost.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP));
         energyCostTrendItem.setItemList(itemList);
         trendItemList.add(energyCostTrendItem);
@@ -107,28 +111,30 @@
     /**
      * 鑾峰彇鐢ㄨ兘鍗曞厓鎴愭湰瓒嬪娍鍒嗘瀽绱Н閲忋�佽垂鐢ㄤ俊鎭�
      *
-     * @param timeType    鏃堕棿绫诲瀷
-     * @param bsTime      寮�濮嬫椂闂�
-     * @param endTime     缁撴潫鏃堕棿
-     * @param totalCost   鎬昏垂鐢�
-     * @param nodeIndices 鑺傜偣id闆嗗悎
-     * @param energyType  鑳芥簮绫诲瀷
-     * @param item        杩斿洖瀵硅薄
+     * @param timeType      鏃堕棿绫诲瀷
+     * @param bsTime        寮�濮嬫椂闂�
+     * @param endTime       缁撴潫鏃堕棿
+     * @param totalCost     鎬昏垂鐢�
+     * @param nodeIndices   鑺傜偣鐐逛綅闆嗗悎
+     * @param nodeId        鑺傜偣id
+     * @param sysEnergyInfo 鑳芥簮绫诲瀷淇℃伅
+     * @param item          杩斿洖瀵硅薄
      * @return
      */
     private BigDecimal getEnergyUnitCostTrendAnalysisValueInfo(String timeType, Date bsTime, Date endTime, BigDecimal totalCost,
-                                                                List<NodeIndex> nodeIndices, String energyType,
-                                                                CostTrendEnergyTypeItem item) {
-        BigDecimal costValue;
+                                                               List<NodeIndex> nodeIndices, String nodeId, SysEnergy sysEnergyInfo,
+                                                               CostTrendEnergyTypeItem item) {
+        BigDecimal costValue = BigDecimal.ZERO;
         BigDecimal accumulationValue = BigDecimal.ZERO;
-        switch (energyType) {
+        switch (sysEnergyInfo.getEnersno()) {
             case "electric":
                 List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getDataStatistics(nodeIndices.stream().map(NodeIndex::getIndexId).collect(Collectors.toSet()), bsTime, endTime, timeType);
                 costValue = electricityDataItems.stream().map(ElectricityDataItem::getCost).reduce(BigDecimal.ZERO, BigDecimal::add);
                 accumulationValue = electricityDataItems.stream().map(ElectricityDataItem::getElectricity).reduce(BigDecimal.ZERO, BigDecimal::add);
                 break;
             default:
-                costValue = dataItemMapper.getDataItemTimeRangeValueByIndexIds(bsTime, endTime, timeType, nodeIndices.stream().map(NodeIndex::getIndexId).collect(Collectors.toList()));
+                accumulationValue = dataItemMapper.getDataItemTimeRangeValueByNodeId(bsTime, endTime, timeType, nodeId, sysEnergyInfo.getEnersno());
+                costValue = accumulationValue.multiply(sysEnergyInfo.getPrice());
                 break;
         }
         costValue = costValue.setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
@@ -151,12 +157,13 @@
     public List<EnergyConsumeTrendDetailItem> listEnergyCostTrendDetail(String timeCode, String timeType, String modelCode, String energyType) {
         //鑳芥簮绫诲瀷淇℃伅
         SysEnergy sysEnergy = new SysEnergy();
-        sysEnergy.setEnersno(energyType);
+        if (StringUtils.isNotEmpty(energyType)) {
+            sysEnergy.setEnersno(energyType);
+        }
         List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(sysEnergy);
         if (sysEnergies.isEmpty()) {
             throw new RuntimeException("鏈煡璇㈠埌鑳芥簮淇℃伅");
         }
-        SysEnergy sysEnergyInfo = sysEnergies.stream().findFirst().get();
 
         //鑺傜偣淇℃伅
         List<ModelNode> modelNodes = modelNodeMapper.selectList(Wrappers.<ModelNode>lambdaQuery().eq(ModelNode::getModelCode, modelCode)
@@ -167,46 +174,53 @@
         String nodeId = modelNodes.stream().findFirst().get().getNodeId();
 
         // 鑳借�椾俊鎭�
+        List<EnergyConsumeTrendDetailItem> itemList = new ArrayList<>();
         List<EnergyConsumeVO> energyConsumeVOList = new ArrayList<>();
         Date startTime = DateTimeUtil.getTime(timeType, timeCode);
         Date endTime = DateTimeUtil.getEndTimeByType(timeType, startTime);
-        switch (sysEnergyInfo.getEnersno()) {
-            case "electric":
-                List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getCostTrends(startTime, endTime, timeType, nodeId, energyType);
-                if (!electricityDataItems.isEmpty()) {
-                    electricityDataItems.forEach(electricityDataItem -> {
-                        EnergyConsumeVO temp = new EnergyConsumeVO();
-                        temp.setDataTime(electricityDataItem.getDataTime());
-                        temp.setCostValue(electricityDataItem.getCost());
-                        temp.setAccumulationValue(electricityDataItem.getElectricity());
-                        energyConsumeVOList.add(temp);
-                    });
-                }
-                break;
-            default:
-                List<CarbonEmission> dataItems = dataItemMapper.getMiddleCarbonEmission(startTime, endTime, timeType, nodeId, energyType);
-                if (!dataItems.isEmpty()) {
-                    dataItems.forEach(electricityDataItem -> {
-                        EnergyConsumeVO temp = new EnergyConsumeVO();
-                        temp.setDataTime(electricityDataItem.getDataTime());
-                        temp.setCostValue(new BigDecimal(electricityDataItem.getValue()));
-                        temp.setAccumulationValue(new BigDecimal(electricityDataItem.getValue()).multiply(sysEnergyInfo.getPrice()));
-                        energyConsumeVOList.add(temp);
-                    });
-                }
-                break;
+        for (SysEnergy sysEnergyInfo : sysEnergies) {
+            switch (sysEnergyInfo.getEnersno()) {
+                case "electric":
+                    List<ElectricityDataItem> electricityDataItems = peakValleyMapper.getCostTrends(startTime, endTime, timeType, nodeId, sysEnergyInfo.getEnersno());
+                    if (!electricityDataItems.isEmpty()) {
+                        electricityDataItems.forEach(electricityDataItem -> {
+                            EnergyConsumeVO temp = new EnergyConsumeVO();
+                            temp.setDataTime(electricityDataItem.getDataTime());
+                            temp.setCostValue(electricityDataItem.getCost());
+                            temp.setAccumulationValue(electricityDataItem.getElectricity());
+                            energyConsumeVOList.add(temp);
+                        });
+                    }
+                    break;
+                default:
+                    List<CarbonEmission> dataItems = dataItemMapper.getMiddleCarbonEmission(startTime, endTime, timeType, nodeId, sysEnergyInfo.getEnersno());
+                    if (!dataItems.isEmpty()) {
+                        dataItems.forEach(electricityDataItem -> {
+                            EnergyConsumeVO temp = new EnergyConsumeVO();
+                            temp.setDataTime(electricityDataItem.getDataTime());
+                            temp.setCostValue(new BigDecimal(electricityDataItem.getValue()));
+                            temp.setAccumulationValue(new BigDecimal(electricityDataItem.getValue()).multiply(sysEnergyInfo.getPrice()));
+                            energyConsumeVOList.add(temp);
+                        });
+                    }
+                    break;
+            }
+            BigDecimal cost = energyConsumeVOList.stream().map(EnergyConsumeVO::getCostValue)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+            BigDecimal accumulation = energyConsumeVOList.stream().map(EnergyConsumeVO::getAccumulationValue)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP);
+            // 缁勮缁熻鍥句俊鎭�
+            EnergyConsumeTrendDetailItem item = new EnergyConsumeTrendDetailItem();
+            item.setEnergyType(sysEnergyInfo.getEnersno());
+            item.setEnergyUnit(sysEnergyInfo.getMuid());
+            item.setCostLabel(sysEnergyInfo.getEnername() + "璐�");
+            item.setAccumulationLabel(sysEnergyInfo.getEnername() + "鐢ㄩ噺");
+            item.setCost(cost);
+            item.setAccumulation(accumulation);
+            // 缁勮鍥捐〃淇℃伅
+            getTrendAnalysisCharInfoByEnergyType(startTime, timeType, energyConsumeVOList, item);
+            itemList.add(item);
         }
-
-        // 缁勮缁熻鍥句俊鎭�
-        EnergyConsumeTrendDetailItem item = new EnergyConsumeTrendDetailItem();
-        item.setEnergyType(energyType);
-        item.setCostLabel(sysEnergyInfo.getEnername() + "璐�");
-        item.setAccumulationLabel(sysEnergyInfo.getEnername() + "鐢ㄩ噺");
-        // 缁勮鍥捐〃淇℃伅
-        getTrendAnalysisCharInfoByEnergyType(startTime, timeType, energyConsumeVOList, item);
-
-        List<EnergyConsumeTrendDetailItem> itemList = new ArrayList<>();
-        itemList.add(item);
         return itemList;
     }
 
@@ -219,14 +233,14 @@
      * @param item      杩斿洖瀵硅薄
      */
     private void getTrendAnalysisCharInfoByEnergyType(Date bsTime, String timeType,
-                                                       List<EnergyConsumeVO> dataItems, EnergyConsumeTrendDetailItem item) {
+                                                      List<EnergyConsumeVO> dataItems, EnergyConsumeTrendDetailItem item) {
         List<String> costKeyList = new ArrayList<>();
         List<String> accumulationKeyList = new ArrayList<>();
         List<BigDecimal> costValueList = new ArrayList<>();
         List<BigDecimal> accumulationValueList = new ArrayList<>();
         Map<String, List<EnergyConsumeVO>> energyConsumeVOMap;
         //鎸夋椂闂寸被鍨嬬粍缁囪繑鍥炴暟鎹�
-        switch (timeType){
+        switch (timeType) {
             case TimeTypeConst.TIME_TYPE_DAY:
                 energyConsumeVOMap = dataItems.stream().collect(Collectors.groupingBy(li -> DateUtil.formatDateTime(li.getDataTime())));
                 for (int i = 0; i < CommonConst.DIGIT_24; i++) {

--
Gitblit v1.9.3