Commit 6321bf8d9eb44a648be811404d0bbdd3a6f5e1c4
1 parent
6df4243b
Exists in
master
and in
1 other branch
feat✨:卡包卡牌活动按照新需求优化接口
Showing
9 changed files
with
107 additions
and
311 deletions
Show diff stats
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 | ... | ... |