feat(ops): update cleaner status and assignment logic

This commit is contained in:
lzh
2026-01-19 14:56:31 +08:00
parent 73bc3b299f
commit b71558ae07
169 changed files with 57972 additions and 162 deletions

View File

@@ -0,0 +1,440 @@
# IoT设备API
<cite>
**本文引用的文件**
- [IotDeviceControlApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceControlApi.java)
- [IotDevicePropertyQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDevicePropertyQueryApi.java)
- [IotDeviceStatusQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceStatusQueryApi.java)
- [IotDeviceServiceInvokeReqDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/IotDeviceServiceInvokeReqDTO.java)
- [ResetTrafficCounterReqDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/ResetTrafficCounterReqDTO.java)
- [DevicePropertyBatchQueryReqDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/property/DevicePropertyBatchQueryReqDTO.java)
- [DevicePropertyHistoryQueryReqDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/property/DevicePropertyHistoryQueryReqDTO.java)
- [DevicePropertyRespDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/property/DevicePropertyRespDTO.java)
- [DevicePropertyHistoryRespDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/property/DevicePropertyHistoryRespDTO.java)
- [DeviceStatusRespDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/status/DeviceStatusRespDTO.java)
- [ApiConstants.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/enums/ApiConstants.java)
- [IotDeviceMessageTypeEnum.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/enums/device/IotDeviceMessageTypeEnum.java)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构概览](#架构概览)
5. [详细组件分析](#详细组件分析)
6. [依赖关系分析](#依赖关系分析)
7. [性能考虑](#性能考虑)
8. [故障排除指南](#故障排除指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本文件为IoT设备管理模块的全面API接口文档涵盖设备控制、属性查询、状态监控等核心功能。文档详细说明了设备连接认证机制、设备属性定义和数据格式规范并提供了设备远程控制命令的接口规范、控制指令格式和响应处理方式。同时文档还详细描述了设备属性查询接口包括实时属性获取和历史数据查询、设备状态监控接口在线状态、运行状态和故障状态的查询方法以及设备OTA升级接口和固件版本管理API。
## 项目结构
IoT模块采用分层架构设计主要由以下部分组成
- API接口层定义对外暴露的Feign客户端接口
- DTO数据传输对象定义请求和响应的数据结构
- 枚举类:定义设备消息类型、状态枚举等常量
- 核心业务逻辑在IoT服务器中实现具体的业务处理
```mermaid
graph TB
subgraph "IoT模块"
API[API接口层]
DTO[DTO数据传输对象]
ENUM[枚举类]
CORE[核心业务逻辑]
end
subgraph "外部系统"
OPS[运维系统]
APP[移动端应用]
WEB[Web管理平台]
end
OPS --> API
APP --> API
WEB --> API
API --> DTO
API --> ENUM
API --> CORE
CORE --> DTO
CORE --> ENUM
```
**图表来源**
- [IotDeviceControlApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceControlApi.java#L1-L53)
- [IotDevicePropertyQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDevicePropertyQueryApi.java#L1-L64)
- [IotDeviceStatusQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceStatusQueryApi.java#L1-L37)
**章节来源**
- [IotDeviceControlApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceControlApi.java#L1-L53)
- [IotDevicePropertyQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDevicePropertyQueryApi.java#L1-L64)
- [IotDeviceStatusQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceStatusQueryApi.java#L1-L37)
## 核心组件
IoT设备管理模块的核心组件包括三个主要的Feign客户端接口
### 设备控制API接口
提供设备远程控制能力,支持服务调用、批量服务调用和客流计数器重置功能。
### 设备属性查询API接口
提供设备属性的实时查询和历史数据查询功能,支持单个属性查询、批量属性查询和历史数据查询。
### 设备状态查询API接口
提供设备在线状态和设备状态信息的查询功能。
**章节来源**
- [IotDeviceControlApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceControlApi.java#L18-L52)
- [IotDevicePropertyQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDevicePropertyQueryApi.java#L22-L63)
- [IotDeviceStatusQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceStatusQueryApi.java#L13-L36)
## 架构概览
IoT设备管理模块采用微服务架构通过Feign客户端进行服务间通信。整体架构分为三层
```mermaid
graph TB
subgraph "表现层"
CLIENT[客户端应用]
end
subgraph "网关层"
GATEWAY[API网关]
end
subgraph "服务层"
IOT_SERVER[IoT服务器]
DEVICE_SERVICE[设备服务]
DATA_SERVICE[数据服务]
end
subgraph "基础设施层"
DATABASE[(数据库)]
REDIS[(Redis缓存)]
MQ[(消息队列)]
end
CLIENT --> GATEWAY
GATEWAY --> IOT_SERVER
IOT_SERVER --> DEVICE_SERVICE
IOT_SERVER --> DATA_SERVICE
DEVICE_SERVICE --> DATABASE
DEVICE_SERVICE --> REDIS
DEVICE_SERVICE --> MQ
DATA_SERVICE --> DATABASE
DATA_SERVICE --> REDIS
```
**图表来源**
- [ApiConstants.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/enums/ApiConstants.java#L10-L23)
## 详细组件分析
### 设备控制API组件
#### 控制接口定义
设备控制API提供以下核心功能
```mermaid
sequenceDiagram
participant Client as 客户端
participant API as 设备控制API
participant Server as IoT服务器
participant Device as 设备
Client->>API : 调用设备服务
API->>Server : RPC调用
Server->>Device : 发送控制指令
Device-->>Server : 返回执行结果
Server-->>API : 返回响应
API-->>Client : 返回控制结果
```
**图表来源**
- [IotDeviceControlApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceControlApi.java#L38-L44)
#### 服务调用请求DTO
服务调用请求包含以下关键字段:
- 设备ID唯一标识目标设备
- 服务标识符:指定要调用的服务类型
- 服务参数:服务执行所需的参数
- 超时时间:服务执行的超时设置
#### 批量服务调用
支持一次性对多个设备执行相同的服务调用,提高操作效率。
#### 客流计数器重置
提供客流计数器的基准值重置功能,支持工单创建后的计数器调整。
**章节来源**
- [IotDeviceControlApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceControlApi.java#L18-L52)
- [IotDeviceServiceInvokeReqDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/IotDeviceServiceInvokeReqDTO.java#L13-L41)
- [ResetTrafficCounterReqDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/ResetTrafficCounterReqDTO.java#L10-L37)
### 设备属性查询API组件
#### 实时属性查询
提供设备属性的实时查询能力,支持单个属性查询和批量属性查询:
```mermaid
flowchart TD
Start([开始查询]) --> CheckType{查询类型}
CheckType --> |单个属性| SingleQuery[单个属性查询]
CheckType --> |批量属性| BatchQuery[批量属性查询]
CheckType --> |最新属性| LatestQuery[最新属性查询]
SingleQuery --> GetDevice[获取设备信息]
BatchQuery --> GetDevices[获取设备列表]
LatestQuery --> GetCache[获取缓存数据]
GetDevice --> QueryDB[查询数据库]
GetDevices --> QueryDB
QueryDB --> ProcessData[处理查询结果]
GetCache --> ProcessData
ProcessData --> ReturnResult[返回查询结果]
ReturnResult --> End([结束])
```
**图表来源**
- [IotDevicePropertyQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDevicePropertyQueryApi.java#L37-L61)
#### 历史数据查询
支持按时间范围查询设备属性的历史数据,包含以下查询条件:
- 设备ID指定查询的目标设备
- 属性标识符:指定查询的属性类型
- 开始时间和结束时间:限定查询的时间范围
- 限制条数:控制返回数据的最大数量
#### 属性数据格式
属性查询返回的数据包含以下字段:
- 属性标识符:属性的唯一标识
- 属性值:当前或历史的属性数值
- 更新时间:数据的更新时间戳
**章节来源**
- [IotDevicePropertyQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDevicePropertyQueryApi.java#L22-L63)
- [DevicePropertyBatchQueryReqDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/property/DevicePropertyBatchQueryReqDTO.java#L9-L25)
- [DevicePropertyHistoryQueryReqDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/property/DevicePropertyHistoryQueryReqDTO.java#L12-L40)
- [DevicePropertyRespDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/property/DevicePropertyRespDTO.java#L9-L30)
- [DevicePropertyHistoryRespDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/property/DevicePropertyHistoryRespDTO.java#L9-L30)
### 设备状态查询API组件
#### 在线状态检测
提供设备在线状态的实时检测功能,通过以下方式判断设备状态:
- 心跳检测:基于设备的心跳包判断在线状态
- 缓存查询从Redis缓存中获取最新的设备状态
- 最近活动时间:根据设备最近的消息活动时间判断状态
#### 设备状态信息
状态查询返回的设备状态信息包含:
- 设备ID唯一标识设备
- 设备编码:设备的业务编码
- 设备状态:设备的当前状态(激活、在线、离线)
- 状态变更时间:状态最后一次变更的时间
```mermaid
stateDiagram-v2
[*] --> INACTIVE
INACTIVE --> ONLINE : 设备上线
INACTIVE --> OFFLINE : 设备离线
ONLINE --> OFFLINE : 设备下线
OFFLINE --> ONLINE : 设备重新上线
ONLINE --> INACTIVE : 设备注销
OFFLINE --> INACTIVE : 设备注销
```
**图表来源**
- [DeviceStatusRespDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/status/DeviceStatusRespDTO.java#L29-L30)
**章节来源**
- [IotDeviceStatusQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceStatusQueryApi.java#L13-L36)
- [DeviceStatusRespDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/status/DeviceStatusRespDTO.java#L11-L35)
### 设备消息类型定义
#### 消息类型枚举
IoT设备支持多种消息类型每种类型对应不同的业务场景
| 消息类型 | 描述 | 用途 |
|---------|------|------|
| STATE | 设备状态 | 设备运行状态的上报和查询 |
| PROPERTY | 设备属性 | 设备属性值的上报和查询 |
| EVENT | 设备事件 | 设备事件的上报和订阅 |
| SERVICE | 设备服务 | 设备服务的调用和执行 |
| CONFIG | 设备配置 | 设备配置的远程下发 |
| OTA | 设备OTA | 设备固件的远程升级 |
| REGISTER | 设备注册 | 设备的身份注册和认证 |
| TOPOLOGY | 设备拓扑 | 设备间的拓扑关系管理 |
**章节来源**
- [IotDeviceMessageTypeEnum.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/enums/device/IotDeviceMessageTypeEnum.java#L9-L38)
## 依赖关系分析
### 组件依赖图
IoT设备管理模块的组件间依赖关系如下
```mermaid
graph TB
subgraph "API层"
CONTROL_API[IotDeviceControlApi]
PROPERTY_API[IotDevicePropertyQueryApi]
STATUS_API[IotDeviceStatusQueryApi]
end
subgraph "DTO层"
SERVICE_REQ[IotDeviceServiceInvokeReqDTO]
RESET_REQ[ResetTrafficCounterReqDTO]
BATCH_REQ[DevicePropertyBatchQueryReqDTO]
HISTORY_REQ[DevicePropertyHistoryQueryReqDTO]
PROPERTY_RESP[DevicePropertyRespDTO]
HISTORY_RESP[DevicePropertyHistoryRespDTO]
STATUS_RESP[DeviceStatusRespDTO]
end
subgraph "枚举层"
API_CONST[ApiConstants]
MSG_TYPE[IotDeviceMessageTypeEnum]
end
CONTROL_API --> SERVICE_REQ
CONTROL_API --> RESET_REQ
PROPERTY_API --> BATCH_REQ
PROPERTY_API --> HISTORY_REQ
PROPERTY_API --> PROPERTY_RESP
PROPERTY_API --> HISTORY_RESP
STATUS_API --> STATUS_RESP
CONTROL_API --> API_CONST
PROPERTY_API --> API_CONST
STATUS_API --> API_CONST
CONTROL_API --> MSG_TYPE
PROPERTY_API --> MSG_TYPE
STATUS_API --> MSG_TYPE
```
**图表来源**
- [IotDeviceControlApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceControlApi.java#L3-L16)
- [IotDevicePropertyQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDevicePropertyQueryApi.java#L3-L18)
- [IotDeviceStatusQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDeviceStatusQueryApi.java#L3-L11)
### 服务间通信流程
设备控制、属性查询、状态查询三类API通过统一的RPC前缀进行通信
```mermaid
sequenceDiagram
participant Client as 客户端
participant ControlAPI as 设备控制API
participant PropertyAPI as 属性查询API
participant StatusAPI as 状态查询API
participant Server as IoT服务器
Client->>ControlAPI : 设备控制请求
ControlAPI->>Server : RPC调用
Server-->>ControlAPI : 控制结果
Client->>PropertyAPI : 属性查询请求
PropertyAPI->>Server : RPC调用
Server-->>PropertyAPI : 查询结果
Client->>StatusAPI : 状态查询请求
StatusAPI->>Server : RPC调用
Server-->>StatusAPI : 状态信息
```
**图表来源**
- [ApiConstants.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/enums/ApiConstants.java#L19-L21)
**章节来源**
- [ApiConstants.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/enums/ApiConstants.java#L10-L23)
## 性能考虑
IoT设备管理模块在设计时充分考虑了性能优化
### 缓存策略
- 实时属性查询优先从Redis缓存获取减少数据库访问压力
- 设备状态信息使用缓存机制,提高查询响应速度
- 历史数据查询支持分页和时间范围限制,避免大数据量查询
### 批量操作优化
- 批量属性查询支持多设备、多属性的并行处理
- 批量服务调用减少网络往返次数
- 批量重置客流计数器支持事务性操作
### 连接池管理
- 使用连接池管理数据库连接,提高连接复用率
- 消息队列采用异步处理机制,提升系统吞吐量
- 缓存操作使用连接池,减少连接建立开销
## 故障排除指南
### 常见问题及解决方案
#### 设备不在线
**问题现象**:调用设备服务时返回失败
**可能原因**
- 设备未正确注册到平台
- 设备网络连接异常
- 设备心跳包丢失
**解决步骤**
1. 检查设备状态查询接口返回的状态
2. 验证设备的网络连接情况
3. 确认设备是否正常发送心跳包
#### 属性查询超时
**问题现象**:属性查询请求超时
**可能原因**
- 设备离线或无响应
- 数据库查询性能问题
- 缓存未命中导致的延迟
**解决步骤**
1. 检查设备在线状态
2. 优化数据库查询索引
3. 调整缓存策略和超时时间
#### 批量操作失败
**问题现象**:批量操作中部分设备执行失败
**可能原因**
- 某些设备网络异常
- 设备服务调用超时
- 数据格式不匹配
**解决步骤**
1. 分析批量操作的错误日志
2. 对失败的设备单独重试
3. 验证设备服务的可用性
**章节来源**
- [DeviceStatusRespDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/status/DeviceStatusRespDTO.java#L29-L30)
- [IotDevicePropertyQueryApi.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/IotDevicePropertyQueryApi.java#L58-L61)
## 结论
IoT设备管理模块提供了完整的设备生命周期管理能力包括设备控制、属性查询、状态监控等功能。通过标准化的API接口和数据传输对象实现了设备与系统的解耦提高了系统的可扩展性和可维护性。模块采用微服务架构设计支持高并发场景下的稳定运行为IoT应用场景提供了可靠的技术支撑。
## 附录
### API接口规范汇总
#### 设备控制接口
- **服务调用**POST `/rpc/iot/device/control/invoke-service`
- **批量服务调用**POST `/rpc/iot/device/control/invoke-service-batch`
- **重置客流计数器**POST `/rpc/iot/device/control/reset-traffic-counter`
#### 设备属性查询接口
- **单个属性查询**GET `/rpc/iot/device/property/get`
- **最新属性查询**GET `/rpc/iot/device/property/get-latest`
- **批量属性查询**POST `/rpc/iot/device/property/batch-get`
- **属性历史查询**POST `/rpc/iot/device/property/history`
#### 设备状态查询接口
- **在线状态检测**GET `/rpc/iot/device/status/is-online`
- **设备状态查询**GET `/rpc/iot/device/status/get-status`
### 数据模型定义
#### 设备状态枚举
- INACTIVE设备未激活
- ONLINE设备在线
- OFFLINE设备离线
#### 设备消息类型
- STATE设备状态消息
- PROPERTY设备属性消息
- EVENT设备事件消息
- SERVICE设备服务消息
- CONFIG设备配置消息
- OTA设备OTA消息
- REGISTER设备注册消息
- TOPOLOGY设备拓扑消息
**章节来源**
- [IotDeviceMessageTypeEnum.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/enums/device/IotDeviceMessageTypeEnum.java#L15-L24)
- [DeviceStatusRespDTO.java](file://viewsh-module-iot/viewsh-module-iot-api/src/main/java/com/viewsh/module/iot/api/device/dto/status/DeviceStatusRespDTO.java#L29-L30)