Commit 6321bf8d9eb44a648be811404d0bbdd3a6f5e1c4

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

feat✨:卡包卡牌活动按照新需求优化接口

conf/conf/db/s_cardholder_record_getnew_.sql
... ... @@ -1,13 +0,0 @@
1   -CREATE TABLE `{tablename}` (
2   - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
3   - `uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '玩家唯一ID',
4   - `sequence_id` varchar(255) NOT NULL DEFAULT '' COMMENT '用户序列组ID',
5   - `cohort` varchar(255) NOT NULL DEFAULT '' COMMENT '用户分组ID',
6   - `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID',
7   - `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次',
8   - `cardholder_id` int(11) NOT NULL DEFAULT 0 COMMENT '卡包ID',
9   - `cardholder_count` int(11) NOT NULL DEFAULT 0 COMMENT '卡包数量',
10   - `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳',
11   - `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳',
12   - PRIMARY KEY (`id`) USING BTREE
13   -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '开卡包活动日志获得卡包';
14 0 \ No newline at end of file
conf/conf/db/s_cardholder_record_rewardalbum_.sql
... ... @@ -5,7 +5,7 @@ CREATE TABLE `{tablename}` (
5 5 `cohort` varchar(255) NOT NULL DEFAULT '' COMMENT '用户分组ID',
6 6 `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID',
7 7 `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次',
8   - `album_id` int(11) NOT NULL DEFAULT 0 COMMENT '卡组ID',
  8 + `album_id` varchar(255) NOT NULL DEFAULT '' COMMENT '卡组ID',
9 9 `award` varchar(255) NOT NULL DEFAULT '' COMMENT '奖励内容',
10 10 `create_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '创建时间戳',
11 11 `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳',
... ...
controllers/cardholder.go
... ... @@ -10,14 +10,14 @@ type CardHolderController struct {
10 10 BaseController
11 11 }
12 12  
13   -// ActivityInfo 活动信息
14   -func (c *CardHolderController) ActivityInfo() {
15   - req := new(models.ReqCardHolderActivityInfo)
  13 +// GetConfig 活动配置
  14 +func (c *CardHolderController) GetConfig() {
  15 + req := new(models.ReqCardHolderGetConfig)
16 16 if !c.GetPostData(req) {
17 17 return
18 18 }
19 19  
20   - code, rsp := cardholder.HandleActivityInfo(req)
  20 + code, rsp := cardholder.HandleGetConfig(req)
21 21  
22 22 c.RetRspCodeData(code, rsp)
23 23 }
... ... @@ -34,18 +34,6 @@ func (c *CardHolderController) Info() {
34 34 c.RetRspCodeData(code, rsp)
35 35 }
36 36  
37   -// GetNew 获取卡包
38   -func (c *CardHolderController) GetNew() {
39   - req := new(models.ReqCardHolderGetNew)
40   - if !c.GetPostData(req) {
41   - return
42   - }
43   -
44   - code, rsp := cardholder.HandleGetNew(req)
45   -
46   - c.RetRspCodeData(code, rsp)
47   -}
48   -
49 37 // Open 卡包打开
50 38 func (c *CardHolderController) Open() {
51 39 req := new(models.ReqCardHolderOpen)
... ... @@ -57,27 +45,3 @@ func (c *CardHolderController) Open() {
57 45  
58 46 c.RetRspCodeData(code, rsp)
59 47 }
60   -
61   -// GetRewardAlbum 领取卡组奖励
62   -func (c *CardHolderController) GetRewardAlbum() {
63   - req := new(models.ReqCardHolderGetRewardAlbum)
64   - if !c.GetPostData(req) {
65   - return
66   - }
67   -
68   - code, rsp := cardholder.HandleGetRewardAlbum(req)
69   -
70   - c.RetRspCodeData(code, rsp)
71   -}
72   -
73   -// GetRewardRound 领取轮次奖励
74   -func (c *CardHolderController) GetRewardRound() {
75   - req := new(models.ReqCardHolderGetRewardRound)
76   - if !c.GetPostData(req) {
77   - return
78   - }
79   -
80   - code, rsp := cardholder.HandleGetRewardRound(req)
81   -
82   - c.RetRspCodeData(code, rsp)
83   -}
... ...
dto/cardholder-record.go
... ... @@ -43,37 +43,6 @@ func NewCardHolderRecordBase(uid int64, sequenceId string, cohort string, activi
43 43 }
44 44 }
45 45  
46   -// CardHolderRecordGetNew 开卡包活动日志获得卡包
47   -type CardHolderRecordGetNew struct {
48   - CardHolderRecordBase
49   - CardholderId int // 卡包ID
50   - CardholderCount int // 卡包数量
51   -}
52   -
53   -func (d *CardHolderRecordGetNew) TableName(gameId string) string {
54   - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW + gameId
55   -}
56   -
57   -func (d *CardHolderRecordGetNew) CreateSqlPath() string {
58   - return constd.MYSQL_TABLE_S_CARDHOLDER_RECORD_GETNEW
59   -}
60   -
61   -func (d *CardHolderRecordGetNew) SqlPairs() map[string]string {
62   - m := d.SqlPairsBase()
63   - m["cardholder_id"] = fmt.Sprintf("%d", d.CardholderId)
64   - m["cardholder_count"] = fmt.Sprintf("%d", d.CardholderCount)
65   - return m
66   -}
67   -
68   -func NewCardHolderRecordGetNew(recordBase CardHolderRecordBase,
69   - cardholderId int, cardholderCount int) *CardHolderRecordGetNew {
70   - return &CardHolderRecordGetNew{
71   - CardHolderRecordBase: recordBase,
72   - CardholderId: cardholderId,
73   - CardholderCount: cardholderCount,
74   - }
75   -}
76   -
77 46 // CardHolderRecordOpen 开卡包活动日志开卡包
78 47 type CardHolderRecordOpen struct {
79 48 CardHolderRecordBase
... ... @@ -108,7 +77,7 @@ func NewCardHolderRecordOpen(recordBase CardHolderRecordBase,
108 77 // CardHolderRecordRewardAlbum 开卡包活动日志领取卡组奖励
109 78 type CardHolderRecordRewardAlbum struct {
110 79 CardHolderRecordBase
111   - AlbumId int // 卡组ID
  80 + AlbumId string // 卡组ID
112 81 Award string // 奖励内容
113 82 }
114 83  
... ... @@ -122,13 +91,13 @@ func (d *CardHolderRecordRewardAlbum) CreateSqlPath() string {
122 91  
123 92 func (d *CardHolderRecordRewardAlbum) SqlPairs() map[string]string {
124 93 m := d.SqlPairsBase()
125   - m["album_id"] = fmt.Sprintf("%d", d.AlbumId)
  94 + m["album_id"] = fmt.Sprintf("'%s'", d.AlbumId)
126 95 m["award"] = fmt.Sprintf("'%s'", d.Award)
127 96 return m
128 97 }
129 98  
130 99 func NewCardHolderRecordRewardAlbum(recordBase CardHolderRecordBase,
131   - albumId int, award string) *CardHolderRecordRewardAlbum {
  100 + albumId string, award string) *CardHolderRecordRewardAlbum {
132 101 return &CardHolderRecordRewardAlbum{
133 102 CardHolderRecordBase: recordBase,
134 103 AlbumId: albumId,
... ...
dto/cardholder.go
... ... @@ -16,7 +16,6 @@ func InitCardholder() {
16 16 for _, gameId := range constd.GameListCardHolder {
17 17 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderData), gameId)
18 18  
19   - CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordGetNew), gameId)
20 19 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordOpen), gameId)
21 20 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardAlbum), gameId)
22 21 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardRound), gameId)
... ... @@ -36,7 +35,6 @@ type CardHolderData struct {
36 35  
37 36 // CardHolderDataDetails 卡牌活动详情
38 37 type CardHolderDataDetails struct {
39   - Cardholder map[int]int // 卡包数量 k=卡包ID v=卡包数量
40 38 Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量
41 39 Album map[string]int // 卡组奖励领取 k=卡组ID v=数量
42 40 StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度
... ... @@ -55,7 +53,6 @@ func NewCardHolderData(uid int64) *CardHolderData {
55 53  
56 54 func NewCardHolderDataDetails() *CardHolderDataDetails {
57 55 return &CardHolderDataDetails{
58   - Cardholder: make(map[int]int),
59 56 Cards: make(map[int]int),
60 57 Album: make(map[string]int),
61 58 StarSequenceScales: make(map[string]int),
... ...
models/cardholder.go
... ... @@ -2,14 +2,14 @@ package models
2 2  
3 3 // 卡包
4 4  
5   -// ReqCardHolderActivityInfo 请求 活动信息
6   -type ReqCardHolderActivityInfo struct {
  5 +// ReqCardHolderGetConfig 请求 活动配置
  6 +type ReqCardHolderGetConfig struct {
7 7 BaseLoginInfo
8 8 BaseSign
9 9 }
10 10  
11   -// RspCardHolderActivityInfo 返回 活动信息
12   -type RspCardHolderActivityInfo struct {
  11 +// RspCardHolderGetConfig 返回 活动配置
  12 +type RspCardHolderGetConfig struct {
13 13 ActivityId int64 `form:"activity_id" json:"activity_id"` // 活动配置 0=无活动
14 14 PreviewTime int64 `form:"preview_time" json:"preview_time"` // 活动预告时间
15 15 StartTime int64 `form:"start_time" json:"start_time"` // 活动开始时间
... ... @@ -18,10 +18,9 @@ type RspCardHolderActivityInfo struct {
18 18  
19 19 // CardHolderInfo 卡包信息
20 20 type CardHolderInfo struct {
21   - Cardholder map[int]int `form:"cardholder" json:"cardholder"` // 卡包数量 k=卡包ID v=卡包数量
22   - Cards map[int]int `form:"cards" json:"cards"` // 每张卡集了多少张 k=卡牌ID v=数量
23   - Album map[string]int `form:"album" json:"album"` // 卡组奖励领取 k=卡组ID v=数量
24   - Round int `form:"round" json:"round"` // 卡册当前轮次
  21 + Cards map[int]int `form:"cards" json:"cards"` // 每张卡集了多少张 k=卡牌ID v=数量
  22 + Album map[string]int `form:"album" json:"album"` // 卡组奖励领取 k=卡组ID v=数量
  23 + Round int `form:"round" json:"round"` // 卡册当前轮次
25 24 }
26 25  
27 26 // ReqCardHolderInfo 请求 卡包信息
... ... @@ -58,7 +57,9 @@ type ReqCardHolderOpen struct {
58 57 // RspCardHolderOpen 返回 打开卡包
59 58 type RspCardHolderOpen struct {
60 59 CardHolderInfo
61   - NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表
  60 + NewCards []int `form:"new_cards" json:"new_cards"` // 新获得的卡牌列表
  61 + AwardAlbum map[string]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励
  62 + AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发
62 63 }
63 64  
64 65 // ReqCardHolderGetRewardAlbum 请求 领取卡组奖励
... ...
routers/router.go
... ... @@ -10,19 +10,13 @@ func init() {
10 10  
11 11 prefix := "/3ad7e4ab95ae2249"
12 12  
13   - // 海滩项目
14   - // 活动信息
15   - beego.Router(prefix+"/cardholder/activityinfo", &controllers.CardHolderController{}, "post:ActivityInfo")
  13 + // 卡包卡牌活动
  14 + // 活动配置
  15 + beego.Router(prefix+"/cardholder/getconfig", &controllers.CardHolderController{}, "post:GetConfig")
16 16 // 卡包信息
17 17 beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info")
18   - // 获取卡包
19   - beego.Router(prefix+"/cardholder/getnew", &controllers.CardHolderController{}, "post:GetNew")
20 18 // 卡包打开
21 19 beego.Router(prefix+"/cardholder/open", &controllers.CardHolderController{}, "post:Open")
22   - // 领取卡组奖励
23   - beego.Router(prefix+"/cardholder/getrewardalbum", &controllers.CardHolderController{}, "post:GetRewardAlbum")
24   - // 领取轮次奖励
25   - beego.Router(prefix+"/cardholder/getrewardround", &controllers.CardHolderController{}, "post:GetRewardRound")
26 20  
27 21 beego.ErrorController(&controllers.ErrorController{})
28 22 }
... ...
service/cardholder/handle.go
... ... @@ -4,15 +4,16 @@ 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"
10 11 "strconv"
11 12 )
12 13  
13   -// HandleActivityInfo 活动信息
14   -func HandleActivityInfo(req *models.ReqCardHolderActivityInfo) (code string, rsp models.RspCardHolderActivityInfo) {
15   - rsp = models.RspCardHolderActivityInfo{}
  14 +// HandleGetConfig 活动配置
  15 +func HandleGetConfig(req *models.ReqCardHolderGetConfig) (code string, rsp models.RspCardHolderGetConfig) {
  16 + rsp = models.RspCardHolderGetConfig{}
16 17 code = constd.RECODE_OK
17 18  
18 19 // 尝试更新配置
... ... @@ -52,61 +53,12 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
52 53 return
53 54 }
54 55  
55   -// HandleGetNew 获取卡包
56   -func HandleGetNew(req *models.ReqCardHolderGetNew) (code string, rsp models.RspCardHolderGetNew) {
57   - rsp = models.RspCardHolderGetNew{}
58   - code = constd.RECODE_OK
59   -
60   - // 尝试更新配置
61   - config, hasConfig := TryUpdateConfig(req.GameID)
62   - if !hasConfig {
63   - code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
64   - return
65   - }
66   -
67   - // 检查活动状态
68   - code = CheckStatus(config)
69   - if code != constd.RECODE_OK {
70   - return
71   - }
72   - // 检查卡包ID
73   - _, okCardholderConfig := config.CardholderConfig[strconv.Itoa(req.Id)]
74   - if !okCardholderConfig {
75   - code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR
76   - return
77   - }
78   - // 检查卡包数量
79   - if req.Count < 1 {
80   - code = constd.RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR
81   - return
82   - }
83   -
84   - // 读取游戏数据
85   - gameData := LoadData(req.GameID, req.UID, config.Id)
86   - // 检查游戏数据 轮次等
87   - code = CheckGameData(gameData, config)
88   - if code != constd.RECODE_OK {
89   - return
90   - }
91   -
92   - gameData.Details.Cardholder[req.Id] += req.Count
93   - SaveData(req.GameID, gameData)
94   -
95   - // 返回信息
96   - rsp.CardHolderInfo = GetInfo(gameData, config)
97   -
98   - sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
99   - // 记录日志
100   - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
101   - dto.SaveRecord(req.GameID, dto.NewCardHolderRecordGetNew(recordBase,
102   - req.Id, req.Count))
103   -
104   - return
105   -}
106   -
107 56 // HandleOpen 打开卡包
108 57 func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardHolderOpen) {
109   - rsp = models.RspCardHolderOpen{}
  58 + rsp = models.RspCardHolderOpen{
  59 + NewCards: make([]int, 0),
  60 + AwardAlbum: make(map[string]string),
  61 + }
110 62 code = constd.RECODE_OK
111 63  
112 64 // 尝试更新配置
... ... @@ -136,13 +88,6 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
136 88 return
137 89 }
138 90  
139   - // 判断卡包数目
140   - countOld, _ := gameData.Details.Cardholder[req.Id]
141   - if countOld < 1 {
142   - code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR
143   - return
144   - }
145   -
146 91 // 开始处理抽卡
147 92 sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
148 93 //logs.Debug("wjwdbg 用户序列组IDsequenceId", sequenceId)
... ... @@ -196,148 +141,67 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
196 141 }
197 142 }
198 143  
199   - // 删除一个卡包
200   - gameData.Details.Cardholder[req.Id] = countOld - 1
201   -
202   - // 存档
203   - SaveData(req.GameID, gameData)
204   -
205   - // 记录日志
206   - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
207   - dto.SaveRecord(req.GameID, dto.NewCardHolderRecordOpen(recordBase,
208   - req.Id, utjson.JsonString(rsp.NewCards)))
209   -
210   - //logs.Debug("wjwdbg 获取卡牌列表:", rsp.NewCards)
211   - uttype.Shuffle(rsp.NewCards)
212   - //logs.Debug("wjwdbg 获取卡牌列表打乱:", rsp.NewCards)
213   -
214   - // 返回信息
215   - rsp.CardHolderInfo = GetInfo(gameData, config)
216   -
217   - return
218   -}
219   -
220   -// HandleGetRewardAlbum 领取卡组奖励
221   -func HandleGetRewardAlbum(req *models.ReqCardHolderGetRewardAlbum) (code string, rsp models.RspCardHolderGetRewardAlbum) {
222   - rsp = models.RspCardHolderGetRewardAlbum{}
223   - code = constd.RECODE_OK
224   -
225   - // 尝试更新配置
226   - config, hasConfig := TryUpdateConfig(req.GameID)
227   - if !hasConfig {
228   - code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
229   - return
  144 + // 记录开卡包日志
  145 + {
  146 + recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
  147 + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordOpen(recordBase,
  148 + req.Id, utjson.JsonString(rsp.NewCards)))
230 149 }
231 150  
232   - // 检查活动状态
233   - code = CheckStatus(config)
234   - if code != constd.RECODE_OK {
235   - return
236   - }
237   - // 检查卡组ID
238   - albumId := strconv.Itoa(req.Id)
239   - confAlbum, okAlbum := config.AlbumConfig[albumId]
240   - if !okAlbum {
241   - code = constd.RECODE_MERGE_CARDHOLDER_ALBUMID_ERROR
242   - return
243   - }
244   -
245   - // 读取游戏数据
246   - gameData := LoadData(req.GameID, req.UID, config.Id)
247   - // 检查游戏数据 轮次等
248   - code = CheckGameData(gameData, config)
249   - if code != constd.RECODE_OK {
250   - return
251   - }
252   -
253   - // 是否已领过
254   - countGot := gameData.Details.Album[albumId]
255   - if countGot > 0 {
256   - code = constd.RECODE_MERGE_CARDHOLDER_ALBUM_HASGOT_ERROR
257   - return
258   - }
259   - // 检查卡组内卡是否集齐
260   - for _, conf := range config.CardConfig {
261   - if conf.SetId == albumId {
262   - count := gameData.Details.Cards[conf.Id]
263   - if count < 1 {
264   - code = constd.RECODE_MERGE_CARDHOLDER_ALBUM_NOTFINISH_ERROR
265   - return
266   - }
  151 + // 根据新获得卡牌列表 判断 触发的卡组奖励列表
  152 + for _, cardId := range rsp.NewCards {
  153 + confCard, hasConfCard := config.CardConfig[cardId]
  154 + if !hasConfCard {
  155 + lxalilog.Errors("CardConfig cant find cardId", cardId)
  156 + continue
267 157 }
268   - }
269   -
270   - gameData.Details.Album[albumId] += 1
271   - SaveData(req.GameID, gameData)
272   -
273   - // 当前轮次
274   - round := gameData.Details.Round
275   - // 返回奖励
276   - rsp.Award = confAlbum.Rewards[uttype.IntToString(round)]
277   -
278   - // 返回信息
279   - rsp.CardHolderInfo = GetInfo(gameData, config)
280   -
281   - sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
282   - // 记录日志
283   - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
284   - dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardAlbum(recordBase,
285   - req.Id, rsp.Award))
286   -
287   - return
288   -}
289   -
290   -// HandleGetRewardRound 领取轮次奖励
291   -func HandleGetRewardRound(req *models.ReqCardHolderGetRewardRound) (code string, rsp models.RspCardHolderGetRewardRound) {
292   - rsp = models.RspCardHolderGetRewardRound{}
293   - code = constd.RECODE_OK
294   -
295   - // 尝试更新配置
296   - config, hasConfig := TryUpdateConfig(req.GameID)
297   - if !hasConfig {
298   - code = constd.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR
299   - return
300   - }
301   -
302   - // 检查活动状态
303   - code = CheckStatus(config)
304   - if code != constd.RECODE_OK {
305   - return
306   - }
307   -
308   - // 读取游戏数据
309   - gameData := LoadData(req.GameID, req.UID, config.Id)
310   - // 检查游戏数据 轮次等
311   - code = CheckGameData(gameData, config)
312   - if code != constd.RECODE_OK {
313   - return
314   - }
315   -
316   - // 判断所有卡组是否已经集齐
317   - // 检查卡组内卡是否集齐
318   - for _, conf := range config.AlbumConfig {
319   - count := gameData.Details.Album[conf.SetId]
320   - if count < 1 {
321   - code = constd.RECODE_MERGE_CARDHOLDER_ROUND_NOTFINISH_ERROR
322   - return
  158 + albumId := confCard.SetId
  159 + // 是否已领过
  160 + countGot := gameData.Details.Album[albumId]
  161 + if countGot > 0 {
  162 + continue
  163 + }
  164 + confAlbum, hasConfAlbum := config.AlbumConfig[albumId]
  165 + if !hasConfAlbum {
  166 + lxalilog.Errors("AlbumConfig cant find albumId", albumId)
  167 + continue
  168 + }
  169 + // 检查卡组内卡是否集齐
  170 + if !CheckAlbumFinish(albumId, gameData, config) {
  171 + continue
  172 + }
  173 + // 集齐处理发奖
  174 + gameData.Details.Album[albumId] += 1
  175 + award := confAlbum.Rewards[uttype.IntToString(gameData.Details.Round)]
  176 + rsp.AwardAlbum[albumId] = award
  177 + {
  178 + // 记录日志
  179 + recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
  180 + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardAlbum(recordBase,
  181 + albumId, award))
323 182 }
324 183 }
  184 + // 判断 处理 发放轮次奖励 轮次完成
  185 + if CheckRoundFinish(gameData, config) {
  186 + // 返回奖励
  187 + rsp.AwardRound = config.Awards[uttype.IntToString(gameData.Details.Round)]
325 188  
326   - // 当前轮次
327   - round := gameData.Details.Round
328   - // 返回奖励
329   - rsp.Award = config.Awards[uttype.IntToString(round)]
  189 + // 记录日志
  190 + recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
  191 + dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardRound(recordBase,
  192 + rsp.AwardRound))
330 193  
331   - sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
332   - // 记录日志
333   - recordBase := dto.NewCardHolderRecordBase(gameData.Uid, sequenceId, cohort, config.Id, gameData.Details.Round)
334   - dto.SaveRecord(req.GameID, dto.NewCardHolderRecordRewardRound(recordBase,
335   - rsp.Award))
  194 + // 处理轮次完成
  195 + HandleNextRound(gameData)
  196 + }
336 197  
337   - // 处理轮次完成
338   - HandleNextRound(gameData)
  198 + // 存档
339 199 SaveData(req.GameID, gameData)
340 200  
  201 + //logs.Debug("wjwdbg 获取卡牌列表:", rsp.NewCards)
  202 + uttype.Shuffle(rsp.NewCards)
  203 + //logs.Debug("wjwdbg 获取卡牌列表打乱:", rsp.NewCards)
  204 +
341 205 // 返回信息
342 206 rsp.CardHolderInfo = GetInfo(gameData, config)
343 207  
... ...
service/cardholder/logic.go
... ... @@ -120,6 +120,30 @@ func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int {
120 120 return int(indexMin % rate)
121 121 }
122 122  
  123 +// CheckAlbumFinish 判断卡组是否已集齐
  124 +func CheckAlbumFinish(albumId string, gameData *dto.CardHolderData, config *CardActivityConfig) bool {
  125 + for _, conf := range config.CardConfig {
  126 + if conf.SetId == albumId {
  127 + count := gameData.Details.Cards[conf.Id]
  128 + if count < 1 {
  129 + return false
  130 + }
  131 + }
  132 + }
  133 + return true
  134 +}
  135 +
  136 +// CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐)
  137 +func CheckRoundFinish(gameData *dto.CardHolderData, config *CardActivityConfig) bool {
  138 + for _, conf := range config.AlbumConfig {
  139 + count := gameData.Details.Album[conf.SetId]
  140 + if count < 1 {
  141 + return false
  142 + }
  143 + }
  144 + return true
  145 +}
  146 +
123 147 // HandleNextRound 处理轮次完成 保留卡包 星级序列刻度 卡牌序列刻度
124 148 func HandleNextRound(gameData *dto.CardHolderData) {
125 149 gameData.Details.Round += 1
... ... @@ -129,13 +153,9 @@ func HandleNextRound(gameData *dto.CardHolderData) {
129 153  
130 154 func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.CardHolderInfo {
131 155 info := models.CardHolderInfo{
132   - Cardholder: make(map[int]int),
133   - Cards: make(map[int]int),
134   - Album: make(map[string]int),
135   - Round: 0,
136   - }
137   - for i, i2 := range gameData.Details.Cardholder {
138   - info.Cardholder[i] = i2
  156 + Cards: make(map[int]int),
  157 + Album: make(map[string]int),
  158 + Round: 0,
139 159 }
140 160 for i, i2 := range gameData.Details.Cards {
141 161 info.Cards[i] = i2
... ...