From d19f07c4e8452a9374d306daeefeb5dd9d63af7f Mon Sep 17 00:00:00 2001 From: zq Date: Tue, 27 Jan 2026 17:37:42 +0800 Subject: [PATCH] =?UTF-8?q?modbus=E6=9C=AC=E5=9C=B0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AF=BB=E5=8F=96=E5=A4=B1=E8=B4=A5=EF=BC=8C?= =?UTF-8?q?=E5=91=8A=E8=AD=A6=E7=AD=89=E7=BA=A7=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E2=80=9C=E4=B8=80=E8=88=AC=E2=80=9D=EF=BC=8C=E8=AF=BB=E5=88=B0?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=90=8E=E8=87=AA=E6=81=A2=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xzzn/quartz/task/ModbusPoller.java | 11 +++++- .../ems/service/IEmsAlarmRecordsService.java | 2 + .../impl/EmsAlarmRecordsServiceImpl.java | 38 ++++++++++++++++--- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/ems-quartz/src/main/java/com/xzzn/quartz/task/ModbusPoller.java b/ems-quartz/src/main/java/com/xzzn/quartz/task/ModbusPoller.java index 32a2141..97be991 100644 --- a/ems-quartz/src/main/java/com/xzzn/quartz/task/ModbusPoller.java +++ b/ems-quartz/src/main/java/com/xzzn/quartz/task/ModbusPoller.java @@ -36,9 +36,9 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; import javax.annotation.Resource; -import java.util.stream.Collectors; import org.eclipse.paho.client.mqttv3.MqttException; import org.slf4j.Logger; @@ -272,7 +272,8 @@ public class ModbusPoller { // 数据读取成功,重置计数器 deviceFailureCounts.remove(deviceNumber); - updateDeviceStatus(siteId, deviceNumber, DeviceRunningStatus.ONLINE.getCode()); + // 读取到数据后告警自恢复 + deleteDeviceOfflineRecord(siteId, deviceNumber); // 发送MQTT消息、保存Redis数据和数据入库 Long timestamp = System.currentTimeMillis(); @@ -317,6 +318,12 @@ public class ModbusPoller { iEmsAlarmRecordsService.addDeviceOfflineRecord(siteId, deviceNumber); } + //处理设备读取到数据的情况,更新设备状态为在线,报警记录自恢复 + private void deleteDeviceOfflineRecord(String siteId, String deviceNumber) { + updateDeviceStatus(siteId, deviceNumber, DeviceRunningStatus.ONLINE.getCode()); + iEmsAlarmRecordsService.deleteDeviceOfflineRecord(siteId, deviceNumber); + } + // 更新设备状态为在线或离线 private void updateDeviceStatus(String siteId, String deviceNumber, String deviceStatus) { EmsDevicesSetting emsDevicesSetting = emsDevicesSettingMapper.getDeviceBySiteAndDeviceId(deviceNumber, siteId); diff --git a/ems-system/src/main/java/com/xzzn/ems/service/IEmsAlarmRecordsService.java b/ems-system/src/main/java/com/xzzn/ems/service/IEmsAlarmRecordsService.java index 9d8a906..ba7d36f 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/IEmsAlarmRecordsService.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/IEmsAlarmRecordsService.java @@ -103,4 +103,6 @@ public interface IEmsAlarmRecordsService public void dealSyncData(String content, String operateType); public void addDeviceOfflineRecord(String siteId, String deviceNumber); + + public void deleteDeviceOfflineRecord(String siteId, String deviceNumber); } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsAlarmRecordsServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsAlarmRecordsServiceImpl.java index d9e13f2..a679c7e 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsAlarmRecordsServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsAlarmRecordsServiceImpl.java @@ -227,7 +227,8 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService @Override public void addEmptyDataAlarmRecord(String siteId, String topicDevice) { - EmsAlarmRecords emsAlarmRecords = redisCache.getCacheObject(RedisKeyConstants.TOPIC_EMPTY_ALARM_RECORD + siteId + "_" + topicDevice); + String key = getRedisKeyForTopicEmptyAlarm(siteId, topicDevice); + EmsAlarmRecords emsAlarmRecords = redisCache.getCacheObject(key); if (emsAlarmRecords != null) { return; } @@ -235,7 +236,7 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService emsAlarmRecordsMapper.insertEmsAlarmRecords(emsAlarmRecords); // 存redis-防止重复插入-有效期一天 - redisCache.setCacheObject(RedisKeyConstants.TOPIC_EMPTY_ALARM_RECORD + siteId + "_" + topicDevice, emsAlarmRecords,1, TimeUnit.DAYS); + redisCache.setCacheObject(key, emsAlarmRecords,1, TimeUnit.DAYS); } private EmsAlarmRecords createAlarmAtPcs(String siteId, String deviceId,String content,String level) { @@ -254,7 +255,7 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService @Override public void deleteEmptyDataAlarmRecord(String siteId, String topicDevice) { - String key = RedisKeyConstants.TOPIC_EMPTY_ALARM_RECORD + siteId + "_" + topicDevice; + String key = getRedisKeyForTopicEmptyAlarm(siteId, topicDevice); EmsAlarmRecords emsAlarmRecords = redisCache.getCacheObject(key); if (emsAlarmRecords == null) { return; @@ -330,16 +331,41 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService @Override public void addDeviceOfflineRecord(String siteId, String deviceId) { - EmsAlarmRecords emsAlarmRecords = redisCache.getCacheObject(RedisKeyConstants.MODBUS_OFFLINE_ALARM_RECORD + siteId + "_" + deviceId); + String key = getRedisKeyForModbusFailAlarm(siteId, deviceId); + EmsAlarmRecords emsAlarmRecords = redisCache.getCacheObject(key); if (emsAlarmRecords != null) { return; } - emsAlarmRecords = createAlarmAtPcs(siteId, deviceId,"modbus连接设备失败", AlarmLevelStatus.EMERGENCY.getCode()); + emsAlarmRecords = createAlarmAtPcs(siteId, deviceId,"modbus连接设备失败", AlarmLevelStatus.GENERAL.getCode()); emsAlarmRecordsMapper.insertEmsAlarmRecords(emsAlarmRecords); // 存redis-防止重复插入-有效期一天 - redisCache.setCacheObject(RedisKeyConstants.MODBUS_OFFLINE_ALARM_RECORD + siteId + "_" + deviceId, emsAlarmRecords,1, TimeUnit.DAYS); + redisCache.setCacheObject(key, emsAlarmRecords,1, TimeUnit.DAYS); } + @Override + public void deleteDeviceOfflineRecord(String siteId, String deviceId) { + String key = getRedisKeyForModbusFailAlarm(siteId, deviceId); + EmsAlarmRecords emsAlarmRecords = redisCache.getCacheObject(key); + if (emsAlarmRecords == null) { + return; + } + emsAlarmRecords.setStatus(AlarmStatus.DONE.getCode()); + emsAlarmRecords.setUpdateTime(new Date()); + emsAlarmRecords.setAlarmEndTime(new Date()); + emsAlarmRecordsMapper.updateEmsAlarmRecords(emsAlarmRecords); + + redisCache.deleteObject(key); + } + + private String getRedisKeyForTopicEmptyAlarm(String siteId, String topicDevice) { + + return RedisKeyConstants.TOPIC_EMPTY_ALARM_RECORD + siteId + "_" + topicDevice; + } + + private String getRedisKeyForModbusFailAlarm(String siteId, String deviceId) { + + return RedisKeyConstants.MODBUS_OFFLINE_ALARM_RECORD + siteId + "_" + deviceId; + } }