# 腾讯文档延迟推送配置说明 ## 📋 功能说明 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