From 06d3d15a5a08637041cc601101c063b11b07a346 Mon Sep 17 00:00:00 2001 From: net <net@netdeMBP.lan> Date: 星期五, 14 二月 2025 17:25:21 +0800 Subject: [PATCH] 合并理去杀杀人 --- zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java | 159 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 156 insertions(+), 3 deletions(-) diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java index 0b82a1d..2256b65 100644 --- a/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java +++ b/zhitan-system/src/main/java/com/zhitan/dataitem/service/impl/DataItemServiceImpl.java @@ -1,16 +1,32 @@ package com.zhitan.dataitem.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zhitan.common.enums.TimeType; import com.zhitan.dataitem.domain.StagseDataEntry; +import com.zhitan.dataitem.domain.vo.NodeIndexValueVO; import com.zhitan.dataitem.mapper.DataItemMapper; import com.zhitan.dataitem.service.IDataItemService; +import com.zhitan.model.domain.ModelNode; +import com.zhitan.model.mapper.EnergyIndexMapper; +import com.zhitan.model.mapper.ModelNodeMapper; +import com.zhitan.model.mapper.NodeIndexMapper; import com.zhitan.realtimedata.domain.DataItem; +import com.zhitan.statisticalAnalysis.domain.dto.FlowChartsDTO; +import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsItemVO; +import com.zhitan.statisticalAnalysis.domain.vo.FlowChartsVO; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.math.BigDecimal; -import java.util.Date; -import java.util.List; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.TemporalAdjusters; +import java.util.*; +import java.util.stream.Collectors; /** * stagseDataEntryService涓氬姟灞傚鐞� @@ -22,7 +38,14 @@ @AllArgsConstructor public class DataItemServiceImpl implements IDataItemService { - private final DataItemMapper dataItemMapper; + @Resource + private DataItemMapper dataItemMapper; + @Resource + private ModelNodeMapper modelNodeMapper; + @Resource + private EnergyIndexMapper energyIndexMapper; + @Resource + private NodeIndexMapper nodeIndexMapper; /** @@ -103,4 +126,134 @@ public BigDecimal getDataItemValueByIndexIds(String timeCode, List<String> indexIds) { return dataItemMapper.getDataItemValueByIndexIds(timeCode, indexIds); } + + /** + * 鏍规嵁indexId涓庢椂闂磋寖鍥存煡璇㈠皬鏃剁殑dataitem淇℃伅 + * + * @param beginTime 寮�濮嬫椂闂� + * @param endTime 鎴鏃堕棿 + * @param timeType 鏃堕棿绫诲瀷 + * @param indexIds 鐐逛綅闆嗗悎 + * @return + */ + @Override + public List<DataItem> getDataItemHourInforByIndexIds(Date beginTime, Date endTime, String timeType, List<String> indexIds) { + return dataItemMapper.getDataItemHourInforByIndexIds(beginTime, endTime, timeType, indexIds); + } + + /** + * 鑾峰彇鑳芥祦鍥惧舰鍒嗘瀽 + * + * @param dto 璇锋眰鍙傛暟 + * @return 缁撴灉 + */ + @Override + public FlowChartsVO getFlowCharts(FlowChartsDTO dto) { + FlowChartsVO flowChartsVO = new FlowChartsVO(); + // 鐖惰妭鐐筰d + LambdaQueryWrapper<ModelNode> wrapper = Wrappers.<ModelNode>lambdaQuery() + .eq(ModelNode::getModelCode, dto.getModelCode()) + .isNull(ModelNode::getParentId); + List<ModelNode> modelNodes = modelNodeMapper.selectList(wrapper); + if(ObjectUtils.isEmpty(modelNodes)){ + throw new RuntimeException("鏈煡璇㈠埌妯″瀷淇℃伅"); + } + ModelNode modelNode = modelNodes.stream().findFirst().get(); + String nodeId = modelNode.getNodeId(); + dto.setNodeId(nodeId); + String energyType = dto.getEnergyType(); + LocalDate queryTime = dto.getQueryTime(); + TimeType timeType = dto.getTimeType(); + + // 鑾峰彇鏌ヨ鏃堕棿 + Map<String, LocalDateTime> dateTimeMap = getDataItemByIndexId(timeType, queryTime); + + // 鑾峰彇鑺傜偣鍜岀偣浣嶇殑绱Н閲� + List<NodeIndexValueVO> parentDataItemList = modelNodeMapper.getDataItemByNodeId(nodeId, energyType, timeType, dateTimeMap); + + // 鑾峰彇瀛愯妭鐐逛笅鐨勭偣浣嶇殑绱Н閲� + List<NodeIndexValueVO> childDataItemList = modelNodeMapper.getDataItemByParentNodeId(nodeId, energyType, timeType, dateTimeMap); + + // 鑾峰彇鐖惰妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰 + if (ObjectUtils.isNotEmpty(parentDataItemList)) { + // 鐖惰妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰 + BigDecimal totalValue = parentDataItemList.stream().map(NodeIndexValueVO::getValue) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + // 鎬荤疮绉噺 + flowChartsVO.setTotalAccumulatedAmount(totalValue); + } + // 鑾峰彇瀛愯妭鐐逛笅鐨勮兘鑰楁暟鎹� + if (ObjectUtils.isNotEmpty(childDataItemList)) { + // 瀛愯妭鐐逛笅鐨勮兘鑰楁暟鎹�诲拰 + BigDecimal childTotalValue = childDataItemList.stream().map(NodeIndexValueVO::getValue) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + // 瀛愯妭鐐圭疮绉噺 + flowChartsVO.setChildNodeAccumulatedAmount(childTotalValue); + + // 鏍规嵁瀛愯妭鐐筰d鍒嗙粍 + Map<String, List<NodeIndexValueVO>> voMap = childDataItemList.stream() + .collect(Collectors.groupingBy(NodeIndexValueVO::getNodeId)); + List<FlowChartsItemVO> itemList = new ArrayList<>(); + + for (String childNodeId : voMap.keySet()) { + FlowChartsItemVO vo = new FlowChartsItemVO(); + vo.setSource(modelNode.getName()); + List<NodeIndexValueVO> valueList = voMap.getOrDefault(childNodeId, Collections.emptyList()); + if (ObjectUtils.isNotEmpty(valueList)) { + // 鍚勪釜瀛愯妭鐐圭殑鑳借�楁暟鎹�诲拰 + BigDecimal value = valueList.stream().map(NodeIndexValueVO::getValue) + .filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + valueList.stream().findFirst().ifPresent(nodeIndexValueVO -> vo.setTarget(nodeIndexValueVO.getNodeName())); + vo.setValue(value); + } + itemList.add(vo); + } + flowChartsVO.setItemVOList(itemList); + } + return flowChartsVO; + } + + /** + * 鏍规嵁indexId鏌ヨ鑳借�楁暟鎹� + */ + private Map<String, LocalDateTime> getDataItemByIndexId(TimeType timeType, LocalDate queryTime) { + LocalDateTime startTime; + LocalDateTime endTime; + LocalDate startDate; + LocalDate endDate; + switch (timeType) { + case DAY: + // 褰撳ぉ鐨勫紑濮嬫椂闂� + startTime = LocalDateTime.of(queryTime, LocalTime.MIN); + // 褰撳ぉ鐨勭粨鏉熸椂闂� + endTime = LocalDateTime.of(queryTime, LocalTime.MAX); + break; + case MONTH: + // 褰撴湀鐨勫紑濮嬫椂闂� + startDate = queryTime.with(TemporalAdjusters.firstDayOfMonth()); + startTime = LocalDateTime.of(startDate, LocalTime.MIN); + // 褰撴湀鐨勭粨鏉熸椂闂� + endDate = queryTime.with(TemporalAdjusters.lastDayOfMonth()); + endTime = LocalDateTime.of(endDate, LocalTime.MAX); + break; + case YEAR: + // 褰撳勾鐨勫紑濮嬫椂闂� + startDate = queryTime.with(TemporalAdjusters.firstDayOfYear()); + startTime = LocalDateTime.of(startDate, LocalTime.MIN); + // 褰撳勾鐨勭粨鏉熸椂闂� + endDate = queryTime.with(TemporalAdjusters.lastDayOfYear()); + endTime = LocalDateTime.of(endDate, LocalTime.MAX); + break; + default: + // 褰撳ぉ鐨勫紑濮嬫椂闂� + startTime = LocalDateTime.of(queryTime, LocalTime.MIN); + // 褰撳ぉ鐨勭粨鏉熸椂闂� + endTime = LocalDateTime.of(queryTime, LocalTime.MAX); + break; + } + Map<String, LocalDateTime> localDateTimeMap = new HashMap<>(); + localDateTimeMap.put("startTime", startTime); + localDateTimeMap.put("endTime", endTime); + return localDateTimeMap; + } } -- Gitblit v1.9.3