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