mofangmin 1 year ago
parent 85bb17f881
commit d0da615bca
  1. 2
      call/pay.go
  2. 58
      modules/web/handler/activity.go
  3. 4
      modules/web/routers/routers_activity.go
  4. 2
      modules/web/values/activity.go
  5. 32
      util/util.go

@ -627,7 +627,7 @@ func ActivityWeekCard(r *common.RechargeOrder, product *common.ConfigPayProduct)
return return
} }
rows, err := db.Mysql().UpdateRes(&common.ActivityWeekCardData{UID: r.UID}, map[string]interface{}{ 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 { if err != nil || rows == 0 {
log.Error("err:%v", err) log.Error("err:%v", err)
return return

@ -636,7 +636,7 @@ func ActivityFirstRechargeBackInfo(c *gin.Context) {
conf := call.GetConfigActivityFirstRechargeBack() conf := call.GetConfigActivityFirstRechargeBack()
a.Data = resp a.Data = resp
data := call.GetUserFirstRechargeBackData(a.UID) data := call.GetUserFirstRechargeBackData(a.UID)
resp.NeedRechargeAmount = conf.MinRecharge resp.NeedRechargeAmount = conf.MinRecharge / common.DecimalDigits
resp.ProductList = call.GetConfigPayProductByActivityID(common.ActivityIDFirstRechargeBack) resp.ProductList = call.GetConfigPayProductByActivityID(common.ActivityIDFirstRechargeBack)
resp.Recharge = data.Amount resp.Recharge = data.Amount
resp.PayAmount = data.Amount resp.PayAmount = data.Amount
@ -655,7 +655,7 @@ func ActivityFirstRechargeBackInfo(c *gin.Context) {
} }
val = val * conf.MaxBack / 100 val = val * conf.MaxBack / 100
now := time.Now().Unix() 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{}{ db.Mysql().Update(&common.ActivityFirstRechargeBackData{UID: a.UID}, map[string]interface{}{
"reward": val, "reward": val,
}) })
@ -1283,22 +1283,44 @@ func ActivityWeekCardInfo(c *gin.Context) {
} }
var rewardList []int64 var rewardList []int64
var err error 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 cardInfo.Day = 0
rewardList, err = util.GenerateSequence(cons.RewardAmount, cons.MiniLimit) rewardList, err = util.GenerateRandomSequence(cons.RewardAmount, cons.MiniLimit, 5)
if err != nil { if err != nil {
log.Error("err:%v", err) log.Error("err:%v", err)
} }
rewardList = append([]int64{cons.DayOneReward}, rewardList...) rewardList = append([]int64{cons.DayOneReward}, rewardList...)
rewardList = append(rewardList, 0) rewardList = append(rewardList, 0)
if cardInfo.ID <= 0 {
cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",") cardInfo.Rewards = strings.Join(util.Int64SliceToStringSlice(rewardList), ",")
if a.UID > 0 { if a.UID > 0 {
db.Mysql().Create(cardInfo) 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 { if rewardList == nil {
rewardList, _ = util.StringToInt64Slice(cardInfo.Rewards, ",") 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 { for _, item := range rewardList {
resp.RewardList = append(resp.RewardList, values.WeekCardInfo{ resp.RewardList = append(resp.RewardList, values.WeekCardInfo{
Min: cons.MiniLimit, Min: cons.MiniLimit,
@ -1306,11 +1328,11 @@ func ActivityWeekCardInfo(c *gin.Context) {
Val: item, Val: item,
}) })
} }
if !util.IsSameDayTimeStamp(time.Now().Unix(), cardInfo.LastDraw) {
resp.Status = true resp.Status = true
if config.GetBase().Release {
if util.IsSameDayTimeStamp(time.Now().Unix(), cardInfo.LastDraw) {
resp.Status = false
} }
if cardInfo.RechargeTime != 0 {
resp.RechargeStatus = true
} }
resp.RewardDay = cardInfo.Day resp.RewardDay = cardInfo.Day
resp.ChannelList = call.GetConfigPayChannelsByID(common.CurrencyINR) resp.ChannelList = call.GetConfigPayChannelsByID(common.CurrencyINR)
@ -1329,6 +1351,8 @@ func ActivityWeekCardDraw(c *gin.Context) {
if !a.S(req) { if !a.S(req) {
return return
} }
resp := &values.ActivityWeekCardDrawResp{}
a.Data = resp
conf := call.GetConfigActivityWeekCard() conf := call.GetConfigActivityWeekCard()
card := call.GetUserWeekCard(a.UID) card := call.GetUserWeekCard(a.UID)
if card.ID == 0 { if card.ID == 0 {
@ -1336,12 +1360,19 @@ func ActivityWeekCardDraw(c *gin.Context) {
return return
} }
now := time.Now().Unix() now := time.Now().Unix()
if config.GetBase().Release {
if util.IsSameDayTimeStamp(now, card.LastDraw) { if util.IsSameDayTimeStamp(now, card.LastDraw) {
a.Code = values.CodeRetry a.Code = values.CodeRetry
a.Msg = "today has reward" a.Msg = "today has reward"
return return
} }
}
rewards, _ := util.StringToInt64Slice(card.Rewards, ",") rewards, _ := util.StringToInt64Slice(card.Rewards, ",")
if card.Day >= len(rewards) {
a.Code = values.CodeRetry
a.Msg = "The weekly card has been collected"
return
}
rows, err := db.Mysql().UpdateRes(&common.ActivityWeekCardData{UID: a.UID}, rows, err := db.Mysql().UpdateRes(&common.ActivityWeekCardData{UID: a.UID},
map[string]interface{}{"day": gorm.Expr("day + 1"), "last_draw": now}) map[string]interface{}{"day": gorm.Expr("day + 1"), "last_draw": now})
if rows == 0 || err != nil { if rows == 0 || err != nil {
@ -1350,7 +1381,7 @@ func ActivityWeekCardDraw(c *gin.Context) {
return return
} }
var reward int64 var reward int64
if card.Day < len(rewards) { if card.Day < 6 {
reward = rewards[card.Day] * common.DecimalDigits reward = rewards[card.Day] * common.DecimalDigits
} else { } else {
// 第几天折扣券 // 第几天折扣券
@ -1379,12 +1410,11 @@ func ActivityWeekCardDraw(c *gin.Context) {
} }
} }
call.AddUserDiscountTicket(a.UID, conf.Discount, exi2) call.AddUserDiscountTicket(a.UID, conf.Discount, exi2)
resp.DiscountTicket = conf.Discount
} }
resp := &values.ActivityWeekCardDrawResp{ resp.Reward = reward
Reward: reward, if reward > 0 {
}
a.Data = resp
call.UpdateCurrencyPro(&common.UpdateCurrency{ call.UpdateCurrencyPro(&common.UpdateCurrency{
CurrencyBalance: &common.CurrencyBalance{ CurrencyBalance: &common.CurrencyBalance{
UID: a.UID, UID: a.UID,
@ -1395,6 +1425,7 @@ func ActivityWeekCardDraw(c *gin.Context) {
NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward), NeedBet: call.GetConfigCurrencyResourceNeedBet(common.CurrencyResourceBonus, reward),
}, },
}) })
}
} }
@ -1893,7 +1924,6 @@ func ActivityBetDrawDraw(c *gin.Context) {
if !a.CheckActivityExpire(common.ActivityIDBetDraw) { if !a.CheckActivityExpire(common.ActivityIDBetDraw) {
return return
} }
configList, weightList := call.GetConfigBetDrawByType(req.WheelType) configList, weightList := call.GetConfigBetDrawByType(req.WheelType)
if len(configList) == 0 { if len(configList) == 0 {
a.Code = values.CodeRetry a.Code = values.CodeRetry
@ -1905,7 +1935,7 @@ func ActivityBetDrawDraw(c *gin.Context) {
now := time.Now() now := time.Now()
spinInfo := drawInfo.SpinInfo spinInfo := drawInfo.SpinInfo
// step:判断cd // 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.Code = values.CodeRetry
a.Msg = "Unarrived spin time" a.Msg = "Unarrived spin time"
return return

@ -27,8 +27,6 @@ func activity(e *gin.RouterGroup) {
e.POST("/activity/sign/new/info", handler.ActivitySignNewInfo) e.POST("/activity/sign/new/info", handler.ActivitySignNewInfo)
e.POST("/activity/sign/new/draw", handler.ActivitySignNewDraw) e.POST("/activity/sign/new/draw", handler.ActivitySignNewDraw)
e.POST("/activity/breakGift/info", handler.ActivityBreakGiftInfo) 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/info", handler.ActivitySlotsInfo)
e.POST("/activity/slots/draw", handler.ActivitySlotsDraw) e.POST("/activity/slots/draw", handler.ActivitySlotsDraw)
e.POST("/activity/slots/drawLast", handler.ActivitySlotsDrawLast) 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/info", handler.ActivityFirstRechargeBackInfo)
e.POST("/activity/firstRechargeBack/draw", handler.ActivityFirstRechargeBackDraw) e.POST("/activity/firstRechargeBack/draw", handler.ActivityFirstRechargeBackDraw)
e.POST("/activity/weekCard/info", handler.ActivityWeekCardInfo)
e.POST("/activity/weekCard/draw", handler.ActivityWeekCardDraw)
} }

@ -160,7 +160,7 @@ type ActivityWeekCardDrawReq struct {
// DiscountTicket 获得的折扣券折扣 // DiscountTicket 获得的折扣券折扣
type ActivityWeekCardDrawResp struct { type ActivityWeekCardDrawResp struct {
Reward int64 Reward int64
DiscountTicket string DiscountTicket int64
} }
// Spin 可转次数 // Spin 可转次数

@ -993,31 +993,29 @@ func StringToInt64Slice(s, sep string) ([]int64, error) {
return int64Slice, nil return int64Slice, nil
} }
// 通过总数Count分成一个递增数列 func GenerateRandomSequence(totalSum, minValue, length int64) ([]int64, error) {
func GenerateSequence(N, M int64) ([]int64, error) {
length := int64(5)
// 初步生成一个递增数列 [M, M+1, ..., M+5]
sequence := make([]int64, length) sequence := make([]int64, length)
for i := int64(0); i < length; i++ { for i := int64(0); i < length; i++ {
sequence[i] = M + i sequence[i] = minValue
} }
// 计算初步生成数列的总和 initialSum := minValue * length
sumInitial := (2*M + length - 1) * length / 2 if initialSum > totalSum {
return nil, fmt.Errorf("无法生成满足条件的序列")
// 如果初步生成数列的总和已经大于 N,则无法生成
if sumInitial > N {
return nil, fmt.Errorf("无法生成满足条件的数列")
} }
// 计算剩余需要分配的值 remaining := totalSum - initialSum
remaining := N - sumInitial
// 将剩余的值均匀分配到数列中,从后往前加值,保持递增 rand.Seed(time.Now().UnixNano())
for i := length - 1; i >= 0 && remaining > 0; i-- { for remaining > 0 {
sequence[i] += remaining batchSize := remaining / length // 计算一次性分配的批量大小
remaining = 0 if batchSize == 0 {
batchSize = 1
}
index := rand.Int63n(length)
sequence[index] += batchSize
remaining -= batchSize
} }
return sequence, nil return sequence, nil

Loading…
Cancel
Save