|
@@ -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 {
|