Files
water/.workbuddy/memory/2026-06-12.md

24 lines
1.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`