设备生命周期管理
引用文件
本文引用的文件
- README.md
- DeviceApi.java
- DeviceApiImpl.java
- DeviceService.java
- DeviceServiceImpl.java
- DeviceController.java
- DeviceCertificationImpl.java
- DeviceCertificationOldImpl.java
- AppDeviceHeartBeatController.java
- HeartBeatResCodeEnum.java
- DeviceDO.java
- ruoyi-vue-pro.sql
- ClientTokenUtil.java
- check-connectivity.md
目录
简介
本技术文档围绕设备生命周期管理展开,系统覆盖从设备入网激活、心跳维持、状态监控到注销清理的全链路能力。系统通过设备认证(入网激活)、心跳机制、运行时数据记录与渠道/任务交互,实现对设备的全生命周期治理。设备以 MAC 地址与 CPU ID 作为唯一标识,结合 Redis 缓存与数据库持久化,保障高并发场景下的稳定性与一致性。
项目结构
设备生命周期管理由“设备模块”提供核心能力,包含 API、Biz 服务、控制器、数据对象与枚举等层次化组织,配合安全框架与字典配置,形成完整的设备管理闭环。
图表来源
- DeviceApi.java
- DeviceApiImpl.java
- DeviceController.java
- DeviceService.java
- DeviceServiceImpl.java
- DeviceCertificationOldImpl.java
- DeviceCertificationImpl.java
- AppDeviceHeartBeatController.java
- HeartBeatResCodeEnum.java
- DeviceDO.java
章节来源
核心组件
- 设备认证与入网激活:支持旧版与新版接口,依据 MAC/CPU 校验设备是否存在,不存在则自动注册并设置激活状态。
- 心跳与状态维护:心跳接口记录设备最后在线时间,结合渠道更新版本判断是否下发新任务;同时生成/刷新设备侧 Token。
- 设备信息服务:提供设备查询、分页、导入导出、批量更新/删除、统计计数等能力。
- 离线处理:通过心跳时间与阈值判定离线,结合 Redis 有序集合维护在线状态。
- 管理端接口:提供设备创建、更新、删除、批量操作、导出等后台管理能力。
章节来源
- DeviceCertificationImpl.java
- DeviceCertificationOldImpl.java
- AppDeviceHeartBeatController.java
- DeviceService.java
- DeviceServiceImpl.java
- DeviceController.java
架构总览
系统采用“接口层-服务层-数据访问层”的分层架构,结合 Redis 缓存与数据库双写策略,确保高并发下的快速查询与稳定持久化。设备认证与心跳控制器作为入口,统一调度服务层完成设备状态与信息的维护。
图表来源
- AppDeviceHeartBeatController.java
- DeviceCertificationImpl.java
- DeviceServiceImpl.java
- DeviceController.java
详细组件分析
设备入网激活与认证
- 旧版接口:根据 MAC 查询设备,若不存在则解析 IP 定位区域并创建设备,状态置为“已激活”,返回激活码。
- 新版接口:支持 MAC+CPU 双键校验,避免历史设备 CPU 为空导致的误判;同样在不存在时自动注册并激活。
- 缓存穿透 防护:查询不存在设备时写入空值缓存,降低数据库压力。
图表来源
章节来源
心跳与状态维护
- 心跳接口 V1/V2:记录设备最后在线时间,生成/刷新设备 Token;根据渠道更新版本判断是否下发新任务。
- 心跳响应码:定义“新任务更新指令”“设备未激活”等业务码,便于设备侧处理。
- 离线判定:通过心跳时间与阈值比较,将设备标记为离线,用于后续统计与告警。
图表来源
章节来源
设备信息服务与管理端
- 设备查询与分页:支持按条件查询、ES 分页与导出。
- 批量导入/导出:支持 Excel 批量导入,覆盖/不覆盖两种模式;导出设备明细。
- 批量更新/删除:支持按条件批量更新渠道、批量删除。
- 统计计数:按渠道/型号维度统计设备数量。
图表来源
章节来源
设备状态定义与转换规则
- 状态字典:系统字典包含“未激活/在线/离线”等状态,用于前端展示与统计。
- 状态转换:
- 未激活 → 在线:设备完成入网激活并通过心跳校验。
- 在线 → 离线:超过心跳阈值未收到心跳。
- 离线 → 在线:恢复心跳后自动转为在线。
- 状态维护:心跳控制器记录最后在线时间,服务层据此判定离线。
章节来源
设备信息维护机制
- 属性更新:支持设备型号、UI、SDK 版本、渠道等字段的更新。
- 位置变更:通过区域 ID 与 IP 地址联动,结合认证流程更新设备归属。
- 版本升级:心跳接口携带更新版本,服务层据此判断是否下发新任务。
章节来源
设备离线处理策略
- 离线检测:心跳控制器记录最后在线时间,服务层根据阈值判定离线。
- 超时处理:超过阈值未心跳的设备视为离线,可用于统计与告警。
- 数据清理:管理端支持按条件批量删除设备,清理无效设备数据。
章节来源
设备管理 API 接口文档
- 设备查询
- 根据 MAC 获取设备:GET /device/get-by-mac
- 从数据库强制查询:GET /device/get-by-mac-on-DB
- 根据 MAC+CPU 获取:GET /device/get-by-mac-by-cpu
- 设备更新
- 更新设备数据:PUT /device/update
- 推送更新:PUT /device/update-on-device-push
- 统计与计数
- 获取设备总数:GET /device/get-by-id
- 按渠道/型号统计:GET /device/get-count-by-channelIds, GET /device/get-count-by-modelIds
- 批量统计:GET /device/batch-get-count-by-channelIds, GET /device/batch-get-count-by-modelIds
- 字段更新
- 更新设备型号外键:GET /device/update-modelId-by-id
- 更新设备 UI:GET /device/update-ui-by-id
- 渠道与状态
- 根据渠道与状态获取 MAC:GET /device/get-macs-by-channelIds-and-status
- 根据渠道与状态获取设备数量:GET /device/get-device-count-by-channelIds-and-status
章节来源
依赖分析
- 控制器依赖服务层:心跳控制器与认证控制器均依赖设备服务实现具体业务。
- 服务层依赖数据访问层:设备服务通过 Mapper/DAO 访问数据库,同时与 Redis 交互。
- 字典与配置:系统字典提供设备状态枚举,心跳配置通过 Redis 缓存与字典联动。
- 安全与 Token:客户端 Token 生成与校验,确保设备侧鉴权与上下文一致性。
图表来源
- AppDeviceHeartBeatController.java
- DeviceCertificationImpl.java
- DeviceServiceImpl.java
- ClientTokenUtil.java
章节来源
性能考虑
- 缓存优先:设备查询优先命中 Redis,不存在时写入空值缓存,降低数据库压力。
- 批量处理:导入/更新/删除支持分批处理,避免大事务阻塞。
- 分页优化:管理端在数据量较大时使用 ES 分页,减少 MySQL 深分页成本。
- 心跳阈值:合理设置离线阈值,平衡实时性与资源消耗。
故障排查指南
- 网络连通性检测:若设备无法连接服务器或心跳异常,可通过指定域名与端口进行连通性检测,确认网络是否通畅。
- 设备不存在:心跳返回“设备不存在”提示通常表示网络连通正常但设备未注册或未激活。
- 常见错误码:心跳响应码包含“新任务更新指令”“设备未激活”等,需根据业务码进行相应处理。
章节来源
结论
设备生命周期管理通过“认证—心跳—状态—管理”的闭环设计,实现了设备从入网到离线/注销的全链路治理。借助 Redis 缓存与数据库协同、批量处理与分页优化,系统在高并发场景下具备良好的稳定性与扩展性。建议在生产环境中结合心跳阈值与离线策略,持续优化设备在线率与系统可用性。
附录
- 设备状态字典:未激活、在线、离线
- 心跳响应码:新任务更新指令、设备未激活
- 管理端权限:设备创建、更新、删除、导入导出、批量操作等
章节来源