package main import ( "context" "dataengine/syncdata" "fmt" "time" "gitea.redpowerfuture.com/red-future/common/beans" _ "github.com/gogf/gf/contrib/drivers/pgsql/v2" "github.com/gogf/gf/v2/os/gctx" "github.com/sirupsen/logrus" ) func main() { ctx := gctx.New() syncService := syncdata.NewSyncService() ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"}) now := time.Now() lastHourEnd := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()) lastHourStart := lastHourEnd.Add(-1 * time.Hour) req := &syncdata.AccountReportRequest{ AdvertiserID: 10001, StartTime: lastHourStart.UnixMilli(), EndTime: lastHourEnd.UnixMilli(), SelectColumns: []string{"impression", "click", "cost", "t0GMV"}, GroupType: 1, QueryVersion: 1, PageInfo: &syncdata.PageInfo{ CurrentPage: 1, PageSize: 10, }, } config := syncdata.ConcurrentSyncConfig{ MaxConcurrency: 5, UseMock: true, MaxRetries: 3, } logrus.Infof("=== 开始执行定时同步任务(并发模式)===") logrus.Infof("时间区间:%s ~ %s", lastHourStart.Format("2006-01-02 15:04:05"), lastHourEnd.Format("2006-01-02 15:04:05")) logrus.Infof("分页配置:每页大小=%d", req.PageInfo.PageSize) logrus.Infof("并发配置:最大并发数=%d, 最大重试次数=%d", config.MaxConcurrency, config.MaxRetries) result, err := syncService.SyncAccountReportConcurrent(ctx, req, config) if err != nil { logrus.Errorf("定时同步任务执行失败:%v", err) logrus.Infof("主任务日志ID:%d", result.TaskLogID) return } hasFailedPages := result.DetailFailCount > 0 if hasFailedPages { logrus.Warnf("⚠ 定时同步任务完成,但存在失败的页面") } else { logrus.Infof("✓ 定时同步任务全部成功") } logrus.Infof("主任务日志ID:%d", result.TaskLogID) logrus.Infof("汇总数据:已保存=%v, ID=%d", result.SumSuccess, result.SumID) logrus.Infof("明细统计:总记录数=%d, 成功页数=%d, 失败页数=%d", result.DetailCount, result.DetailSuccessCount, result.DetailFailCount) if hasFailedPages { logrus.Warnf("失败的页面已记录到 sync_task_log 表,等待补偿调度器处理") for _, pageResult := range result.PageResults { if !pageResult.Success { logrus.Warnf(" - 第 %d 页失败,任务日志ID=%d,错误:%s", pageResult.PageNumber, pageResult.PageTaskLogID, pageResult.ErrorMessage) } } } fmt.Printf("\n=== 同步结果汇总 ===\n") fmt.Printf("时间区间:%s ~ %s\n", lastHourStart.Format("2006-01-02 15:04:05"), lastHourEnd.Format("2006-01-02 15:04:05")) fmt.Printf("汇总数据:已保存=%v, ID=%d\n", result.SumSuccess, result.SumID) fmt.Printf("明细统计:总记录数=%d, 成功页数=%d, 失败页数=%d\n", result.DetailCount, result.DetailSuccessCount, result.DetailFailCount) fmt.Printf("主任务日志ID:%d\n", result.TaskLogID) if len(result.PageResults) > 0 { fmt.Printf("\n分页任务详情:\n") for _, pageResult := range result.PageResults { status := "✓ 成功" if !pageResult.Success { status = fmt.Sprintf("✗ 失败: %s", pageResult.ErrorMessage) } fmt.Printf(" - 第 %d 页:任务ID=%d, 记录数=%d, 耗时=%dms, 状态=%s\n", pageResult.PageNumber, pageResult.PageTaskLogID, pageResult.RecordCount, pageResult.DurationMs, status) } } if hasFailedPages { fmt.Printf("\n⚠ 警告:存在 %d 个失败的页面,请检查日志并触发补偿任务\n", result.DetailFailCount) } }