|
|
@@ -151,7 +151,7 @@ public class DyeProcAlarmServiceImpl implements IDyeProcAlarmService {
|
|
|
List<DyeProcAlarm> result = selectDyeProcAlarmList(dyeProcAlarm);
|
|
|
|
|
|
// 先按paraCode+device_id分组
|
|
|
- Map<String, List<DyeProcAlarm>> groupedAlarms = result.stream()
|
|
|
+ Map<String, List<DyeProcAlarm>> groupedAlarms = result.stream().filter(alarm -> StringUtils.containsAny(alarm.getLine(), lines)).filter(alarm -> StringUtils.containsAny(alarm.getTypeId() + "", types))
|
|
|
.collect(Collectors.groupingBy(
|
|
|
alarm -> alarm.getParaCode() + "_" + alarm.getDeviceId()
|
|
|
));
|
|
|
@@ -162,21 +162,21 @@ public class DyeProcAlarmServiceImpl implements IDyeProcAlarmService {
|
|
|
// 对每组数据按startTime排序后进行合并处理
|
|
|
for (Map.Entry<String, List<DyeProcAlarm>> entry : groupedAlarms.entrySet()) {
|
|
|
List<DyeProcAlarm> group = entry.getValue();
|
|
|
-
|
|
|
+
|
|
|
// 按startTime排序
|
|
|
group.sort(Comparator.comparing(DyeProcAlarm::getStartTime));
|
|
|
-
|
|
|
+
|
|
|
// 合并相邻且时间间隔在5分钟内的记录
|
|
|
List<DyeProcAlarm> mergedGroup = mergeAlarmsInGroup(group);
|
|
|
mergedResults.addAll(mergedGroup);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return mergedResults;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 合并同一组内的告警记录
|
|
|
- *
|
|
|
+ *
|
|
|
* @param alarms 按时间排序的告警记录列表
|
|
|
* @return 合并后的告警记录列表
|
|
|
*/
|
|
|
@@ -187,28 +187,28 @@ public class DyeProcAlarmServiceImpl implements IDyeProcAlarmService {
|
|
|
|
|
|
List<DyeProcAlarm> mergedAlarms = new ArrayList<>();
|
|
|
DyeProcAlarm currentAlarm = alarms.get(0).clone();
|
|
|
-
|
|
|
+
|
|
|
// 初始化actValue范围
|
|
|
if (currentAlarm.getActValue() != null) {
|
|
|
String formattedVal = formatBigDecimal(currentAlarm.getActValue());
|
|
|
currentAlarm.setActValueRange(formattedVal + "-" + formattedVal);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 设置初始endTime为startTime,因为在创建时endTime通常未设置
|
|
|
if (currentAlarm.getEndTime() == null && currentAlarm.getStartTime() != null) {
|
|
|
currentAlarm.setEndTime(currentAlarm.getStartTime());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
mergedAlarms.add(currentAlarm);
|
|
|
|
|
|
for (int i = 1; i < alarms.size(); i++) {
|
|
|
DyeProcAlarm nextAlarm = alarms.get(i);
|
|
|
-
|
|
|
+
|
|
|
// 确保下一个告警的endTime也被初始化
|
|
|
if (nextAlarm.getEndTime() == null && nextAlarm.getStartTime() != null) {
|
|
|
nextAlarm.setEndTime(nextAlarm.getStartTime());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 判断是否需要合并:时间间隔在5分钟内(300000毫秒)
|
|
|
// 只有当时间字段都不为null时才进行合并判断
|
|
|
if (nextAlarm.getStartTime() != null && currentAlarm.getEndTime() != null) {
|
|
|
@@ -218,7 +218,7 @@ public class DyeProcAlarmServiceImpl implements IDyeProcAlarmService {
|
|
|
if (nextAlarm.getEndTime() != null) {
|
|
|
currentAlarm.setEndTime(nextAlarm.getEndTime());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 更新actValue范围(最小值-最大值)
|
|
|
if (nextAlarm.getActValue() != null) {
|
|
|
String existingRange = currentAlarm.getActValueRange();
|
|
|
@@ -264,39 +264,39 @@ public class DyeProcAlarmServiceImpl implements IDyeProcAlarmService {
|
|
|
} else {
|
|
|
// 不满足合并条件,新建记录
|
|
|
currentAlarm = nextAlarm.clone();
|
|
|
-
|
|
|
+
|
|
|
// 初始化actValue范围
|
|
|
if (currentAlarm.getActValue() != null) {
|
|
|
String formattedVal = formatBigDecimal(currentAlarm.getActValue());
|
|
|
currentAlarm.setActValueRange(formattedVal + "-" + formattedVal);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 设置初始endTime为startTime
|
|
|
if (currentAlarm.getEndTime() == null && currentAlarm.getStartTime() != null) {
|
|
|
currentAlarm.setEndTime(currentAlarm.getStartTime());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
mergedAlarms.add(currentAlarm);
|
|
|
}
|
|
|
} else {
|
|
|
// 时间字段为null,不能判断是否合并,直接添加为新记录
|
|
|
currentAlarm = nextAlarm.clone();
|
|
|
-
|
|
|
+
|
|
|
// 初始化actValue范围
|
|
|
if (currentAlarm.getActValue() != null) {
|
|
|
String formattedVal = formatBigDecimal(currentAlarm.getActValue());
|
|
|
currentAlarm.setActValueRange(formattedVal + "-" + formattedVal);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 设置初始endTime为startTime
|
|
|
if (currentAlarm.getEndTime() == null && currentAlarm.getStartTime() != null) {
|
|
|
currentAlarm.setEndTime(currentAlarm.getStartTime());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
mergedAlarms.add(currentAlarm);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return mergedAlarms;
|
|
|
}
|
|
|
|
|
|
@@ -424,7 +424,7 @@ public class DyeProcAlarmServiceImpl implements IDyeProcAlarmService {
|
|
|
//需要合并记录 tp_id+device_id相同,记录actValue的范围(最小值-最大值)存入actValueRange字段中
|
|
|
// startTime记录第一次出现的时间,endTime记录最后一次出现的时间
|
|
|
// 只有当两条记录时间间隔在5分钟以内时才进行合并
|
|
|
-
|
|
|
+
|
|
|
// 先按paraCode+device_id分组
|
|
|
Map<String, List<DyeProcAlarm>> groupedAlarms = result.stream()
|
|
|
.collect(Collectors.groupingBy(
|
|
|
@@ -437,10 +437,10 @@ public class DyeProcAlarmServiceImpl implements IDyeProcAlarmService {
|
|
|
// 对每组数据按startTime排序后进行合并处理
|
|
|
for (Map.Entry<String, List<DyeProcAlarm>> entry : groupedAlarms.entrySet()) {
|
|
|
List<DyeProcAlarm> group = entry.getValue();
|
|
|
-
|
|
|
+
|
|
|
// 按startTime排序
|
|
|
group.sort(Comparator.comparing(DyeProcAlarm::getStartTime));
|
|
|
-
|
|
|
+
|
|
|
// 合并相邻且时间间隔在5分钟内的记录
|
|
|
List<DyeProcAlarm> mergedGroup = mergeAlarmsInGroup(group);
|
|
|
mergedResults.addAll(mergedGroup);
|