feat(data-docking): 实现报警与消警数据处理及Redis存储机制

- 移除测试报警数据代码,改为从Redis读取真实报警数据
- 新增处理活跃报警和消警数据的逻辑
- 实现报警类型识别与阈值提取功能
- 完善报警时间格式化处理- 增加消警数据收集并存储至Redis的功能
- 优化Redis数据存储结构,限制数据条目数量防止内存溢出
- 更新日志记录内容,明确区分报警与实时数据处理流程
- 提取获取报警阈值方法,增强代码复用性
dev
wangyan 2025-11-14 08:46:32 +08:00
parent 73db177562
commit db57297c8f
2 changed files with 49 additions and 0 deletions

View File

@ -1,5 +1,6 @@
package com.zcloud.controller; package com.zcloud.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.context.XxlJobHelper;
import com.zcloud.entity.PageData; import com.zcloud.entity.PageData;
@ -487,6 +488,9 @@ public class AppPosiDeviceController {
String currentTime = DateUtil.date2Str(new Date()); String currentTime = DateUtil.date2Str(new Date());
long currentTimestamp = System.currentTimeMillis(); long currentTimestamp = System.currentTimeMillis();
// 用于存储消警数据的列表
ArrayList<PageData> recoverAlarms = new ArrayList<>();
// 处理新产生的报警 // 处理新产生的报警
for (PageData alarm : activeAlarms) { for (PageData alarm : activeAlarms) {
String key = alarm.getString("EQUIPMENT_ID") + "_" + alarm.getString("PLC_ID") + "_" + alarm.getString("PLC_NAME"); String key = alarm.getString("EQUIPMENT_ID") + "_" + alarm.getString("PLC_ID") + "_" + alarm.getString("PLC_NAME");
@ -581,6 +585,9 @@ public class AppPosiDeviceController {
// 更新数据库中的记录 // 更新数据库中的记录
tbIronWarnInfoDao.updateWarnInfo(warnInfo); tbIronWarnInfoDao.updateWarnInfo(warnInfo);
// 添加到消警列表中用于存储到Redis
recoverAlarms.add(warnInfo);
XxlJobHelper.log("更新告警信息为已消警: 设备ID={}, PLC_ID={}, 报警内容={}", XxlJobHelper.log("更新告警信息为已消警: 设备ID={}, PLC_ID={}, 报警内容={}",
warnInfo.get("EQUIPMENT_ID"), warnInfo.get("PLC_ID"), warnInfo.get("OVERVIEW_OF_ALERTS")); warnInfo.get("EQUIPMENT_ID"), warnInfo.get("PLC_ID"), warnInfo.get("OVERVIEW_OF_ALERTS"));
@ -594,6 +601,23 @@ public class AppPosiDeviceController {
currentAlarmInfo.remove(key); currentAlarmInfo.remove(key);
} }
} }
// 将消警数据存入Redis
if (!recoverAlarms.isEmpty()) {
// 获取现有的消警数据
ArrayList<PageData> 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());
}
} }
// 参数示例 // 参数示例
// { // {

View File

@ -1,5 +1,6 @@
package com.zcloud.scheduled.dataDocking; package com.zcloud.scheduled.dataDocking;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.IJobHandler; 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.service.deviceMonitoringSrevice.DeviceMonitoringAlarmSrevice;
import com.zcloud.util.DateUtil; import com.zcloud.util.DateUtil;
import com.zcloud.util.RedisUtil; import com.zcloud.util.RedisUtil;
import com.zcloud.util.Tools;
import com.zcloud.util.UuidUtil; import com.zcloud.util.UuidUtil;
import com.zcloud.mapper.datasource.tbIron.TbIronWarnInfoDao; import com.zcloud.mapper.datasource.tbIron.TbIronWarnInfoDao;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
@ -649,6 +651,9 @@ public class MesDataScheduled extends IJobHandler {
String currentTime = DateUtil.date2Str(new Date()); String currentTime = DateUtil.date2Str(new Date());
long currentTimestamp = System.currentTimeMillis(); long currentTimestamp = System.currentTimeMillis();
// 用于存储消警数据的列表
ArrayList<PageData> recoverAlarms = new ArrayList<>();
// 处理新产生的报警 // 处理新产生的报警
for (PageData alarm : activeAlarms) { for (PageData alarm : activeAlarms) {
String key = alarm.getString("EQUIPMENT_ID") + "_" + alarm.getString("PLC_ID") + "_" + alarm.getString("PLC_NAME"); 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); tbIronWarnInfoDao.updateWarnInfo(warnInfo);
// 添加到消警列表中用于存储到Redis
recoverAlarms.add(warnInfo);
XxlJobHelper.log("更新告警信息为已消警: 设备ID={}, PLC_ID={}, 报警内容={}", XxlJobHelper.log("更新告警信息为已消警: 设备ID={}, PLC_ID={}, 报警内容={}",
warnInfo.get("EQUIPMENT_ID"), warnInfo.get("PLC_ID"), warnInfo.get("OVERVIEW_OF_ALERTS")); 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); currentAlarmInfo.remove(key);
} }
} }
// 将消警数据存入Redis
if (!recoverAlarms.isEmpty()) {
// 获取现有的消警数据
ArrayList<PageData> 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());
}
} }
} }