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

4.6 KiB
Raw Blame History

日志同步问题修复总结

🎯 问题根源已找到!

发现的关键问题

XqClientLogMapper.xml 文件中发现了字段映射不一致的严重问题:

问题描述

  1. resultMap字段映射错误使用了旧的字段名battery, temperature, deviceld, steps, time
  2. 批量插入SQL正确使用了正确的字段名device_voltage, device_temp, server_device_id, walk_steps, create_time
  3. 字段不一致导致:查询失败、数据截断错误

已完成的修复

1. 修复resultMap字段映射

<!-- 修复前 -->
<result column="battery" property="deviceVoltage" />
<result column="temperature" property="deviceTemp" />
<result column="deviceld" property="serverDeviceId" />
<result column="steps" property="walkSteps" />
<result column="time" property="createTime" />

<!-- 修复后 -->
<result column="device_voltage" property="deviceVoltage" />
<result column="device_temp" property="deviceTemp" />
<result column="server_device_id" property="serverDeviceId" />
<result column="walk_steps" property="walkSteps" />
<result column="y_walk_steps" property="yWalkSteps" />
<result column="create_time" property="createTime" />
<result column="create_by" property="createBy" />
<result column="update_time" property="updateTime" />
<result column="update_by" property="updateBy" />

2. 修复Base_Column_List

<!-- 修复前 -->
<sql id="Base_Column_List">
    id, device_id, battery, temperature, deviceld, latitude, longitude, steps, time
</sql>

<!-- 修复后 -->
<sql id="Base_Column_List">
    id, device_id, device_voltage, device_temp, server_device_id, 
    latitude, longitude, walk_steps, y_walk_steps, 
    create_time, create_by, update_time, update_by
</sql>

3. 修复查询SQL

<!-- 修复前 -->
<select id="xqLogList" resultType="com.aiotagro.cattletrade.business.entity.XqClientLog">
    SELECT log.* FROM xq_client_log log
    WHERE ... AND log.time BETWEEN #{createTime} AND #{checkTime}
    ORDER BY log.time DESC
</select>

<!-- 修复后 -->
<select id="xqLogList" resultMap="BaseResultMap">
    SELECT <include refid="Base_Column_List"/> FROM xq_client_log log
    WHERE ... AND log.create_time BETWEEN #{createTime} AND #{checkTime}
    ORDER BY log.create_time DESC
</select>

📋 下一步操作

需要您执行的操作:

1. 重新启动Java后端应用

# 进入应用目录
cd C:\cattleTransport\tradeCattle\aiotagro-cattle-trade

# 启动应用(后台运行)
java -jar target/aiotagro-cattle-trade-1.0.1.jar &

2. 等待应用完全启动

等待约2分钟直到能够在16200端口访问应用。

3. 清空xq_client_log表可选

TRUNCATE TABLE xq_client_log;

4. 手动触发数据同步测试

Invoke-WebRequest -Uri "http://localhost:16200/api/deliveryDevice/manualSyncDeviceLogs" -Method POST -ContentType "application/json"

5. 检查同步统计

Invoke-WebRequest -Uri "http://localhost:16200/api/deliveryDevice/getLogSyncStatistics" -Method GET

🎯 预期结果

修复后应该能够:

  • 成功批量插入项圈日志数据collarLogCount > 0
  • 正确查询项圈日志数据
  • 主机日志、耳标日志、项圈日志都能正常同步
  • 60分钟自动同步功能正常工作

📊 修复前后对比

设备类型 修复前状态 修复后预期
耳标 3872条 正常增长
主机 934条 正常增长
项圈 1条 正常增长

🔧 技术细节

修复的文件

  • tradeCattle/aiotagro-cattle-trade/src/main/resources/mapper/XqClientLogMapper.xml

修复的内容

  1. resultMap字段映射13处字段映射修复
  2. Base_Column_List SQL片段完整字段列表
  3. xqLogList查询SQL使用正确的字段和resultMap

关键改进

  • 所有字段名与实际数据库表结构一致
  • 使用resultMap替代resultType以确保正确的字段映射
  • 添加了缺失的字段create_by, update_by, y_walk_steps

📝 备注

  1. 字段映射一致性确保entity、mapper.xml、数据库表三者字段名一致
  2. 使用resultMap对于复杂查询使用resultMap而不是resultType
  3. 完整字段列表Base_Column_List应包含所有需要的字段
  4. 时间字段统一使用create_time而不是time作为时间字段

下一步验证

  1. 重启应用后,手动触发同步
  2. 检查统计信息,确认项圈日志数量增长
  3. 验证60分钟自动同步功能
  4. 检查日志查询功能是否正常