fix: 欠压和欠流,不再拨打电话,功能修改。

This commit is contained in:
tianyongbao
2026-06-18 13:46:35 +08:00
parent ee70550f65
commit c071249407

View File

@@ -1504,8 +1504,12 @@ public class DeviceDataHandler {
* @param params 事件参数 * @param params 事件参数
*/ */
private void triggerDeviceErrorAlarm(String deviceName, JSONObject params) { private void triggerDeviceErrorAlarm(String deviceName, JSONObject params) {
int errorCode = params != null && params.containsKey("errorCode")
? params.getInt("errorCode", 0) : 0;
boolean onlyRecordAlarm = isNoCallControllerFault(errorCode);
// 全局电话通知开关检查 // 全局电话通知开关检查
if (!aliyunIotProperties.isCallNoticeEnabled()) { if (!aliyunIotProperties.isCallNoticeEnabled() && !onlyRecordAlarm) {
log.debug("[设备故障] 电话通知已全局关闭,跳过: {}", deviceName); log.debug("[设备故障] 电话通知已全局关闭,跳过: {}", deviceName);
return; return;
} }
@@ -1539,8 +1543,6 @@ public class DeviceDataHandler {
String displayName = device.getDeviceName() != null ? device.getDeviceName() : deviceName; String displayName = device.getDeviceName() != null ? device.getDeviceName() : deviceName;
// 解析事件参数获取故障码 // 解析事件参数获取故障码
int errorCode = params != null && params.containsKey("errorCode")
? params.getInt("errorCode", 0) : 0;
String errorDesc = DefineDeviceErrorCode.getErrorMessage(errorCode); String errorDesc = DefineDeviceErrorCode.getErrorMessage(errorCode);
if (StrUtil.isBlank(errorDesc)) { if (StrUtil.isBlank(errorDesc)) {
errorDesc = "设备故障(code=" + errorCode + ")"; errorDesc = "设备故障(code=" + errorCode + ")";
@@ -1550,6 +1552,15 @@ public class DeviceDataHandler {
String.format("%s(%s)发生故障:%s", displayName, deviceName, errorDesc)); String.format("%s(%s)发生故障:%s", displayName, deviceName, errorDesc));
log.error("[设备故障] 设备: {}, 故障信息: {}", deviceName, warnMsg); log.error("[设备故障] 设备: {}, 故障信息: {}", deviceName, warnMsg);
if (onlyRecordAlarm) {
String errorTitle = "控制器故障";
MessageWarn warn = createMessageWarn(deviceId, userId, pondName, errorTitle, WARN_TYPE_DISSOLVED_OXYGEN, warnMsg);
messageWarnMapper.insert(warn);
log.info("[设备故障] 欠压/欠流故障仅记录报警,不创建电话通知 - 设备:{}, 故障码:{}",
deviceName, errorCode);
return;
}
// 获取告警手机号 // 获取告警手机号
AquUser aquUser = aquUserMapper.selectById(userId); AquUser aquUser = aquUserMapper.selectById(userId);
if (aquUser == null) { if (aquUser == null) {
@@ -1898,10 +1909,14 @@ public class DeviceDataHandler {
messageWarnMapper.insert(warn); messageWarnMapper.insert(warn);
boolean controllerFaultCallOpen = device.getControllerFaultCallOpen() == null boolean controllerFaultCallOpen = device.getControllerFaultCallOpen() == null
|| device.getControllerFaultCallOpen() == 1; || device.getControllerFaultCallOpen() == 1;
boolean shouldCreateCallNotice = powerOffError || controllerFaultCallOpen; boolean noCallControllerFault = isNoCallControllerFault(errorCode);
boolean shouldCreateCallNotice = !noCallControllerFault && (powerOffError || controllerFaultCallOpen);
// 创建电话通知记录:断电不受控制器故障电话开关限制,其他故障受该开关限制。 // 创建电话通知记录:断电不受控制器故障电话开关限制,其他故障受该开关限制。
if (aliyunIotProperties.isCallNoticeEnabled() && shouldCreateCallNotice) { if (aliyunIotProperties.isCallNoticeEnabled() && shouldCreateCallNotice) {
createCallNotices(device, messagePondName, warn); createCallNotices(device, messagePondName, warn);
} else if (noCallControllerFault) {
log.info("[故障码] 设备={} 欠压/欠流故障仅记录报警,不创建电话通知: title={}, errorCode={}",
device.getSerialNum(), title, errorCode);
} else if (!shouldCreateCallNotice) { } else if (!shouldCreateCallNotice) {
log.info("[故障码] 设备={} 控制器故障电话报警开关关闭,仅记录报警消息: title={}", log.info("[故障码] 设备={} 控制器故障电话报警开关关闭,仅记录报警消息: title={}",
device.getSerialNum(), title); device.getSerialNum(), title);
@@ -1921,6 +1936,26 @@ public class DeviceDataHandler {
} }
} }
/**
* 欠压和欠流故障只保留报警记录,不创建报警电话。
*/
private boolean isNoCallControllerFault(int errorCode) {
return isControllerInputUnderVoltage(errorCode) || isSwitchUnderElectric(errorCode);
}
private boolean isControllerInputUnderVoltage(int errorCode) {
return errorCode == DefineDeviceErrorCode.Three_PhaseA_UnderVoltage
|| errorCode == DefineDeviceErrorCode.Three_PhaseB_UnderVoltage
|| errorCode == DefineDeviceErrorCode.Three_PhaseC_UnderVoltage;
}
private boolean isSwitchUnderElectric(int errorCode) {
return (errorCode >= DefineDeviceErrorCode.Three_Switch1UnderElectricA
&& errorCode <= DefineDeviceErrorCode.Three_Switch4UnderElectricC)
|| (errorCode >= DefineDeviceErrorCode.One_Switch1UnderElectric
&& errorCode <= DefineDeviceErrorCode.One_Switch4UnderElectric);
}
/** /**
* 删除设备指定故障码记录(对应 C# RemoveErrorCode * 删除设备指定故障码记录(对应 C# RemoveErrorCode
* *