Browse Source

feat:订单监控中奖人员

fuwencai 2 năm trước cách đây
mục cha
commit
98a24983f7
4 tập tin đã thay đổi với 175 bổ sung0 xóa
  1. 9 0
      config/config.go
  2. 8 0
      etc/config.yaml
  3. 2 0
      main.go
  4. 156 0
      task/ordermonitor.go

+ 9 - 0
config/config.go

@@ -5,6 +5,7 @@ import (
 	qrpc "app.yhyue.com/moapp/message/model"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/os/gcfg"
+	"time"
 )
 
 type config struct {
@@ -68,6 +69,14 @@ type pushConfig struct {
 	FullReduce  string `json:"fullReduce"`
 }
 
+type OrderMonitorConfig struct {
+	StartTime  time.Time // 活动开始时间
+	EndTime    time.Time //  活动结束时间
+	Date111    string    // 第111名活动日期
+	OpenCron   string    // 每天开启订单查询的任务
+	SelectCron string    // 每5分钟查询一次
+}
+
 //var Config *config
 
 func init() {

+ 8 - 0
etc/config.yaml

@@ -105,3 +105,11 @@ productCode:
   subscriptionMonth: 1012
   subscriptionQuarter: 1013
   subscriptionYear: 1014
+
+# 订单监控
+orderMonitor :
+  startTime: 2022-10-18 00:00:00  # 活动开始时间
+  endTime: 2022-11-14 00:00:00    # 活动结束时间
+  date111: 2022-10-18             # 第111名活动日期
+  openCron: "0 0 6 * * *"         # 每天6点开启
+  selectCron: "0 */5 6-22 * * *"    # 查询订单的表达式  6点到22点 每五分钟查询一次

+ 2 - 0
main.go

@@ -6,6 +6,7 @@ import (
 	_ "app.yhyue.com/moapp/message/config"
 	"app.yhyue.com/moapp/message/handler"
 	_ "app.yhyue.com/moapp/message/services"
+	"app.yhyue.com/moapp/message/task"
 	"github.com/gogf/gf/v2/os/gcfg"
 	"github.com/gogf/gf/v2/os/gctx"
 	"github.com/nsqio/go-nsq"
@@ -43,6 +44,7 @@ func nsqWork() {
 //
 func main() {
 	go nsqWork()
+	go task.SelectOrderTask()
 	mux1 := http.NewServeMux()
 	xweb.RunBase(gcfg.Instance().MustGet(gctx.New(), "webport", "").String(), mux1)
 }

+ 156 - 0
task/ordermonitor.go

@@ -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
+}