61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package douyin
|
|
|
|
import (
|
|
"bindbox-game/internal/pkg/logger"
|
|
"bindbox-game/internal/repository/mysql"
|
|
"bindbox-game/internal/service/sysconfig"
|
|
"context"
|
|
"strconv"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// StartDouyinOrderSync 启动抖店订单定时同步任务
|
|
func StartDouyinOrderSync(l logger.CustomLogger, repo mysql.Repo, syscfg sysconfig.Service) {
|
|
svc := New(l, repo, syscfg)
|
|
|
|
go func() {
|
|
// 初始等待30秒让服务完全启动
|
|
time.Sleep(30 * time.Second)
|
|
|
|
for {
|
|
ctx := context.Background()
|
|
|
|
// 获取同步间隔配置
|
|
intervalMinutes := 5 // 默认5分钟
|
|
if c, err := syscfg.GetByKey(ctx, ConfigKeyDouyinInterval); err == nil && c != nil {
|
|
if v, e := strconv.Atoi(c.ConfigValue); e == nil && v > 0 {
|
|
intervalMinutes = v
|
|
}
|
|
}
|
|
|
|
// 检查是否配置了 Cookie
|
|
cookieCfg, err := syscfg.GetByKey(ctx, ConfigKeyDouyinCookie)
|
|
if err != nil || cookieCfg == nil || cookieCfg.ConfigValue == "" {
|
|
l.Debug("[抖店定时同步] Cookie 未配置,跳过本次同步")
|
|
time.Sleep(time.Duration(intervalMinutes) * time.Minute)
|
|
continue
|
|
}
|
|
|
|
// 执行同步
|
|
l.Info("[抖店定时同步] 开始同步", zap.Int("interval_minutes", intervalMinutes))
|
|
result, err := svc.FetchAndSyncOrders(ctx)
|
|
if err != nil {
|
|
l.Error("[抖店定时同步] 同步失败", zap.Error(err))
|
|
} else {
|
|
l.Info("[抖店定时同步] 同步成功",
|
|
zap.Int("total_fetched", result.TotalFetched),
|
|
zap.Int("new_orders", result.NewOrders),
|
|
zap.Int("matched_users", result.MatchedUsers),
|
|
)
|
|
}
|
|
|
|
// 等待下次同步
|
|
time.Sleep(time.Duration(intervalMinutes) * time.Minute)
|
|
}
|
|
}()
|
|
|
|
l.Info("[抖店定时同步] 定时任务已启动")
|
|
}
|