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