Commit 6af892a65da0b39f824ed31da80d3dd134a7fe5e
1 parent
580d49bd
Exists in
master
and in
1 other branch
feat✨:开卡包封装,为了功能复用
Showing
3 changed files
with
76 additions
and
65 deletions
Show diff stats
dto/cardholder-record.go
| @@ -34,7 +34,7 @@ func NewCardHolderRecordBase(uid int64, sequenceId string, cohort string, activi | @@ -34,7 +34,7 @@ func NewCardHolderRecordBase(uid int64, sequenceId string, cohort string, activi | ||
| 34 | // CardHolderRecordOpen 开卡包活动日志开卡包 | 34 | // CardHolderRecordOpen 开卡包活动日志开卡包 |
| 35 | type CardHolderRecordOpen struct { | 35 | type CardHolderRecordOpen struct { |
| 36 | CardHolderRecordBase | 36 | CardHolderRecordBase |
| 37 | - ByClient bool `gorm:"comment:是否由客户端操作"` | 37 | + OpenMode int `gorm:"comment:开包类型0客户端驱动1星星商店购买2剩余星星兑换"` |
| 38 | CardholderId int `gorm:"comment:卡包ID"` | 38 | CardholderId int `gorm:"comment:卡包ID"` |
| 39 | CardList string `gorm:"type:varchar(255);comment:开卡内容"` | 39 | CardList string `gorm:"type:varchar(255);comment:开卡内容"` |
| 40 | } | 40 | } |
| @@ -47,10 +47,10 @@ func (d *CardHolderRecordOpen) GetTableName(gameId string) string { | @@ -47,10 +47,10 @@ func (d *CardHolderRecordOpen) GetTableName(gameId string) string { | ||
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | func NewCardHolderRecordOpen(recordBase CardHolderRecordBase, | 49 | func NewCardHolderRecordOpen(recordBase CardHolderRecordBase, |
| 50 | - byClient bool, cardholderId int, cardList string) *CardHolderRecordOpen { | 50 | + openMode int, cardholderId int, cardList string) *CardHolderRecordOpen { |
| 51 | return &CardHolderRecordOpen{ | 51 | return &CardHolderRecordOpen{ |
| 52 | CardHolderRecordBase: recordBase, | 52 | CardHolderRecordBase: recordBase, |
| 53 | - ByClient: byClient, | 53 | + OpenMode: openMode, |
| 54 | CardholderId: cardholderId, | 54 | CardholderId: cardholderId, |
| 55 | CardList: cardList, | 55 | CardList: cardList, |
| 56 | } | 56 | } |
service/cardholder/handle.go
| 1 | package cardholder | 1 | package cardholder |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | - "apigame/dto" | ||
| 5 | "apigame/models" | 4 | "apigame/models" |
| 6 | "apigame/service/constd" | 5 | "apigame/service/constd" |
| 7 | - "apigame/util/util-lx/lxalilog" | ||
| 8 | "apigame/util/util-lx/lxtime" | 6 | "apigame/util/util-lx/lxtime" |
| 9 | "apigame/util/uttype" | 7 | "apigame/util/uttype" |
| 10 | "strconv" | 8 | "strconv" |
| @@ -92,57 +90,13 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH | @@ -92,57 +90,13 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH | ||
| 92 | 90 | ||
| 93 | // 开始处理抽卡 | 91 | // 开始处理抽卡 |
| 94 | sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) | 92 | sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) |
| 95 | - DoOpen(req, &rsp, | 93 | + newCards, awardAlbum, awardRound := DoOpen(req.GameID, |
| 96 | gameData, config, confCardholder, | 94 | gameData, config, confCardholder, |
| 97 | sequenceId, cohort, | 95 | sequenceId, cohort, |
| 98 | - true) | ||
| 99 | - | ||
| 100 | - // 根据新获得卡牌列表 判断 触发的卡组奖励列表 | ||
| 101 | - for _, cardId := range rsp.NewCards { | ||
| 102 | - confCard, hasConfCard := config.CardConfig[cardId] | ||
| 103 | - if !hasConfCard { | ||
| 104 | - lxalilog.Errors("CardConfig cant find cardId", cardId) | ||
| 105 | - continue | ||
| 106 | - } | ||
| 107 | - albumId := confCard.SetId | ||
| 108 | - // 是否已领过 | ||
| 109 | - countGot := gameData.Details.Album[albumId] | ||
| 110 | - if countGot > 0 { | ||
| 111 | - continue | ||
| 112 | - } | ||
| 113 | - confAlbum, hasConfAlbum := config.AlbumConfig[albumId] | ||
| 114 | - if !hasConfAlbum { | ||
| 115 | - lxalilog.Errors("AlbumConfig cant find albumId", albumId) | ||
| 116 | - continue | ||
| 117 | - } | ||
| 118 | - // 检查卡组内卡是否集齐 | ||
| 119 | - if !CheckAlbumFinish(albumId, gameData, config) { | ||
| 120 | - continue | ||
| 121 | - } | ||
| 122 | - // 集齐处理发奖 | ||
| 123 | - gameData.Details.Album[albumId] += 1 | ||
| 124 | - award := confAlbum.Rewards[uttype.IntToString(gameData.Details.Round)] | ||
| 125 | - rsp.AwardAlbum[albumId] = award | ||
| 126 | - { | ||
| 127 | - // 记录日志 | ||
| 128 | - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) | ||
| 129 | - dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardAlbum(recordBase, | ||
| 130 | - albumId, award)) | ||
| 131 | - } | ||
| 132 | - } | ||
| 133 | - // 判断 处理 发放轮次奖励 轮次完成 | ||
| 134 | - if CheckRoundFinish(gameData, config) { | ||
| 135 | - // 返回奖励 | ||
| 136 | - rsp.AwardRound = config.Awards[uttype.IntToString(gameData.Details.Round)] | ||
| 137 | - | ||
| 138 | - // 记录日志 | ||
| 139 | - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) | ||
| 140 | - dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardRound(recordBase, | ||
| 141 | - rsp.AwardRound)) | ||
| 142 | - | ||
| 143 | - // 处理轮次完成 | ||
| 144 | - HandleNextRound(gameData) | ||
| 145 | - } | 96 | + 0) |
| 97 | + rsp.NewCards = newCards | ||
| 98 | + rsp.AwardAlbum = awardAlbum | ||
| 99 | + rsp.AwardRound = awardRound | ||
| 146 | 100 | ||
| 147 | // 存档 | 101 | // 存档 |
| 148 | SaveData(req.GameID, gameData) | 102 | SaveData(req.GameID, gameData) |
service/cardholder/logic.go
| @@ -4,6 +4,7 @@ import ( | @@ -4,6 +4,7 @@ import ( | ||
| 4 | "apigame/dto" | 4 | "apigame/dto" |
| 5 | "apigame/models" | 5 | "apigame/models" |
| 6 | "apigame/service/constd" | 6 | "apigame/service/constd" |
| 7 | + "apigame/util/util-lx/lxalilog" | ||
| 7 | "apigame/util/util-lx/lxtime" | 8 | "apigame/util/util-lx/lxtime" |
| 8 | "apigame/util/utjson" | 9 | "apigame/util/utjson" |
| 9 | "apigame/util/uttype" | 10 | "apigame/util/uttype" |
| @@ -144,7 +145,7 @@ func CheckRoundFinish(gameData *dto.CardHolderData, config *CardActivityConfig) | @@ -144,7 +145,7 @@ func CheckRoundFinish(gameData *dto.CardHolderData, config *CardActivityConfig) | ||
| 144 | return true | 145 | return true |
| 145 | } | 146 | } |
| 146 | 147 | ||
| 147 | -// HandleNextRound 处理轮次完成 保留卡包 星级序列刻度 卡牌序列刻度 | 148 | +// HandleNextRound 处理轮次完成 星级序列刻度 卡牌序列刻度 |
| 148 | func HandleNextRound(gameData *dto.CardHolderData) { | 149 | func HandleNextRound(gameData *dto.CardHolderData) { |
| 149 | gameData.Details.Round += 1 | 150 | gameData.Details.Round += 1 |
| 150 | gameData.Details.Cards = make(map[int]int) | 151 | gameData.Details.Cards = make(map[int]int) |
| @@ -170,20 +171,24 @@ func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.Card | @@ -170,20 +171,24 @@ func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.Card | ||
| 170 | } | 171 | } |
| 171 | 172 | ||
| 172 | // DoOpen 封装的抽卡逻辑 | 173 | // DoOpen 封装的抽卡逻辑 |
| 173 | -// byClient:true=表示由客户端操作的 false=表示系统剩余星星值兑换的 | ||
| 174 | -func DoOpen(req *models.ReqCardHolderOpen, | ||
| 175 | - rsp *models.RspCardHolderOpen, | 174 | +// openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换 |
| 175 | +func DoOpen(gameId string, | ||
| 176 | gameData *dto.CardHolderData, | 176 | gameData *dto.CardHolderData, |
| 177 | config *CardActivityConfig, | 177 | config *CardActivityConfig, |
| 178 | confCardholder OpenCardholderConfig, | 178 | confCardholder OpenCardholderConfig, |
| 179 | sequenceId, cohort string, | 179 | sequenceId, cohort string, |
| 180 | - byClient bool) { | 180 | + openMode int) (newCards []int, awardAlbum map[int]string, awardRound string) { |
| 181 | + | ||
| 182 | + newCards = make([]int, 0) | ||
| 183 | + awardAlbum = make(map[int]string) | ||
| 184 | + awardRound = "" | ||
| 185 | + | ||
| 181 | if confCardholder.IsNew != 0 { | 186 | if confCardholder.IsNew != 0 { |
| 182 | // 如果是新卡包 按顺序查找数目最少的一张卡抽取 | 187 | // 如果是新卡包 按顺序查找数目最少的一张卡抽取 |
| 183 | cardId := GetNewCard(gameData, config) | 188 | cardId := GetNewCard(gameData, config) |
| 184 | // 增加卡牌 | 189 | // 增加卡牌 |
| 185 | gameData.Details.Cards[cardId] += 1 | 190 | gameData.Details.Cards[cardId] += 1 |
| 186 | - rsp.NewCards = append(rsp.NewCards, cardId) | 191 | + newCards = append(newCards, cardId) |
| 187 | } else { | 192 | } else { |
| 188 | getCardFunc := func(cardConfigId string) { | 193 | getCardFunc := func(cardConfigId string) { |
| 189 | confCardSequence, hasCardSequence := config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort) | 194 | confCardSequence, hasCardSequence := config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort) |
| @@ -196,7 +201,7 @@ func DoOpen(req *models.ReqCardHolderOpen, | @@ -196,7 +201,7 @@ func DoOpen(req *models.ReqCardHolderOpen, | ||
| 196 | gameData.Details.CardSequenceScales[combineId] = scale + 1 | 201 | gameData.Details.CardSequenceScales[combineId] = scale + 1 |
| 197 | // 增加卡牌 | 202 | // 增加卡牌 |
| 198 | gameData.Details.Cards[cardIdInt] += 1 | 203 | gameData.Details.Cards[cardIdInt] += 1 |
| 199 | - rsp.NewCards = append(rsp.NewCards, cardIdInt) | 204 | + newCards = append(newCards, cardIdInt) |
| 200 | } | 205 | } |
| 201 | } | 206 | } |
| 202 | // 正常抽卡 | 207 | // 正常抽卡 |
| @@ -221,14 +226,66 @@ func DoOpen(req *models.ReqCardHolderOpen, | @@ -221,14 +226,66 @@ func DoOpen(req *models.ReqCardHolderOpen, | ||
| 221 | } | 226 | } |
| 222 | } | 227 | } |
| 223 | } | 228 | } |
| 224 | - // 计算星星点数 | ||
| 225 | - CalculateStarCount(gameData, config) | ||
| 226 | // 记录开卡包日志 | 229 | // 记录开卡包日志 |
| 227 | { | 230 | { |
| 228 | recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) | 231 | recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) |
| 229 | - dto.SaveRecord(req.GameID, dto.NewCardHolderRecordOpen(recordBase, | ||
| 230 | - byClient, req.Id, utjson.JsonString(rsp.NewCards))) | 232 | + dto.SaveRecord(gameId, dto.NewCardHolderRecordOpen(recordBase, |
| 233 | + openMode, uttype.StringToInt(confCardholder.Id), utjson.JsonString(newCards))) | ||
| 234 | + } | ||
| 235 | + | ||
| 236 | + if openMode == 0 || openMode == 1 { | ||
| 237 | + // 根据新获得卡牌列表 判断 触发的卡组奖励列表 | ||
| 238 | + for _, cardId := range newCards { | ||
| 239 | + confCard, hasConfCard := config.CardConfig[cardId] | ||
| 240 | + if !hasConfCard { | ||
| 241 | + lxalilog.Errors("CardConfig cant find cardId", cardId) | ||
| 242 | + continue | ||
| 243 | + } | ||
| 244 | + albumId := confCard.SetId | ||
| 245 | + // 是否已领过 | ||
| 246 | + countGot := gameData.Details.Album[albumId] | ||
| 247 | + if countGot > 0 { | ||
| 248 | + continue | ||
| 249 | + } | ||
| 250 | + confAlbum, hasConfAlbum := config.AlbumConfig[albumId] | ||
| 251 | + if !hasConfAlbum { | ||
| 252 | + lxalilog.Errors("AlbumConfig cant find albumId", albumId) | ||
| 253 | + continue | ||
| 254 | + } | ||
| 255 | + // 检查卡组内卡是否集齐 | ||
| 256 | + if !CheckAlbumFinish(albumId, gameData, config) { | ||
| 257 | + continue | ||
| 258 | + } | ||
| 259 | + // 集齐处理发奖 | ||
| 260 | + gameData.Details.Album[albumId] += 1 | ||
| 261 | + award := confAlbum.Rewards[uttype.IntToString(gameData.Details.Round)] | ||
| 262 | + awardAlbum[albumId] = award | ||
| 263 | + { | ||
| 264 | + // 记录日志 | ||
| 265 | + recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) | ||
| 266 | + dto.SaveRecord(gameId, dto.NewCardHolderRecordRewardAlbum(recordBase, | ||
| 267 | + albumId, award)) | ||
| 268 | + } | ||
| 269 | + } | ||
| 270 | + // 判断 处理 发放轮次奖励 轮次完成 | ||
| 271 | + if CheckRoundFinish(gameData, config) { | ||
| 272 | + // 返回奖励 | ||
| 273 | + awardRound = config.Awards[uttype.IntToString(gameData.Details.Round)] | ||
| 274 | + | ||
| 275 | + // 记录日志 | ||
| 276 | + recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round) | ||
| 277 | + dto.SaveRecord(gameId, dto.NewCardHolderRecordRewardRound(recordBase, | ||
| 278 | + awardRound)) | ||
| 279 | + | ||
| 280 | + // 处理轮次完成 | ||
| 281 | + HandleNextRound(gameData) | ||
| 282 | + } | ||
| 231 | } | 283 | } |
| 284 | + | ||
| 285 | + // 计算星星点数 | ||
| 286 | + CalculateStarCount(gameData, config) | ||
| 287 | + | ||
| 288 | + return | ||
| 232 | } | 289 | } |
| 233 | 290 | ||
| 234 | // CalculateStarCount 计算星星点数 | 291 | // CalculateStarCount 计算星星点数 |