mofangmin 1 year ago
parent 85bb17f881
commit d0da615bca
  1. 2
      call/pay.go
  2. 92
      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
}
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

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

@ -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)
}

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

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

Loading…
Cancel
Save