Files
cattleTransportation/tradeCattle/IOT_DEVICE_LOG_SYNC_IMPLEMENTATION_REPORT.md
2025-10-24 17:32:42 +08:00

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.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. 手动触发同步

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;

运行机制

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