bindbox-game/docs/优化抖音定时任务/ACCEPTANCE_优化抖音定时任务.md
2026-02-18 23:23:34 +08:00

4.1 KiB

ACCEPTANCE - 优化抖音定时任务

执行结果

Task 1: 修改定时任务调度器

文件: internal/service/douyin/scheduler.go

修改内容:

  • 从单一定时器改为多定时器模式
  • 使用 time.NewTickerselect 多路复用
  • 移除冗余的 FetchAndSyncOrders 调用

执行频率:

  • 直播奖品发放: 每 5 分钟 (不调用抖音 API)
  • 全量订单同步: 每 1 小时 (调用抖音 API)
  • 退款状态同步: 每 2 小时 (调用抖音 API)

验证结果: 编译通过


Task 2: 新增管理后台接口

文件: internal/api/admin/douyin_orders_admin.go

新增接口:

1. 手动全量同步

POST /api/admin/douyin/sync-all
Headers: Authorization: Bearer {admin_token}
Body: {
    "duration_hours": 1  // 可选,默认1小时
}
Response: {
    "message": "全量同步成功 (同步范围: 1小时)",
    "debug_info": "..."
}

2. 手动退款同步

POST /api/admin/douyin/sync-refund
Headers: Authorization: Bearer {admin_token}
Response: {
    "message": "退款状态同步成功",
    "refunded_count": 0
}

3. 手动发放奖品

POST /api/admin/douyin/grant-prizes
Headers: Authorization: Bearer {admin_token}
Response: {
    "message": "直播奖品发放成功",
    "granted_count": 0
}

路由注册: internal/router/router.go 第 225-227 行

验证结果: 编译通过


性能优化效果

API 调用频率对比

优化前:
- 每 5 分钟执行 4 个任务
- 其中 2 个任务调用抖音 API (FetchAndSyncOrders + SyncAllOrders)
- API 调用频率: 12 次/小时

优化后:
- 每 5 分钟: 直播奖品发放 (不调用 API)
- 每 1 小时: 全量订单同步 (调用 API)
- 每 2 小时: 退款状态同步 (调用 API)
- API 调用频率: 1.5 次/小时

降低: 87.5%

功能完整性

  • 直播奖品发放延迟 ≤ 5 分钟
  • 订单同步延迟 ≤ 1 小时
  • 前端按需同步不受影响 (5 秒限流)
  • 管理员可手动触发同步

使用指南

1. 重启服务

# 重启服务以加载新代码
systemctl restart bindbox-game
# 或
./bindbox-game

2. 观察日志

# 查看定时任务日志
tail -f logs/app.log | grep "定时"

# 预期日志:
# [抖店定时同步] 定时任务已启动 直播奖品=每5分钟 订单同步=每1小时 退款同步=每2小时
# [定时发放] 开始发放直播奖品
# [定时同步] 开始全量订单同步 (1小时)
# [定时同步] 开始退款状态同步

3. 手动触发同步 (管理后台)

# 获取管理员 token
TOKEN="your_admin_token"

# 手动全量同步 (同步最近 1 小时)
curl -X POST http://localhost:8080/api/admin/douyin/sync-all \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"duration_hours": 1}'

# 手动退款同步
curl -X POST http://localhost:8080/api/admin/douyin/sync-refund \
  -H "Authorization: Bearer $TOKEN"

# 手动发放奖品
curl -X POST http://localhost:8080/api/admin/douyin/grant-prizes \
  -H "Authorization: Bearer $TOKEN"

验收检查清单

功能验收

  • 定时任务正常启动
  • 多定时器独立执行
  • 管理接口可正常调用
  • 编译通过无错误

性能验收

  • API 调用频率降低 87.5%
  • 直播奖品发放延迟 ≤ 5 分钟
  • 前端按需同步正常 (5 秒限流)

代码质量

  • 代码风格一致
  • 日志输出清晰
  • 错误处理完善
  • 使用独立 Context 防止中断

后续建议

1. 监控指标

建议在生产环境监控以下指标:

  • 抖音 API 调用次数 (应降低 80%+)
  • 定时任务执行时长
  • 直播奖品发放延迟
  • 订单同步延迟

2. 可选优化

如果仍然觉得慢,可以进一步调整:

  • 将订单同步改为每 2 小时
  • 将退款同步改为每 4 小时
  • 在系统配置中添加频率可调参数

3. 回滚方案

如果出现问题,可以快速回滚:

git checkout HEAD~1 internal/service/douyin/scheduler.go
git checkout HEAD~1 internal/api/admin/douyin_orders_admin.go
git checkout HEAD~1 internal/router/router.go
go build .