# xq_client_log表device_id字段缺失问题解决方案 ## 问题描述 在测试智能项圈日志和轨迹功能时,遇到了以下错误: ``` SQLSyntaxErrorException: Unknown column 'device_id' in 'field list' ``` ## 问题原因 `xq_client_log` 表存在,但缺少 `device_id` 字段,导致MyBatis查询失败。 ## 解决方案 ### 1. 执行SQL脚本添加字段 **文件**: `tradeCattle/add_device_id_to_xq_client_log.sql` **执行步骤**: 1. 连接到MySQL数据库 2. 执行以下SQL脚本: ```sql -- 为xq_client_log表添加device_id字段 SET @sql = (SELECT IF( (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'xq_client_log' AND COLUMN_NAME = 'device_id') > 0, 'SELECT "device_id字段已存在" as message', 'ALTER TABLE xq_client_log ADD COLUMN device_id varchar(50) NOT NULL COMMENT "项圈编号" AFTER id' )); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 为device_id字段添加索引 SET @sql2 = (SELECT IF( (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'xq_client_log' AND INDEX_NAME = 'idx_device_id') > 0, 'SELECT "device_id索引已存在" as message', 'ALTER TABLE xq_client_log ADD INDEX idx_device_id (device_id)' )); PREPARE stmt2 FROM @sql2; EXECUTE stmt2; DEALLOCATE PREPARE stmt2; -- 显示表结构确认 DESCRIBE xq_client_log; ``` ### 2. 验证字段添加 执行SQL后,应该看到 `xq_client_log` 表包含以下字段: - `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` ### 3. 重启应用 1. 停止当前运行的Spring Boot应用 2. 重新启动应用: ```bash cd C:\cattleTransport\tradeCattle\aiotagro-cattle-trade mvn spring-boot:run ``` ### 4. 测试功能 #### 4.1 测试智能项圈日志查询 ```bash curl -X POST http://localhost:8080/api/deliveryDevice/getCollarLogs \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "deviceId": "24075000139", "deliveryId": 86 }' ``` #### 4.2 测试智能项圈轨迹查询 ```bash curl -X POST http://localhost:8080/api/deliveryDevice/getCollarTrajectory \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "deviceId": "24075000139", "deliveryId": 86 }' ``` #### 4.3 测试设备日志同步 ```bash curl -X POST http://localhost:8080/api/deliveryDevice/manualSyncDeviceLogs \ -H "Authorization: Bearer YOUR_TOKEN" ``` ## 预期结果 1. **SQL执行成功**: 字段和索引添加成功 2. **应用启动正常**: 无SQL语法错误 3. **API调用成功**: 返回正确的日志和轨迹数据 4. **日志同步正常**: 项圈设备数据能正确同步到 `xq_client_log` 表 ## 注意事项 1. **数据备份**: 执行ALTER TABLE前建议备份 `xq_client_log` 表 2. **权限检查**: 确保数据库用户有ALTER TABLE权限 3. **字段约束**: `device_id` 字段设置为NOT NULL,如果表中已有数据,可能需要先更新现有记录 4. **索引性能**: 添加索引后查询性能会提升 ## 后续步骤 字段添加成功后,可以: 1. 测试完整的日志和轨迹功能 2. 验证60分钟数据同步功能 3. 在前端页面测试日志和轨迹显示