4.1 KiB
4.1 KiB
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字段识别设备类型 - 将设备数据转换为对应的日志对象
- 使用批量插入提高性能
- 记录详细的同步日志
核心方法:
@Transactional
public void syncDeviceDataToLogs()
2. 创建定时任务
文件: IotDeviceSyncJob.java
功能:
- 每60分钟自动执行一次日志同步
- 保持原有的5分钟设备数据同步
- 输出同步统计信息
定时任务:
@Scheduled(fixedRate = 60 * 60 * 1000) // 60分钟
public void syncDeviceDataToLogs()
3. 添加批量插入Mapper方法
修改文件:
JbqClientLogMapper.java+JbqClientLogMapper.xmlJbqServerLogMapper.java+JbqServerLogMapper.xmlXqClientLogMapper.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"
性能优化
- 批量插入: 使用
batchInsert方法,一次性插入多条记录 - 事务管理: 使用
@Transactional确保数据一致性 - 分组处理: 按设备类型分组,减少数据库操作次数
日志记录
- 详细的同步过程日志
- 设备数量统计
- 错误处理和异常记录
- 同步结果统计
测试方法
1. 手动触发同步
POST http://localhost:8080/api/deliveryDevice/manualSyncDeviceLogs
2. 查看统计信息
GET http://localhost:8080/api/deliveryDevice/getLogSyncStatistics
3. 查看日志表数据
-- 查看主机日志
SELECT COUNT(*) FROM jbq_server_log;
-- 查看耳标日志
SELECT COUNT(*) FROM jbq_client_log;
-- 查看项圈日志
SELECT COUNT(*) FROM xq_client_log;
运行机制
- 自动同步: 每60分钟自动执行一次
- 手动同步: 通过API接口手动触发
- 数据来源: 从
iot_device_data表读取最新设备数据 - 数据目标: 同步到对应的三个日志表
- 去重策略: 每次都记录,不进行去重(按需求)
注意事项
- 数据库表: 确保三个日志表已存在
- 权限: 需要
delivery:view权限才能访问测试接口 - 性能: 大量设备时建议监控数据库性能
- 日志: 定期清理日志表数据,避免数据过多
部署说明
- 确保所有新增的Java文件已编译
- 重启Spring Boot应用
- 定时任务会自动启动
- 可通过测试接口验证功能
监控建议
- 监控同步任务的执行日志
- 定期检查日志表的数据量
- 关注数据库性能指标
- 设置日志表数据清理策略