123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- 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 {}
- }
|