|
@@ -0,0 +1,156 @@
|
|
|
|
+package task
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "app.yhyue.com/moapp/jybase/date"
|
|
|
|
+ "app.yhyue.com/moapp/jybase/go-logger/logger"
|
|
|
|
+ "app.yhyue.com/moapp/message/config"
|
|
|
|
+ "app.yhyue.com/moapp/message/db"
|
|
|
|
+ "context"
|
|
|
|
+ "fmt"
|
|
|
|
+ "github.com/gogf/gf/v2/os/gcfg"
|
|
|
|
+ "github.com/gogf/gf/v2/os/gcron"
|
|
|
|
+ "github.com/gogf/gf/v2/os/gctx"
|
|
|
|
+ "github.com/gogf/gf/v2/os/gtime"
|
|
|
|
+ "log"
|
|
|
|
+ "time"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+const (
|
|
|
|
+ TableWinnerInfo2210 = "winner_info_22_10"
|
|
|
|
+ Mold1 = "1" // 中奖类型 1:小米智能音响
|
|
|
|
+ Mold2 = "2" // 中奖类型 2:ipad
|
|
|
|
+
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+var (
|
|
|
|
+ flag11 = false // 是否需要查询第11个名单
|
|
|
|
+ flag111 = false // 是否需查询第111个名单
|
|
|
|
+ monitorConfig config.OrderMonitorConfig
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+func init() {
|
|
|
|
+ // 获取配置信息
|
|
|
|
+ monitorConfig = config.OrderMonitorConfig{
|
|
|
|
+ StartTime: gtime.NewFromStrLayout(gcfg.Instance().MustGet(gctx.New(), "orderMonitor.startTime").String(), "2006-01-02T15:04:05Z").Time,
|
|
|
|
+ EndTime: gtime.NewFromStrLayout(gcfg.Instance().MustGet(gctx.New(), "orderMonitor.endTime").String(), "2006-01-02T15:04:05Z").Time,
|
|
|
|
+ Date111: gcfg.Instance().MustGet(gctx.New(), "orderMonitor.date111").String(),
|
|
|
|
+ OpenCron: gcfg.Instance().MustGet(gctx.New(), "orderMonitor.openCron").String(),
|
|
|
|
+ SelectCron: gcfg.Instance().MustGet(gctx.New(), "orderMonitor.selectCron").String(),
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// SelectOrderTask 订单监控
|
|
|
|
+func SelectOrderTask() {
|
|
|
|
+ // 活动已结束 不再启动定时任务
|
|
|
|
+ if time.Now().After(monitorConfig.EndTime) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ var (
|
|
|
|
+ err error
|
|
|
|
+ ctx = gctx.New()
|
|
|
|
+ )
|
|
|
|
+ // 订单查询任务
|
|
|
|
+ _, err = gcron.Add(ctx, monitorConfig.SelectCron, monitor, "selectJob")
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Println("定时任务selectJob添加失败", err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if time.Now().Before(monitorConfig.StartTime) { // 活动未开始
|
|
|
|
+ gcron.Stop("selectJob") // 停掉订单查询任务 等后边的定时任务开启
|
|
|
|
+ log.Println("任务1stop")
|
|
|
|
+ }
|
|
|
|
+ // 开启定时任务
|
|
|
|
+ _, err = gcron.Add(ctx, monitorConfig.OpenCron, func(ctx context.Context) {
|
|
|
|
+ now := time.Now()
|
|
|
|
+ if now.After(monitorConfig.EndTime) { // 活动已结束 移除掉任务
|
|
|
|
+ log.Println("活动结束,移除任务")
|
|
|
|
+ gcron.Remove("openCronJob")
|
|
|
|
+ gcron.Remove("selectJob")
|
|
|
|
+ }
|
|
|
|
+ // 活动时间范围内 开启订单查询的定时任务
|
|
|
|
+ if now.After(monitorConfig.StartTime) && now.Before(monitorConfig.EndTime) {
|
|
|
|
+ flag11 = false // 重置
|
|
|
|
+ flag111 = false
|
|
|
|
+ log.Println("开启任务")
|
|
|
|
+ gcron.Start("selectJob")
|
|
|
|
+ }
|
|
|
|
+ }, "openCronJob")
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.Println("定时任务openCronJob失败", err)
|
|
|
|
+ }
|
|
|
|
+ log.Println("任务2启动成功")
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 订单监控
|
|
|
|
+func monitor(ctx context.Context) {
|
|
|
|
+ log.Println("查询")
|
|
|
|
+ now := time.Now()
|
|
|
|
+ if now.After(monitorConfig.StartTime) && now.Before(monitorConfig.EndTime) {
|
|
|
|
+ // 查订单表
|
|
|
|
+ // 查第11个
|
|
|
|
+ if !flag11 {
|
|
|
|
+ rs := selectOrder(11)
|
|
|
|
+ if rs != nil { // 查到了
|
|
|
|
+ logger.Info("查询到第11个人员")
|
|
|
|
+ data := map[string]interface{}{
|
|
|
|
+ "phone": rs["user_phone"],
|
|
|
|
+ "userid": rs["user_id"],
|
|
|
|
+ "winnerdate": rs["pay_time"],
|
|
|
|
+ "mold": Mold1,
|
|
|
|
+ "createdate": date.NowFormat(date.Date_Full_Layout),
|
|
|
|
+ }
|
|
|
|
+ if saveWinnerInfo(data) {
|
|
|
|
+ flag11 = true
|
|
|
|
+ logger.Error("中奖信息保存成功:", data)
|
|
|
|
+ } else {
|
|
|
|
+ logger.Error("中奖信息保存失败:", data)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 需要查第111个 日期范围内
|
|
|
|
+ log.Println(1222, date.NowFormat(date.Date_Short_Layout), monitorConfig.Date111, 333)
|
|
|
|
+ if date.NowFormat(date.Date_Short_Layout) == monitorConfig.Date111 {
|
|
|
|
+ rs111 := selectOrder(111)
|
|
|
|
+ if rs111 != nil {
|
|
|
|
+ logger.Info("查询到第111个人员")
|
|
|
|
+ saveData := map[string]interface{}{
|
|
|
|
+ "phone": rs111["user_phone"],
|
|
|
|
+ "userid": rs111["user_id"],
|
|
|
|
+ "winnerdate": rs111["pay_time"],
|
|
|
|
+ "mold": Mold2,
|
|
|
|
+ "createdate": date.NowFormat(date.Date_Full_Layout),
|
|
|
|
+ }
|
|
|
|
+ if saveWinnerInfo(saveData) {
|
|
|
|
+ flag111 = true
|
|
|
|
+ } else {
|
|
|
|
+ logger.Error("中奖信息保存失败:", saveData)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ logger.Info("未到11日,不需要查第111名")
|
|
|
|
+ flag111 = true
|
|
|
|
+ }
|
|
|
|
+ if flag111 && flag11 {
|
|
|
|
+ logger.Info("已查询到 暂停任务")
|
|
|
|
+ gcron.Stop("selectJob")
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 查订单表
|
|
|
|
+func selectOrder(num int) map[string]interface{} {
|
|
|
|
+ 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 ?;"
|
|
|
|
+ fmt.Println(sql)
|
|
|
|
+ rs := db.Mysql.SelectBySql(sql, num)
|
|
|
|
+ if rs != nil && len(*rs) == num {
|
|
|
|
+ return (*rs)[num-1]
|
|
|
|
+ }
|
|
|
|
+ logger.Info("未查到", rs)
|
|
|
|
+ return nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 保存中奖人员信息
|
|
|
|
+func saveWinnerInfo(data map[string]interface{}) bool {
|
|
|
|
+ logger.Info("save winner info ")
|
|
|
|
+ return db.Mysql.Insert(TableWinnerInfo2210, data) > 0
|
|
|
|
+}
|