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