1、积分抽奖增加黑名单判断;
2、保底奖品抽奖次数从40改成60;
This commit is contained in:
parent
e3cc4705d1
commit
7cf9a25bf4
|
@ -111,8 +111,24 @@ func LotteryDraw(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7. 白名单判断
|
// 7. 黑名单 & 白名单判断
|
||||||
var prize model.LotteryPrize
|
var prize model.LotteryPrize
|
||||||
|
|
||||||
|
// ---- 黑名单逻辑 ----
|
||||||
|
var blackEntry model.LotteryBlackList
|
||||||
|
err = tx.Where("uid = ?", uc.Uid).First(&blackEntry).Error
|
||||||
|
if err == nil { // 命中黑名单
|
||||||
|
logger.Infof("用户%d在黑名单中,强制发放八等奖", uc.Uid)
|
||||||
|
// 固定发放八等奖“谢谢参与”
|
||||||
|
err = tx.Where("level = ? AND stock > 0", model.LotteryPrizeTypeNone).First(&prize).Error
|
||||||
|
if err != nil {
|
||||||
|
tx.Rollback()
|
||||||
|
logger.Errorf("黑名单抽奖失败 uid=%d err=%v", uc.Uid, err)
|
||||||
|
respNoPrize(c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// ---- 白名单逻辑 ----
|
||||||
var whiteEntry model.LotteryWhiteList
|
var whiteEntry model.LotteryWhiteList
|
||||||
err = tx.Where("uid = ?", uc.Uid).First(&whiteEntry).Error
|
err = tx.Where("uid = ?", uc.Uid).First(&whiteEntry).Error
|
||||||
if errors.Is(err, gorm.ErrRecordNotFound) || (err == nil && drawNumber < int(whiteEntry.DrawNumber)) { // 普通抽奖
|
if errors.Is(err, gorm.ErrRecordNotFound) || (err == nil && drawNumber < int(whiteEntry.DrawNumber)) { // 普通抽奖
|
||||||
|
@ -128,7 +144,7 @@ func LotteryDraw(c *gin.Context) {
|
||||||
isRentalMember = true
|
isRentalMember = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// 当用户抽奖次数超过40,则判断是否中过1-4等奖;收集用户已中奖的奖项
|
// 当用户抽奖次数超过60,则判断是否中过1-4等奖;收集用户已中奖的奖项
|
||||||
hasWon4OrAbove, userPrizeIds, _ := model.PrepareUserLotteryInfo(uc.Uid)
|
hasWon4OrAbove, userPrizeIds, _ := model.PrepareUserLotteryInfo(uc.Uid)
|
||||||
|
|
||||||
// 普通抽奖逻辑
|
// 普通抽奖逻辑
|
||||||
|
@ -155,6 +171,7 @@ func LotteryDraw(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 8. 减少奖品库存(乐观锁)
|
// 8. 减少奖品库存(乐观锁)
|
||||||
result := tx.Model(&model.LotteryPrize{}).
|
result := tx.Model(&model.LotteryPrize{}).
|
||||||
|
|
|
@ -24,8 +24,8 @@ const (
|
||||||
|
|
||||||
LotteryPrizeTypeNone = 0 // 谢谢参与
|
LotteryPrizeTypeNone = 0 // 谢谢参与
|
||||||
|
|
||||||
LotteryCheckLimit = 40 // 抽奖超过40次时判断是否有中过1-4等奖
|
LotteryCheckLimit = 60 // 抽奖超过60次时判断是否有中过1-4等奖
|
||||||
LotteryDefaultLevel = 4 // 抽奖超过40次时且未中过1-4等奖,则默认中的奖项
|
LotteryDefaultLevel = 4 // 抽奖超过60次时且未中过1-4等奖,则默认中的奖项
|
||||||
)
|
)
|
||||||
|
|
||||||
// LotteryPrize 奖品信息表(抽奖)
|
// LotteryPrize 奖品信息表(抽奖)
|
||||||
|
@ -102,6 +102,12 @@ type LotteryWhiteList struct {
|
||||||
PrizeLevel uint `json:"prize_level"` // 奖品等级
|
PrizeLevel uint `json:"prize_level"` // 奖品等级
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LotteryBlackList 抽奖黑名单表
|
||||||
|
type LotteryBlackList struct {
|
||||||
|
Model
|
||||||
|
Uid uint `json:"uid"` // 用户ID
|
||||||
|
}
|
||||||
|
|
||||||
type LotteryDrawResponse struct {
|
type LotteryDrawResponse struct {
|
||||||
PrizeID int `json:"prize_id"` // 奖品id
|
PrizeID int `json:"prize_id"` // 奖品id
|
||||||
PrizeName string `json:"prize_name"` // 奖品名称
|
PrizeName string `json:"prize_name"` // 奖品名称
|
||||||
|
@ -136,7 +142,7 @@ type LotteryRecordPageResponse struct {
|
||||||
|
|
||||||
func DrawFromDatabasePrizes(prizes []LotteryPrize, userDrawCount, globalDrawCount int, totalAmount float64,
|
func DrawFromDatabasePrizes(prizes []LotteryPrize, userDrawCount, globalDrawCount int, totalAmount float64,
|
||||||
userPrizeIds map[uint32]bool, hasWon4OrAbove bool, isRentalMember bool) (LotteryPrize, error) {
|
userPrizeIds map[uint32]bool, hasWon4OrAbove bool, isRentalMember bool) (LotteryPrize, error) {
|
||||||
// 1. 判断是否超过40次且未中过4等奖以上,强制发4等奖
|
// 1. 判断是否超过60次且未中过4等奖以上,强制发4等奖
|
||||||
if userDrawCount > LotteryCheckLimit && !hasWon4OrAbove {
|
if userDrawCount > LotteryCheckLimit && !hasWon4OrAbove {
|
||||||
for _, p := range prizes {
|
for _, p := range prizes {
|
||||||
// 假设奖品等级字段为 PrizeLevel,4等奖等级为4
|
// 假设奖品等级字段为 PrizeLevel,4等奖等级为4
|
||||||
|
|
Loading…
Reference in New Issue
Block a user