fix: 控制器没有塘口时,也能打电话产生报警。
This commit is contained in:
@@ -1535,18 +1535,7 @@ public class DeviceDataHandler {
|
||||
return;
|
||||
}
|
||||
|
||||
if (device.getPondId() == null) {
|
||||
log.debug("[设备故障] 设备未绑定塘口,跳过: {}", deviceName);
|
||||
return;
|
||||
}
|
||||
|
||||
Pond pond = pondMapper.selectById(device.getPondId());
|
||||
if (pond == null) {
|
||||
log.debug("[设备故障] 塘口不存在,跳过: {}", deviceName);
|
||||
return;
|
||||
}
|
||||
|
||||
String pondName = pond.getPondName();
|
||||
String pondName = getPondName(device.getPondId());
|
||||
String displayName = device.getDeviceName() != null ? device.getDeviceName() : deviceName;
|
||||
|
||||
// 解析事件参数获取故障码
|
||||
@@ -1557,8 +1546,8 @@ public class DeviceDataHandler {
|
||||
errorDesc = "设备故障(code=" + errorCode + ")";
|
||||
}
|
||||
|
||||
String warnMsg = String.format("%s塘口中%s(%s)发生故障:%s",
|
||||
pondName, displayName, deviceName, errorDesc);
|
||||
String warnMsg = formatPondWarnMessage(pondName,
|
||||
String.format("%s(%s)发生故障:%s", displayName, deviceName, errorDesc));
|
||||
log.error("[设备故障] 设备: {}, 故障信息: {}", deviceName, warnMsg);
|
||||
|
||||
// 获取告警手机号
|
||||
@@ -1728,23 +1717,18 @@ public class DeviceDataHandler {
|
||||
}
|
||||
|
||||
// 查询塘口(如果设备在塘口中)
|
||||
String pondName = null;
|
||||
if (device.getPondId() != null) {
|
||||
Pond pond = pondMapper.selectById(device.getPondId());
|
||||
if (pond != null) {
|
||||
pondName = pond.getPondName();
|
||||
}
|
||||
}
|
||||
String pondName = getPondName(device.getPondId());
|
||||
String displayName = device.getDeviceName() != null ? device.getDeviceName() : device.getSerialNum();
|
||||
|
||||
// 设备在塘口中且非山机才触发告警
|
||||
// 非离线状态才触发告警;未绑定塘口时仍告警,告警内容不带塘口前缀
|
||||
boolean isOffline = device.getWarnCode() != null
|
||||
&& (device.getWarnCode() & DefineDeviceWarnCode.DeviceOffline) != 0;
|
||||
boolean warnTrigger = !isOffline && pondName != null;
|
||||
boolean warnTrigger = !isOffline;
|
||||
|
||||
// 根据故障码范围分类生成告警内容
|
||||
String title = null;
|
||||
String message = null;
|
||||
String messagePondName = pondName;
|
||||
int switchIndex = 0;
|
||||
// 告警类型:默认为控制器告警(3),开关相关故障使用开关告警(4)
|
||||
int warnType = WARN_TYPE_CONTROLLER;
|
||||
@@ -1758,8 +1742,8 @@ public class DeviceDataHandler {
|
||||
}
|
||||
if (warnTrigger) {
|
||||
title = "控制器输入缺相";
|
||||
message = String.format("%s塘口中%s(%s)输入缺%s相",
|
||||
pondName, displayName, device.getSerialNum(), phaseName);
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)输入缺%s相", displayName, device.getSerialNum(), phaseName));
|
||||
}
|
||||
} else if (errorCode >= DefineDeviceErrorCode.Three_PhaseA_OverVoltage
|
||||
&& errorCode <= DefineDeviceErrorCode.Three_PhaseC_UnderVoltage) {
|
||||
@@ -1769,8 +1753,9 @@ public class DeviceDataHandler {
|
||||
String phaseName = DefineDeviceErrorCode.getPhaseName(phaseIndex);
|
||||
if (warnTrigger) {
|
||||
title = isOver ? "控制器输入过压" : "控制器输入欠压";
|
||||
message = String.format("%s塘口中%s(%s)%s相%s",
|
||||
pondName, displayName, device.getSerialNum(), phaseName, isOver ? "过压" : "欠压");
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)%s相%s",
|
||||
displayName, device.getSerialNum(), phaseName, isOver ? "过压" : "欠压"));
|
||||
}
|
||||
} else if (errorCode >= DefineDeviceErrorCode.Three_Switch1LosePhaseA
|
||||
&& errorCode <= DefineDeviceErrorCode.Three_Switch4LosePhaseC) {
|
||||
@@ -1785,10 +1770,12 @@ public class DeviceDataHandler {
|
||||
if (warnTrigger) {
|
||||
String swPondName = (sw != null && sw.getPondId() != null)
|
||||
? getPondName(sw.getPondId()) : pondName;
|
||||
messagePondName = swPondName;
|
||||
String swName = sw != null && sw.getSwitchName() != null ? sw.getSwitchName() : ("开关" + switchIndex);
|
||||
title = "控制器开关输出缺相";
|
||||
message = String.format("%s塘口中%s(%s)的开关%d(%s)输出缺%s相",
|
||||
swPondName, displayName, device.getSerialNum(), switchIndex, swName, phaseName);
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)的开关%d(%s)输出缺%s相",
|
||||
displayName, device.getSerialNum(), switchIndex, swName, phaseName));
|
||||
}
|
||||
} else if (errorCode >= DefineDeviceErrorCode.Three_Switch1OverElectricA
|
||||
&& errorCode <= DefineDeviceErrorCode.Three_Switch4OverElectricC) {
|
||||
@@ -1802,10 +1789,12 @@ public class DeviceDataHandler {
|
||||
warnTrigger = warnTrigger && electricWarnOpen;
|
||||
if (warnTrigger) {
|
||||
String swPondName = (sw.getPondId() != null) ? getPondName(sw.getPondId()) : pondName;
|
||||
messagePondName = swPondName;
|
||||
String swName = sw.getSwitchName() != null ? sw.getSwitchName() : ("开关" + switchIndex);
|
||||
title = "控制器开关输出过流";
|
||||
message = String.format("%s塘口中%s(%s)的开关%d(%s)输出%s相过流",
|
||||
swPondName, displayName, device.getSerialNum(), switchIndex, swName, phaseName);
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)的开关%d(%s)输出%s相过流",
|
||||
displayName, device.getSerialNum(), switchIndex, swName, phaseName));
|
||||
}
|
||||
} else if (errorCode >= DefineDeviceErrorCode.Three_Switch1UnderElectricA
|
||||
&& errorCode <= DefineDeviceErrorCode.Three_Switch4UnderElectricC) {
|
||||
@@ -1819,10 +1808,12 @@ public class DeviceDataHandler {
|
||||
warnTrigger = warnTrigger && electricWarnOpen;
|
||||
if (warnTrigger) {
|
||||
String swPondName = (sw.getPondId() != null) ? getPondName(sw.getPondId()) : pondName;
|
||||
messagePondName = swPondName;
|
||||
String swName = sw.getSwitchName() != null ? sw.getSwitchName() : ("开关" + switchIndex);
|
||||
title = "控制器开关输出欠流";
|
||||
message = String.format("%s塘口中%s(%s)的开关%d(%s)输出%s相欠流",
|
||||
swPondName, displayName, device.getSerialNum(), switchIndex, swName, phaseName);
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)的开关%d(%s)输出%s相欠流",
|
||||
displayName, device.getSerialNum(), switchIndex, swName, phaseName));
|
||||
}
|
||||
} else if (errorCode >= DefineDeviceErrorCode.Three_Switch1ElectricEmpty
|
||||
&& errorCode <= DefineDeviceErrorCode.Three_Switch4ElectricEmpty) {
|
||||
@@ -1834,10 +1825,12 @@ public class DeviceDataHandler {
|
||||
warnTrigger = warnTrigger && electricWarnOpen;
|
||||
if (warnTrigger) {
|
||||
String swPondName = (sw.getPondId() != null) ? getPondName(sw.getPondId()) : pondName;
|
||||
messagePondName = swPondName;
|
||||
String swName = sw.getSwitchName() != null ? sw.getSwitchName() : ("开关" + switchIndex);
|
||||
title = "控制器开关输出空载";
|
||||
message = String.format("%s塘口中%s(%s)的开关%d(%s)输出空载",
|
||||
swPondName, displayName, device.getSerialNum(), switchIndex, swName);
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)的开关%d(%s)输出空载",
|
||||
displayName, device.getSerialNum(), switchIndex, swName));
|
||||
}
|
||||
} else if (errorCode >= DefineDeviceErrorCode.One_Switch1OverElectric
|
||||
&& errorCode <= DefineDeviceErrorCode.One_Switch4OverElectric) {
|
||||
@@ -1849,10 +1842,12 @@ public class DeviceDataHandler {
|
||||
warnTrigger = warnTrigger && electricWarnOpen;
|
||||
if (warnTrigger) {
|
||||
String swPondName = (sw.getPondId() != null) ? getPondName(sw.getPondId()) : pondName;
|
||||
messagePondName = swPondName;
|
||||
String swName = sw.getSwitchName() != null ? sw.getSwitchName() : ("开关" + switchIndex);
|
||||
title = "控制器开关输出过流";
|
||||
message = String.format("%s塘口中%s(%s)的开关%d(%s)输出过流",
|
||||
swPondName, displayName, device.getSerialNum(), switchIndex, swName);
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)的开关%d(%s)输出过流",
|
||||
displayName, device.getSerialNum(), switchIndex, swName));
|
||||
}
|
||||
} else if (errorCode >= DefineDeviceErrorCode.One_Switch1UnderElectric
|
||||
&& errorCode <= DefineDeviceErrorCode.One_Switch4UnderElectric) {
|
||||
@@ -1864,10 +1859,12 @@ public class DeviceDataHandler {
|
||||
warnTrigger = warnTrigger && electricWarnOpen;
|
||||
if (warnTrigger) {
|
||||
String swPondName = (sw.getPondId() != null) ? getPondName(sw.getPondId()) : pondName;
|
||||
messagePondName = swPondName;
|
||||
String swName = sw.getSwitchName() != null ? sw.getSwitchName() : ("开关" + switchIndex);
|
||||
title = "控制器开关输出欠流";
|
||||
message = String.format("%s塘口中%s(%s)的开关%d(%s)输出欠流",
|
||||
swPondName, displayName, device.getSerialNum(), switchIndex, swName);
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)的开关%d(%s)输出欠流",
|
||||
displayName, device.getSerialNum(), switchIndex, swName));
|
||||
}
|
||||
} else if (errorCode >= DefineDeviceErrorCode.One_Switch1ElectricEmpty
|
||||
&& errorCode <= DefineDeviceErrorCode.One_Switch4ElectricEmpty) {
|
||||
@@ -1879,10 +1876,12 @@ public class DeviceDataHandler {
|
||||
warnTrigger = warnTrigger && electricWarnOpen;
|
||||
if (warnTrigger) {
|
||||
String swPondName = (sw.getPondId() != null) ? getPondName(sw.getPondId()) : pondName;
|
||||
messagePondName = swPondName;
|
||||
String swName = sw.getSwitchName() != null ? sw.getSwitchName() : ("开关" + switchIndex);
|
||||
title = "控制器开关输出空载";
|
||||
message = String.format("%s塘口中%s(%s)的开关%d(%s)输出空载",
|
||||
swPondName, displayName, device.getSerialNum(), switchIndex, swName);
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)的开关%d(%s)输出空载",
|
||||
displayName, device.getSerialNum(), switchIndex, swName));
|
||||
}
|
||||
} else if (errorCode == DefineDeviceErrorCode.PowerOff) {
|
||||
// 断电:已存在离线状态则不触发断电告警
|
||||
@@ -1893,8 +1892,8 @@ public class DeviceDataHandler {
|
||||
setDeviceWarnCodeBit(device.getSerialNum(), DefineDeviceWarnCode.ErrorPowerOff, true);
|
||||
if (warnTrigger) {
|
||||
title = "控制器断电";
|
||||
message = String.format("%s塘口中%s(%s)断电",
|
||||
pondName, displayName, device.getSerialNum());
|
||||
message = formatPondWarnMessage(messagePondName,
|
||||
String.format("%s(%s)断电", displayName, device.getSerialNum()));
|
||||
}
|
||||
} else {
|
||||
warnTrigger = false;
|
||||
@@ -1904,11 +1903,11 @@ public class DeviceDataHandler {
|
||||
if (warnTrigger && title != null && message != null) {
|
||||
Long userId = device.getUserId();
|
||||
if (userId != null) {
|
||||
MessageWarn warn = createMessageWarn(deviceId, userId, pondName, title, warnType, message);
|
||||
MessageWarn warn = createMessageWarn(deviceId, userId, messagePondName, title, warnType, message);
|
||||
messageWarnMapper.insert(warn);
|
||||
// 创建电话通知记录(全局开关控制)
|
||||
if (aliyunIotProperties.isCallNoticeEnabled()) {
|
||||
createCallNotices(device, pondName, warn);
|
||||
createCallNotices(device, messagePondName, warn);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1990,6 +1989,16 @@ public class DeviceDataHandler {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化带塘口前缀的告警内容。未绑定塘口时只保留设备告警内容。
|
||||
*/
|
||||
private String formatPondWarnMessage(String pondName, String content) {
|
||||
if (StrUtil.isBlank(pondName)) {
|
||||
return content;
|
||||
}
|
||||
return String.format("%s塘口中%s", pondName, content);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据塘口ID获取塘口名称
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user