1.2 KiB
1.2 KiB
2026-06-12 工作日志
15. 修复设备断电后数据库状态未更新为离线
问题:设备断电/断网后,Redis 中的在线 Key(mqtt:device:status:{deviceNo})会在 TTL(默认 300s)到期后自动消失,但数据库 app_device.status 字段没有同步更新,始终显示在线。
方案:三层联动
-
定时任务扫库(新增
DeviceOfflineCheckTask):每 90s 扫描 DB 中status=1的设备,检查 Redis Key 是否存在,不存在则批量更新status=0(离线)。扫描间隔可通过mqtt.offline-check.interval-ms配置项覆盖。 -
上线时同步写库:
DeviceDataHandler.handle():收到电量上报时,AppDeviceBo.setStatus("1")写库 + 刷新 Redis KeyDeviceRegisterHandler.buildRegisterDevice():注册时device.setStatus("1")
-
修复注册默认状态:
registerByMqtt()中注册默认值从status=2改为status=1(在线)
状态值定义(来自 AppDeviceBo 注释):
0:离线1:在线2:到期3:故障
新增文件:water-app/src/main/java/org/dromara/app/task/DeviceOfflineCheckTask.java