Files
ruoyi-java/doc/如何查看同步进度和操作日志.md
2025-11-07 01:23:40 +08:00

325 lines
7.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 如何查看同步进度和操作日志
## 您的三个问题解答
### 1⃣ startRow被更新了吗
**答:是的,每次同步都会更新!**
更新逻辑在代码中:
```java
// 更新 Redis 中的进度
redisCache.setCacheObject(redisKey, currentMaxRow, 30, TimeUnit.DAYS);
```
**但是**:前端配置页面**不会自动刷新**
您需要:
1. **关闭配置对话框**
2. **重新打开配置**
3. 就能看到最新的进度了
---
### 2⃣ 更新状态是真实的吗?
**答:是真实的!**
数据存储位置:
- **Redis Key**: `tendoc:progress:fileId:sheetId`
- **过期时间**: 30天
- **存储内容**: 当前处理到的最大行号
您可以通过以下方式验证:
```bash
# 在Redis中查看
redis-cli
> get "tendoc:progress:DTUFydU9FTkRLbEN6:BB08J2"
```
---
### 3⃣ 同步日志在哪里查看?
**答:操作日志记录在数据库中!**
#### 📊 方法1直接查询数据库
```sql
-- 查看最近50条操作日志
SELECT
id,
operation_type,
order_no,
target_row,
operation_status,
error_message,
operator,
create_time
FROM tencent_doc_operation_log
WHERE file_id = 'DTUFydU9FTkRLbEN6'
ORDER BY create_time DESC
LIMIT 50;
-- 查看成功的操作
SELECT COUNT(*) as 成功数量
FROM tencent_doc_operation_log
WHERE file_id = 'DTUFydU9FTkRLbEN6'
AND operation_status = 'SUCCESS'
AND DATE(create_time) = CURDATE();
-- 查看失败的操作
SELECT
order_no,
target_row,
error_message,
create_time
FROM tencent_doc_operation_log
WHERE file_id = 'DTUFydU9FTkRLbEN6'
AND operation_status = 'FAILED'
ORDER BY create_time DESC;
-- 查看跳过的操作
SELECT COUNT(*) as 跳过数量
FROM tencent_doc_operation_log
WHERE file_id = 'DTUFydU9FTkRLbEN6'
AND operation_status = 'SKIPPED'
AND DATE(create_time) = CURDATE();
```
#### 📊 方法2通过API查看已添加
**接口1查询操作日志列表**
```
GET /jarvis-api/jarvis/tendoc/operationLogs?fileId=DTUFydU9FTkRLbEN6
```
**接口2查询最近N条日志**
```
GET /jarvis-api/jarvis/tendoc/recentLogs?fileId=DTUFydU9FTkRLbEN6&limit=50
```
**返回数据示例:**
```json
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": 1,
"fileId": "DTUFydU9FTkRLbEN6",
"sheetId": "BB08J2",
"operationType": "BATCH_SYNC",
"orderNo": "JY202511061595",
"targetRow": 2575,
"logisticsLink": "https://3.cn/-2urt1U5",
"operationStatus": "SUCCESS",
"errorMessage": null,
"operator": "admin",
"createTime": "2025-11-06 22:03:30"
}
]
}
```
---
## 🔍 详细的同步进度说明
### 进度更新规则
代码中的进度更新逻辑:
1. **有数据填充成功**
```
currentMaxRow = endRow (本次处理的结束行)
nextStartRow = currentMaxRow - 100 (回溯100行防止遗漏)
```
2. **本次无数据填充,但跳跃不大**
```
currentMaxRow = endRow
nextStartRow = currentMaxRow - 100
```
3. **本次无数据填充,且跳跃过大**
```
不更新Redis进度
nextStartRow = effectiveStartRow (配置的起始行)
```
### 为什么前端不自动刷新?
因为配置对话框是**静态的**,它在打开时读取一次配置,之后不会主动刷新。
**解决方案:**
- 关闭配置对话框
- 重新打开
- 或者点击"刷新"按钮(如果有)
---
## 📈 如何判断同步是否正常?
### 1. 查看后端日志
```
grep "批量填充物流链接完成" ruoyi-admin.log | tail -10
```
应该看到类似:
```
批量填充物流链接完成 - 成功: 15, 跳过: 178, 错误: 7
本次填充成功 15 条,更新进度到第 2699 行,下次从第 2599 行开始
```
### 2. 查看数据库日志统计
```sql
-- 今天的统计
SELECT
operation_status,
COUNT(*) as 数量
FROM tencent_doc_operation_log
WHERE file_id = 'DTUFydU9FTkRLbEN6'
AND DATE(create_time) = CURDATE()
GROUP BY operation_status;
```
应该看到:
```
operation_status | 数量
----------------|------
SUCCESS | 150
SKIPPED | 500
FAILED | 10
```
### 3. 检查Redis中的进度
```bash
redis-cli
> get "tendoc:progress:DTUFydU9FTkRLbEN6:BB08J2"
"2699"
```
这个数字应该随着同步而增长。
---
## 🎯 快速诊断问题
### 问题A进度没有更新
**可能原因:**
1. Redis连接失败
2. 同步过程中出现异常
3. 没有成功填充任何数据
**排查方法:**
```bash
# 1. 检查Redis
redis-cli ping
# 2. 查看后端日志
tail -f ruoyi-admin.log | grep "tendoc:progress"
# 3. 查看数据库日志
SELECT * FROM tencent_doc_operation_log
ORDER BY create_time DESC LIMIT 10;
```
### 问题B日志中全是SKIPPED
**可能原因:**
1. 所有订单都已经推送过了(`tencent_doc_pushed = 1`
2. 或者腾讯文档中的物流链接列都已经有值了
**解决方法:**
```sql
-- 检查订单的推送状态
SELECT
tencent_doc_pushed,
COUNT(*) as 数量
FROM jd_order
WHERE distribution_mark = 'H-TF'
GROUP BY tencent_doc_pushed;
-- 重置推送状态(慎用!)
UPDATE jd_order
SET tencent_doc_pushed = 0,
tencent_doc_push_time = NULL
WHERE distribution_mark = 'H-TF'
AND tencent_doc_pushed = 1;
```
### 问题C有ERROR日志
**排查步骤:**
```sql
-- 查看错误详情
SELECT
order_no,
target_row,
error_message,
create_time
FROM tencent_doc_operation_log
WHERE operation_status = 'FAILED'
ORDER BY create_time DESC
LIMIT 20;
```
常见错误:
- `未找到订单` - 数据库中不存在该订单
- `订单物流链接为空` - 订单还没有物流信息
- `API调用失败` - 腾讯文档API异常
---
## 🔧 添加前端日志查看功能(可选)
如果您想在前端直接查看日志,我可以帮您添加一个"查看操作日志"对话框。
需要:
1. 在配置页面添加"查看日志"按钮
2. 创建日志查看对话框组件
3. 调用上面的API接口展示数据
是否需要?请告知!
---
## 📊 日志表结构
```sql
CREATE TABLE `tencent_doc_operation_log` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`file_id` varchar(100) COMMENT '文件ID',
`sheet_id` varchar(100) COMMENT '工作表ID',
`operation_type` varchar(50) COMMENT '操作类型',
`order_no` varchar(100) COMMENT '订单号',
`target_row` int COMMENT '目标行号',
`logistics_link` varchar(500) COMMENT '物流链接',
`operation_status` varchar(50) COMMENT '操作状态',
`error_message` text COMMENT '错误信息',
`operator` varchar(100) COMMENT '操作人',
`create_time` datetime COMMENT '创建时间',
`remark` varchar(500) COMMENT '备注',
PRIMARY KEY (`id`),
KEY `idx_file_id` (`file_id`),
KEY `idx_order_no` (`order_no`),
KEY `idx_create_time` (`create_time`)
) COMMENT='腾讯文档操作日志表';
```
---
**总结**
1. ✅ startRow **有更新**存储在Redis中
2. ✅ 更新状态是**真实的**
3. ✅ 日志在 `tencent_doc_operation_log` 表中可通过SQL或API查询
4. ❓ 前端配置页面需要**手动刷新**(关闭重开)才能看到最新进度
如需添加前端日志查看功能,请告知!