# 如何查看同步进度和操作日志

##  您的三个问题解答

### 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. ❓ 前端配置页面需要**手动刷新**（关闭重开）才能看到最新进度

如需添加前端日志查看功能，请告知！

