157 lines
4.1 KiB
Markdown
157 lines
4.1 KiB
Markdown
|
|
# IoT设备日志同步功能实现报告
|
||
|
|
|
||
|
|
## 功能概述
|
||
|
|
|
||
|
|
实现了每60分钟从 `iot_device_data` 表同步设备数据到三个日志表的功能:
|
||
|
|
|
||
|
|
- **jbq_server_log**:智能主机日志表 (device_type=1)
|
||
|
|
- **jbq_client_log**:智能耳标日志表 (device_type=2)
|
||
|
|
- **xq_client_log**:智能项圈日志表 (device_type=4)
|
||
|
|
|
||
|
|
## 实现内容
|
||
|
|
|
||
|
|
### 1. 创建设备日志同步服务
|
||
|
|
|
||
|
|
**文件**: `IotDeviceLogSyncService.java`
|
||
|
|
|
||
|
|
**功能**:
|
||
|
|
- 查询 `iot_device_data` 表中所有设备数据
|
||
|
|
- 根据 `device_type` 字段识别设备类型
|
||
|
|
- 将设备数据转换为对应的日志对象
|
||
|
|
- 使用批量插入提高性能
|
||
|
|
- 记录详细的同步日志
|
||
|
|
|
||
|
|
**核心方法**:
|
||
|
|
```java
|
||
|
|
@Transactional
|
||
|
|
public void syncDeviceDataToLogs()
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. 创建定时任务
|
||
|
|
|
||
|
|
**文件**: `IotDeviceSyncJob.java`
|
||
|
|
|
||
|
|
**功能**:
|
||
|
|
- 每60分钟自动执行一次日志同步
|
||
|
|
- 保持原有的5分钟设备数据同步
|
||
|
|
- 输出同步统计信息
|
||
|
|
|
||
|
|
**定时任务**:
|
||
|
|
```java
|
||
|
|
@Scheduled(fixedRate = 60 * 60 * 1000) // 60分钟
|
||
|
|
public void syncDeviceDataToLogs()
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. 添加批量插入Mapper方法
|
||
|
|
|
||
|
|
**修改文件**:
|
||
|
|
- `JbqClientLogMapper.java` + `JbqClientLogMapper.xml`
|
||
|
|
- `JbqServerLogMapper.java` + `JbqServerLogMapper.xml`
|
||
|
|
- `XqClientLogMapper.java` + `XqClientLogMapper.xml`
|
||
|
|
|
||
|
|
**功能**:
|
||
|
|
- 为每个日志表添加 `batchInsert` 方法
|
||
|
|
- 支持批量插入多条日志记录
|
||
|
|
- 提高数据插入性能
|
||
|
|
|
||
|
|
### 4. 添加测试和调试接口
|
||
|
|
|
||
|
|
**文件**: `DeliveryDeviceController.java`
|
||
|
|
|
||
|
|
**新增接口**:
|
||
|
|
- `POST /deliveryDevice/manualSyncDeviceLogs` - 手动触发日志同步
|
||
|
|
- `GET /deliveryDevice/getLogSyncStatistics` - 获取日志统计信息
|
||
|
|
|
||
|
|
## 数据字段映射
|
||
|
|
|
||
|
|
### iot_device_data → 日志表字段映射
|
||
|
|
|
||
|
|
| iot_device_data字段 | 日志表字段 | 说明 |
|
||
|
|
|-------------------|----------|------|
|
||
|
|
| device_id | device_id | 设备ID |
|
||
|
|
| voltage | device_voltage | 设备电压 |
|
||
|
|
| temperature | device_temp | 设备温度 |
|
||
|
|
| steps | walk_steps | 总步数 |
|
||
|
|
| same_day_steps | y_walk_steps | 当日步数 |
|
||
|
|
| latitude | latitude | 纬度 |
|
||
|
|
| longitude | longitude | 经度 |
|
||
|
|
| update_time | create_time/update_time | 同步时间 |
|
||
|
|
|
||
|
|
## 设备类型识别
|
||
|
|
|
||
|
|
- **device_type = 1** → 同步到 `jbq_server_log` (智能主机)
|
||
|
|
- **device_type = 2** → 同步到 `jbq_client_log` (智能耳标)
|
||
|
|
- **device_type = 4** → 同步到 `xq_client_log` (智能项圈)
|
||
|
|
|
||
|
|
## 时间字段处理
|
||
|
|
|
||
|
|
- **create_time**: 设置为当前同步时间
|
||
|
|
- **update_time**: 设置为当前同步时间
|
||
|
|
- **create_by/update_by**: 设置为 "SYSTEM"
|
||
|
|
|
||
|
|
## 性能优化
|
||
|
|
|
||
|
|
1. **批量插入**: 使用 `batchInsert` 方法,一次性插入多条记录
|
||
|
|
2. **事务管理**: 使用 `@Transactional` 确保数据一致性
|
||
|
|
3. **分组处理**: 按设备类型分组,减少数据库操作次数
|
||
|
|
|
||
|
|
## 日志记录
|
||
|
|
|
||
|
|
- 详细的同步过程日志
|
||
|
|
- 设备数量统计
|
||
|
|
- 错误处理和异常记录
|
||
|
|
- 同步结果统计
|
||
|
|
|
||
|
|
## 测试方法
|
||
|
|
|
||
|
|
### 1. 手动触发同步
|
||
|
|
```bash
|
||
|
|
POST http://localhost:8080/api/deliveryDevice/manualSyncDeviceLogs
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. 查看统计信息
|
||
|
|
```bash
|
||
|
|
GET http://localhost:8080/api/deliveryDevice/getLogSyncStatistics
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. 查看日志表数据
|
||
|
|
```sql
|
||
|
|
-- 查看主机日志
|
||
|
|
SELECT COUNT(*) FROM jbq_server_log;
|
||
|
|
|
||
|
|
-- 查看耳标日志
|
||
|
|
SELECT COUNT(*) FROM jbq_client_log;
|
||
|
|
|
||
|
|
-- 查看项圈日志
|
||
|
|
SELECT COUNT(*) FROM xq_client_log;
|
||
|
|
```
|
||
|
|
|
||
|
|
## 运行机制
|
||
|
|
|
||
|
|
1. **自动同步**: 每60分钟自动执行一次
|
||
|
|
2. **手动同步**: 通过API接口手动触发
|
||
|
|
3. **数据来源**: 从 `iot_device_data` 表读取最新设备数据
|
||
|
|
4. **数据目标**: 同步到对应的三个日志表
|
||
|
|
5. **去重策略**: 每次都记录,不进行去重(按需求)
|
||
|
|
|
||
|
|
## 注意事项
|
||
|
|
|
||
|
|
1. **数据库表**: 确保三个日志表已存在
|
||
|
|
2. **权限**: 需要 `delivery:view` 权限才能访问测试接口
|
||
|
|
3. **性能**: 大量设备时建议监控数据库性能
|
||
|
|
4. **日志**: 定期清理日志表数据,避免数据过多
|
||
|
|
|
||
|
|
## 部署说明
|
||
|
|
|
||
|
|
1. 确保所有新增的Java文件已编译
|
||
|
|
2. 重启Spring Boot应用
|
||
|
|
3. 定时任务会自动启动
|
||
|
|
4. 可通过测试接口验证功能
|
||
|
|
|
||
|
|
## 监控建议
|
||
|
|
|
||
|
|
1. 监控同步任务的执行日志
|
||
|
|
2. 定期检查日志表的数据量
|
||
|
|
3. 关注数据库性能指标
|
||
|
|
4. 设置日志表数据清理策略
|