From 5d36e1f987ef21e44ded2e8a1d06c28094ec1e76 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期六, 19 四月 2025 12:39:47 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java | 140 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 140 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..1b895d7 --- /dev/null +++ b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java @@ -0,0 +1,140 @@ +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.common.utils.TypeTime; +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.getTime(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(); + + List<TypeTime> dateTimeList; + // 鏍规嵁鏃堕棿绫诲瀷璋冩暣鏃堕棿鑼冨洿 + switch (dto.getTimeType()) { + case TimeTypeConst.TIME_TYPE_DAY: + timeType = TimeTypeConst.TIME_TYPE_HOUR; + endTime = DateUtil.endOfDay(beginTime); + dateTimeList = DateTimeUtil.getDateTimeListSame(TimeTypeConst.TIME_TYPE_DAY, beginTime); + break; + case TimeTypeConst.TIME_TYPE_MONTH: + timeType = TimeTypeConst.TIME_TYPE_DAY; + endTime = DateUtil.endOfMonth(beginTime); + dateTimeList = DateTimeUtil.getDateTimeListSame(TimeTypeConst.TIME_TYPE_MONTH, beginTime); + break; + case TimeTypeConst.TIME_TYPE_YEAR: + timeType = TimeTypeConst.TIME_TYPE_MONTH; + endTime = DateUtil.endOfYear(beginTime); + dateTimeList = DateTimeUtil.getDateTimeListSame(TimeTypeConst.TIME_TYPE_YEAR, 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); + + Map<Date, List<DataItem>> dateListMap = dataItemList.stream().collect(Collectors.groupingBy(DataItem::getDataTime)); + List<DataItem> results = new ArrayList<>(); + dateListMap.forEach((key, value) -> { + DataItem dataItem = new DataItem(); + dataItem.setDataTime(key); + //淇濈暀鍥涗綅灏忔暟 + double totalValue = value.stream().map(data -> BigDecimal.valueOf(data.getValue())) + .reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_UP).doubleValue(); + dataItem.setValue(totalValue); + results.add(dataItem); + }); + //鏍规嵁鏃堕棿鎺掑簭 + results.sort(Comparator.comparing(DataItem::getDataTime)); + for (int i = 0; i < dateTimeList.size(); i++) { + TypeTime typeTime = dateTimeList.get(i); + Optional<DataItem> dataItem = results.stream().filter(result -> result.getDataTime().equals(typeTime.getDateTime())).findFirst(); + if (dataItem.isPresent()) { + DataItem item = dataItem.get(); + PropUtils.setValue(itemVO, "value" + i, item.getValue()); + } else { + PropUtils.setValue(itemVO, "value" + i, null); + } + } + + voList.add(itemVO); + vo.setDataList(voList); + + return vo; + } +} -- Gitblit v1.9.3