diff --git a/call/pay.go b/call/pay.go index 6d6e98c..0eb59e4 100644 --- a/call/pay.go +++ b/call/pay.go @@ -627,7 +627,7 @@ func ActivityWeekCard(r *common.RechargeOrder, product *common.ConfigPayProduct) return } rows, err := db.Mysql().UpdateRes(&common.ActivityWeekCardData{UID: r.UID}, map[string]interface{}{ - "recharge_time": time.Now().Unix(), "day": 0, "recharge_amount": r.Amount}) + "recharge_time": time.Now().Unix(), "day": 0, "recharge_amount": r.Amount, "rewards": ""}) if err != nil || rows == 0 { log.Error("err:%v", err) return diff --git a/modules/web/handler/activity.go b/modules/web/handler/activity.go index 33725d9..7b9933e 100644 --- a/modules/web/handler/activity.go +++ b/modules/web/handler/activity.go @@ -636,7 +636,7 @@ func ActivityFirstRechargeBackInfo(c *gin.Context) { conf := call.GetConfigActivityFirstRechargeBack() a.Data = resp data := call.GetUserFirstRechargeBackData(a.UID) - resp.NeedRechargeAmount = conf.MinRecharge + resp.NeedRechargeAmount = conf.MinRecharge / common.DecimalDigits resp.ProductList = call.GetConfigPayProductByActivityID(common.ActivityIDFirstRechargeBack) resp.Recharge = data.Amount resp.PayAmount = data.Amount @@ -655,7 +655,7 @@ func ActivityFirstRechargeBackInfo(c *gin.Context) { } val = val * conf.MaxBack / 100 now := time.Now().Unix() - if p.Birth+conf.CD >= now { + if p.Birth+conf.CD >= now && data.Reward == 0 { db.Mysql().Update(&common.ActivityFirstRechargeBackData{UID: a.UID}, map[string]interface{}{ "reward": val, }) @@ -1283,22 +1283,44 @@ func ActivityWeekCardInfo(c *gin.Context) { } var rewardList []int64 var err error - if cardInfo.ID <= 0 { + rewardList, err = util.GenerateRandomSequence(cons.RewardAmount, cons.MiniLimit, 5) + if err != nil { + log.Error("err:%v", err) + } + rewardList = append([]int64{cons.DayOneReward}, rewardList...) + rewardList = append(rewardList, 0) + + if cardInfo.ID <= 0 || len(cardInfo.Rewards) == 0 { cardInfo.Day = 0 - rewardList, err = util.GenerateSequence(cons.RewardAmount, cons.MiniLimit) + rewardList, err = util.GenerateRandomSequence(cons.RewardAmount, cons.MiniLimit, 5) if err != nil { log.Error("err:%v", err) } rewardList = append([]int64{cons.DayOneReward}, rewardList...) rewardList = append(rewardList, 0) - cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",") - if a.UID > 0 { - db.Mysql().Create(cardInfo) + if cardInfo.ID <= 0 { + cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",") + if a.UID > 0 { + db.Mysql().Create(cardInfo) + } + } else { + cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",") + db.Mysql().Update(&common.ActivityWeekCardData{UID: a.UID}, map[string]interface{}{ + "rewards": cardInfo.Rewards, + }) } } + if rewardList == nil { rewardList, _ = util.StringToInt64Slice(cardInfo.Rewards, ",") } + if cardInfo.RechargeTime != 0 { + resp.RechargeStatus = true + } + // step:签完7天就重置 + if cardInfo.Day >= len(rewardList) { + resp.RechargeStatus = false + } for _, item := range rewardList { resp.RewardList = append(resp.RewardList, values.WeekCardInfo{ Min: cons.MiniLimit, @@ -1306,11 +1328,11 @@ func ActivityWeekCardInfo(c *gin.Context) { Val: item, }) } - if !util.IsSameDayTimeStamp(time.Now().Unix(), cardInfo.LastDraw) { - resp.Status = true - } - if cardInfo.RechargeTime != 0 { - resp.RechargeStatus = true + resp.Status = true + if config.GetBase().Release { + if util.IsSameDayTimeStamp(time.Now().Unix(), cardInfo.LastDraw) { + resp.Status = false + } } resp.RewardDay = cardInfo.Day resp.ChannelList = call.GetConfigPayChannelsByID(common.CurrencyINR) @@ -1329,6 +1351,8 @@ func ActivityWeekCardDraw(c *gin.Context) { if !a.S(req) { return } + resp := &values.ActivityWeekCardDrawResp{} + a.Data = resp conf := call.GetConfigActivityWeekCard() card := call.GetUserWeekCard(a.UID) if card.ID == 0 { @@ -1336,12 +1360,19 @@ func ActivityWeekCardDraw(c *gin.Context) { return } now := time.Now().Unix() - if util.IsSameDayTimeStamp(now, card.LastDraw) { + if config.GetBase().Release { + if util.IsSameDayTimeStamp(now, card.LastDraw) { + a.Code = values.CodeRetry + a.Msg = "today has reward" + return + } + } + rewards, _ := util.StringToInt64Slice(card.Rewards, ",") + if card.Day >= len(rewards) { a.Code = values.CodeRetry - a.Msg = "today has reward" + a.Msg = "The weekly card has been collected" return } - rewards, _ := util.StringToInt64Slice(card.Rewards, ",") rows, err := db.Mysql().UpdateRes(&common.ActivityWeekCardData{UID: a.UID}, map[string]interface{}{"day": gorm.Expr("day + 1"), "last_draw": now}) if rows == 0 || err != nil { @@ -1350,7 +1381,7 @@ func ActivityWeekCardDraw(c *gin.Context) { return } var reward int64 - if card.Day < len(rewards) { + if card.Day < 6 { reward = rewards[card.Day] * common.DecimalDigits } else { // 第几天折扣券 @@ -1379,22 +1410,22 @@ func ActivityWeekCardDraw(c *gin.Context) { } } call.AddUserDiscountTicket(a.UID, conf.Discount, exi2) + resp.DiscountTicket = conf.Discount } - resp := &values.ActivityWeekCardDrawResp{ - Reward: reward, + resp.Reward = reward + if reward > 0 { + call.UpdateCurrencyPro(&common.UpdateCurrency{ + CurrencyBalance: &common.CurrencyBalance{ + UID: a.UID, + Type: common.CurrencyINR, + Value: reward, + Event: common.CurrencyEventActivityWeekCard, + ChannelID: a.Channel, + NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward), + }, + }) } - a.Data = resp - call.UpdateCurrencyPro(&common.UpdateCurrency{ - CurrencyBalance: &common.CurrencyBalance{ - UID: a.UID, - Type: common.CurrencyINR, - Value: reward, - Event: common.CurrencyEventActivityWeekCard, - ChannelID: a.Channel, - NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward), - }, - }) } @@ -1893,7 +1924,6 @@ func ActivityBetDrawDraw(c *gin.Context) { if !a.CheckActivityExpire(common.ActivityIDBetDraw) { return } - configList, weightList := call.GetConfigBetDrawByType(req.WheelType) if len(configList) == 0 { a.Code = values.CodeRetry @@ -1905,7 +1935,7 @@ func ActivityBetDrawDraw(c *gin.Context) { now := time.Now() spinInfo := drawInfo.SpinInfo // step:判断cd - if spinInfo.LastSpinTime != 0 && now.Unix()-spinInfo.LastSpinTime < conf.Cd { + if spinInfo.LastSpinTime != 0 && spinInfo.NextSpinTIme > now.Unix() { a.Code = values.CodeRetry a.Msg = "Unarrived spin time" return diff --git a/modules/web/routers/routers_activity.go b/modules/web/routers/routers_activity.go index 50c7f71..9b48aab 100644 --- a/modules/web/routers/routers_activity.go +++ b/modules/web/routers/routers_activity.go @@ -27,8 +27,6 @@ func activity(e *gin.RouterGroup) { e.POST("/activity/sign/new/info", handler.ActivitySignNewInfo) e.POST("/activity/sign/new/draw", handler.ActivitySignNewDraw) e.POST("/activity/breakGift/info", handler.ActivityBreakGiftInfo) - e.POST("/activity/weekCard/info", handler.ActivityWeekCardInfo) - e.POST("/activity/weekCard/draw", handler.ActivityWeekCardDraw) e.POST("/activity/slots/info", handler.ActivitySlotsInfo) e.POST("/activity/slots/draw", handler.ActivitySlotsDraw) e.POST("/activity/slots/drawLast", handler.ActivitySlotsDrawLast) @@ -46,4 +44,6 @@ func activity(e *gin.RouterGroup) { // 首充返还 e.POST("/activity/firstRechargeBack/info", handler.ActivityFirstRechargeBackInfo) e.POST("/activity/firstRechargeBack/draw", handler.ActivityFirstRechargeBackDraw) + e.POST("/activity/weekCard/info", handler.ActivityWeekCardInfo) + e.POST("/activity/weekCard/draw", handler.ActivityWeekCardDraw) } diff --git a/modules/web/values/activity.go b/modules/web/values/activity.go index ddda8ba..91f2b85 100644 --- a/modules/web/values/activity.go +++ b/modules/web/values/activity.go @@ -160,7 +160,7 @@ type ActivityWeekCardDrawReq struct { // DiscountTicket 获得的折扣券折扣 type ActivityWeekCardDrawResp struct { Reward int64 - DiscountTicket string + DiscountTicket int64 } // Spin 可转次数 diff --git a/util/util.go b/util/util.go index 95228cf..009ea4b 100644 --- a/util/util.go +++ b/util/util.go @@ -993,31 +993,29 @@ func StringToInt64Slice(s, sep string) ([]int64, error) { return int64Slice, nil } -// 通过总数Count分成一个递增数列 -func GenerateSequence(N, M int64) ([]int64, error) { - length := int64(5) +func GenerateRandomSequence(totalSum, minValue, length int64) ([]int64, error) { - // 初步生成一个递增数列 [M, M+1, ..., M+5] sequence := make([]int64, length) for i := int64(0); i < length; i++ { - sequence[i] = M + i + sequence[i] = minValue } - // 计算初步生成数列的总和 - sumInitial := (2*M + length - 1) * length / 2 - - // 如果初步生成数列的总和已经大于 N,则无法生成 - if sumInitial > N { - return nil, fmt.Errorf("无法生成满足条件的数列") + initialSum := minValue * length + if initialSum > totalSum { + return nil, fmt.Errorf("无法生成满足条件的序列") } - // 计算剩余需要分配的值 - remaining := N - sumInitial + remaining := totalSum - initialSum - // 将剩余的值均匀分配到数列中,从后往前加值,保持递增 - for i := length - 1; i >= 0 && remaining > 0; i-- { - sequence[i] += remaining - remaining = 0 + rand.Seed(time.Now().UnixNano()) + for remaining > 0 { + batchSize := remaining / length // 计算一次性分配的批量大小 + if batchSize == 0 { + batchSize = 1 + } + index := rand.Int63n(length) + sequence[index] += batchSize + remaining -= batchSize } return sequence, nil