Эх сурвалжийг харах

wip:双十二订单抽奖代码调整

fuwencai 2 жил өмнө
parent
commit
a288d936df

+ 5 - 5
etc/config.yaml

@@ -74,8 +74,8 @@ jyactivity: # 临时活动
   code: membershipDay
   dateRange: #活动时间
     t1: 2022-05-25 00:00:00 #预热活动
-    t2: 2022-10-19 00:00:00 #活动开始
-    ed: 2022-11-22 00:00:00 #活动结束
+    t2: 2022-11-12 00:00:00 #活动开始
+    ed: 2022-12-13 00:00:00 #活动结束
   missions: #任务列表
     buysubvip: #购买超级订阅
       points: 800
@@ -114,7 +114,7 @@ productCode:
 orderMonitor:
   dateSpecial: 2022-10-19         # 特殊奖品活动日期 (第111名活动日期)
   openCron: "0 0 6 * * *"         # 每天6点开启
-  selectCron: "0 */2 * * * *"    # 查询订单的表达式  6点到22点 每五分钟查询一次
+  selectCron: "0 */5 * * * *"    # 查询订单的表达式  每五分钟查询一次
   winNumberDaily: 11       # 每天第xx个付款获得奖品1
   winNumbersSpecial: 111   # 第xxx个付款获得特殊奖品
 
@@ -123,7 +123,7 @@ orderMonitor:
   rules:
     - winNum: [ 2,12,22,122,1212,2222 ] # 活动期间第XXX,XXX个支付中奖
       mold: 3 # 3 免单
-      products: [ vip订阅,数据流量包 ] # 参加活动的产品
+      products: [  "VIP订阅","数据流量包" ] # 参加活动的产品
       priceLimit: true  # 是否有实付金额限制
       priceStart: 30000 # 实付金额最低  单位 分
-      priceEnd: 100000  # 实付金额最高 单位分
+      priceEnd: 100000  # 实付金额最高 单位 

+ 1 - 1
handler/activity/jyActivity.go

@@ -53,7 +53,7 @@ const (
 
 	BidderPlanShare     = "bidderPlanActivity_v1_ShareOk_%s" //是否分享
 	QuestionnaireSubmit = "questionnaireSubmit_%s"           //是否已提交问卷
-	WinnerInfoKey       = "winnerinfokey_22_11_11"
+	WinnerInfoKey       = "winnerinfokey_22_12_12"
 )
 
 var (

+ 58 - 54
task/ordermonitor.go

@@ -30,7 +30,7 @@ const (
 var (
 	flag           = false // 是否已经查询到
 	monitorConfig  config.OrderMonitorConfig
-	ruleWinNumFlag = []map[int]struct{}{}
+	ruleWinNumFlag []map[int]struct{}
 )
 
 func init() {
@@ -55,6 +55,7 @@ func init() {
 func SelectOrderTask() {
 	// 活动已结束 不再启动定时任务
 	if time.Now().After(activity.MembershipDay.Ed) {
+		logger.Info("活动时间已结束,不再启动定时任务")
 		return
 	}
 	var (
@@ -65,8 +66,9 @@ func SelectOrderTask() {
 	switch monitorConfig.ActivityMode {
 	case ActivityMode1: // 双十一活动的模式 每天的第多少名
 		_, err = gcron.Add(ctx, monitorConfig.SelectCron, monitor, "selectJob")
+		logger.Info("add selectJob 1")
 	case ActivityMode2: // 活动期间的第多少名
-		// 初始化
+		// 初始化待查询的获奖顺序
 		for i := 0; i < len(monitorConfig.Rules); i++ {
 			rule := monitorConfig.Rules[i]
 			tmp := map[int]struct{}{}
@@ -75,17 +77,20 @@ func SelectOrderTask() {
 			}
 			ruleWinNumFlag = append(ruleWinNumFlag, tmp)
 		}
+		logger.Info("初始化待查询的获奖顺序到内存")
 		_, err = gcron.Add(ctx, monitorConfig.SelectCron, monitorMode2, "selectJob")
+		logger.Info("add selectJob 2")
 	}
 	if err != nil {
 		logger.Error("定时任务selectJob添加失败", err)
+		return
 	}
 
 	if time.Now().Before(activity.MembershipDay.T2) { // 活动未开始
 		gcron.Stop("selectJob") // 停掉订单查询任务  等后边的定时任务开启
-		logger.Info("selectJob stop")
+		logger.Info("活动还未开始,暂停查询任务 selectJob stop")
 	}
-	// 开启定时任务
+	// 开启定时开启任务
 	_, err = gcron.Add(ctx, monitorConfig.OpenCron, func(ctx context.Context) {
 		now := time.Now()
 		if now.After(activity.MembershipDay.Ed) { // 活动已结束 移除掉任务
@@ -176,62 +181,61 @@ func monitor(ctx context.Context) {
 func monitorMode2(ctx context.Context) {
 	logger.Info("开始本轮订单查询")
 	_, inTime, _ := activity.MembershipDay.InActivity()
-	if inTime {
-		needSelect := false
-		// 遍历活动抽奖规则
-		for i := 0; i < len(monitorConfig.Rules); i++ {
-			rules := monitorConfig.Rules[i]
-			if len(ruleWinNumFlag[i]) == 0 {
+	if !inTime {
+		logger.Info("当前时间不在活动时间范围内")
+		return
+	}
+	needSelect := false // 任务是否需要继续
+	// 遍历活动抽奖规则
+	for i := 0; i < len(monitorConfig.Rules); i++ {
+		rules := monitorConfig.Rules[i]
+		if len(ruleWinNumFlag[i]) == 0 { // 没有需要查询的中奖顺序
+			continue
+		}
+		// 遍历中奖顺序
+		for _, num := range rules.WinNum {
+			if _, ok := ruleWinNumFlag[i][num]; !ok { // 不在待查询的map中
 				continue
 			}
-			// 遍历中奖顺序
-			for _, num := range rules.WinNum {
-				if _, ok := ruleWinNumFlag[i][num]; !ok {
-					continue
-				}
-				rs := selectOrder2(num, rules.Products, rules.PriceLimit, rules.PriceStart, rules.PriceEnd, date.FormatDate(&activity.MembershipDay.T2, date.Date_Short_Layout), date.FormatDate(&activity.MembershipDay.Ed, date.Date_Short_Layout))
-				if len(rs) == 0 {
-					logger.Info(num, "未查到")
-					continue
-					//break // 如果没有查询到 等待下一轮任务再查询
-				}
-				logger.Info(num, "查到")
-				data := map[string]interface{}{
-					"phone":      rs["user_phone"],
-					"userid":     rs["user_id"],
-					"winnerdate": rs["pay_time"],
-					"mold":       rules.Mold,
-					"createdate": date.NowFormat(date.Date_Full_Layout),
-					"ordercode":  rs["order_code"],
-				}
-				if existOrderWinnerInfo(common.ObjToString(rs["order_code"])) {
-					// 删除查找的key
-					delete(ruleWinNumFlag[i], num)
-					logger.Info("该订单中奖信息重复保存", data)
+			rs := selectOrder2(num, rules.Products, rules.PriceLimit, rules.PriceStart, rules.PriceEnd, date.FormatDate(&activity.MembershipDay.T2, date.Date_Short_Layout), date.FormatDate(&activity.MembershipDay.Ed, date.Date_Short_Layout))
+			if len(rs) == 0 {
+				logger.Info("未查到", num)
+				continue
+				// break // 如果没有查询到 等待下一轮任务再查询
+			}
+			logger.Info(num, "查到")
+			data := map[string]interface{}{
+				"phone":      rs["user_phone"],
+				"userid":     rs["user_id"],
+				"winnerdate": rs["pay_time"],
+				"mold":       rules.Mold,
+				"createdate": date.NowFormat(date.Date_Full_Layout),
+				"ordercode":  rs["order_code"],
+			}
+			if existOrderWinnerInfo(common.ObjToString(rs["order_code"])) {
+				// 从待查找的key中删除
+				delete(ruleWinNumFlag[i], num)
+				logger.Info("该订单中奖信息重复保存", data)
+			} else {
+				// 存库
+				if saveWinnerInfo(data) {
+					logger.Info("保存成功", data)
+					delete(ruleWinNumFlag[i], num) // 从待查找的key中删除
 				} else {
-					// 存库
-					if saveWinnerInfo(data) {
-						logger.Info("保存成功", data)
-						// 删除查找的key
-						delete(ruleWinNumFlag[i], num)
-					} else {
-						logger.Info("保存失败", data)
-					}
+					logger.Info("保存失败", data)
 				}
 			}
-			if len(ruleWinNumFlag[i]) > 0 {
-				// 存在未查询到的
-				logger.Info(ruleWinNumFlag[i])
-				needSelect = true
-			}
 		}
-		if !needSelect {
-			//  不用再找了 结束任务
-			gcron.Remove("selectJob")
-			gcron.Remove("openCronJob")
-			logger.Info("结束了")
+		if len(ruleWinNumFlag[i]) > 0 {
+			logger.Info(ruleWinNumFlag[i])
+			needSelect = true // 存在未查询到的  定时任务不用关闭
 		}
 	}
+	if !needSelect { //  不用再找了 结束任务
+		gcron.Remove("selectJob")
+		gcron.Remove("openCronJob")
+		logger.Info("结束了")
+	}
 }
 
 // 查订单表
@@ -249,7 +253,7 @@ WHERE order_status = 1 and
                 "大会员",
                 "数据流量包"
         )
-AND is_backstage_order = 0
+AND is_backstage_order = 0  and  pay_time is not null
 AND TO_DAYS(pay_time) = to_days(now())
 ORDER BY
         pay_time 
@@ -298,7 +302,7 @@ func selectOrder2(num int, productType []string, priceLimit bool, priceStart, pr
 FROM
         dataexport_order
 WHERE order_status = 1 and create_time >=? and create_time<?` + productTypeStr +
-		priceLimitStr + ` AND is_backstage_order = 0
+		priceLimitStr + ` AND is_backstage_order = 0 and pay_time is not null
  ORDER BY pay_time  LIMIT ?,1`
 	rs := db.Mysql.SelectBySql(sql, values...)
 	if rs != nil && len(*rs) == 1 {