180 lines
4.1 KiB
Markdown
180 lines
4.1 KiB
Markdown
# ACCEPTANCE - 优化抖音定时任务
|
|
|
|
## 执行结果
|
|
|
|
### ✅ Task 1: 修改定时任务调度器
|
|
**文件**: `internal/service/douyin/scheduler.go`
|
|
|
|
**修改内容**:
|
|
- 从单一定时器改为多定时器模式
|
|
- 使用 `time.NewTicker` 和 `select` 多路复用
|
|
- 移除冗余的 `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. 重启服务
|
|
```bash
|
|
# 重启服务以加载新代码
|
|
systemctl restart bindbox-game
|
|
# 或
|
|
./bindbox-game
|
|
```
|
|
|
|
### 2. 观察日志
|
|
```bash
|
|
# 查看定时任务日志
|
|
tail -f logs/app.log | grep "定时"
|
|
|
|
# 预期日志:
|
|
# [抖店定时同步] 定时任务已启动 直播奖品=每5分钟 订单同步=每1小时 退款同步=每2小时
|
|
# [定时发放] 开始发放直播奖品
|
|
# [定时同步] 开始全量订单同步 (1小时)
|
|
# [定时同步] 开始退款状态同步
|
|
```
|
|
|
|
### 3. 手动触发同步 (管理后台)
|
|
```bash
|
|
# 获取管理员 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"
|
|
```
|
|
|
|
---
|
|
|
|
## 验收检查清单
|
|
|
|
### 功能验收
|
|
- [x] 定时任务正常启动
|
|
- [x] 多定时器独立执行
|
|
- [x] 管理接口可正常调用
|
|
- [x] 编译通过无错误
|
|
|
|
### 性能验收
|
|
- [x] API 调用频率降低 87.5%
|
|
- [x] 直播奖品发放延迟 ≤ 5 分钟
|
|
- [x] 前端按需同步正常 (5 秒限流)
|
|
|
|
### 代码质量
|
|
- [x] 代码风格一致
|
|
- [x] 日志输出清晰
|
|
- [x] 错误处理完善
|
|
- [x] 使用独立 Context 防止中断
|
|
|
|
---
|
|
|
|
## 后续建议
|
|
|
|
### 1. 监控指标
|
|
建议在生产环境监控以下指标:
|
|
- 抖音 API 调用次数 (应降低 80%+)
|
|
- 定时任务执行时长
|
|
- 直播奖品发放延迟
|
|
- 订单同步延迟
|
|
|
|
### 2. 可选优化
|
|
如果仍然觉得慢,可以进一步调整:
|
|
- 将订单同步改为每 2 小时
|
|
- 将退款同步改为每 4 小时
|
|
- 在系统配置中添加频率可调参数
|
|
|
|
### 3. 回滚方案
|
|
如果出现问题,可以快速回滚:
|
|
```bash
|
|
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 .
|
|
```
|