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 | 34 | // CardHolderRecordOpen 开卡包活动日志开卡包 |
| 35 | 35 | type CardHolderRecordOpen struct { |
| 36 | 36 | CardHolderRecordBase |
| 37 | - ByClient bool `gorm:"comment:是否由客户端操作"` | |
| 37 | + OpenMode int `gorm:"comment:开包类型0客户端驱动1星星商店购买2剩余星星兑换"` | |
| 38 | 38 | CardholderId int `gorm:"comment:卡包ID"` |
| 39 | 39 | CardList string `gorm:"type:varchar(255);comment:开卡内容"` |
| 40 | 40 | } |
| ... | ... | @@ -47,10 +47,10 @@ func (d *CardHolderRecordOpen) GetTableName(gameId string) string { |
| 47 | 47 | } |
| 48 | 48 | |
| 49 | 49 | func NewCardHolderRecordOpen(recordBase CardHolderRecordBase, |
| 50 | - byClient bool, cardholderId int, cardList string) *CardHolderRecordOpen { | |
| 50 | + openMode int, cardholderId int, cardList string) *CardHolderRecordOpen { | |
| 51 | 51 | return &CardHolderRecordOpen{ |
| 52 | 52 | CardHolderRecordBase: recordBase, |
| 53 | - ByClient: byClient, | |
| 53 | + OpenMode: openMode, | |
| 54 | 54 | CardholderId: cardholderId, |
| 55 | 55 | CardList: cardList, |
| 56 | 56 | } | ... | ... |
service/cardholder/handle.go
| 1 | 1 | package cardholder |
| 2 | 2 | |
| 3 | 3 | import ( |
| 4 | - "apigame/dto" | |
| 5 | 4 | "apigame/models" |
| 6 | 5 | "apigame/service/constd" |
| 7 | - "apigame/util/util-lx/lxalilog" | |
| 8 | 6 | "apigame/util/util-lx/lxtime" |
| 9 | 7 | "apigame/util/uttype" |
| 10 | 8 | "strconv" |
| ... | ... | @@ -92,57 +90,13 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH |
| 92 | 90 | |
| 93 | 91 | // 开始处理抽卡 |
| 94 | 92 | sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) |
| 95 | - DoOpen(req, &rsp, | |
| 93 | + newCards, awardAlbum, awardRound := DoOpen(req.GameID, | |
| 96 | 94 | gameData, config, confCardholder, |
| 97 | 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 | 102 | SaveData(req.GameID, gameData) | ... | ... |
service/cardholder/logic.go
| ... | ... | @@ -4,6 +4,7 @@ import ( |
| 4 | 4 | "apigame/dto" |
| 5 | 5 | "apigame/models" |
| 6 | 6 | "apigame/service/constd" |
| 7 | + "apigame/util/util-lx/lxalilog" | |
| 7 | 8 | "apigame/util/util-lx/lxtime" |
| 8 | 9 | "apigame/util/utjson" |
| 9 | 10 | "apigame/util/uttype" |
| ... | ... | @@ -144,7 +145,7 @@ func CheckRoundFinish(gameData *dto.CardHolderData, config *CardActivityConfig) |
| 144 | 145 | return true |
| 145 | 146 | } |
| 146 | 147 | |
| 147 | -// HandleNextRound 处理轮次完成 保留卡包 星级序列刻度 卡牌序列刻度 | |
| 148 | +// HandleNextRound 处理轮次完成 星级序列刻度 卡牌序列刻度 | |
| 148 | 149 | func HandleNextRound(gameData *dto.CardHolderData) { |
| 149 | 150 | gameData.Details.Round += 1 |
| 150 | 151 | gameData.Details.Cards = make(map[int]int) |
| ... | ... | @@ -170,20 +171,24 @@ func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.Card |
| 170 | 171 | } |
| 171 | 172 | |
| 172 | 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 | 176 | gameData *dto.CardHolderData, |
| 177 | 177 | config *CardActivityConfig, |
| 178 | 178 | confCardholder OpenCardholderConfig, |
| 179 | 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 | 186 | if confCardholder.IsNew != 0 { |
| 182 | 187 | // 如果是新卡包 按顺序查找数目最少的一张卡抽取 |
| 183 | 188 | cardId := GetNewCard(gameData, config) |
| 184 | 189 | // 增加卡牌 |
| 185 | 190 | gameData.Details.Cards[cardId] += 1 |
| 186 | - rsp.NewCards = append(rsp.NewCards, cardId) | |
| 191 | + newCards = append(newCards, cardId) | |
| 187 | 192 | } else { |
| 188 | 193 | getCardFunc := func(cardConfigId string) { |
| 189 | 194 | confCardSequence, hasCardSequence := config.FindCardSequenceConfig(cardConfigId, sequenceId, cohort) |
| ... | ... | @@ -196,7 +201,7 @@ func DoOpen(req *models.ReqCardHolderOpen, |
| 196 | 201 | gameData.Details.CardSequenceScales[combineId] = scale + 1 |
| 197 | 202 | // 增加卡牌 |
| 198 | 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 | 226 | } |
| 222 | 227 | } |
| 223 | 228 | } |
| 224 | - // 计算星星点数 | |
| 225 | - CalculateStarCount(gameData, config) | |
| 226 | 229 | // 记录开卡包日志 |
| 227 | 230 | { |
| 228 | 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 | 291 | // CalculateStarCount 计算星星点数 | ... | ... |