From 38c038a950b2a2a24f64c5f691fff98b8fcb9522 Mon Sep 17 00:00:00 2001 From: tianyongbao Date: Thu, 9 Apr 2026 09:17:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A6=BB=E7=BA=BF=E6=8A=A5=E8=AD=A6?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/intc/iot/handler/DeviceDataHandler.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 7ff4dea..a186a98 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 @@ -1825,10 +1825,19 @@ public class DeviceDataHandler { /** * 清除设备离线标志(收到属性上报时调用) + * 同时清除数据库 warnCode 位和 Redis 离线等待标记 * * @param deviceName 设备名称(serialNum) */ private void clearDeviceOfflineFlag(String deviceName) { + // 1. 清除 Redis 离线等待标记(防止定时任务误触发告警) + String redisKey = DEVICE_OFFLINE_WAIT_KEY_PREFIX + deviceName; + boolean redisRemoved = RedisUtils.deleteObject(redisKey); + if (redisRemoved) { + log.info("[在线] 收到属性上报,已清除 Redis 离线等待标记: {}", deviceName); + } + + // 2. 清除数据库 warnCode 离线标志位 try { Device device = deviceMapper.selectOne( new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper() @@ -1845,7 +1854,7 @@ public class DeviceDataHandler { update.setId(device.getId()); update.setWarnCode(device.getWarnCode() & ~DefineDeviceWarnCode.DeviceOffline); deviceMapper.updateById(update); - log.debug("[在线] 收到属性上报,已清除设备离线标志: {}", deviceName); + log.debug("[在线] 已清除设备数据库离线标志: {}", deviceName); } } catch (Exception e) { log.error("[在线] 清除设备离线标志失败[{}]: {}", deviceName, e.getMessage());