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

4.4 KiB
Raw Blame History

腾讯文档延迟推送配置说明

📋 功能说明

H-TF订单录单后不立即推送到腾讯文档,而是采用智能延迟推送机制

  1. 录单完成 → 触发10分钟倒计时
  2. 10分钟内有新录单 → 重置倒计时
  3. 10分钟内无新录单 → 自动执行推送
  4. 推送执行中有新录单 → 推送完成后重新倒计时

⚙️ 配置文件

application.yml 中添加配置:

# 腾讯文档延迟推送配置
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

响应示例:

{
  "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连接是否正常

解决方法:

# 查看Redis中的倒计时
redis-cli
> get "tendoc:delayed_push:next_time"

问题2推送不执行

检查步骤:

  1. 查看日志中是否有"倒计时结束,开始执行推送"
  2. 检查是否有错误日志
  3. 查看Redis锁状态

解决方法:

# 查看锁状态
redis-cli
> get "tendoc:delayed_push:lock"

# 如果有锁但长时间未释放,手动删除
> del "tendoc:delayed_push:lock"

问题3倒计时一直重置

原因: 录单频率太高,倒计时不断被重置

解决方法:

  • 减少延迟时间如改为5分钟
  • 或手动触发推送

最后更新: 2025-11-06
版本: v1.0