Files
ruoyi-java/doc/延迟推送配置说明.md
2025-11-07 13:42:53 +08:00

202 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# 腾讯文档延迟推送配置说明
## 📋 功能说明
H-TF订单录单后**不立即推送**到腾讯文档,而是采用**智能延迟推送机制**
1. 录单完成 → 触发10分钟倒计时
2. 10分钟内有新录单 → 重置倒计时
3. 10分钟内无新录单 → 自动执行推送
4. 推送执行中有新录单 → 推送完成后重新倒计时
## ⚙️ 配置文件
`application.yml` 中添加配置:
```yaml
# 腾讯文档延迟推送配置
tencent:
doc:
delayed:
push:
# 延迟时间分钟默认10分钟
minutes: 10
```
## 🎯 工作原理
### 1. Redis存储
- **倒计时结束时间**: `tendoc:delayed_push:next_time`
- **推送执行锁**: `tendoc:delayed_push:lock`
- **新订单标记**: `tendoc:delayed_push:new_order_flag`
### 2. 定时任务
- 每30秒检查一次是否到期
- 到期后自动执行推送
### 3. 防并发机制
- 使用Redis分布式锁
- 确保同一时间只有一个推送任务在执行
### 4. 智能重试
- 推送执行期间有新录单 → 推送完成后自动重新开始倒计时
## 📊 API接口待实现
### 查询倒计时状态
```
GET /jarvis-api/jarvis/tendoc/delayedPushStatus
```
**响应示例:**
```json
{
"code": 200,
"data": {
"hasPending": true,
"remainingSeconds": 300,
"nextPushTime": "2025-11-06 23:10:00",
"isPushing": false
}
}
```
### 立即执行推送
```
POST /jarvis-api/jarvis/tendoc/executeDelayedPushNow
```
### 取消待推送任务
```
POST /jarvis-api/jarvis/tendoc/cancelDelayedPush
```
## 🔍 日志输出
### 触发延迟推送
```
✓ H-TF订单已触发延迟推送 - 单号: 2025110601, 第三方单号: JY202511061595
触发延迟推送10分钟后执行23:10:00
```
### 倒计时检查
```
距离下次推送还有 300 秒
```
### 执行推送
```
倒计时结束,开始执行推送
✓ 获取推送锁成功
开始执行批量同步...
批量同步调用完成,响应码: 200
✓ 推送执行完成
✓ 释放推送锁
```
### 推送期间有新录单
```
推送执行中,标记有新订单,推送完成后将重新开始倒计时
...
推送期间有新订单,重新开始倒计时
触发延迟推送10分钟后执行23:20:00
```
## 🎯 使用场景
### 场景1连续录单
```
23:00:00 - 录单1 → 触发倒计时23:10:00执行
23:02:00 - 录单2 → 重置倒计时23:12:00执行
23:05:00 - 录单3 → 重置倒计时23:15:00执行
23:15:00 - 10分钟无新录单→ 自动推送
```
### 场景2推送执行中有新录单
```
23:00:00 - 录单1 → 触发倒计时23:10:00执行
23:10:00 - 开始推送预计需要2分钟
23:11:00 - 录单2 → 标记有新订单
23:12:00 - 推送完成 → 检测到标记 → 重新触发倒计时23:22:00执行
```
### 场景3手动触发推送
```
23:00:00 - 录单1 → 触发倒计时23:10:00执行
23:05:00 - 手动点击"批量同步物流" → 立即执行推送
23:05:05 - 推送完成 → 清除倒计时
23:06:00 - 录单2 → 重新触发倒计时23:16:00执行
```
## ⚠️ 注意事项
1. **延迟时间建议**:
- 录单频率高设置5-10分钟
- 录单频率低设置10-15分钟
2. **服务器重启**:
- 倒计时存储在Redis中
- 服务器重启后倒计时会继续Redis数据保留
3. **推送失败**:
- 推送失败不会自动重试
- 需要手动点击"批量同步物流"
4. **并发安全**:
- 使用Redis分布式锁
- 多台服务器部署时也能正确工作
## 🔧 故障排查
### 问题1倒计时不触发
**检查步骤:**
1. 确认Service已正常启动
2. 查看日志中是否有"延迟推送服务已启动"
3. 检查Redis连接是否正常
**解决方法:**
```bash
# 查看Redis中的倒计时
redis-cli
> get "tendoc:delayed_push:next_time"
```
### 问题2推送不执行
**检查步骤:**
1. 查看日志中是否有"倒计时结束,开始执行推送"
2. 检查是否有错误日志
3. 查看Redis锁状态
**解决方法:**
```bash
# 查看锁状态
redis-cli
> get "tendoc:delayed_push:lock"
# 如果有锁但长时间未释放,手动删除
> del "tendoc:delayed_push:lock"
```
### 问题3倒计时一直重置
**原因:** 录单频率太高,倒计时不断被重置
**解决方法:**
- 减少延迟时间如改为5分钟
- 或手动触发推送
---
**最后更新**: 2025-11-06
**版本**: v1.0