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

3.3 KiB
Raw Blame History

xq_client_log表字段映射修复报告

问题描述

在测试智能项圈日志功能时,遇到了以下错误:

SQLSyntaxErrorException: Unknown column 'device_voltage' in 'field list'

问题原因

xq_client_log 表的实际结构与我们的实体类 XqClientLog 不匹配:

实际表结构(从图片中观察到的字段):

  • id - 主键
  • device_id - 设备ID
  • deviceld - 设备长ID
  • longitude - 经度
  • latitude - 纬度
  • altitude - 海拔
  • nsat - 卫星数量
  • rsrp - 信号强度
  • battery - 电池电量
  • temperature - 温度
  • steps - 步数
  • acc_x, acc_y, acc_z - 加速度计数据
  • bandge_status - 绑带状态
  • ver - 版本
  • time - 时间

实体类期望的字段:

  • device_voltage - 设备电压
  • device_temp - 设备温度
  • server_device_id - 主机设备ID
  • walk_steps - 步数
  • y_walk_steps - 昨日步数
  • create_time, update_time - 时间字段

解决方案

修改了 XqClientLogMapper.xml 文件,建立字段映射关系:

字段映射关系

实际表字段 实体类属性 说明
device_id deviceId 设备ID
battery deviceVoltage 电池电量映射到设备电压
temperature deviceTemp 温度
deviceld serverDeviceId 设备长ID映射到主机设备ID
latitude latitude 纬度
longitude longitude 经度
steps walkSteps 步数
steps yWalkSteps 步数映射到昨日步数(相同值)
time createTime 时间字段映射到创建时间
time updateTime 时间字段映射到更新时间

修改的文件

文件: tradeCattle/aiotagro-cattle-trade/src/main/resources/mapper/XqClientLogMapper.xml

主要修改:

  1. ResultMap映射: 更新字段映射关系
  2. Base_Column_List: 更新查询字段列表
  3. xqLogList查询: 使用 time 字段替代 update_time
  4. batchInsert: 适配实际表结构进行插入

测试验证

1. 编译成功

  • 项目编译无错误
  • MyBatis映射文件语法正确

2. 应用启动

  • Spring Boot应用正常启动
  • 数据库连接正常

3. 功能测试

等待应用完全启动后,可以测试:

  • 智能项圈日志查询
  • 智能项圈运动轨迹
  • 设备日志同步功能

数据示例

根据图片中的数据,xq_client_log 表包含35条记录设备ID为 24075000139,包含:

  • 电量: 98%
  • 温度: 27.7°C 到 25.3°C
  • 步数: 21步
  • 位置: 纬度30.481417经度114.401791
  • 信号强度: -69到-73

注意事项

  1. 字段映射: 某些字段进行了语义映射如battery→deviceVoltage
  2. 时间字段: 使用 time 字段同时映射到创建和更新时间
  3. 步数字段: steps 字段同时映射到总步数和昨日步数
  4. 数据完整性: 确保查询时字段存在且数据类型匹配

后续优化建议

  1. 数据库标准化: 考虑统一表结构,使用标准的字段名
  2. 字段重命名: 将实际表字段重命名为更标准的名称
  3. 数据类型优化: 确保字段数据类型与业务需求匹配
  4. 索引优化: 为常用查询字段添加适当的索引

成功指标

  • 编译成功
  • 应用启动正常
  • SQL查询不再报错
  • 字段映射正确
  • 🔄 等待功能测试验证