设备心跳调整 app新增增设备时绑定联网设备

This commit is contained in:
yuhaiming
2026-06-13 10:51:45 +08:00
parent c7f9df980a
commit c74363afa4
65 changed files with 1622 additions and 592 deletions

View File

@@ -0,0 +1,23 @@
# 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`