Pārlūkot izejas kodu

wip:重复点击处理

wangkaiyue 3 gadi atpakaļ
vecāks
revīzija
48d4b3a8ec

+ 12 - 2
handler/activity/bidderPlan.go

@@ -17,7 +17,6 @@ import (
 
 /*
 投标人专属免费计划
-待解决问题:连点处理
 */
 
 type BidderPlan struct {
@@ -36,7 +35,8 @@ const (
 	BidderPlanActivityCode = "bidderPlan"
 	BidderPlanRedis        = "main"
 	//活动累计进度
-	BidderPlanScheduleCache = "bidderPlanScheduleValue_%s"
+	BidderPlanScheduleCache  = "bidderPlanScheduleValue_%s"
+	BidderPlanFastClickCheck = "bidderPlanFastClickValue_%s"
 	//奖励领取状态
 	BidderPlanScheduleAwardStatus       = "bidderPlanScheduleAward_%s_%d"
 	BidderPlanSubscribeMissionsStatus   = "bidderPlanActivitySubscribeCacheKey_%s"
@@ -194,6 +194,16 @@ func (BP *BidderPlan) MissionsSubscribeQuery(userId string) (status int) {
 	return
 }
 
+// FastClickCheck 连点处理,防止重复领取
+func (BP *BidderPlan) FastClickCheck(userId string) bool {
+	key := fmt.Sprintf(BidderPlanFastClickCheck, userId)
+	if redis.Incr(BidderPlanRedis, key) == 1 {
+		_ = redis.SetExpire(BidderPlanRedis, key, 1)
+		return true
+	}
+	return false
+}
+
 // MissionsSubscribeGiven 订阅任务领取奖励
 func (BP *BidderPlan) MissionsSubscribeGiven(userId string) error {
 	if !BP.InActivity() {

+ 7 - 0
services/activity/bidderPlan/services.go

@@ -3,6 +3,7 @@ package bidderPlan
 import (
 	. "app.yhyue.com/moapp/jybase/api"
 	"app.yhyue.com/moapp/message/handler/activity"
+	"fmt"
 	"github.com/gogf/gf/v2/net/ghttp"
 	"log"
 )
@@ -56,6 +57,10 @@ func (act *Activity) Schedule(r *ghttp.Request) {
 func (act *Activity) Receive(r *ghttp.Request) {
 	userId := r.GetHeader("userId")
 	rData, errMsg := func() (bool, error) {
+		//连点处理
+		if !activity.JyBidderPlan.FastClickCheck(userId) {
+			return false, fmt.Errorf("操作频繁")
+		}
 		//校验是否达标
 		t := r.Get("type", "mission").String()
 		var err error
@@ -67,6 +72,8 @@ func (act *Activity) Receive(r *ghttp.Request) {
 				err = activity.JyBidderPlan.MissionsInviteGiven(userId)
 			case "improveInfo":
 				err = activity.JyBidderPlan.MissionsImproveInfoGiven(userId)
+			default:
+				return false, fmt.Errorf("未知请求")
 			}
 		} else { //活动进度额外奖励
 			err = activity.JyBidderPlan.ScheduleGiven(userId, r.Get("value").Int())