From db57297c8fdca3ed04db22d967bcf19a06dfb979 Mon Sep 17 00:00:00 2001 From: wangyan <405898180@qq.com> Date: Fri, 14 Nov 2025 08:46:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(data-docking):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=8A=A5=E8=AD=A6=E4=B8=8E=E6=B6=88=E8=AD=A6=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=8F=8ARedis=E5=AD=98=E5=82=A8=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除测试报警数据代码,改为从Redis读取真实报警数据 - 新增处理活跃报警和消警数据的逻辑 - 实现报警类型识别与阈值提取功能 - 完善报警时间格式化处理- 增加消警数据收集并存储至Redis的功能 - 优化Redis数据存储结构,限制数据条目数量防止内存溢出 - 更新日志记录内容,明确区分报警与实时数据处理流程 - 提取获取报警阈值方法,增强代码复用性 --- .../controller/AppPosiDeviceController.java | 24 ++++++++++++++++++ .../dataDocking/MesDataScheduled.java | 25 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/main/java/com/zcloud/controller/AppPosiDeviceController.java b/src/main/java/com/zcloud/controller/AppPosiDeviceController.java index 5752a41..e2ecb15 100644 --- a/src/main/java/com/zcloud/controller/AppPosiDeviceController.java +++ b/src/main/java/com/zcloud/controller/AppPosiDeviceController.java @@ -1,5 +1,6 @@ package com.zcloud.controller; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.xxl.job.core.context.XxlJobHelper; import com.zcloud.entity.PageData; @@ -487,6 +488,9 @@ public class AppPosiDeviceController { String currentTime = DateUtil.date2Str(new Date()); long currentTimestamp = System.currentTimeMillis(); + // 用于存储消警数据的列表 + ArrayList recoverAlarms = new ArrayList<>(); + // 处理新产生的报警 for (PageData alarm : activeAlarms) { String key = alarm.getString("EQUIPMENT_ID") + "_" + alarm.getString("PLC_ID") + "_" + alarm.getString("PLC_NAME"); @@ -581,6 +585,9 @@ public class AppPosiDeviceController { // 更新数据库中的记录 tbIronWarnInfoDao.updateWarnInfo(warnInfo); + // 添加到消警列表中,用于存储到Redis + recoverAlarms.add(warnInfo); + XxlJobHelper.log("更新告警信息为已消警: 设备ID={}, PLC_ID={}, 报警内容={}", warnInfo.get("EQUIPMENT_ID"), warnInfo.get("PLC_ID"), warnInfo.get("OVERVIEW_OF_ALERTS")); @@ -594,6 +601,23 @@ public class AppPosiDeviceController { currentAlarmInfo.remove(key); } } + + // 将消警数据存入Redis + if (!recoverAlarms.isEmpty()) { + // 获取现有的消警数据 + ArrayList existingRecoverAlarms = new ArrayList<>(); + if (!Tools.isEmpty(redisUtil.get("WMK_RECOVER_ALARM_DATA_LIST"))) { + existingRecoverAlarms.addAll(JSONArray.parseArray(redisUtil.get("WMK_RECOVER_ALARM_DATA_LIST").toString(), PageData.class)); + } + // 添加新的消警数据 + existingRecoverAlarms.addAll(recoverAlarms); + // 限制存储数量,避免数据过大 + if (existingRecoverAlarms.size() > 1000) { + existingRecoverAlarms = new ArrayList<>(existingRecoverAlarms.subList(existingRecoverAlarms.size() - 1000, existingRecoverAlarms.size())); + } + redisUtil.set("WMK_RECOVER_ALARM_DATA_LIST", JSONObject.toJSONString(existingRecoverAlarms)); + XxlJobHelper.log("成功将{}条消警数据存入Redis", recoverAlarms.size()); + } } // 参数示例 // { diff --git a/src/main/java/com/zcloud/scheduled/dataDocking/MesDataScheduled.java b/src/main/java/com/zcloud/scheduled/dataDocking/MesDataScheduled.java index ef8074b..0d22359 100644 --- a/src/main/java/com/zcloud/scheduled/dataDocking/MesDataScheduled.java +++ b/src/main/java/com/zcloud/scheduled/dataDocking/MesDataScheduled.java @@ -1,5 +1,6 @@ package com.zcloud.scheduled.dataDocking; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.IJobHandler; @@ -12,6 +13,7 @@ import com.zcloud.mapper.dsno2.target.MesDeviceMonitoringMapper; import com.zcloud.service.deviceMonitoringSrevice.DeviceMonitoringAlarmSrevice; import com.zcloud.util.DateUtil; import com.zcloud.util.RedisUtil; +import com.zcloud.util.Tools; import com.zcloud.util.UuidUtil; import com.zcloud.mapper.datasource.tbIron.TbIronWarnInfoDao; import org.springframework.scheduling.annotation.Scheduled; @@ -649,6 +651,9 @@ public class MesDataScheduled extends IJobHandler { String currentTime = DateUtil.date2Str(new Date()); long currentTimestamp = System.currentTimeMillis(); + // 用于存储消警数据的列表 + ArrayList recoverAlarms = new ArrayList<>(); + // 处理新产生的报警 for (PageData alarm : activeAlarms) { String key = alarm.getString("EQUIPMENT_ID") + "_" + alarm.getString("PLC_ID") + "_" + alarm.getString("PLC_NAME"); @@ -743,6 +748,9 @@ public class MesDataScheduled extends IJobHandler { // 更新数据库中的记录 tbIronWarnInfoDao.updateWarnInfo(warnInfo); + // 添加到消警列表中,用于存储到Redis + recoverAlarms.add(warnInfo); + XxlJobHelper.log("更新告警信息为已消警: 设备ID={}, PLC_ID={}, 报警内容={}", warnInfo.get("EQUIPMENT_ID"), warnInfo.get("PLC_ID"), warnInfo.get("OVERVIEW_OF_ALERTS")); @@ -756,5 +764,22 @@ public class MesDataScheduled extends IJobHandler { currentAlarmInfo.remove(key); } } + + // 将消警数据存入Redis + if (!recoverAlarms.isEmpty()) { + // 获取现有的消警数据 + ArrayList existingRecoverAlarms = new ArrayList<>(); + if (!Tools.isEmpty(redisUtil.get("MES_RECOVER_ALARM_DATA_LIST"))) { + existingRecoverAlarms.addAll(JSONArray.parseArray(redisUtil.get("MES_RECOVER_ALARM_DATA_LIST").toString(), PageData.class)); + } + // 添加新的消警数据 + existingRecoverAlarms.addAll(recoverAlarms); + // 限制存储数量,避免数据过大 + if (existingRecoverAlarms.size() > 1000) { + existingRecoverAlarms = new ArrayList<>(existingRecoverAlarms.subList(existingRecoverAlarms.size() - 1000, existingRecoverAlarms.size())); + } + redisUtil.set("MES_RECOVER_ALARM_DATA_LIST", JSONObject.toJSONString(existingRecoverAlarms)); + XxlJobHelper.log("成功将{}条消警数据存入Redis", recoverAlarms.size()); + } } } \ No newline at end of file