From 12ea7330bac0a43818b8ec3a8601119dd609dfb9 Mon Sep 17 00:00:00 2001 From: ustcyc <yincun@163.com> Date: 星期五, 18 四月 2025 22:43:12 +0800 Subject: [PATCH] Merge branch 'master' of https://github.com/zhitan-cloud/zhitan-ems --- zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java | 255 ++++++++++++++++++++++++++++++-------------------- 1 files changed, 154 insertions(+), 101 deletions(-) diff --git a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java index 3545c7d..f18bbc5 100644 --- a/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java +++ b/zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java @@ -2,13 +2,14 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.zhitan.alarm.domain.JkHistoryAlarm; import com.zhitan.alarm.domain.dto.AlarmAnalysisDTO; import com.zhitan.alarm.domain.vo.AlarmAnalysisVO; import com.zhitan.alarm.mapper.HistoryAlarmMapper; -import com.zhitan.alarm.services.IAlarmAnalyisisService; -import com.zhitan.basicdata.domain.MeterImplement; +import com.zhitan.alarm.services.IAlarmAnalysisService; import com.zhitan.basicdata.domain.SysEnergy; +import com.zhitan.basicdata.domain.vo.MeterImplementModel; import com.zhitan.basicdata.mapper.MeterImplementMapper; import com.zhitan.basicdata.mapper.SysEnergyMapper; import com.zhitan.common.enums.IndexType; @@ -16,7 +17,7 @@ import com.zhitan.common.utils.StringUtils; import com.zhitan.consumptionanalysis.domain.vo.ChartData; import com.zhitan.consumptionanalysis.domain.vo.EnergyProportion; -import com.zhitan.model.domain.EnergyIndex; +import com.zhitan.model.domain.ModelNode; import com.zhitan.model.domain.vo.ModelNodeIndexInfo; import com.zhitan.model.mapper.EnergyIndexMapper; import com.zhitan.model.mapper.ModelNodeMapper; @@ -25,21 +26,18 @@ import org.springframework.stereotype.Service; import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** - * description todu + * 鎶ヨ鍒嗘瀽瀹炵幇 * - * @author hmj - * @date 2024-10-26 17:34 + * @author + * @date */ @Service @AllArgsConstructor -public class AlarmAnalyisisServiceImpl implements IAlarmAnalyisisService { +public class AlarmAnalyisisServiceImpl implements IAlarmAnalysisService { private final ModelNodeMapper modelNodeMapper; @@ -50,22 +48,22 @@ private final EnergyIndexMapper energyIndexMapper; private final SysEnergyMapper sysEnergyMapper; + + /** + * 鏍规嵁鑺傜偣id鑾峰彇鎶ヨ鍒嗘瀽淇℃伅 + * + * @param alarmAnalysisDTO + * @return + */ @Override public AlarmAnalysisVO getByNodeId(AlarmAnalysisDTO alarmAnalysisDTO) { AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO(); - List<EnergyProportion> alarmProportionList = new ArrayList<>(); - for(IndexType indexType : IndexType.values()){ - EnergyProportion proportion = new EnergyProportion(); - proportion.setEnergyName(indexType.name()); - proportion.setCount(0D); - proportion.setPercentage(0D); - alarmProportionList.add(proportion); - } - - + // 鍒濆鍖栨姤璀︽瘮渚嬪垪琛� + List<EnergyProportion> alarmProportionList = initializeProportionList(IndexType.values()); + // 鍒濆鍖栬兘婧愭瘮渚嬪垪琛� List<EnergyProportion> energyProportionList = new ArrayList<>(); - final List<SysEnergy> sysEnergies = sysEnergyMapper.selectSysEnergyList(new SysEnergy()); - sysEnergies.forEach(sysEnergy -> { + + sysEnergyMapper.selectSysEnergyList(new SysEnergy()).forEach(sysEnergy -> { EnergyProportion proportion = new EnergyProportion(); proportion.setEnergyName(sysEnergy.getEnersno()); proportion.setCount(0D); @@ -103,67 +101,21 @@ query.setNodeId(nodeId); final List<JkHistoryAlarm> jkHistoryAlarms = historyAlarmMapper.selectJkHistoryAlarmList(query); if(CollectionUtils.isNotEmpty(jkHistoryAlarms)) { - jkHistoryAlarms.forEach(alarm -> { - final String indexType = alarm.getIndexType(); - final String indexId = alarm.getIndexId(); - final String alarmNodeId = alarm.getNodeId(); - if ("COLLECT".equals(indexType) && StringUtils.isEmpty(alarm.getEnergyId())) { - //鏍规嵁nodeId鍜宨ndexId 鍘绘煡璇㈣閲忓櫒鍏� - EnergyIndex energyIndex = energyIndexMapper.selectEnergyIndexById(indexId); - final MeterImplement meterImplement = meterImplementMapper.selectMeterImplementById(energyIndex.getMeterId()); - alarm.setEnergyId(meterImplement.getEnergyType()); - } - }); - final Map<String, List<JkHistoryAlarm>> alarmTypeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getIndexType)); - alarmTypeMap.forEach((key, value) -> { - alarmProportionList.forEach(alarm->{ - if(alarm.getEnergyName().equals(key)){ - alarm.setEnergyName(key); - alarm.setCount(format2Double(value.size())); - double percentage = value.size() / jkHistoryAlarms.size() * 100; - alarm.setPercentage(format2Double(percentage)); - } - }); - }); - final Map<String, List<JkHistoryAlarm>> energyTypeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getEnergyId)); - energyTypeMap.forEach((key, value) -> { - energyProportionList.forEach(en->{ - if(en.getEnergyName().equals(key)){ - en.setEnergyName(key); - en.setCount(format2Double(value.size())); - double percentage = value.size() / jkHistoryAlarms.size() * 100; - en.setPercentage(format2Double(percentage)); - } - }); - - }); + // 璁剧疆鑳芥簮绫诲瀷 + processEnergyType(jkHistoryAlarms); - jkHistoryAlarms.forEach(jkHistoryAlarm -> { - final String alarmBeginTime = DateUtil.format(jkHistoryAlarm.getAlarmBeginTime(), timeFormat); - jkHistoryAlarm.setAlarmTime(alarmBeginTime); - }); - final Map<String, List<JkHistoryAlarm>> timeMap = jkHistoryAlarms.stream().collect(Collectors.groupingBy(JkHistoryAlarm::getAlarmTime)); - while (!beginTime.after(endTime)) { - final String currentTime = DateUtil.format(beginTime, timeFormat); - final List<JkHistoryAlarm> value = timeMap.get(currentTime); - ChartData chartData = new ChartData(); - chartData.setXData(currentTime); - chartData.setYValue(null == value?0:(double)value.size()); - chartDataList.add(chartData); + // 璁$畻鎶ヨ绫诲瀷姣斾緥 + calculateProportions(jkHistoryAlarms, alarmProportionList, JkHistoryAlarm::getIndexType); + // 璁$畻鑳芥簮绫诲瀷姣斾緥 + calculateProportions(jkHistoryAlarms, energyProportionList, JkHistoryAlarm::getEnergyId); - switch (TimeType.valueOf(queryTimeType)) { - case DAY: - beginTime = DateUtil.offsetHour(beginTime, 1); - break; - case MONTH: - beginTime = DateUtil.offsetDay(beginTime, 1); - break; - default: - beginTime = DateUtil.offsetMonth(beginTime, 1); - break; - } - } + // 澶勭悊鎶ヨ鏃堕棿 + processAlarmTimes(jkHistoryAlarms, timeFormat); + + // 鐢熸垚鍥捐〃鏁版嵁 + generateChartData(chartDataList, jkHistoryAlarms, beginTime, endTime, timeFormat, queryTimeType); + } alarmAnalysisVO.setAlarmProportion(alarmProportionList); alarmAnalysisVO.setEnergyProportion(energyProportionList); @@ -171,29 +123,93 @@ return alarmAnalysisVO; } + /** + * 璁剧疆鑳芥簮绫诲瀷 + */ + private void processEnergyType(List<JkHistoryAlarm> jkHistoryAlarms) { + List<String> indexIds = jkHistoryAlarms.stream().map(JkHistoryAlarm::getIndexId).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(indexIds)) { + List<MeterImplementModel> modelList = energyIndexMapper.selectEnergyTypeByIndex(indexIds); + if (CollectionUtils.isNotEmpty(modelList)){ + Map<String, String> energyMap = modelList.stream().collect(Collectors.toMap(MeterImplementModel::getIndexId, MeterImplementModel::getEnergyType)); - @Override - public AlarmAnalysisVO getCountInfo(AlarmAnalysisDTO alarmAnalysisDTO) { - AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO(); - final String nodeId = alarmAnalysisDTO.getNodeId(); - final DateTime beginOfMonth = DateUtil.beginOfMonth(new Date()); - final DateTime endOfMonth = DateUtil.endOfMonth(new Date()); - final DateTime beginOfYear = DateUtil.beginOfYear(new Date()); - final DateTime endOfYear = DateUtil.endOfYear(new Date()); + jkHistoryAlarms.forEach(alarm -> { + if (IndexType.COLLECT.getDescription().equals(alarm.getIndexType()) && StringUtils.isEmpty(alarm.getEnergyId())){ + alarm.setEnergyId(energyMap.get(alarm.getIndexId())); + } + }); + } + } + } - /** - * 鏌ヨ鐐逛綅涓庣敤鑳藉崟鍏冧俊鎭� - */ - List<ModelNodeIndexInfo> nodeIndexInforList = modelNodeMapper.getModelNodeIndexIdByNodeId(nodeId,null); - List<String> indexIds = nodeIndexInforList.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList()); + /** + * 璁$畻鍗犳瘮 + */ + private void calculateProportions(List<JkHistoryAlarm> jkHistoryAlarms, List<EnergyProportion> proportionList, java.util.function.Function<JkHistoryAlarm, String> keyExtractor) { + Map<String, List<JkHistoryAlarm>> typeMap = jkHistoryAlarms.stream() + .collect(Collectors.groupingBy(keyExtractor)); + typeMap.forEach((key, value) -> { + proportionList.forEach(alarm -> { + if (alarm.getEnergyName().equals(key)) { + alarm.setCount(format2Double(value.size())); + double percentage = (double) value.size() / jkHistoryAlarms.size() * 100; + alarm.setPercentage(format2Double(percentage)); + } + }); + }); + } - Integer monthCount = historyAlarmMapper.selectCountByTime(beginOfMonth,endOfMonth); - Integer yearCount = historyAlarmMapper.selectCountByTime(beginOfYear,endOfYear); - - alarmAnalysisVO.setIndexCount(indexIds.size()); - alarmAnalysisVO.setMonthCount(monthCount); - alarmAnalysisVO.setYearCount(yearCount); - return alarmAnalysisVO; + /** + * 澶勭悊鎶ヨ鏃堕棿 + */ + private void processAlarmTimes(List<JkHistoryAlarm> jkHistoryAlarms, String timeFormat) { + jkHistoryAlarms.forEach(jkHistoryAlarm -> { + String alarmBeginTime = DateUtil.format(jkHistoryAlarm.getAlarmBeginTime(), timeFormat); + jkHistoryAlarm.setAlarmTime(alarmBeginTime); + }); + } + + /** + * 鐢熸垚鍥捐〃鏁版嵁 + */ + private void generateChartData(List<ChartData> chartDataList, List<JkHistoryAlarm> jkHistoryAlarms, Date beginTime, Date endTime, String timeFormat, String queryTimeType) { + Map<String, List<JkHistoryAlarm>> timeMap = jkHistoryAlarms.stream() + .collect(Collectors.groupingBy(JkHistoryAlarm::getAlarmTime)); + while (!beginTime.after(endTime)) { + String currentTime = DateUtil.format(beginTime, timeFormat); + List<JkHistoryAlarm> value = timeMap.get(currentTime); + ChartData chartData = new ChartData(); + chartData.setXData(currentTime); + chartData.setYValue(value == null ? 0 : (double) value.size()); + chartDataList.add(chartData); + + switch (TimeType.valueOf(queryTimeType)) { + case DAY: + beginTime = DateUtil.offsetHour(beginTime, 1); + break; + case MONTH: + beginTime = DateUtil.offsetDay(beginTime, 1); + break; + default: + beginTime = DateUtil.offsetMonth(beginTime, 1); + break; + } + } + } + + /** + * 鍒濆鍖栧崰姣斿垪琛� + */ + private List<EnergyProportion> initializeProportionList(Object[] items) { + List<EnergyProportion> proportionList = new ArrayList<>(); + for (Object item : items) { + EnergyProportion proportion = new EnergyProportion(); + proportion.setEnergyName(item.toString()); + proportion.setCount(0D); + proportion.setPercentage(0D); + proportionList.add(proportion); + } + return proportionList; } private double format2Double(double averageEnergy) { @@ -204,4 +220,41 @@ String formattedResult = df.format(averageEnergy); return Double.valueOf(formattedResult); } + + /** + * 鑾峰彇鎶ヨ鍒嗘瀽缁熻淇℃伅 + * @param alarmAnalysisDTO + * @return + */ + @Override + public AlarmAnalysisVO getCountInfo(AlarmAnalysisDTO alarmAnalysisDTO) { + + AlarmAnalysisVO alarmAnalysisVO = new AlarmAnalysisVO(); + + ModelNode parentNode = modelNodeMapper.selectModelNodeById(alarmAnalysisDTO.getNodeId()); + if(ObjectUtils.isEmpty(parentNode)){ + return alarmAnalysisVO; + } + + // 鏌ヨ妯″瀷涓嬬殑鐐逛綅鏁版嵁 + List<ModelNodeIndexInfo> nodeIndexInfoList = modelNodeMapper.getAllModelNodeIndexByAddress(parentNode.getModelCode(), parentNode.getAddress()); + alarmAnalysisVO.setIndexCount(nodeIndexInfoList.size()); + if (CollectionUtils.isEmpty(nodeIndexInfoList)) { + return alarmAnalysisVO; + } + + // 鑾峰彇鏈堟姤璀︽暟銆佸勾鎶ヨ鏁� + List<String> indexIdList = nodeIndexInfoList.stream().map(ModelNodeIndexInfo::getIndexId).collect(Collectors.toList()); + + DateTime beginOfMonth = DateUtil.beginOfMonth(new Date()); + DateTime endOfMonth = DateUtil.endOfMonth(new Date()); + DateTime beginOfYear = DateUtil.beginOfYear(new Date()); + DateTime endOfYear = DateUtil.endOfYear(new Date()); + Integer monthCount = historyAlarmMapper.selectCountByTime(beginOfMonth,endOfMonth, indexIdList); + Integer yearCount = historyAlarmMapper.selectCountByTime(beginOfYear,endOfYear, indexIdList); + + alarmAnalysisVO.setMonthCount(monthCount); + alarmAnalysisVO.setYearCount(yearCount); + return alarmAnalysisVO; + } } -- Gitblit v1.9.3