Files
data-engine/scheduler/run_account_report_task.go

102 lines
3.5 KiB
Go
Raw Normal View History

2026-04-07 09:51:32 +08:00
package main
import (
2026-04-08 09:03:20 +08:00
"context"
2026-04-30 13:45:41 +08:00
"dataengine/syncdata"
2026-04-07 09:51:32 +08:00
"fmt"
"time"
2026-04-08 09:03:20 +08:00
"gitea.com/red-future/common/beans"
2026-04-07 09:51:32 +08:00
_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
"github.com/gogf/gf/v2/os/gctx"
"github.com/sirupsen/logrus"
)
func main() {
ctx := gctx.New()
2026-04-09 10:48:30 +08:00
syncService := syncdata.NewSyncService()
2026-04-08 09:03:20 +08:00
ctx = context.WithValue(ctx, "user", &beans.User{UserName: "admin"})
2026-04-08 14:05:15 +08:00
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)
2026-04-09 10:48:30 +08:00
req := &syncdata.AccountReportRequest{
2026-04-07 09:51:32 +08:00
AdvertiserID: 10001,
2026-04-08 14:05:15 +08:00
StartTime: lastHourStart.UnixMilli(),
EndTime: lastHourEnd.UnixMilli(),
2026-04-07 09:51:32 +08:00
SelectColumns: []string{"impression", "click", "cost", "t0GMV"},
GroupType: 1,
QueryVersion: 1,
2026-04-09 10:48:30 +08:00
PageInfo: &syncdata.PageInfo{
2026-04-08 16:00:54 +08:00
CurrentPage: 1,
PageSize: 10,
},
2026-04-07 09:51:32 +08:00
}
2026-04-09 10:48:30 +08:00
config := syncdata.ConcurrentSyncConfig{
2026-04-08 16:00:54 +08:00
MaxConcurrency: 5,
UseMock: true,
MaxRetries: 3,
}
logrus.Infof("=== 开始执行定时同步任务(并发模式)===")
2026-04-08 14:05:15 +08:00
logrus.Infof("时间区间:%s ~ %s", lastHourStart.Format("2006-01-02 15:04:05"), lastHourEnd.Format("2006-01-02 15:04:05"))
2026-04-08 16:00:54 +08:00
logrus.Infof("分页配置:每页大小=%d", req.PageInfo.PageSize)
logrus.Infof("并发配置:最大并发数=%d, 最大重试次数=%d", config.MaxConcurrency, config.MaxRetries)
2026-04-08 14:05:15 +08:00
2026-04-08 16:00:54 +08:00
result, err := syncService.SyncAccountReportConcurrent(ctx, req, config)
2026-04-07 09:51:32 +08:00
if err != nil {
2026-04-08 17:26:00 +08:00
logrus.Errorf("定时同步任务执行失败:%v", err)
2026-04-08 14:05:15 +08:00
logrus.Infof("主任务日志ID%d", result.TaskLogID)
2026-04-08 17:26:00 +08:00
return
}
2026-04-08 14:05:15 +08:00
2026-04-08 17:26:00 +08:00
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 表,等待补偿调度器处理")
2026-04-08 14:05:15 +08:00
for _, pageResult := range result.PageResults {
if !pageResult.Success {
logrus.Warnf(" - 第 %d 页失败任务日志ID=%d错误%s",
pageResult.PageNumber, pageResult.PageTaskLogID, pageResult.ErrorMessage)
}
}
2026-04-07 09:51:32 +08:00
}
2026-04-08 17:26:00 +08:00
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",
2026-04-07 09:51:32 +08:00
result.DetailCount, result.DetailSuccessCount, result.DetailFailCount)
2026-04-08 17:26:00 +08:00
fmt.Printf("主任务日志ID%d\n", result.TaskLogID)
2026-04-08 14:05:15 +08:00
if len(result.PageResults) > 0 {
2026-04-08 17:26:00 +08:00
fmt.Printf("\n分页任务详情\n")
2026-04-08 14:05:15 +08:00
for _, pageResult := range result.PageResults {
status := "✓ 成功"
if !pageResult.Success {
status = fmt.Sprintf("✗ 失败: %s", pageResult.ErrorMessage)
}
2026-04-08 17:26:00 +08:00
fmt.Printf(" - 第 %d 页任务ID=%d, 记录数=%d, 耗时=%dms, 状态=%s\n",
2026-04-08 14:05:15 +08:00
pageResult.PageNumber, pageResult.PageTaskLogID,
pageResult.RecordCount, pageResult.DurationMs, status)
}
}
2026-04-08 17:26:00 +08:00
if hasFailedPages {
fmt.Printf("\n⚠ 警告:存在 %d 个失败的页面,请检查日志并触发补偿任务\n", result.DetailFailCount)
}
2026-04-07 09:51:32 +08:00
}