145 lines
4.6 KiB
Markdown
145 lines
4.6 KiB
Markdown
# 日志同步问题修复总结
|
||
|
||
## 🎯 问题根源已找到!
|
||
|
||
### 发现的关键问题
|
||
|
||
在 `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字段映射
|
||
```xml
|
||
<!-- 修复前 -->
|
||
<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
|
||
```xml
|
||
<!-- 修复前 -->
|
||
<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
|
||
```xml
|
||
<!-- 修复前 -->
|
||
<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后端应用
|
||
```bash
|
||
# 进入应用目录
|
||
cd C:\cattleTransport\tradeCattle\aiotagro-cattle-trade
|
||
|
||
# 启动应用(后台运行)
|
||
java -jar target/aiotagro-cattle-trade-1.0.1.jar &
|
||
```
|
||
|
||
#### 2. 等待应用完全启动
|
||
等待约2分钟,直到能够在16200端口访问应用。
|
||
|
||
#### 3. 清空xq_client_log表(可选)
|
||
```sql
|
||
TRUNCATE TABLE xq_client_log;
|
||
```
|
||
|
||
#### 4. 手动触发数据同步测试
|
||
```bash
|
||
Invoke-WebRequest -Uri "http://localhost:16200/api/deliveryDevice/manualSyncDeviceLogs" -Method POST -ContentType "application/json"
|
||
```
|
||
|
||
#### 5. 检查同步统计
|
||
```bash
|
||
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. 检查日志查询功能是否正常
|
||
|