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());