From 36a9d5bf9ac0c80bf051e159635ee749b0f10d07 Mon Sep 17 00:00:00 2001
From: VVT789 <67089238+VVT789@users.noreply.github.com>
Date: 星期三, 26 三月 2025 11:24:44 +0800
Subject: [PATCH] Merge pull request #35 from Andy-Yin/develop1.0

---
 zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java |  113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 113 insertions(+), 0 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
new file mode 100644
index 0000000..6b8fb0d
--- /dev/null
+++ b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java
@@ -0,0 +1,113 @@
+package com.zhitan.Itemizedenergyanalysis.service.impl;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.zhitan.Itemizedenergyanalysis.domain.VO.ItemizedEnergyAnalysisItemVO;
+import com.zhitan.Itemizedenergyanalysis.domain.VO.ItemizedEnergyAnalysisVO;
+import com.zhitan.Itemizedenergyanalysis.dto.ItemizedEnergyAnalysisDTO;
+import com.zhitan.Itemizedenergyanalysis.service.IItemizedEnergyAnalysisService;
+import com.zhitan.common.constant.TimeTypeConst;
+import com.zhitan.common.exception.ServiceException;
+import com.zhitan.common.utils.DateTimeUtil;
+import com.zhitan.common.utils.PropUtils;
+import com.zhitan.dataitem.service.IDataItemService;
+import com.zhitan.model.domain.vo.ModelNodeIndexInfo;
+import com.zhitan.model.mapper.ModelNodeMapper;
+import com.zhitan.realtimedata.domain.DataItem;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * 鍒嗛」鐢ㄨ兘鍒嗘瀽
+ *
+ * @author sys
+ * @date 2025-03-25
+ */
+@Service
+@AllArgsConstructor
+public class ItemizedEnergyAnalysisServiceImpl implements IItemizedEnergyAnalysisService {
+
+    @Resource
+    private final ModelNodeMapper modelNodeMapper;
+    @Resource
+    private final IDataItemService dataItemService;
+
+    /**
+     * @param dto 璇锋眰鍙傛暟
+     * @return 缁撴灉
+     */
+    @Override
+    public ItemizedEnergyAnalysisVO getItemizedEnergyAnalysisService(ItemizedEnergyAnalysisDTO dto) {
+
+        String timeType = dto.getTimeType();
+        String dataTime = dto.getDataTime();
+        Date beginTime = DateTimeUtil.getTypeTime(timeType, dataTime);
+        DateTime endTime = null;
+
+        // 鑾峰彇鑺傜偣淇℃伅
+        List<ModelNodeIndexInfo> nodeIndexInfo = modelNodeMapper.getModelNodeIndexIdByNodeId(dto.getNodeId(), dto.getEnergyType());
+        List<String> indexList = nodeIndexInfo.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList());
+
+        if(ObjectUtil.isEmpty(indexList)){
+            return new ItemizedEnergyAnalysisVO();
+        }
+
+        ModelNodeIndexInfo info = nodeIndexInfo.stream().findFirst().get();
+
+        // 鏍规嵁鏃堕棿绫诲瀷璋冩暣鏃堕棿鑼冨洿
+        switch (dto.getTimeType()) {
+            case TimeTypeConst.TIME_TYPE_DAY:
+                timeType = TimeTypeConst.TIME_TYPE_HOUR;
+                endTime = DateUtil.endOfDay(beginTime);
+                break;
+            case TimeTypeConst.TIME_TYPE_MONTH:
+                timeType = TimeTypeConst.TIME_TYPE_DAY;
+                endTime = DateUtil.endOfMonth(beginTime);
+                break;
+            case TimeTypeConst.TIME_TYPE_YEAR:
+                timeType = TimeTypeConst.TIME_TYPE_MONTH;
+                endTime = DateUtil.endOfYear(beginTime);
+                break;
+            default:
+                throw new ServiceException("鏃堕棿鏍煎紡閿欒");
+        }
+        // 鑾峰彇鏁版嵁椤瑰垪琛�
+        List<DataItem> dataItemList = dataItemService.getDataItemTimeRangeInforByIndexIds(beginTime, endTime, timeType, indexList);
+
+        // 鑾峰彇鏈�澶у�笺�佹渶灏忓�笺�佸悎璁°�佸钩鍧囧��
+        ItemizedEnergyAnalysisVO vo = new ItemizedEnergyAnalysisVO();
+        double sum = dataItemList.stream().mapToDouble(DataItem::getValue).sum();
+        double max = dataItemList.stream().mapToDouble(DataItem::getValue).max().getAsDouble();
+        double min = dataItemList.stream().mapToDouble(DataItem::getValue).min().getAsDouble();
+        double avg = dataItemList.stream().mapToDouble(DataItem::getValue).average().getAsDouble();
+
+        vo.setTotal(BigDecimal.valueOf(sum).setScale(2, RoundingMode.HALF_UP).toString());
+        vo.setMax(BigDecimal.valueOf(max).setScale(2, RoundingMode.HALF_UP).toString());
+        vo.setMin(BigDecimal.valueOf(min).setScale(2, RoundingMode.HALF_UP).toString());
+        vo.setAvg(BigDecimal.valueOf(avg).setScale(2, RoundingMode.HALF_UP).toString());
+        if(ObjectUtil.isNotEmpty(info.getUnitId())){
+            vo.setUnit(info.getUnitId());
+        }
+
+        List<ItemizedEnergyAnalysisItemVO> voList = new ArrayList<>();
+        ItemizedEnergyAnalysisItemVO itemVO = new ItemizedEnergyAnalysisItemVO();
+        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());
+        }
+        voList.add(itemVO);
+        vo.setDataList(voList);
+
+        return vo;
+    }
+}

--
Gitblit v1.9.3