From a3bb1815c3eb6b0f0cfe9d9d2ba5ee48279e26ed Mon Sep 17 00:00:00 2001 From: dongyukun <1208714201@qq.com> Date: 星期五, 28 三月 2025 11:30:49 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinishConsumer.java | 66 +++++++++++++++++++++----------- 1 files changed, 43 insertions(+), 23 deletions(-) diff --git a/shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinishConsumer.java b/shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinishConsumer.java index 4f41447..c6c647b 100644 --- a/shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinishConsumer.java +++ b/shasteel-biz/src/main/java/com/iailab/module/shasteel/mq/consumer/ModelPredictFinishConsumer.java @@ -1,5 +1,6 @@ package com.iailab.module.shasteel.mq.consumer; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.module.model.api.mcs.McsApi; @@ -19,6 +20,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; /** @@ -39,7 +41,9 @@ @Resource private RabbitTemplate rabbitTemplate; - private static String lastRunAlarm = ""; + private static Map<String, Long> lastRunTime = new ConcurrentHashMap<>(); + + public static Map<Long, List<String>> finishModuleMap = new ConcurrentHashMap<>(); /** * 监听预测完成,产生预警消息 @@ -59,27 +63,39 @@ } // 预测时间 Date predictTime = DateUtils.parse(messageJson.get("predictTime").toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); - // 预测模块/预测管网 + // 预测管网 String moduleType = messageJson.get("moduleType").toString(); - if (moduleType.equals(CommonConstant.NET_BFG) || moduleType.equals(CommonConstant.NET_COG) || moduleType.equals(CommonConstant.NET_LDG1) || moduleType.equals(CommonConstant.NET_LDG2) || moduleType.equals(CommonConstant.NET_LDG3)) { - String runKey = "GasAlarm_" + predictTime.getTime(); - log.info("runKey:" + runKey); - log.info("lastRunAlarm:" + lastRunAlarm); - if (lastRunAlarm.equals(runKey)) { + if (!finishModuleMap.containsKey(predictTime.getTime())) { + List<String> mList = new ArrayList<>(); + finishModuleMap.put(predictTime.getTime(), mList); + } + finishModuleMap.get(predictTime.getTime()).add(moduleType); + log.info("finishModuleMap:" + JSONObject.toJSONString(finishModuleMap)); + + if (moduleType.equals(CommonConstant.NET_BFG) || moduleType.equals(CommonConstant.NET_COG) || + moduleType.equals(CommonConstant.NET_LDG) || + moduleType.equals(CommonConstant.NET_LDG1) || + moduleType.equals(CommonConstant.NET_LDG2) || + moduleType.equals(CommonConstant.NET_LDG3)) { + log.info("moduleType:" + moduleType); + if (lastRunTime.containsKey(moduleType) && lastRunTime.get(moduleType) == predictTime.getTime()) { + log.info("moduleType return"); return; } - lastRunAlarm = runKey; - - // 预警信息列表 - List<AlarmMessageRespDTO> alarmList = new ArrayList<>(); - // 根据管网查询相关预警配置 - Map<String,Object> params = new HashMap<>(); - params.put("alarmObj",moduleType); + lastRunTime.put(moduleType, predictTime.getTime()); + log.info("lastRunTime=" + JSONObject.toJSONString(lastRunTime)); + log.info("开始处理预警"); + Map<String, Object> params = new HashMap<>(); + params.put("alarmObj", moduleType); List<AlarmConfigRespDTO> configList = mcsApi.listAlarmConfig(params); if (CollectionUtils.isEmpty(configList)) { log.info("AlarmConfigList is empty"); return; } + log.info("configList=" + JSONArray.toJSONString(configList)); + + // 预警信息列表 + List<AlarmMessageRespDTO> alarmList = new ArrayList<>(); List<String> outputIdList = configList.stream().map(item -> { return item.getOutId(); }).collect(Collectors.toList()); @@ -94,11 +110,12 @@ } outerLoop: for (AlarmConfigRespDTO configItem : configList) { - log.info("configItem: " + configItem); + log.info("AlarmConfigItem: " + configItem); List<Object[]> result = preData.get(configItem.getOutId()); if (CollectionUtils.isEmpty(result)) { continue; } + log.info("AlarmPreData: " + JSONArray.toJSONString(result)); // 对比预测值是否超限 int toIndex = result.size(); @@ -109,6 +126,7 @@ if (dataValue.compareTo(configItem.getLowerLimit()) >= 0 && dataValue.compareTo(configItem.getUpperLimit()) <= 0) { continue; } + log.info("AlarmOutValue: " + dataValue); // 预警记录 AlarmMessageRespDTO alarmMessage = new AlarmMessageRespDTO(); alarmMessage.setConfigId(configItem.getId()); @@ -124,7 +142,7 @@ content.append(","); content.append("即将"); if (dataValue.compareTo(configItem.getLowerLimit()) < 0) { - content.append("低与下限"); + content.append("低于下限"); alarmMessage.setAlarmType(CommonConstant.EXCEEDING_LOWER_LIMIT); } else if (dataValue.compareTo(configItem.getUpperLimit()) > 0) { @@ -176,17 +194,19 @@ } } - if (!CollectionUtils.isEmpty(alarmList)) { - log.info("发送预警消息"); - Map<String, Object> msg = new HashMap<>(2); - msg.put("predictTime", DateUtils.format(predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); - msg.put("alarmList", alarmList); - rabbitTemplate.convertAndSend(RoutingConstant.EXCHANGE, RoutingConstant.Iailab_Model_Alarm, msg); + if (CollectionUtils.isEmpty(alarmList)) { + log.info("alarmList is empty"); + return; } + log.info("发送预警消息"); + Map<String, Object> msg = new HashMap<>(2); + msg.put("predictTime", DateUtils.format(predictTime, DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); + msg.put("alarmList", alarmList); + msg.put("moduleType", moduleType); + rabbitTemplate.convertAndSend(RoutingConstant.EXCHANGE, RoutingConstant.Iailab_Model_Alarm, msg); } } catch (Exception e) { e.printStackTrace(); } - } } \ No newline at end of file -- Gitblit v1.9.3