From 75f9894ebac12b13c7ead27c3e16db833ee9251a Mon Sep 17 00:00:00 2001
From: z1415143022 <z1415143022@163.com>
Date: 星期二, 25 三月 2025 20:02:45 +0800
Subject: [PATCH] Merge branch 'develop1.0' into zhangjw_from_develop1.0

---
 zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java |  179 ++++++++++++++++++-----------------------------------------
 1 files changed, 56 insertions(+), 123 deletions(-)

diff --git a/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
index d7ac636..a785a08 100644
--- a/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
@@ -5,7 +5,6 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zhitan.basicdata.domain.SysEnergy;
 import com.zhitan.basicdata.mapper.SysEnergyMapper;
-import com.zhitan.common.constant.CommonConst;
 import com.zhitan.common.core.domain.entity.SysDictData;
 import com.zhitan.common.enums.TimeType;
 import com.zhitan.consumptionanalysis.domain.vo.RankingEnergyData;
@@ -16,7 +15,7 @@
 import com.zhitan.home.service.impl.IHomePageService;
 import com.zhitan.model.domain.EnergyIndex;
 import com.zhitan.model.domain.ModelNode;
-import com.zhitan.model.domain.vo.ModelNodeIndexInfor;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfo;
 import com.zhitan.model.mapper.ModelNodeMapper;
 import com.zhitan.model.service.IEnergyIndexService;
 import com.zhitan.model.service.IModelNodeService;
@@ -30,9 +29,7 @@
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -48,18 +45,11 @@
 public class HomePageServiceImpl implements IHomePageService {
 
     private final SysEnergyMapper sysEnergyMapper;
-
     private final IModelNodeService modelNodeService;
-
     private final IDataItemService dataItemService;
-
     private final IEnergyIndexService energyIndexService;
-
     private final ISysDictDataService sysDictDataService;
-
-    @Resource
     private ModelNodeMapper modelNodeMapper;
-    @Resource
     private PeakValleyMapper electricityDataItemMapper;
 
 
@@ -69,7 +59,7 @@
 
         DateTime tongbiTime = DateUtil.offsetMonth(currentTime, -12);
         DateTime huanbiTime = DateUtil.offsetMonth(currentTime, -1);
-        if(TimeType.DAY.name().equals( timeType)){
+        if (TimeType.DAY.name().equals(timeType)) {
             huanbiTime = DateUtil.offsetDay(currentTime, -1);
         }
 
@@ -80,22 +70,22 @@
         final Map<String, List<HomeEnergyStatisticsVO>> tongbiMap = tongbi.stream().collect(Collectors.groupingBy(HomeEnergyStatisticsVO::getEnergyNo));
         final Map<String, List<HomeEnergyStatisticsVO>> huanbiMap = huanbi.stream().collect(Collectors.groupingBy(HomeEnergyStatisticsVO::getEnergyNo));
 
-        current.stream().forEach(vo->{
+        current.stream().forEach(vo -> {
             final String energyNo = vo.getEnergyNo();
             final Double count = vo.getCount();
             final Double tongbiCount = tongbiMap.get(energyNo).stream().map(HomeEnergyStatisticsVO::getCount).mapToDouble(Double::doubleValue).sum();
             final Double huanbiCount = huanbiMap.get(energyNo).stream().map(HomeEnergyStatisticsVO::getCount).mapToDouble(Double::doubleValue).sum();
 
-            vo.setTonCount(format2Double( vo.getCount() * Double.valueOf(vo.getCoefficient())));
+            vo.setTonCount(format2Double(vo.getCount() * Double.valueOf(vo.getCoefficient())));
             if (tongbiCount != 0) {
-                vo.setTongbi(format2Double( (count - tongbiCount) / tongbiCount * 100));
-            }else {
+                vo.setTongbi(format2Double((count - tongbiCount) / tongbiCount * 100));
+            } else {
                 vo.setTongbi(0D);
             }
 
             if (huanbiCount != 0) {
-                vo.setHuanbi (format2Double((count - huanbiCount) / huanbiCount * 100));
-            }else {
+                vo.setHuanbi(format2Double((count - huanbiCount) / huanbiCount * 100));
+            } else {
                 vo.setHuanbi(0D);
             }
         });
@@ -141,8 +131,8 @@
         if (ObjectUtils.isEmpty(modelNode)) {
             return voList;
         }
-        List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelNode.getNodeId());
-        List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+        List<ModelNodeIndexInfo> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelNode.getNodeId());
+        List<String> indexIds = inforList.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList());
         // 閫氳繃indexIds鎵綿ata_Item鏁版嵁
         List<DataItem> itemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
         // 鏌ヨ鐐逛綅璇︾粏淇℃伅
@@ -157,7 +147,7 @@
             List<String> indexs = energyTypeMap.get(ratioVO.getEnergyNo());
             if (CollectionUtils.isEmpty(indexs)) {
                 ratioVO.setCount(0D);
-            }else {
+            } else {
                 // 鎵惧埌鍚堣鍊�
                 double doubleCount = itemList.stream().filter(li -> indexs.contains(li.getIndexId())).mapToDouble(DataItem::getValue).sum();
                 ratioVO.setCount(format2Double(doubleCount));
@@ -180,7 +170,7 @@
         List<HomePeakValleyVO> voList = new ArrayList<>();
         // 鏌ヨ鍣ㄥ叿绫诲瀷
         final List<SysDictData> electricityPrice = sysDictDataService.selectDictDataByType("electricity_price");
-        electricityPrice.stream().forEach(v->{
+        electricityPrice.stream().forEach(v -> {
             HomePeakValleyVO vo = new HomePeakValleyVO();
             vo.setTimeName(v.getDictLabel());
             vo.setTimeType(v.getDictValue());
@@ -214,17 +204,17 @@
         Map<String, List<ElectricityDataItem>> electricityDataMap;
         // 鏌ヨ鐐逛綅淇℃伅
         final ModelNode firstModeNodeInfo = modelNodeMapper.getFirstModeNodeInfo(modelcode);
-        if(null == firstModeNodeInfo){
+        if (null == firstModeNodeInfo) {
             return voList;
         }
 
         double totalElectric;
         // 鏌ヨ鐐逛綅淇℃伅
-        List<ModelNodeIndexInfor> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(modelcode, firstModeNodeInfo.getNodeId());
+        List<ModelNodeIndexInfo> nodeIndexInfoList = modelNodeMapper.selectIndexByModelCodeAndNodeId(modelcode, firstModeNodeInfo.getNodeId());
         if (CollectionUtils.isNotEmpty(nodeIndexInfoList)) {
-            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toSet());
+            Set<String> indexSet = nodeIndexInfoList.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toSet());
             List<ElectricityDataItem> dataItemList = electricityDataItemMapper.getDataStatistics(indexSet, beginTime, endTime, shixuTimeType);
-            if(null != dataItemList){
+            if (null != dataItemList) {
                 totalElectric = dataItemList.stream().map(ElectricityDataItem::getElectricity).mapToDouble(BigDecimal::doubleValue).sum();
             } else {
                 totalElectric = 0;
@@ -235,13 +225,13 @@
             totalElectric = 0;
             electricityDataMap = null;
         }
-        if(null != electricityDataMap) {
+        if (null != electricityDataMap) {
             voList.stream().forEach(vo -> {
                 final List<ElectricityDataItem> electricityDataItems = electricityDataMap.get(vo.getTimeType());
-                if(null != electricityDataItems) {
+                if (null != electricityDataItems) {
                     final double sum = electricityDataItems.stream().map(ElectricityDataItem::getElectricity).mapToDouble(BigDecimal::doubleValue).sum();
                     vo.setCount(format2Double(sum));
-                    if(totalElectric != 0) {
+                    if (totalElectric != 0) {
                         vo.setPercentage(format2Double(sum / totalElectric * 100));
                     }
                 }
@@ -292,8 +282,8 @@
         if (ObjectUtils.isEmpty(modelNode)) {
             return vo;
         }
-        List<ModelNodeIndexInfor> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelNode.getNodeId());
-        List<String> indexIds = inforList.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
+        List<ModelNodeIndexInfo> inforList = modelNodeService.getModelNodeIndexIdRelationInforByNodeId(modelNode.getNodeId());
+        List<String> indexIds = inforList.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList());
         // 閫氳繃indexIds鎵綿ata_Item鏁版嵁
         List<DataItem> itemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
         final Map<String, List<DataItem>> dataItemMap = itemList.stream().collect(Collectors.groupingBy(li -> DateUtil.format(li.getDataTime(), timeFormat)));
@@ -309,11 +299,11 @@
             xdataList.add(currentTime);
             final List<DataItem> dataItems = dataItemMap.get(currentTime);
             List<Double> energyCount = new ArrayList<>();
-            energyTypeMap.forEach((energyType,IndexIdList)->{
+            energyTypeMap.forEach((energyType, IndexIdList) -> {
                 double sum;
-                if(null == dataItems){
+                if (null == dataItems) {
                     sum = 0;
-                }else {
+                } else {
                     sum = dataItems.stream().filter(li -> IndexIdList.contains(li.getIndexId())).mapToDouble(DataItem::getValue).sum();
                 }
                 final BigDecimal coefficient = (BigDecimal) energyCollectMap.get(energyType);
@@ -335,14 +325,14 @@
         vo.setXdata(xdataList.toArray(new String[0]));
         Double[][] array = new Double[sysEnergies.size()][xdataList.size()];
         List<String> lengList = new ArrayList<>();
-        energyCollectMap.keySet().forEach(key->{
+        energyCollectMap.keySet().forEach(key -> {
             final String name = energyNameMap.get(key);
             lengList.add(name);
         });
 
-        for(int i = 0; i < ydataList.size(); i++){
+        for (int i = 0; i < ydataList.size(); i++) {
             final List<Double> doubleList = ydataList.get(i);
-            for(int n = 0; n < doubleList.size(); n++){
+            for (int n = 0; n < doubleList.size(); n++) {
                 array[n][i] = format2Double(doubleList.get(n));
             }
         }
@@ -352,108 +342,51 @@
     }
 
     @Override
-    public List<RankingEnergyData> energyConsumptionRanking(String modelcode, String timeType) {
+    public List<RankingEnergyData> energyConsumptionRanking(String modelCode, String timeType) {
+
         List<RankingEnergyData> energyDataList = new ArrayList<>();
-        String nodeCategory = "2";
-        LambdaQueryWrapper<ModelNode> modelNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        modelNodeLambdaQueryWrapper.eq(ModelNode::getModelCode,modelcode);
-        modelNodeLambdaQueryWrapper.eq(ModelNode::getNodeCategory,nodeCategory);
-        List<ModelNode> modelNodeList = modelNodeMapper.selectList(modelNodeLambdaQueryWrapper);
-        if(CollectionUtils.isEmpty(modelNodeList)){
-            return energyDataList;
-        }
-        final List<String> nodeIds = modelNodeList.stream().map(ModelNode::getNodeId).collect(Collectors.toList());
-        List<ModelNodeIndexInfor> nodeIndexInforList = modelNodeMapper.selectIndexByNodeIds(modelcode ,nodeIds);
-
-        final Map<String, String> nodeNameMap = new HashMap<>();
-        nodeIndexInforList.forEach(n->{
-            final String id = n.getNodeId();
-            final String name = n.getName();
-            if(!nodeNameMap.containsKey(id)){
-                nodeNameMap.put(id,name);
-            }
-        });
-
-        // 鎸夌収鐐逛綅杩涜鍒嗙粍
-        Map<String, List<ModelNodeIndexInfor>> nodeIndexMap = nodeIndexInforList.stream().collect(
-                Collectors.groupingBy(ModelNodeIndexInfor::getNodeId));
-        final List<String> eneryIdList = nodeIndexInforList.stream().map(ModelNodeIndexInfor::getEnergyId).distinct().collect(Collectors.toList());
-        final LambdaQueryWrapper<SysEnergy> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.in(CollectionUtils.isNotEmpty(eneryIdList),SysEnergy::getEnersno,eneryIdList);
-        final List<SysEnergy> sysEnergies = sysEnergyMapper.selectList(queryWrapper);
-        //鑳芥簮缂栧彿鍜岃兘婧愭姌鏍囩郴鏁�
-        final Map<String, Object> energyCoefficientMap = sysEnergies.stream().collect(Collectors.toMap(SysEnergy::getEnersno, SysEnergy::getCoefficient));
-        //index鍜岃兘婧�
-        final Map<String, String> indexIdEnergyIdMap = new HashMap<>();
-        nodeIndexInforList.forEach(n->{
-            final String indexId = n.getIndexId();
-            final String energyId = n.getEnergyId();
-            if(!indexIdEnergyIdMap.containsKey(indexId)){
-                indexIdEnergyIdMap.put(indexId,energyId);
-            }
-        });
-        List<String> indexIds = nodeIndexInforList.stream().filter(l -> StringUtils.isNotEmpty(l.getIndexId())).map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
         Date queryTime = new Date();
-//        Date queryTime = DateUtil.parseDateTime("2023-03-28 00:00:00");
         Date beginTime;
         Date endTime;
-        String shixuTimeType;
         if (TimeType.DAY.name().equals(timeType)) {
             beginTime = DateUtil.beginOfDay(queryTime);
             endTime = DateUtil.endOfDay(queryTime);
-            shixuTimeType = TimeType.HOUR.name();
+            timeType = TimeType.HOUR.name();
             // 鏈�
         } else if (TimeType.MONTH.name().equals(timeType)) {
             beginTime = DateUtil.beginOfMonth(queryTime);
             endTime = DateUtil.endOfMonth(queryTime);
-            shixuTimeType = TimeType.DAY.name();
+            timeType = TimeType.DAY.name();
+
             // 骞�
-        } else {
+        } else if (TimeType.YEAR.name().equals(timeType)) {
             beginTime = DateUtil.beginOfYear(queryTime);
             endTime = DateUtil.endOfYear(queryTime);
-            shixuTimeType = TimeType.MONTH.name();
+            timeType = TimeType.MONTH.name();
+
+        } else {
+            return energyDataList;
         }
-        // 鏍规嵁indexId鏌ヨdataItem
-        List<DataItem> dataItemList = new ArrayList<>();
-        if(CollectionUtils.isNotEmpty(indexIds)) {
-            dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, shixuTimeType, indexIds);
+
+        LambdaQueryWrapper<ModelNode> parentNodeLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        parentNodeLambdaQueryWrapper.eq(ModelNode::getModelCode, modelCode);
+        List<ModelNode> modelNodeList = modelNodeMapper.selectList(parentNodeLambdaQueryWrapper);
+        if (CollectionUtils.isEmpty(modelNodeList)) {
+            return energyDataList;
         }
-        Map<String, List<DataItem>> dataItemMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getIndexId));
-
-        Map<String,BigDecimal> resultMap = new HashMap<>();
-        nodeIndexMap.forEach((key, value) -> {
-            // 鎵惧嚭indexIds
-            List<String> indexIdList = value.stream().map(ModelNodeIndexInfor::getIndexId).collect(Collectors.toList());
-
-            indexIdList.forEach(indexId->{
-                final List<DataItem> dataItems = dataItemMap.get(indexId);
-                final String energyId = indexIdEnergyIdMap.get(indexId);
-                final BigDecimal coefficient = (BigDecimal) energyCoefficientMap.get(energyId);
-
-                if(CollectionUtils.isNotEmpty(dataItems) ){
-                    BigDecimal sum = BigDecimal.valueOf(dataItems.stream()
-                            .mapToDouble(DataItem::getValue).sum()).setScale(CommonConst.DIGIT_2, RoundingMode.HALF_UP).multiply(coefficient);
-
-                    if (resultMap.containsKey(key)) {
-                        resultMap.put(key, resultMap.get(key).add(sum));
-                    } else {
-                        resultMap.put(key, sum);
-                    }
-                }
-            });
+        ModelNode parentNode = modelNodeList.stream().filter(x -> ObjectUtils.isEmpty(x.getParentId())).findFirst().orElse(null);
+        if (ObjectUtils.isEmpty(parentNode)) {
+            return energyDataList;
+        }
+        List<String> nodeIds = modelNodeList.stream().filter(x -> ObjectUtils.isNotEmpty(x.getParentId()))
+                .map(ModelNode::getNodeId).collect(Collectors.toList());
+        if (ObjectUtils.isEmpty(nodeIds)) {
+            return energyDataList;
+        }
+        energyDataList = dataItemService.getHomePageConsumptionRanking(nodeIds, timeType, beginTime, endTime);
+        energyDataList.forEach(x -> {
+            x.energyConsumption = new BigDecimal(x.energyConsumption).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
         });
-
-        resultMap.forEach((key,value)->{
-            RankingEnergyData rankingEnergyData = new RankingEnergyData();
-            rankingEnergyData.setNodeId(key);
-            rankingEnergyData.setNodeName(nodeNameMap.get(key));
-            rankingEnergyData.setEnergyConsumption(value.doubleValue());
-            energyDataList.add(rankingEnergyData);
-        });
-        Collections.sort(energyDataList, Comparator.comparingDouble((RankingEnergyData item) -> item.getEnergyConsumption()).reversed());
-        // 鑾峰彇鍓�5鏉¤褰�
-        List<RankingEnergyData> top5Items = energyDataList.subList(0, Math.min(5, energyDataList.size()));
-
-        return top5Items;
+        return energyDataList;
     }
 }

--
Gitblit v1.9.3