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,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 \ No newline at end of file 0 \ No newline at end of file
conf/conf/db/s_cardholder_record_rewardalbum_.sql
@@ -5,7 +5,7 @@ CREATE TABLE `{tablename}` ( @@ -5,7 +5,7 @@ CREATE TABLE `{tablename}` (
5 `cohort` 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', 6 `activity_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '活动ID',
7 `round` int(11) NOT NULL DEFAULT 0 COMMENT '活动轮次', 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 `award` varchar(255) NOT NULL DEFAULT '' COMMENT '奖励内容', 9 `award` varchar(255) NOT NULL DEFAULT '' COMMENT '奖励内容',
10 `create_time` bigint(20) 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 '修改时间戳', 11 `update_time` bigint(20) NOT NULL DEFAULT 0 COMMENT '修改时间戳',
controllers/cardholder.go
@@ -10,14 +10,14 @@ type CardHolderController struct { @@ -10,14 +10,14 @@ type CardHolderController struct {
10 BaseController 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 if !c.GetPostData(req) { 16 if !c.GetPostData(req) {
17 return 17 return
18 } 18 }
19 19
20 - code, rsp := cardholder.HandleActivityInfo(req) 20 + code, rsp := cardholder.HandleGetConfig(req)
21 21
22 c.RetRspCodeData(code, rsp) 22 c.RetRspCodeData(code, rsp)
23 } 23 }
@@ -34,18 +34,6 @@ func (c *CardHolderController) Info() { @@ -34,18 +34,6 @@ func (c *CardHolderController) Info() {
34 c.RetRspCodeData(code, rsp) 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 // Open 卡包打开 37 // Open 卡包打开
50 func (c *CardHolderController) Open() { 38 func (c *CardHolderController) Open() {
51 req := new(models.ReqCardHolderOpen) 39 req := new(models.ReqCardHolderOpen)
@@ -57,27 +45,3 @@ func (c *CardHolderController) Open() { @@ -57,27 +45,3 @@ func (c *CardHolderController) Open() {
57 45
58 c.RetRspCodeData(code, rsp) 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,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 // CardHolderRecordOpen 开卡包活动日志开卡包 46 // CardHolderRecordOpen 开卡包活动日志开卡包
78 type CardHolderRecordOpen struct { 47 type CardHolderRecordOpen struct {
79 CardHolderRecordBase 48 CardHolderRecordBase
@@ -108,7 +77,7 @@ func NewCardHolderRecordOpen(recordBase CardHolderRecordBase, @@ -108,7 +77,7 @@ func NewCardHolderRecordOpen(recordBase CardHolderRecordBase,
108 // CardHolderRecordRewardAlbum 开卡包活动日志领取卡组奖励 77 // CardHolderRecordRewardAlbum 开卡包活动日志领取卡组奖励
109 type CardHolderRecordRewardAlbum struct { 78 type CardHolderRecordRewardAlbum struct {
110 CardHolderRecordBase 79 CardHolderRecordBase
111 - AlbumId int // 卡组ID 80 + AlbumId string // 卡组ID
112 Award string // 奖励内容 81 Award string // 奖励内容
113 } 82 }
114 83
@@ -122,13 +91,13 @@ func (d *CardHolderRecordRewardAlbum) CreateSqlPath() string { @@ -122,13 +91,13 @@ func (d *CardHolderRecordRewardAlbum) CreateSqlPath() string {
122 91
123 func (d *CardHolderRecordRewardAlbum) SqlPairs() map[string]string { 92 func (d *CardHolderRecordRewardAlbum) SqlPairs() map[string]string {
124 m := d.SqlPairsBase() 93 m := d.SqlPairsBase()
125 - m["album_id"] = fmt.Sprintf("%d", d.AlbumId) 94 + m["album_id"] = fmt.Sprintf("'%s'", d.AlbumId)
126 m["award"] = fmt.Sprintf("'%s'", d.Award) 95 m["award"] = fmt.Sprintf("'%s'", d.Award)
127 return m 96 return m
128 } 97 }
129 98
130 func NewCardHolderRecordRewardAlbum(recordBase CardHolderRecordBase, 99 func NewCardHolderRecordRewardAlbum(recordBase CardHolderRecordBase,
131 - albumId int, award string) *CardHolderRecordRewardAlbum { 100 + albumId string, award string) *CardHolderRecordRewardAlbum {
132 return &CardHolderRecordRewardAlbum{ 101 return &CardHolderRecordRewardAlbum{
133 CardHolderRecordBase: recordBase, 102 CardHolderRecordBase: recordBase,
134 AlbumId: albumId, 103 AlbumId: albumId,
dto/cardholder.go
@@ -16,7 +16,6 @@ func InitCardholder() { @@ -16,7 +16,6 @@ func InitCardholder() {
16 for _, gameId := range constd.GameListCardHolder { 16 for _, gameId := range constd.GameListCardHolder {
17 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderData), gameId) 17 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderData), gameId)
18 18
19 - CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordGetNew), gameId)  
20 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordOpen), gameId) 19 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordOpen), gameId)
21 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardAlbum), gameId) 20 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardAlbum), gameId)
22 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardRound), gameId) 21 CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardRound), gameId)
@@ -36,7 +35,6 @@ type CardHolderData struct { @@ -36,7 +35,6 @@ type CardHolderData struct {
36 35
37 // CardHolderDataDetails 卡牌活动详情 36 // CardHolderDataDetails 卡牌活动详情
38 type CardHolderDataDetails struct { 37 type CardHolderDataDetails struct {
39 - Cardholder map[int]int // 卡包数量 k=卡包ID v=卡包数量  
40 Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量 38 Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量
41 Album map[string]int // 卡组奖励领取 k=卡组ID v=数量 39 Album map[string]int // 卡组奖励领取 k=卡组ID v=数量
42 StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度 40 StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度
@@ -55,7 +53,6 @@ func NewCardHolderData(uid int64) *CardHolderData { @@ -55,7 +53,6 @@ func NewCardHolderData(uid int64) *CardHolderData {
55 53
56 func NewCardHolderDataDetails() *CardHolderDataDetails { 54 func NewCardHolderDataDetails() *CardHolderDataDetails {
57 return &CardHolderDataDetails{ 55 return &CardHolderDataDetails{
58 - Cardholder: make(map[int]int),  
59 Cards: make(map[int]int), 56 Cards: make(map[int]int),
60 Album: make(map[string]int), 57 Album: make(map[string]int),
61 StarSequenceScales: make(map[string]int), 58 StarSequenceScales: make(map[string]int),
models/cardholder.go
@@ -2,14 +2,14 @@ package models @@ -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 BaseLoginInfo 7 BaseLoginInfo
8 BaseSign 8 BaseSign
9 } 9 }
10 10
11 -// RspCardHolderActivityInfo 返回 活动信息  
12 -type RspCardHolderActivityInfo struct { 11 +// RspCardHolderGetConfig 返回 活动配置
  12 +type RspCardHolderGetConfig struct {
13 ActivityId int64 `form:"activity_id" json:"activity_id"` // 活动配置 0=无活动 13 ActivityId int64 `form:"activity_id" json:"activity_id"` // 活动配置 0=无活动
14 PreviewTime int64 `form:"preview_time" json:"preview_time"` // 活动预告时间 14 PreviewTime int64 `form:"preview_time" json:"preview_time"` // 活动预告时间
15 StartTime int64 `form:"start_time" json:"start_time"` // 活动开始时间 15 StartTime int64 `form:"start_time" json:"start_time"` // 活动开始时间
@@ -18,10 +18,9 @@ type RspCardHolderActivityInfo struct { @@ -18,10 +18,9 @@ type RspCardHolderActivityInfo struct {
18 18
19 // CardHolderInfo 卡包信息 19 // CardHolderInfo 卡包信息
20 type CardHolderInfo struct { 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 // ReqCardHolderInfo 请求 卡包信息 26 // ReqCardHolderInfo 请求 卡包信息
@@ -58,7 +57,9 @@ type ReqCardHolderOpen struct { @@ -58,7 +57,9 @@ type ReqCardHolderOpen struct {
58 // RspCardHolderOpen 返回 打开卡包 57 // RspCardHolderOpen 返回 打开卡包
59 type RspCardHolderOpen struct { 58 type RspCardHolderOpen struct {
60 CardHolderInfo 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 // ReqCardHolderGetRewardAlbum 请求 领取卡组奖励 65 // ReqCardHolderGetRewardAlbum 请求 领取卡组奖励
routers/router.go
@@ -10,19 +10,13 @@ func init() { @@ -10,19 +10,13 @@ func init() {
10 10
11 prefix := "/3ad7e4ab95ae2249" 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 beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info") 17 beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info")
18 - // 获取卡包  
19 - beego.Router(prefix+"/cardholder/getnew", &controllers.CardHolderController{}, "post:GetNew")  
20 // 卡包打开 18 // 卡包打开
21 beego.Router(prefix+"/cardholder/open", &controllers.CardHolderController{}, "post:Open") 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 beego.ErrorController(&controllers.ErrorController{}) 21 beego.ErrorController(&controllers.ErrorController{})
28 } 22 }
service/cardholder/handle.go
@@ -4,15 +4,16 @@ import ( @@ -4,15 +4,16 @@ 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"
10 "strconv" 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 code = constd.RECODE_OK 17 code = constd.RECODE_OK
17 18
18 // 尝试更新配置 19 // 尝试更新配置
@@ -52,61 +53,12 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH @@ -52,61 +53,12 @@ func HandleInfo(req *models.ReqCardHolderInfo) (code string, rsp models.RspCardH
52 return 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 // HandleOpen 打开卡包 56 // HandleOpen 打开卡包
108 func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardHolderOpen) { 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 code = constd.RECODE_OK 62 code = constd.RECODE_OK
111 63
112 // 尝试更新配置 64 // 尝试更新配置
@@ -136,13 +88,6 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -136,13 +88,6 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
136 return 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 sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID) 92 sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
148 //logs.Debug("wjwdbg 用户序列组IDsequenceId", sequenceId) 93 //logs.Debug("wjwdbg 用户序列组IDsequenceId", sequenceId)
@@ -196,148 +141,67 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH @@ -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 SaveData(req.GameID, gameData) 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 rsp.CardHolderInfo = GetInfo(gameData, config) 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,6 +120,30 @@ func GetNewCard(gameData *dto.CardHolderData, conf *CardActivityConfig) int {
120 return int(indexMin % rate) 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 // HandleNextRound 处理轮次完成 保留卡包 星级序列刻度 卡牌序列刻度 147 // HandleNextRound 处理轮次完成 保留卡包 星级序列刻度 卡牌序列刻度
124 func HandleNextRound(gameData *dto.CardHolderData) { 148 func HandleNextRound(gameData *dto.CardHolderData) {
125 gameData.Details.Round += 1 149 gameData.Details.Round += 1
@@ -129,13 +153,9 @@ func HandleNextRound(gameData *dto.CardHolderData) { @@ -129,13 +153,9 @@ func HandleNextRound(gameData *dto.CardHolderData) {
129 153
130 func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.CardHolderInfo { 154 func GetInfo(gameData *dto.CardHolderData, conf *CardActivityConfig) models.CardHolderInfo {
131 info := models.CardHolderInfo{ 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 for i, i2 := range gameData.Details.Cards { 160 for i, i2 := range gameData.Details.Cards {
141 info.Cards[i] = i2 161 info.Cards[i] = i2