数据引擎重构
This commit is contained in:
+43
-40
@@ -9,52 +9,55 @@ import (
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// ExecDailyExtract 执行一次全量每日抽取(遍历所有启用业务+报表)
|
||||
// 提取出独立函数,供定时任务和 HTTP 端点共同使用
|
||||
func ExecDailyExtract(ctx context.Context) {
|
||||
svc := GetService()
|
||||
logrus.Info("[报表引擎] 开始全量每日抽取任务")
|
||||
|
||||
businesses, err := svc.GetAllBusinesses(ctx)
|
||||
if err != nil {
|
||||
logrus.Errorf("[报表引擎] 获取业务列表失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
|
||||
|
||||
for _, biz := range businesses {
|
||||
reports, err := svc.GetAllReports(ctx, biz.BusinessCode)
|
||||
if err != nil {
|
||||
logrus.Errorf("[报表引擎] 获取报表列表失败 [%s]: %v", biz.BusinessCode, err)
|
||||
continue
|
||||
}
|
||||
|
||||
for _, rpt := range reports {
|
||||
logrus.Infof("[报表引擎] 开始抽取 %s/%s 日期 %s", biz.BusinessCode, rpt.ReportCode, yesterday)
|
||||
|
||||
resp, err := svc.ExtractDailyData(ctx, biz.BusinessCode, rpt.ReportCode, yesterday, "system")
|
||||
if err != nil {
|
||||
logrus.Errorf("[报表引擎] 抽取失败 %s/%s %s: %v", biz.BusinessCode, rpt.ReportCode, yesterday, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if resp.Success {
|
||||
logrus.Infof("[报表引擎] 抽取成功 %s/%s %s 总数:%d 耗时:%dms",
|
||||
biz.BusinessCode, rpt.ReportCode, yesterday, resp.TotalCount, resp.ExecTimeMs)
|
||||
} else {
|
||||
logrus.Errorf("[报表引擎] 抽取异常 %s/%s %s: %s", biz.BusinessCode, rpt.ReportCode, yesterday, resp.ErrorMsg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
logrus.Info("[报表引擎] 全量每日抽取任务完成")
|
||||
}
|
||||
|
||||
// StartDailyExtractJob 启动每日自动抽取定时任务
|
||||
// 每天凌晨 2:00 遍历所有已启用的业务+报表,抽取前一天数据
|
||||
// 在 main.go 中调用:report.StartDailyExtractJob()
|
||||
func StartDailyExtractJob() {
|
||||
svc := GetService()
|
||||
|
||||
// 每天凌晨 2:00 执行
|
||||
_, err := gcron.Add(gctx.New(), "0 0 2 * * *", func(ctx context.Context) {
|
||||
logrus.Info("[报表引擎] 开始每日自动抽取任务")
|
||||
|
||||
// 获取所有启用业务
|
||||
businesses, err := svc.GetAllBusinesses(ctx)
|
||||
if err != nil {
|
||||
logrus.Errorf("[报表引擎] 获取业务列表失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
|
||||
|
||||
for _, biz := range businesses {
|
||||
// 获取业务下所有启用报表
|
||||
reports, err := svc.GetAllReports(ctx, biz.BusinessCode)
|
||||
if err != nil {
|
||||
logrus.Errorf("[报表引擎] 获取报表列表失败 [%s]: %v", biz.BusinessCode, err)
|
||||
continue
|
||||
}
|
||||
|
||||
for _, rpt := range reports {
|
||||
logrus.Infof("[报表引擎] 开始抽取 %s/%s 日期 %s", biz.BusinessCode, rpt.ReportCode, yesterday)
|
||||
|
||||
resp, err := svc.ExtractDailyData(ctx, biz.BusinessCode, rpt.ReportCode, yesterday, "system")
|
||||
if err != nil {
|
||||
logrus.Errorf("[报表引擎] 抽取失败 %s/%s %s: %v", biz.BusinessCode, rpt.ReportCode, yesterday, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if resp.Success {
|
||||
logrus.Infof("[报表引擎] 抽取成功 %s/%s %s 总数:%d 耗时:%dms",
|
||||
biz.BusinessCode, rpt.ReportCode, yesterday, resp.TotalCount, resp.ExecTimeMs)
|
||||
} else {
|
||||
logrus.Errorf("[报表引擎] 抽取异常 %s/%s %s: %s", biz.BusinessCode, rpt.ReportCode, yesterday, resp.ErrorMsg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
logrus.Info("[报表引擎] 每日自动抽取任务完成")
|
||||
ExecDailyExtract(ctx)
|
||||
}, "daily-report-extract")
|
||||
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user