From b36d66e090487d54d6664199ca9a807c13fb074b Mon Sep 17 00:00:00 2001 From: DYL0109 <dn18191638832@163.com> Date: 星期五, 18 四月 2025 19:12:05 +0800 Subject: [PATCH] 报警分析优化 --- zhitan-system/src/main/java/com/zhitan/alarm/services/impl/AlarmAnalyisisServiceImpl.java | 184 +++++++++++++++++++++++++++------------------- 1 files changed, 108 insertions(+), 76 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 b416f28..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 @@ -8,8 +8,8 @@ import com.zhitan.alarm.domain.vo.AlarmAnalysisVO; import com.zhitan.alarm.mapper.HistoryAlarmMapper; import com.zhitan.alarm.services.IAlarmAnalysisService; -import com.zhitan.basicdata.domain.MeterImplement; 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; @@ -17,7 +17,6 @@ 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; @@ -27,10 +26,7 @@ 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; /** @@ -62,19 +58,12 @@ @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); @@ -112,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); @@ -180,6 +123,95 @@ 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)); + + jkHistoryAlarms.forEach(alarm -> { + if (IndexType.COLLECT.getDescription().equals(alarm.getIndexType()) && StringUtils.isEmpty(alarm.getEnergyId())){ + alarm.setEnergyId(energyMap.get(alarm.getIndexId())); + } + }); + } + } + } + + /** + * 璁$畻鍗犳瘮 + */ + 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)); + } + }); + }); + } + + /** + * 澶勭悊鎶ヨ鏃堕棿 + */ + 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) { // 鍒涘缓DecimalFormat瀵硅薄锛岃缃繚鐣欎袱浣嶅皬鏁� DecimalFormat df = new DecimalFormat("#.00"); -- Gitblit v1.9.3