2.9 KiB
2.9 KiB
数据同步问题诊断和解决方案
问题分析
根据用户提供的图片,我们发现了以下问题:
1. iot_device_data表中有数据
- 设备ID: 24075000139
- 电压: 3.300
- 温度: 25.80
- 设备类型: 4 (项圈)
- 运送订单ID: 86
2. xq_client_log表中数据为空
- device_voltage字段: (Null)
- device_temp字段: (Null)
- server_device_id字段: (Null)
问题原因
- 字段映射不匹配: xq_client_log表的实际字段结构与我们的实体类不匹配
- 数据同步未执行: 60分钟定时任务可能还没有执行,或者手动同步失败
- 字段长度限制: latitude字段长度不够,导致数据截断错误
解决方案
1. 修复字段映射问题
我们已经修改了 XqClientLogMapper.xml,建立了正确的字段映射:
| 实际表字段 | 实体类属性 | 说明 |
|---|---|---|
battery |
deviceVoltage |
电池电量→设备电压 |
temperature |
deviceTemp |
温度 |
deviceld |
serverDeviceId |
设备长ID→主机设备ID |
steps |
walkSteps |
步数 |
time |
createTime/updateTime |
时间字段 |
2. 修复字段长度问题
创建了SQL脚本 fix_xq_client_log_field_length.sql 来扩展字段长度:
- latitude: VARCHAR(50)
- longitude: VARCHAR(50)
- device_voltage: VARCHAR(50)
- device_temp: VARCHAR(50)
3. 手动触发数据同步
使用API接口手动触发同步:
POST http://localhost:8080/api/deliveryDevice/manualSyncDeviceLogs
测试步骤
1. 执行数据库修复脚本
-- 执行 fix_xq_client_log_field_length.sql
-- 扩展字段长度,避免数据截断
2. 手动触发数据同步
# 等待应用完全启动后
Invoke-WebRequest -Uri "http://localhost:8080/api/deliveryDevice/manualSyncDeviceLogs" -Method POST
3. 验证同步结果
-- 检查xq_client_log表中是否有新数据
SELECT * FROM xq_client_log WHERE device_id = '24075000139' ORDER BY time DESC LIMIT 10;
4. 检查同步统计
# 获取同步统计信息
Invoke-WebRequest -Uri "http://localhost:8080/api/deliveryDevice/getLogSyncStatistics" -Method GET
预期结果
同步成功后,xq_client_log表应该包含:
- device_id: 24075000139
- battery: 3.300 (来自iot_device_data.voltage)
- temperature: 25.80 (来自iot_device_data.temperature)
- steps: 21 (来自iot_device_data.steps)
- latitude: 30.4812778
- longitude: 114.401791
- time: 当前时间
故障排除
如果同步仍然失败,请检查:
- 应用日志: 查看控制台输出,确认同步过程中的错误信息
- 数据库连接: 确认应用能够正常连接数据库
- 字段权限: 确认数据库用户有INSERT权限
- 数据格式: 确认数据类型转换正确
下一步
- 等待应用完全启动
- 执行数据库修复脚本
- 手动触发数据同步
- 验证同步结果
- 测试日志查询和轨迹功能