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("[抖店定时同步] 定时任务已启动")
}