Преглед на файлове

feat:双十一活动接口

wangshan преди 2 години
родител
ревизия
584a7ce082
променени са 6 файла, в които са добавени 194 реда и са изтрити 12 реда
  1. 9 5
      etc/config.yaml
  2. 2 1
      handler/activity/jyActivity.go
  3. 44 3
      handler/activity/jyActivityOther.go
  4. 47 0
      handler/award/user.go
  5. 48 0
      logs/message.log
  6. 44 3
      services/activity/bidderPlan/services.go

+ 9 - 5
etc/config.yaml

@@ -14,13 +14,13 @@ etcd:
 #消息队列
 nsq:
   topic: jy_event
-  address: 123.56.53.97:4161
+  address: 192.168.3.240:4161
   channel: event
 
 #数据库配置
 databases:
   # redis配置
-  redis: main=127.0.0.1:6379,session=192.168.3.206:1712,newother=192.168.3.206:1712
+  redis: main=192.168.3.206:1712,session=192.168.3.206:1712,newother=192.168.3.206:1712
   # nsq操作日志库
   mogLog:
     address: 192.168.3.206:27090
@@ -73,9 +73,9 @@ jyactivity: # 临时活动
   name: 剑鱼超级会员节
   code: membershipDay
   dateRange: #活动时间
-    t1: 2022-05-25 00:00:00 #预热活动
-    t2: 2022-06-25 00:00:00 #活动开始
-    ed: 2022-08-07 00:00:00 #活动结束
+    t1: 2022-10-01 00:00:00 #预热活动
+    t2: 2022-11-01 00:00:00 #活动开始
+    ed: 2022-11-12 00:00:00 #活动结束
   missions: #任务列表
     buysubvip: #购买超级订阅
       points: 800
@@ -96,6 +96,10 @@ jyactivity: # 临时活动
     reward:
       svip: 7 #赠送超级订阅限制
       limit: 500 #每日数量限制
+  power: #预热活动参加资格
+    switch: true #开关
+    free: true #是否是免费用户
+    time: 1609430400 #注册时间限制 2021-01-01 00:00:00
 
 #优惠券Rpc查询接口
 lotteryUrl: http://192.168.3.206:8090

+ 2 - 1
handler/activity/jyActivity.go

@@ -49,7 +49,8 @@ const (
 	BidderPlanDailyBoonKey         = "bidderPlanActivity_v1_DailyBoon_%s"       //领取每日限量福利
 	BidderPlanHasDailyBoonKey      = "bidderPlanActivity_v1_HasDailyBoon_%s"    //是否领取过每日限量福利
 
-	BidderPlanShare = "bidderPlanActivity_v1_ShareOk_%s" //是否分享
+	BidderPlanShare     = "bidderPlanActivity_v1_ShareOk_%s" //是否分享
+	QuestionnaireSubmit = "questionnaireSubmit_%s"           //是否已提交问卷
 
 )
 

+ 44 - 3
handler/activity/jyActivityOther.go

@@ -10,6 +10,28 @@ import (
 	"time"
 )
 
+//当日中奖信息
+func (BP *JyActivity) WinnerInfo() map[string]interface{} {
+	return award.GetWinnerInfo()
+}
+
+// 问卷提交
+func (BP *JyActivity) Questionnaire(userId, phone, answers string) error {
+	if _, inActivity, _ := BP.InActivity(); !inActivity {
+		return fmt.Errorf("不在活动时间内")
+	}
+	//保存问卷
+	if award.SaveQuestionnaire(userId, phone, answers) {
+		if redis.Put(BidderPlanRedis, fmt.Sprintf(QuestionnaireSubmit, userId), 1, BP.cacheLong()) != true {
+			return fmt.Errorf("redis de22q 存储异常")
+		}
+		//问卷保存后--赠送7天超级订阅
+	} else {
+		return fmt.Errorf("mongodb de22q 存储异常")
+	}
+	return nil
+}
+
 // ShareFinish 分享完成
 func (BP *JyActivity) ShareFinish(userId string) error {
 	if _, inActivity, _ := BP.InActivity(); !inActivity {
@@ -24,8 +46,9 @@ func (BP *JyActivity) ShareFinish(userId string) error {
 // GetDailyBoonDetail 查询领取情况及剩余
 // has 是否已经领取
 // todayBalance 今日余额
+// 允许参加预热活动 用户注册时间限制
 // err 异常
-func (BP *JyActivity) GetDailyBoonDetail(userId string) (has bool, todayBalance int, err error) {
+func (BP *JyActivity) GetDailyBoonDetail(userId string) (has bool, todayBalance int, registerBool, questionsBool bool, err error) {
 	if preHeatTime, _, _ := BP.InActivity(); !preHeatTime {
 		err = fmt.Errorf("不在预热活动时间内")
 		return
@@ -39,12 +62,25 @@ func (BP *JyActivity) GetDailyBoonDetail(userId string) (has bool, todayBalance
 	if todayBalance < 0 {
 		todayBalance = 0
 	}
+	//默认问卷已提交  注册时间也在活动允许范围内
+	questionsBool, registerBool = true, true
+	//是否有权限领取
+	powerSwitch := gcfg.Instance().MustGet(gctx.New(), "jyactivity.power.switch", false).Bool()
+	//权限判断及问卷调查开关
+	if powerSwitch {
+		registerTime := gcfg.Instance().MustGet(gctx.New(), "jyactivity.power.time", 1609430400).Int64()
+		//注册时间是否在允许范围内
+		registerBool = registerTime < award.GetUserRegisterTime(userId)
+		//问卷是否提交
+		rsKey := fmt.Sprintf(QuestionnaireSubmit, userId)
+		questionsBool = redis.GetInt(BidderPlanRedis, rsKey) > 0
+	}
 	return
 }
 
 // GetDailyBoonSVip 每日限量超级订阅领取
 func (BP *JyActivity) GetDailyBoonSVip(userId string) (err error) {
-	var has bool = false
+	var has, questionsBool bool = false, false
 	var todayBalance int = -1
 
 	var startTime time.Time
@@ -59,10 +95,15 @@ func (BP *JyActivity) GetDailyBoonSVip(userId string) (err error) {
 		return
 	}
 
-	has, todayBalance, err = BP.GetDailyBoonDetail(userId)
+	has, todayBalance, _, questionsBool, err = BP.GetDailyBoonDetail(userId)
 	if err != nil {
 		return
 	}
+	//问卷是否提交
+	if !questionsBool {
+		err = fmt.Errorf("问卷未提交")
+		return
+	}
 	if has {
 		err = fmt.Errorf("已领取")
 		return

+ 47 - 0
handler/award/user.go

@@ -0,0 +1,47 @@
+package award
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/message/db"
+	"strings"
+	"time"
+)
+
+func GetUserRegisterTime(userId string) (t int64) {
+	user, ok := db.Mgo.FindById("user", userId, `"l_registedate":1`)
+	if ok && user != nil {
+		t = common.Int64All((*user)["l_registedate"])
+	}
+	return
+}
+
+//
+func SaveQuestionnaire(userId, phone, answers string) bool {
+	id := db.Mgo.Save("double_eleven_22_q", map[string]interface{}{
+		"l_create":  time.Now().Unix(),
+		"s_userid":  userId,
+		"s_phone":   phone,
+		"s_answers": strings.Split(answers, ","),
+	})
+	return id != ""
+}
+
+//
+func GetWinnerInfo() map[string]interface{} {
+	todayData := db.Mysql.SelectBySql(`SELECT phone,winnerdate,mold FROM winner_info_22_10 WHERE TO_DAYS(winnerdate) = TO_DAYS(NOW())`)
+	if todayData != nil && len(*todayData) > 0 {
+		data := (*todayData)[0]
+		phone := common.ObjToString(data["phone"])
+		if phone != "" && len([]rune(phone)) == 11 {
+			data["phone"] = string(phone[0:3]) + "****" + string(phone[(len(phone)-4):])
+		}
+		switch common.ObjToString(data["mold"]) {
+		case "1":
+			data["mold"] = "获得 小米智能音箱 1个"
+		case "2":
+			data["mold"] = "获得 iPad 1台"
+		}
+		return data
+	}
+	return nil
+}

+ 48 - 0
logs/message.log

@@ -31,3 +31,51 @@
 2021/10/19 16:54:13 points.go:111: info  &{E_code:jyweb_article_open E_userId:5d6378301c298a5aac7b5402 E_time:1634633650 E_app:jywx_node E_body:map[]} 超过一天最大次数 5 限制,不再增加积分
 2021/10/19 17:02:05 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634634125 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
 2021/10/19 17:02:05 points.go:55: info  接收到消息 &{E_code:jywx_activity_message E_userId:6103bb722abfa5f4d81bb1d1 E_time:1634634125 E_app:jyapp_node1 E_body:map[buy_time:2021-10-19 22:22:22 end_time:2021-11-19 23:59:59 order_code:1234567890 phone:18624906090 product_type:超级订阅一个月]}
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jypc_phone_register E_userId:63244875b3030467a7731d1a E_time:1663322230 E_app:jyweb_node2 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"63244875b3030467a7731d1a" appId:"10000" pointType:1002 point:500 endDate:"2023-09-16 17:57:10" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:632accb0d68f952d2d900f75 E_time:1663749296 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"632accb0d68f952d2d900f75" appId:"10000" pointType:1002 point:500 endDate:"2023-09-21 16:34:56" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_wx_register E_userId:6331060aedfddf70485ef856 E_time:1664157194 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"6331060aedfddf70485ef856" appId:"10000" pointType:1002 point:500 endDate:"2023-09-26 09:53:14" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_wx_register E_userId:633109b6edfddf70485ef874 E_time:1664158134 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"633109b6edfddf70485ef874" appId:"10000" pointType:1002 point:500 endDate:"2023-09-26 10:08:54" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62dfcc6ed692ae1030443b8e E_time:1658834030 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"62dfcc6ed692ae1030443b8e" appId:"10000" pointType:1002 point:500 endDate:"2023-07-26 19:13:50" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62e0a44cdcd1c56a3a7e94eb E_time:1658889292 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"62e0a44cdcd1c56a3a7e94eb" appId:"10000" pointType:1002 point:500 endDate:"2023-07-27 10:34:52" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:6334ff3ad53b3573db11000a E_time:1664417594 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"6334ff3ad53b3573db11000a" appId:"10000" pointType:1002 point:500 endDate:"2023-09-29 10:13:14" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62e0ce59d01623ea2d37efb4 E_time:1658900057 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"62e0ce59d01623ea2d37efb4" appId:"10000" pointType:1002 point:500 endDate:"2023-07-27 13:34:17" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62eb873d214e89fe951e9532 E_time:1659602750 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"62eb873d214e89fe951e9532" appId:"10000" pointType:1002 point:500 endDate:"2023-08-04 16:45:50" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62ecc1ab03bd39a735f37332 E_time:1659683244 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"62ecc1ab03bd39a735f37332" appId:"10000" pointType:1002 point:500 endDate:"2023-08-05 15:07:24" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62eccece03bd39a735f37609 E_time:1659686607 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:27 integral.go:48: info  userId:"62eccece03bd39a735f37609" appId:"10000" pointType:1002 point:500 endDate:"2023-08-05 16:03:27" 已成功增加 500 积分
+2022/10/14 16:58:27 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62ee054003bd39a735f38673 E_time:1659766081 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"62ee054003bd39a735f38673" appId:"10000" pointType:1002 point:500 endDate:"2023-08-06 14:08:01" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62f5bb54a572708f4a12abd8 E_time:1660271444 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"62f5bb54a572708f4a12abd8" appId:"10000" pointType:1002 point:500 endDate:"2023-08-12 10:30:44" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62f5c223a572708f4a12b9ae E_time:1660273187 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"62f5c223a572708f4a12b9ae" appId:"10000" pointType:1002 point:500 endDate:"2023-08-12 10:59:47" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jypc_phone_register E_userId:62fdae800728991b203aea48 E_time:1660792449 E_app:jyweb_node2 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"62fdae800728991b203aea48" appId:"10000" pointType:1002 point:500 endDate:"2023-08-18 11:14:09" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jypc_phone_register E_userId:62fdd2470728991b203aeb04 E_time:1660801607 E_app:jyweb_node2 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"62fdd2470728991b203aeb04" appId:"10000" pointType:1002 point:500 endDate:"2023-08-18 13:46:47" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jypc_phone_register E_userId:62ff01870728991b203aee97 E_time:1660879240 E_app:jyweb_node2 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"62ff01870728991b203aee97" appId:"10000" pointType:1002 point:500 endDate:"2023-08-19 11:20:40" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jypc_phone_register E_userId:62ff34c6f24aabedc9d19e9c E_time:1660892358 E_app:jyweb_node2 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"62ff34c6f24aabedc9d19e9c" appId:"10000" pointType:1002 point:500 endDate:"2023-08-19 14:59:18" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62ff3f1fceddb8edec83079c E_time:1660895007 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"62ff3f1fceddb8edec83079c" appId:"10000" pointType:1002 point:500 endDate:"2023-08-19 15:43:27" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:62ff3f5dceddb8edec83079f E_time:1660895069 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"62ff3f5dceddb8edec83079f" appId:"10000" pointType:1002 point:500 endDate:"2023-08-19 15:44:29" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jypc_phone_register E_userId:6305ce6fbf4d58023bea5493 E_time:1661324911 E_app:jyweb_node2 E_body:map[]}
+2022/10/14 16:58:28 integral.go:48: info  userId:"6305ce6fbf4d58023bea5493" appId:"10000" pointType:1002 point:500 endDate:"2023-08-24 15:08:31" 已成功增加 500 积分
+2022/10/14 16:58:28 handler.go:50: info  接收到消息 &{E_code:jydocs_doc_open E_userId:623bd0c0ec4ebdd49c5c5e8e E_time:1661418084 E_app:jywx_node E_body:map[]}
+2022/10/14 16:58:33 integral.go:48: info  userId:"623bd0c0ec4ebdd49c5c5e8e" appId:"10000" pointType:1005 point:5 endDate:"2023-08-25 17:01:24" 已成功增加 5 积分
+2022/10/14 16:58:33 handler.go:50: info  接收到消息 &{E_code:jyapp_wx_register E_userId:630d85758fcbb8a1aa386cbe E_time:1661830518 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:33 integral.go:48: info  userId:"630d85758fcbb8a1aa386cbe" appId:"10000" pointType:1002 point:500 endDate:"2023-08-30 11:35:18" 已成功增加 500 积分
+2022/10/14 16:58:33 handler.go:50: info  接收到消息 &{E_code:jyapp_phone_register E_userId:630dbceff777cdb7978ac1fc E_time:1661844720 E_app:jyapp_node1 E_body:map[]}
+2022/10/14 16:58:33 integral.go:48: info  userId:"630dbceff777cdb7978ac1fc" appId:"10000" pointType:1002 point:500 endDate:"2023-08-30 15:32:00" 已成功增加 500 积分

+ 44 - 3
services/activity/bidderPlan/services.go

@@ -25,6 +25,46 @@ type Activity struct {
 	//活动领券
 	lotteryList xweb.Mapper `xweb:"/membershipDay/lotteryList"` //活动券列表
 	getLottery  xweb.Mapper `xweb:"/membershipDay/getLottery"`  //领取优惠券
+	//22双十一活动
+	questionnaire xweb.Mapper `xweb:"/membershipDay/questionnaire"` //预热活动问卷
+	winnerInfo    xweb.Mapper `xweb:"/membershipDay/winnerInfo"`    //当日中奖人信息
+
+}
+
+// WinnerInfo 当日中奖信息
+func (act *Activity) WinnerInfo() {
+	userId := gconv.String(act.GetSession("userId"))
+	rData, errMsg := func() (map[string]interface{}, error) {
+		return activity.MembershipDay.WinnerInfo(), nil
+	}()
+	if errMsg != nil {
+		log.Printf("Activity WinnerInfo  %s error:%s\n", userId, errMsg.Error())
+	}
+	act.ServeJson(NewResult(rData, errMsg))
+}
+
+// 预热活动 问卷提交
+// url:/jyActivity/membershipDay/questionnaire
+func (act *Activity) Questionnaire() {
+	userId := gconv.String(act.GetSession("userId"))
+	phone := gconv.String(act.Session().Get("s_phone"))
+	rData, errMsg := func() (bool, error) {
+		reqParam := map[string]interface{}{}
+		if err := json.Unmarshal(act.Body(), &reqParam); err != nil || len(reqParam) == 0 {
+			return false, fmt.Errorf("请求参数异常")
+		}
+		//连点处理
+		if !activity.MembershipDay.FastClickCheck(userId) {
+			return false, fmt.Errorf("操作频繁")
+		}
+		//提交答案
+		answers := gconv.String(reqParam["answers"])
+		return activity.MembershipDay.Questionnaire(userId, phone, answers) == nil, nil
+	}()
+	if errMsg != nil {
+		log.Printf("Activity Questionnaire  %s error:%s\n", userId, errMsg.Error())
+	}
+	act.ServeJson(NewResult(rData, errMsg))
 }
 
 // Period 活动周期
@@ -132,13 +172,14 @@ func (act *Activity) DoShare() {
 func (act *Activity) GetDailyBoonDetail() {
 	userId := gconv.String(act.GetSession("userId"))
 	rData, errMsg := func() (map[string]interface{}, error) {
-		has, todayBalance, err := activity.MembershipDay.GetDailyBoonDetail(userId)
+		has, todayBalance, registerBool, _, err := activity.MembershipDay.GetDailyBoonDetail(userId)
 		if err != nil {
 			return nil, err
 		}
 		return map[string]interface{}{
-			"got":   has,
-			"total": todayBalance,
+			"got":          has,
+			"total":        todayBalance,
+			"registerBool": registerBool, //是否是活动允许内的注册用户
 		}, nil
 	}()
 	if errMsg != nil {