dev #2

Merged
dashixiong merged 349 commits from dev into main 2026-02-11 01:55:46 +00:00
375 changed files with 55940 additions and 1136 deletions
Showing only changes of commit 9f2c303047 - Show all commits

View File

@ -85,6 +85,8 @@ public interface IEmsAlarmRecordsService
// topic 内没有数据,按照设备维度告警
public void addEmptyDataAlarmRecord(String siteId, String deviceId);
public void deleteEmptyDataAlarmRecord(String siteId, String deviceId);
// 告警字段和告警信息
public void initAlarmMatchInfo();

View File

@ -72,6 +72,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -91,6 +92,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
private static final Pattern PATTERN = Pattern.compile("(BMSD\\d{2})(ZT|SOC|SOH|DL|DY|BDSC)");
// 匹配DTDC+数字格式的正则(提取序号)
private static final Pattern DTDC_PATTERN = Pattern.compile("DTDC(\\d+)([A-Za-z]*)");
private final Map<String, Integer> topicEmptyCounts = new ConcurrentHashMap<>();
@Autowired
private EmsBatteryClusterMapper emsBatteryClusterMapper;
@ -166,12 +168,27 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
Date dataUpdateTime = DateUtils.convertUpdateTime(timestamp);
log.info("deviceId:" + deviceId);
String deviceNumber = siteId + deviceId;
boolean isEmpty = checkJsonDataEmpty(jsonData);
if (isEmpty) {
// 添加设备告警
iEmsAlarmRecordsService.addEmptyDataAlarmRecord(siteId, deviceId);
// 增加失败计数
int failureCount = topicEmptyCounts.getOrDefault(deviceNumber, 0) + 1;
topicEmptyCounts.put(deviceNumber, failureCount);
log.warn("设备 {} topic内没有数据当前连续次数: {}", deviceId, failureCount);
// 连续5次失败触发报警
if (failureCount >= 5) {
// 添加设备告警
iEmsAlarmRecordsService.addEmptyDataAlarmRecord(siteId, deviceId);
log.error("设备 {} 连续 {} 次topic内没有数据触发告警", deviceNumber, failureCount);
}
return;
}
// 数据读取成功,重置计数器
topicEmptyCounts.remove(deviceNumber);
// 读取到数据后告警自恢复
iEmsAlarmRecordsService.deleteEmptyDataAlarmRecord(siteId, deviceId);
// 存放mqtt原始每个设备最晚一次数据便于后面点位获取数据
redisCache.setCacheObject(RedisKeyConstants.ORIGINAL_MQTT_DATA + siteId + "_" + deviceId, obj);
@ -1891,12 +1908,12 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
boolean flag = false;
try {
if (StringUtils.isEmpty(jsonData)) {
flag = true;
return true;
}
JsonNode jsonNode = objectMapper.readTree(jsonData);
// 判断是否为空对象({}
if (jsonNode.isObject() && jsonNode.isEmpty()) {
flag = true;
return true;
}
} catch (JsonProcessingException e) {
throw new RuntimeException(e);

View File

@ -231,7 +231,7 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
if (emsAlarmRecords != null) {
return;
}
emsAlarmRecords = createAlarmAtPcs(siteId,topicDevice,"topic内没有数据",AlarmLevelStatus.EMERGENCY.getCode());
emsAlarmRecords = createAlarmAtPcs(siteId,topicDevice,"topic内没有数据",AlarmLevelStatus.GENERAL.getCode());
emsAlarmRecordsMapper.insertEmsAlarmRecords(emsAlarmRecords);
// 存redis-防止重复插入-有效期一天
@ -252,6 +252,21 @@ public class EmsAlarmRecordsServiceImpl implements IEmsAlarmRecordsService
return emsAlarmRecords;
}
@Override
public void deleteEmptyDataAlarmRecord(String siteId, String topicDevice) {
String key = RedisKeyConstants.TOPIC_EMPTY_ALARM_RECORD + siteId + "_" + topicDevice;
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 createRandomTicketNo() {
String ticketNo = "";
String nowDate = DateUtils.dateTime();