main.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package main
  2. import (
  3. "context"
  4. _ "github.com/gogf/gf/contrib/drivers/clickhouse/v2"
  5. "github.com/gogf/gf/v2/frame/g"
  6. "github.com/gogf/gf/v2/os/gcron"
  7. "github.com/gogf/gf/v2/os/gctx"
  8. "github.com/gogf/gf/v2/os/gfile"
  9. "time"
  10. "workTasks/urlStatic/job"
  11. )
  12. var (
  13. runJob = func(ctx context.Context, st, et time.Time) {
  14. var (
  15. cJob = job.NewMatchObj(ctx)
  16. )
  17. if matchErr := cJob.Match(ctx, st, et); matchErr != nil {
  18. g.Log().Errorf(ctx, "加载[%s-%s]数据异常 %e", st.Format(time.DateTime), et.Format(time.DateTime), matchErr)
  19. return
  20. }
  21. if saveErr := cJob.Save(ctx, et); saveErr != nil {
  22. g.Log().Errorf(ctx, "存储[%s-%s]数据异常 %e", st.Format(time.DateTime), et.Format(time.DateTime), saveErr)
  23. return
  24. }
  25. g.Log().Infof(ctx, "任务[%s-%s]完成", st.Format(time.DateTime), et.Format(time.DateTime))
  26. }
  27. flagFilePath = "last.txt"
  28. dataFormat = "2006-01-02-15"
  29. )
  30. func main() {
  31. mainCtx := context.Background()
  32. //执行一次任务
  33. if g.Cfg().MustGet(mainCtx, "runOnce.isRun", false).Bool() {
  34. g.Log().Infof(mainCtx, "开始执行一次性任务")
  35. var (
  36. startDateStr = g.Cfg().MustGet(mainCtx, "runOnce.startDate").String()
  37. endDateStr = g.Cfg().MustGet(mainCtx, "runOnce.endDate").String()
  38. )
  39. st, st_err := time.ParseInLocation(time.DateTime, startDateStr, time.Local)
  40. et, et_err := time.ParseInLocation(time.DateTime, endDateStr, time.Local)
  41. if st_err != nil || et_err != nil {
  42. g.Log().Panicf(mainCtx, "开始执行时间异常%v %v", st_err, et_err)
  43. }
  44. for et.After(st) {
  45. var (
  46. ctx = gctx.New()
  47. ed = st.Add(time.Hour)
  48. )
  49. runJob(ctx, st, ed)
  50. st = ed
  51. }
  52. g.Log().Infof(mainCtx, "一次性任务执行完成")
  53. return
  54. }
  55. //定时执行
  56. _, cronErr := gcron.AddSingleton(mainCtx, g.Cfg().MustGet(mainCtx, "runCron", "# # * * * *").String(), func(ctx context.Context) {
  57. g.Log().Infof(mainCtx, "开始执行定时任务")
  58. var (
  59. dataStr = gfile.GetContents(flagFilePath)
  60. now = time.Now()
  61. timeEnd = time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.Local)
  62. )
  63. st, err := time.ParseInLocation(dataFormat, dataStr, time.Local)
  64. if err != nil {
  65. g.Log().Errorf(ctx, "加载日期异常 %v", err)
  66. return
  67. }
  68. for timeEnd.After(st) {
  69. var (
  70. ctx = gctx.New()
  71. ed = st.Add(time.Hour)
  72. )
  73. runJob(ctx, st, ed)
  74. st = ed
  75. }
  76. if err := gfile.PutContents("last.txt", timeEnd.Format(dataFormat)); err != nil {
  77. g.Log().Errorf(ctx, "存储时间异常 %v", err)
  78. }
  79. g.Log().Infof(mainCtx, "定时任务执行完成")
  80. })
  81. if cronErr != nil {
  82. g.Log().Panicf(mainCtx, "创建定时任务异常 %v", cronErr)
  83. }
  84. select {}
  85. }