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