# 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. 设置日志表数据清理策略
