ordermonitor.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package task
  2. import (
  3. "app.yhyue.com/moapp/jybase/date"
  4. "app.yhyue.com/moapp/jybase/go-logger/logger"
  5. "app.yhyue.com/moapp/message/config"
  6. "app.yhyue.com/moapp/message/db"
  7. "context"
  8. "fmt"
  9. "github.com/gogf/gf/v2/os/gcfg"
  10. "github.com/gogf/gf/v2/os/gcron"
  11. "github.com/gogf/gf/v2/os/gctx"
  12. "github.com/gogf/gf/v2/os/gtime"
  13. "log"
  14. "time"
  15. )
  16. const (
  17. TableWinnerInfo2210 = "winner_info_22_10"
  18. Mold1 = "1" // 中奖类型 1:小米智能音响
  19. Mold2 = "2" // 中奖类型 2:ipad
  20. )
  21. var (
  22. flag11 = false // 是否需要查询第11个名单
  23. flag111 = false // 是否需查询第111个名单
  24. monitorConfig config.OrderMonitorConfig
  25. )
  26. func init() {
  27. // 获取配置信息
  28. monitorConfig = config.OrderMonitorConfig{
  29. StartTime: gtime.NewFromStrLayout(gcfg.Instance().MustGet(gctx.New(), "orderMonitor.startTime").String(), "2006-01-02T15:04:05Z").Time,
  30. EndTime: gtime.NewFromStrLayout(gcfg.Instance().MustGet(gctx.New(), "orderMonitor.endTime").String(), "2006-01-02T15:04:05Z").Time,
  31. Date111: gcfg.Instance().MustGet(gctx.New(), "orderMonitor.date111").String(),
  32. OpenCron: gcfg.Instance().MustGet(gctx.New(), "orderMonitor.openCron").String(),
  33. SelectCron: gcfg.Instance().MustGet(gctx.New(), "orderMonitor.selectCron").String(),
  34. }
  35. }
  36. // SelectOrderTask 订单监控
  37. func SelectOrderTask() {
  38. // 活动已结束 不再启动定时任务
  39. if time.Now().After(monitorConfig.EndTime) {
  40. return
  41. }
  42. var (
  43. err error
  44. ctx = gctx.New()
  45. )
  46. // 订单查询任务
  47. _, err = gcron.Add(ctx, monitorConfig.SelectCron, monitor, "selectJob")
  48. if err != nil {
  49. log.Println("定时任务selectJob添加失败", err)
  50. }
  51. if time.Now().Before(monitorConfig.StartTime) { // 活动未开始
  52. gcron.Stop("selectJob") // 停掉订单查询任务 等后边的定时任务开启
  53. log.Println("任务1stop")
  54. }
  55. // 开启定时任务
  56. _, err = gcron.Add(ctx, monitorConfig.OpenCron, func(ctx context.Context) {
  57. now := time.Now()
  58. if now.After(monitorConfig.EndTime) { // 活动已结束 移除掉任务
  59. log.Println("活动结束,移除任务")
  60. gcron.Remove("openCronJob")
  61. gcron.Remove("selectJob")
  62. }
  63. // 活动时间范围内 开启订单查询的定时任务
  64. if now.After(monitorConfig.StartTime) && now.Before(monitorConfig.EndTime) {
  65. flag11 = false // 重置
  66. flag111 = false
  67. log.Println("开启任务")
  68. gcron.Start("selectJob")
  69. }
  70. }, "openCronJob")
  71. if err != nil {
  72. log.Println("定时任务openCronJob失败", err)
  73. }
  74. log.Println("任务2启动成功")
  75. }
  76. // 订单监控
  77. func monitor(ctx context.Context) {
  78. log.Println("查询")
  79. now := time.Now()
  80. if now.After(monitorConfig.StartTime) && now.Before(monitorConfig.EndTime) {
  81. // 查订单表
  82. // 查第11个
  83. if !flag11 {
  84. rs := selectOrder(11)
  85. if rs != nil { // 查到了
  86. logger.Info("查询到第11个人员")
  87. data := map[string]interface{}{
  88. "phone": rs["user_phone"],
  89. "userid": rs["user_id"],
  90. "winnerdate": rs["pay_time"],
  91. "mold": Mold1,
  92. "createdate": date.NowFormat(date.Date_Full_Layout),
  93. }
  94. if saveWinnerInfo(data) {
  95. flag11 = true
  96. logger.Error("中奖信息保存成功:", data)
  97. } else {
  98. logger.Error("中奖信息保存失败:", data)
  99. }
  100. }
  101. }
  102. // 需要查第111个 日期范围内
  103. log.Println(1222, date.NowFormat(date.Date_Short_Layout), monitorConfig.Date111, 333)
  104. if date.NowFormat(date.Date_Short_Layout) == monitorConfig.Date111 {
  105. rs111 := selectOrder(111)
  106. if rs111 != nil {
  107. logger.Info("查询到第111个人员")
  108. saveData := map[string]interface{}{
  109. "phone": rs111["user_phone"],
  110. "userid": rs111["user_id"],
  111. "winnerdate": rs111["pay_time"],
  112. "mold": Mold2,
  113. "createdate": date.NowFormat(date.Date_Full_Layout),
  114. }
  115. if saveWinnerInfo(saveData) {
  116. flag111 = true
  117. } else {
  118. logger.Error("中奖信息保存失败:", saveData)
  119. }
  120. }
  121. } else {
  122. logger.Info("未到11日,不需要查第111名")
  123. flag111 = true
  124. }
  125. if flag111 && flag11 {
  126. logger.Info("已查询到 暂停任务")
  127. gcron.Stop("selectJob")
  128. }
  129. }
  130. }
  131. // 查订单表
  132. func selectOrder(num int) map[string]interface{} {
  133. sql := "SELECT user_phone,user_id,pay_time FROM `dataexport_order` a WHERE a.order_status = 1 and is_backstage_order=0 AND TO_DAYS(create_time) = to_days(now()) ORDER BY a.pay_time limit ?;"
  134. fmt.Println(sql)
  135. rs := db.Mysql.SelectBySql(sql, num)
  136. if rs != nil && len(*rs) == num {
  137. return (*rs)[num-1]
  138. }
  139. logger.Info("未查到", rs)
  140. return nil
  141. }
  142. // 保存中奖人员信息
  143. func saveWinnerInfo(data map[string]interface{}) bool {
  144. logger.Info("save winner info ")
  145. return db.Mysql.Insert(TableWinnerInfo2210, data) > 0
  146. }