modbus本地设备数据读取失败,告警等级修改为“一般”,读到数据后自恢复

This commit is contained in:
zq
2026-01-27 17:37:42 +08:00
parent 9f2c303047
commit d19f07c4e8
3 changed files with 43 additions and 8 deletions

View File

@ -36,9 +36,9 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.stream.Collectors;
import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttException;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -272,7 +272,8 @@ public class ModbusPoller {
// 数据读取成功,重置计数器 // 数据读取成功,重置计数器
deviceFailureCounts.remove(deviceNumber); deviceFailureCounts.remove(deviceNumber);
updateDeviceStatus(siteId, deviceNumber, DeviceRunningStatus.ONLINE.getCode()); // 读取到数据后告警自恢复
deleteDeviceOfflineRecord(siteId, deviceNumber);
// 发送MQTT消息、保存Redis数据和数据入库 // 发送MQTT消息、保存Redis数据和数据入库
Long timestamp = System.currentTimeMillis(); Long timestamp = System.currentTimeMillis();
@ -317,6 +318,12 @@ public class ModbusPoller {
iEmsAlarmRecordsService.addDeviceOfflineRecord(siteId, deviceNumber); 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) { private void updateDeviceStatus(String siteId, String deviceNumber, String deviceStatus) {
EmsDevicesSetting emsDevicesSetting = emsDevicesSettingMapper.getDeviceBySiteAndDeviceId(deviceNumber, siteId); EmsDevicesSetting emsDevicesSetting = emsDevicesSettingMapper.getDeviceBySiteAndDeviceId(deviceNumber, siteId);

View File

@ -103,4 +103,6 @@ public interface IEmsAlarmRecordsService
public void dealSyncData(String content, String operateType); public void dealSyncData(String content, String operateType);
public void addDeviceOfflineRecord(String siteId, String deviceNumber); public void addDeviceOfflineRecord(String siteId, String deviceNumber);
public void deleteDeviceOfflineRecord(String siteId, String deviceNumber);
} }

View File

@ -227,7 +227,8 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
@Override @Override
public void addEmptyDataAlarmRecord(String siteId, String topicDevice) { 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) { if (emsAlarmRecords != null) {
return; return;
} }
@ -235,7 +236,7 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
emsAlarmRecordsMapper.insertEmsAlarmRecords(emsAlarmRecords); emsAlarmRecordsMapper.insertEmsAlarmRecords(emsAlarmRecords);
// 存redis-防止重复插入-有效期一天 // 存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) { private EmsAlarmRecords createAlarmAtPcs(String siteId, String deviceId,String content,String level) {
@ -254,7 +255,7 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
@Override @Override
public void deleteEmptyDataAlarmRecord(String siteId, String topicDevice) { 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); EmsAlarmRecords emsAlarmRecords = redisCache.getCacheObject(key);
if (emsAlarmRecords == null) { if (emsAlarmRecords == null) {
return; return;
@ -330,16 +331,41 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
@Override @Override
public void addDeviceOfflineRecord(String siteId, String deviceId) { 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) { if (emsAlarmRecords != null) {
return; return;
} }
emsAlarmRecords = createAlarmAtPcs(siteId, deviceId,"modbus连接设备失败", AlarmLevelStatus.EMERGENCY.getCode()); emsAlarmRecords = createAlarmAtPcs(siteId, deviceId,"modbus连接设备失败", AlarmLevelStatus.GENERAL.getCode());
emsAlarmRecordsMapper.insertEmsAlarmRecords(emsAlarmRecords); emsAlarmRecordsMapper.insertEmsAlarmRecords(emsAlarmRecords);
// 存redis-防止重复插入-有效期一天 // 存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;
}
} }