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

4.5 KiB
Raw Blame History

xq_client_log表字段映射修复报告

问题描述

用户反馈:xq_client_log 表中的设备电压、温度、步数没有正确同步映射。从数据库截图可以看到:

  • device_voltage: (Null)
  • device_temp: (Null)
  • walk_steps: (Null)
  • y_walk_steps: (Null)

问题根本原因

字段映射不匹配我们的批量插入SQL中使用的字段名与实际表结构不匹配。

修复前的SQL映射

<insert id="batchInsert" parameterType="java.util.List">
    INSERT INTO xq_client_log (
        device_id, battery, temperature, deviceld,
        latitude, longitude, steps, time
    ) VALUES
    <foreach collection="list" item="item" separator=",">
        (
            #{item.deviceId}, #{item.deviceVoltage}, #{item.deviceTemp}, #{item.serverDeviceId},
            #{item.latitude}, #{item.longitude}, #{item.walkSteps}, #{item.createTime}
        )
    </foreach>
</insert>

问题

  • SQL字段battery, temperature, steps, time
  • 实际表字段:device_voltage, device_temp, walk_steps, create_time

修复后的SQL映射

<insert id="batchInsert" parameterType="java.util.List">
    INSERT INTO xq_client_log (
        device_id, device_voltage, device_temp, server_device_id,
        latitude, longitude, walk_steps, y_walk_steps,
        create_time, create_by, update_time, update_by
    ) VALUES
    <foreach collection="list" item="item" separator=",">
        (
            #{item.deviceId}, #{item.deviceVoltage}, #{item.deviceTemp}, #{item.serverDeviceId},
            #{item.latitude}, #{item.longitude}, #{item.walkSteps}, #{item.yWalkSteps},
            #{item.createTime}, #{item.createBy}, #{item.updateTime}, #{item.updateBy}
        )
    </foreach>
</insert>

修复内容

已修复

  1. 字段名映射

    • batterydevice_voltage
    • temperaturedevice_temp
    • stepswalk_steps
    • timecreate_time
  2. 完整字段映射

    • 添加了 y_walk_steps 字段
    • 添加了 create_by, update_by 字段
    • 添加了 update_time 字段
  3. 数据转换逻辑

    • IotDeviceLogSyncService.convertToCollarLog() 方法正确设置字段值
    • 字符串长度限制逻辑正常工作

数据映射关系

iot_device_data字段 XqClientLog属性 xq_client_log表字段 说明
voltage deviceVoltage device_voltage 设备电压
temperature deviceTemp device_temp 设备温度
steps walkSteps walk_steps 总步数
same_day_steps yWalkSteps y_walk_steps 昨日步数
latitude latitude latitude 纬度
longitude longitude longitude 经度

测试步骤

1. 清空现有数据

-- 执行 clear_and_resync_xq_client_log.sql
TRUNCATE TABLE xq_client_log;

2. 重新触发数据同步

# 等待应用完全启动后
Invoke-WebRequest -Uri "http://localhost:8080/api/deliveryDevice/manualSyncDeviceLogs" -Method POST

3. 验证同步结果

-- 检查同步后的数据
SELECT 
    device_id,
    device_voltage,
    device_temp,
    walk_steps,
    y_walk_steps,
    latitude,
    longitude,
    create_time
FROM xq_client_log 
WHERE device_id = '24075000139' 
ORDER BY create_time DESC 
LIMIT 5;

预期结果

修复后,xq_client_log 表应该包含正确的数据:

  • device_voltage: "3.300" (来自iot_device_data.voltage)
  • device_temp: "25.80" (来自iot_device_data.temperature)
  • walk_steps: 21 (来自iot_device_data.steps)
  • y_walk_steps: 0 (来自iot_device_data.same_day_steps)
  • latitude: "30.481277875444164"
  • longitude: "114.40076076679632"

技术要点

  1. 字段映射一致性确保SQL中的字段名与数据库表结构完全一致
  2. 数据类型转换正确处理BigDecimal到String的转换
  3. 批量插入优化使用MyBatis的foreach进行高效的批量插入
  4. 错误处理:添加详细的日志记录便于问题诊断

当前状态

  • 字段映射已修复
  • 代码已重新编译和打包
  • 应用正在重新启动
  • 🔄 等待手动触发数据同步测试

下一步

  1. 执行清空表的SQL脚本
  2. 📋 等待应用完全启动
  3. 📋 手动触发数据同步
  4. 📋 验证字段映射是否正确
  5. 📋 确认数据同步功能正常工作

结论

字段映射问题已修复! 现在 xq_client_log 表应该能正确接收设备电压、温度、步数等数据,不再显示 (Null) 值。