feat(scheduled): 调整报警持续时间和数据处理逻辑

- 将最小报警持续时间从10秒调整为30秒
- 移除对B枪工作位状态的判断逻辑-优化A枪工作位状态的数据处理流程
- 根据A枪工作位状态决定是否处理A1/B1和A2/B2数据
- 更新数据匹配规则,统一使用A枪状态进行判断-未匹配到配置数据时跳过处理并记录日志
dev
wangyan 2025-11-15 09:08:43 +08:00
parent db57297c8f
commit 9c8df20545
1 changed files with 47 additions and 63 deletions

View File

@ -72,8 +72,8 @@ public class MesDataScheduled extends IJobHandler {
// 报警确认次数阈值 // 报警确认次数阈值
private static final int ALARM_CONFIRM_THRESHOLD = 3; private static final int ALARM_CONFIRM_THRESHOLD = 3;
// 最小报警持续时间(毫秒),默认10秒 // 最小报警持续时间(毫秒),默认30秒
private static final long MIN_ALARM_DURATION = 10 * 1000; private static final long MIN_ALARM_DURATION = 30 * 1000;
@Override @Override
@XxlJob(value = "mesDataJob") @XxlJob(value = "mesDataJob")
@ -216,9 +216,7 @@ public class MesDataScheduled extends IJobHandler {
Set<String> keySet = map.keySet(); Set<String> keySet = map.keySet();
// 获取A枪和B枪的工作位状态 // 获取A枪和B枪的工作位状态
Object aGunWorkPos1 = map.get("A枪工作位_1"); Object aGunWorkPos1 = map.get("A枪工作位_1");
Object bGunWorkPos1 = map.get("B枪工作位_1");
Object aGunWorkPos2 = map.get("A枪工作位_2"); Object aGunWorkPos2 = map.get("A枪工作位_2");
Object bGunWorkPos2 = map.get("B枪工作位_2");
for (String key : keySet) { for (String key : keySet) {
HashMap<String, Object> mesData = new HashMap<>(); HashMap<String, Object> mesData = new HashMap<>();
@ -246,47 +244,52 @@ public class MesDataScheduled extends IJobHandler {
collect = jll2TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList()); collect = jll2TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList());
} else if (suffix.equals("A1") || suffix.equals("B1")) { } else if (suffix.equals("A1") || suffix.equals("B1")) {
mesData.put("EQUIPMENT_ID", "21a32f0f65a41f2949ac832ac39714f0"); mesData.put("EQUIPMENT_ID", "21a32f0f65a41f2949ac832ac39714f0");
// 根据枪的工作位状态决定匹配规则 // 根据A枪工作位_1的值决定处理哪些数据
if ("A1".equals(suffix)) { boolean shouldProcess = false;
// 当处理A1数据时 if ("A1".equals(suffix) && aGunWorkPos1 != null && "0".equals(aGunWorkPos1.toString())) {
if (aGunWorkPos1 != null && "0".equals(aGunWorkPos1.toString())) { // 当suffix为A1且A枪工作位_1为0时处理A1数据
// A枪工作位为0时正常匹配A1数据 shouldProcess = true;
collect = zl1TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList()); } else if ("B1".equals(suffix) && aGunWorkPos1 != null && !"0".equals(aGunWorkPos1.toString())) {
} else if (bGunWorkPos1 != null && "0".equals(bGunWorkPos1.toString())) { // 当suffix为B1且A枪工作位_1不为0时处理B1数据
// B枪工作位为0时用A1的阈值匹配B1数据 shouldProcess = true;
collect = zl1TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key.replace("_B1", "_A1"))).collect(Collectors.toList()); }
}
} else if ("B1".equals(suffix)) { if (shouldProcess) {
// 当处理B1数据时 // 使用zl1TargetList中A1的配置项进行匹配
if (bGunWorkPos1 != null && "0".equals(bGunWorkPos1.toString())) { final String targetKey;
// B枪工作位为0时用A1的阈值匹配B1数据 if ("B1".equals(suffix)) {
collect = zl1TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key.replace("_B1", "_A1"))).collect(Collectors.toList()); // 如果是B1数据将其替换为A1来匹配配置项
} else if (aGunWorkPos1 != null && "0".equals(aGunWorkPos1.toString())) { targetKey = key.replace("_B1", "_A1");
// A枪工作位为0时正常匹配B1数据 mesData.put("TARGET_NAME", targetKey);
collect = zl1TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList());
} else {
targetKey = key;
} }
collect = zl1TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(targetKey)).collect(Collectors.toList());
} }
} else if (suffix.equals("A2") || suffix.equals("B2")) { } else if (suffix.equals("A2") || suffix.equals("B2")) {
mesData.put("EQUIPMENT_ID", "2c83b99df54e80a674be5657b11db55c"); mesData.put("EQUIPMENT_ID", "2c83b99df54e80a674be5657b11db55c");
// 根据枪的工作位状态决定匹配规则 // 根据A枪工作位_2的值决定处理哪些数据
if ("A2".equals(suffix)) { boolean shouldProcess = false;
// 当处理A2数据时 if ("A2".equals(suffix) && aGunWorkPos2 != null && "0".equals(aGunWorkPos2.toString())) {
if (aGunWorkPos2 != null && "0".equals(aGunWorkPos2.toString())) { // 当suffix为A2且A枪工作位_2为0时处理A2数据
// A枪工作位为0时正常匹配A2数据 shouldProcess = true;
collect = zl2TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList()); } else if ("B2".equals(suffix) && aGunWorkPos2 != null && !"0".equals(aGunWorkPos2.toString())) {
} else if (bGunWorkPos2 != null && "0".equals(bGunWorkPos2.toString())) { // 当suffix为B2且A枪工作位_2不为0时处理B2数据
// B枪工作位为0时用A2的阈值匹配B2数据 shouldProcess = true;
collect = zl2TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key.replace("_B2", "_A2"))).collect(Collectors.toList()); }
}
} else if ("B2".equals(suffix)) { if (shouldProcess) {
// 当处理B2数据时 // 使用zl2TargetList中A2的配置项进行匹配
if (bGunWorkPos2 != null && "0".equals(bGunWorkPos2.toString())) { final String targetKey;
// B枪工作位为0时用A2的阈值匹配B2数据 if ("B2".equals(suffix)) {
collect = zl2TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key.replace("_B2", "_A2"))).collect(Collectors.toList()); // 如果是B2数据将其替换为A2来匹配配置项
} else if (aGunWorkPos2 != null && "0".equals(aGunWorkPos2.toString())) { targetKey = key.replace("_B2", "_A2");
// A枪工作位为0时正常匹配B2数据 mesData.put("TARGET_NAME", targetKey);
collect = zl2TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList()); } else {
targetKey = key;
} }
collect = zl2TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(targetKey)).collect(Collectors.toList());
} }
} else if (key.contains("1#高炉")) { } else if (key.contains("1#高炉")) {
mesData.put("EQUIPMENT_ID", "c6825a6e1c959c3e5c800433516b2e8d"); mesData.put("EQUIPMENT_ID", "c6825a6e1c959c3e5c800433516b2e8d");
@ -356,30 +359,11 @@ public class MesDataScheduled extends IJobHandler {
checkThresholdWithDelayConfirmation(mesData); checkThresholdWithDelayConfirmation(mesData);
} }
} }
mesSaveList.add(mesData);
} else { } else {
mesData.put("IPCDEVICE_ID", ""); // 如果没有匹配到配置数据则不添加到mesSaveList中
mesData.put("DEVICE_ID",""); XxlJobHelper.log("未找到 {} 的配置数据,跳过处理", key);
mesData.put("PLC_ID", "");
mesData.put("PLC_NAME", "");
mesData.put("TARGET_TYPE", "");
mesData.put("TARGET_PLACE", "");
mesData.put("TARGET_UNIT", "");
mesData.put("THRESHOLD_UP_LIMIT", "");
mesData.put("THRESHOLD_UP_UP_LIMIT", "");
mesData.put("THRESHOLD_DOWN_LIMIT", "");
mesData.put("THRESHOLD_DOWN_DOWN_LIMIT", "");
mesData.put("RANGE_UP", "");
mesData.put("RANGE_DOWN", "");
mesData.put("TARGET_DESCRIPTION", "");
mesData.put("BIT_NO", "");
mesData.put("SIGNAL_TYPE", "");
mesData.put("ALARM_VALUE", "");
mesData.put("TARGET_STATUS", "");
mesData.put("CORPINFO_ID", "");
mesData.put("REPORT_ID", "");
mesData.put("OPEN_ALARM", "");
} }
mesSaveList.add(mesData);
} }
} }