完善小细节

This commit is contained in:
xuqiuyun
2025-10-24 17:32:42 +08:00
parent ecccd025d1
commit a40ce28318
73 changed files with 7238 additions and 114 deletions

View File

@@ -0,0 +1,156 @@
# 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. 设置日志表数据清理策略