main.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. _ "github.com/gogf/gf/contrib/drivers/clickhouse/v2"
  6. "github.com/gogf/gf/v2/frame/g"
  7. "github.com/gogf/gf/v2/os/gcron"
  8. "github.com/gogf/gf/v2/os/gfile"
  9. "time"
  10. "workTasks/sendBidToSftp/cfile"
  11. "workTasks/sendBidToSftp/data"
  12. "workTasks/sendBidToSftp/send"
  13. )
  14. var (
  15. running = false
  16. dataFormat = "2006-01-02-15"
  17. flagFilePath = "last.txt"
  18. runJob = func(ctx context.Context, st, et time.Time) {
  19. if running {
  20. return
  21. }
  22. running = true
  23. defer func() {
  24. running = false
  25. }()
  26. //查询当日标讯数据
  27. var (
  28. dataShow = st.Format("20060102")
  29. fileName = st.Format("20060102_15")
  30. dir = fmt.Sprintf("out/%s", dataShow)
  31. fullName = fmt.Sprintf("%s/%s.csv", dir, fileName)
  32. )
  33. count, err := data.RangeBidding(ctx, st, et, func(maps []g.Map) {
  34. //生成csv文件
  35. if len(maps) <= 0 {
  36. return
  37. }
  38. err := cfile.CreateFile(ctx, maps, fullName)
  39. if err != nil {
  40. g.Log().Errorf(ctx, "生成文件异常 %v", err.Error())
  41. return
  42. }
  43. })
  44. if err != nil {
  45. g.Log().Errorf(ctx, "获取 %s-%s 数据异常 %v", st.Format(time.DateTime), et.Format(time.DateTime), err)
  46. return
  47. }
  48. g.Log().Infof(ctx, "%s共有增量数据%d条", dataShow, count)
  49. var (
  50. startDateStr = g.Cfg().MustGet(ctx, "sendTime.start").String()
  51. endDateStr = g.Cfg().MustGet(ctx, "sendTime.end").String()
  52. isSend = false
  53. now = time.Now()
  54. )
  55. ss, ss_err := time.ParseInLocation(time.DateTime, startDateStr, time.Local)
  56. se, se_err := time.ParseInLocation(time.DateTime, endDateStr, time.Local)
  57. if se_err != nil || ss_err != nil {
  58. g.Log().Errorf(ctx, "格式化发送时间异常 %v %v", ss_err, se_err)
  59. } else {
  60. if now.After(ss) && now.Before(se) {
  61. isSend = true
  62. }
  63. }
  64. g.Log().Infof(ctx, "isSend:%v", isSend)
  65. if isSend {
  66. sendFail := send.UpLoadFilesToSftp(ctx, fullName)
  67. if sendFail != nil {
  68. g.Log().Infof(ctx, "文件传输异常 %v", sendFail.Error())
  69. }
  70. if qwRobotNotice := g.Cfg().MustGet(ctx, "qwRobotNotice").String(); qwRobotNotice != "" {
  71. var content string
  72. content = fmt.Sprintf("任务[%s]\n共%d条标讯数据", dataShow, count)
  73. if sendFail != nil {
  74. content += fmt.Sprintf("\n成功上传失败:%v", sendFail)
  75. }
  76. g.Log().Infof(ctx, content)
  77. if err := send.SendSimpleMsg2ChatBot(content); err != nil {
  78. g.Log().Errorf(ctx, "发送企业微信消息异常 %s", err.Error())
  79. }
  80. }
  81. }
  82. }
  83. )
  84. func main() {
  85. mainCtx := context.Background()
  86. //执行一次任务
  87. if g.Cfg().MustGet(mainCtx, "runOnce.isRun", false).Bool() {
  88. g.Log().Infof(mainCtx, "开始执行一次性任务")
  89. var (
  90. startDateStr = g.Cfg().MustGet(mainCtx, "runOnce.startDate").String()
  91. endDateStr = g.Cfg().MustGet(mainCtx, "runOnce.endDate").String()
  92. )
  93. st, st_err := time.ParseInLocation(time.DateTime, startDateStr, time.Local)
  94. et, et_err := time.ParseInLocation(time.DateTime, endDateStr, time.Local)
  95. if st_err != nil || et_err != nil {
  96. g.Log().Panicf(mainCtx, "开始执行时间异常%v %v", st_err, et_err)
  97. }
  98. runJob(mainCtx, st, et)
  99. g.Log().Infof(mainCtx, "一次性任务执行完成")
  100. return
  101. }
  102. //定时执行
  103. _, cronErr := gcron.AddSingleton(mainCtx, g.Cfg().MustGet(mainCtx, "runCron", "# # * * * *").String(), func(ctx context.Context) {
  104. g.Log().Infof(mainCtx, "开始执行定时任务")
  105. var (
  106. dataStr = gfile.GetContents(flagFilePath)
  107. now = time.Now()
  108. timeEnd = time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, time.Local)
  109. )
  110. timeStart, err := time.ParseInLocation(dataFormat, dataStr, time.Local)
  111. if err != nil {
  112. g.Log().Errorf(ctx, "加载日期异常 %v", err)
  113. return
  114. }
  115. runJob(ctx, timeStart, timeEnd)
  116. if err := gfile.PutContents("last.txt", timeEnd.Format(dataFormat)); err != nil {
  117. g.Log().Errorf(ctx, "存储时间异常 %v", err)
  118. }
  119. g.Log().Infof(mainCtx, "定时任务执行完成")
  120. })
  121. if cronErr != nil {
  122. g.Log().Panicf(mainCtx, "创建定时任务异常 %v", cronErr)
  123. }
  124. select {}
  125. }