From ca1c0bc3eb056c6995ba28ac191f6c5ee37b5ce4 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Thu, 18 Jun 2026 13:46:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=AC=A0=E5=8E=8B=E5=92=8C=E6=AC=A0?= =?UTF-8?q?=E6=B5=81=EF=BC=8C=E4=B8=8D=E5=86=8D=E6=8B=A8=E6=89=93=E7=94=B5?= =?UTF-8?q?=E8=AF=9D=EF=BC=8C=E5=8A=9F=E8=83=BD=E4=BF=AE=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../intc/iot/handler/DeviceDataHandler.java | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/intc-modules/intc-iot/src/main/java/com/intc/iot/handler/DeviceDataHandler.java b/intc-modules/intc-iot/src/main/java/com/intc/iot/handler/DeviceDataHandler.java index 20e82ff..98d4280 100644 --- a/intc-modules/intc-iot/src/main/java/com/intc/iot/handler/DeviceDataHandler.java +++ b/intc-modules/intc-iot/src/main/java/com/intc/iot/handler/DeviceDataHandler.java @@ -1504,8 +1504,12 @@ public class DeviceDataHandler { * @param 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); return; } @@ -1539,8 +1543,6 @@ public class DeviceDataHandler { 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); if (StrUtil.isBlank(errorDesc)) { errorDesc = "设备故障(code=" + errorCode + ")"; @@ -1550,6 +1552,15 @@ public class DeviceDataHandler { String.format("%s(%s)发生故障:%s", displayName, deviceName, errorDesc)); 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); if (aquUser == null) { @@ -1898,10 +1909,14 @@ public class DeviceDataHandler { messageWarnMapper.insert(warn); boolean controllerFaultCallOpen = device.getControllerFaultCallOpen() == null || device.getControllerFaultCallOpen() == 1; - boolean shouldCreateCallNotice = powerOffError || controllerFaultCallOpen; + boolean noCallControllerFault = isNoCallControllerFault(errorCode); + boolean shouldCreateCallNotice = !noCallControllerFault && (powerOffError || controllerFaultCallOpen); // 创建电话通知记录:断电不受控制器故障电话开关限制,其他故障受该开关限制。 if (aliyunIotProperties.isCallNoticeEnabled() && shouldCreateCallNotice) { createCallNotices(device, messagePondName, warn); + } else if (noCallControllerFault) { + log.info("[故障码] 设备={} 欠压/欠流故障仅记录报警,不创建电话通知: title={}, errorCode={}", + device.getSerialNum(), title, errorCode); } else if (!shouldCreateCallNotice) { log.info("[故障码] 设备={} 控制器故障电话报警开关关闭,仅记录报警消息: 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) *