package main import ( "context" _ "github.com/gogf/gf/contrib/drivers/clickhouse/v2" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gcron" "github.com/gogf/gf/v2/os/gctx" "github.com/gogf/gf/v2/os/gfile" "time" "workTasks/urlStatic/job" ) var ( runJob = func(ctx context.Context, st, et time.Time) { var ( cJob = job.NewMatchObj(ctx) ) if matchErr := cJob.Match(ctx, st, et); matchErr != nil { g.Log().Errorf(ctx, "加载[%s-%s]数据异常 %e", st.Format(time.DateTime), et.Format(time.DateTime), matchErr) return } if saveErr := cJob.Save(ctx, et); saveErr != nil { g.Log().Errorf(ctx, "存储[%s-%s]数据异常 %e", st.Format(time.DateTime), et.Format(time.DateTime), saveErr) return } g.Log().Infof(ctx, "任务[%s-%s]完成", st.Format(time.DateTime), et.Format(time.DateTime)) } flagFilePath = "last.txt" dataFormat = "2006-01-02-15" ) func main() { mainCtx := context.Background() //执行一次任务 if g.Cfg().MustGet(mainCtx, "runOnce.isRun", false).Bool() { g.Log().Infof(mainCtx, "开始执行一次性任务") var ( startDateStr = g.Cfg().MustGet(mainCtx, "runOnce.startDate").String() endDateStr = g.Cfg().MustGet(mainCtx, "runOnce.endDate").String() ) st, st_err := time.ParseInLocation(time.DateTime, startDateStr, time.Local) et, et_err := time.ParseInLocation(time.DateTime, endDateStr, time.Local) if st_err != nil || et_err != nil { g.Log().Panicf(mainCtx, "开始执行时间异常%v %v", st_err, et_err) } for et.After(st) { var ( ctx = gctx.New() ed = st.Add(time.Hour) ) runJob(ctx, st, ed) st = ed } g.Log().Infof(mainCtx, "一次性任务执行完成") return } //定时执行 _, cronErr := gcron.AddSingleton(mainCtx, g.Cfg().MustGet(mainCtx, "runCron", "# # * * * *").String(), func(ctx context.Context) { g.Log().Infof(mainCtx, "开始执行定时任务") var ( dataStr = gfile.GetContents(flagFilePath) now = time.Now() timeEnd = time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.Local) ) st, err := time.ParseInLocation(dataFormat, dataStr, time.Local) if err != nil { g.Log().Errorf(ctx, "加载日期异常 %v", err) return } for timeEnd.After(st) { var ( ctx = gctx.New() ed = st.Add(time.Hour) ) runJob(ctx, st, ed) st = ed } if err := gfile.PutContents("last.txt", timeEnd.Format(dataFormat)); err != nil { g.Log().Errorf(ctx, "存储时间异常 %v", err) } g.Log().Infof(mainCtx, "定时任务执行完成") }) if cronErr != nil { g.Log().Panicf(mainCtx, "创建定时任务异常 %v", cronErr) } select {} }