Commit 6af892a65da0b39f824ed31da80d3dd134a7fe5e

Authored by 王家文
1 parent 580d49bd
Exists in master and in 1 other branch dev-wjw

feat✨:开卡包封装,为了功能复用

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 计算星星点数
... ...