Commit 02370d5ef05e735c211a9bec784b919a2c9787c1
1 parent
e29f5b42
Exists in
master
and in
1 other branch
feat✨:获取新卡功能
Showing
9 changed files
with
150 additions
and
21 deletions
Show diff stats
configs/confbase/external.go
| @@ -84,25 +84,23 @@ func GetCurrent[T1 IConfData, T2 IConfRawData](gameId string, obj T1) bool { | @@ -84,25 +84,23 @@ func GetCurrent[T1 IConfData, T2 IConfRawData](gameId string, obj T1) bool { | ||
| 84 | currentKey := info.CacheCurrent | 84 | currentKey := info.CacheCurrent |
| 85 | currentId := zredis.GetString(currentKey) | 85 | currentId := zredis.GetString(currentKey) |
| 86 | confRaw := new(T2) | 86 | confRaw := new(T2) |
| 87 | - hasFind := false | ||
| 88 | - if currentId == "" { | ||
| 89 | - hasFind = FindDuringTime[T1, T2](obj, confRaw, gameId) | ||
| 90 | - } else { | 87 | + if currentId != "" { |
| 91 | has = GetConfig[T1, T2](gameId, currentId, obj) | 88 | has = GetConfig[T1, T2](gameId, currentId, obj) |
| 92 | if has { | 89 | if has { |
| 93 | if !obj.CheckCurrent() { | 90 | if !obj.CheckCurrent() { |
| 94 | - hasFind = FindDuringTime[T1, T2](obj, confRaw, gameId) | 91 | + has = false |
| 95 | } | 92 | } |
| 96 | - } else { | ||
| 97 | - hasFind = FindDuringTime[T1, T2](obj, confRaw, gameId) | ||
| 98 | } | 93 | } |
| 99 | } | 94 | } |
| 100 | - if hasFind { | ||
| 101 | - obj.Decode(gameId, confRaw) | ||
| 102 | - SaveCache(gameId, obj) | ||
| 103 | - has = true | ||
| 104 | - currentId = obj.GetUid() | ||
| 105 | - _ = zredis.Set(currentKey, currentId) | 95 | + if !has { |
| 96 | + has = FindDuringTime[T1, T2](obj, confRaw, gameId) | ||
| 97 | + if has { | ||
| 98 | + obj.Decode(gameId, confRaw) | ||
| 99 | + SaveCache(gameId, obj) | ||
| 100 | + has = true | ||
| 101 | + currentId = obj.GetUid() | ||
| 102 | + _ = zredis.Set(currentKey, currentId) | ||
| 103 | + } | ||
| 106 | } | 104 | } |
| 107 | return has | 105 | return has |
| 108 | } | 106 | } |
controllers/cardholder.go
| @@ -47,6 +47,18 @@ func (c *CardHolderController) Open() { | @@ -47,6 +47,18 @@ func (c *CardHolderController) Open() { | ||
| 47 | c.RetRspCodeData(code, rsp) | 47 | c.RetRspCodeData(code, rsp) |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | +// CardAdd 获取新卡 | ||
| 51 | +func (c *CardHolderController) CardAdd() { | ||
| 52 | + req := new(models.ReqCardAdd) | ||
| 53 | + if !c.GetPostData(req) { | ||
| 54 | + return | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + code, rsp := cardholder.HandleCardAdd(req) | ||
| 58 | + | ||
| 59 | + c.RetRspCodeData(code, rsp) | ||
| 60 | +} | ||
| 61 | + | ||
| 50 | // ShopExchange 星星商店兑换 | 62 | // ShopExchange 星星商店兑换 |
| 51 | func (c *CardHolderController) ShopExchange() { | 63 | func (c *CardHolderController) ShopExchange() { |
| 52 | req := new(models.ReqStarShopExchange) | 64 | req := new(models.ReqStarShopExchange) |
models/cardholder.go
| @@ -52,6 +52,21 @@ type RspCardHolderOpen struct { | @@ -52,6 +52,21 @@ type RspCardHolderOpen struct { | ||
| 52 | AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发 | 52 | AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发 |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | +// ReqCardAdd 请求 获取新卡 | ||
| 56 | +type ReqCardAdd struct { | ||
| 57 | + BaseLoginInfo | ||
| 58 | + BaseSign | ||
| 59 | + CardId int `form:"card_id" json:"card_id" valid:"Required"` // 获取的新卡ID | ||
| 60 | +} | ||
| 61 | + | ||
| 62 | +// RspCardAdd 返回 获取新卡 | ||
| 63 | +type RspCardAdd struct { | ||
| 64 | + CardHolderInfo | ||
| 65 | + CardId int `form:"card_id" json:"card_id" valid:"Required"` // 获取的新卡ID | ||
| 66 | + AwardAlbum map[int]string `form:"award_album" json:"award_album"` // 触发的卡组奖励列表 k=出发的卡组ID v=对应奖励 | ||
| 67 | + AwardRound string `form:"award_round" json:"award_round"` // 触发的轮次奖励列表 空字符串未触发 | ||
| 68 | +} | ||
| 69 | + | ||
| 55 | // ReqStarShopExchange 请求 星星商店兑换 | 70 | // ReqStarShopExchange 请求 星星商店兑换 |
| 56 | type ReqStarShopExchange struct { | 71 | type ReqStarShopExchange struct { |
| 57 | BaseLoginInfo | 72 | BaseLoginInfo |
routers/router.go
| @@ -29,6 +29,8 @@ func init() { | @@ -29,6 +29,8 @@ func init() { | ||
| 29 | beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info") | 29 | beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info") |
| 30 | // 卡包打开 | 30 | // 卡包打开 |
| 31 | beego.Router(prefix+"/cardholder/open", &controllers.CardHolderController{}, "post:Open") | 31 | beego.Router(prefix+"/cardholder/open", &controllers.CardHolderController{}, "post:Open") |
| 32 | + // 获取新卡 | ||
| 33 | + beego.Router(prefix+"/cardholder/cardadd", &controllers.CardHolderController{}, "post:CardAdd") | ||
| 32 | // 星星商店兑换 | 34 | // 星星商店兑换 |
| 33 | beego.Router(prefix+"/cardholder/shopexchange", &controllers.CardHolderController{}, "post:ShopExchange") | 35 | beego.Router(prefix+"/cardholder/shopexchange", &controllers.CardHolderController{}, "post:ShopExchange") |
| 34 | // 上期剩余星星自动兑换信息 | 36 | // 上期剩余星星自动兑换信息 |
service-common/svconst/mysql.go
| @@ -14,6 +14,7 @@ const ( | @@ -14,6 +14,7 @@ const ( | ||
| 14 | MYSQL_TABLE_S_CARDHOLDER_CONFIG = "s_card_activity" // 开卡包活动配置 | 14 | MYSQL_TABLE_S_CARDHOLDER_CONFIG = "s_card_activity" // 开卡包活动配置 |
| 15 | MYSQL_TABLE_S_CARDHOLDER_DATA = "s_game_cardholder_data" // 开卡包活动数据 | 15 | MYSQL_TABLE_S_CARDHOLDER_DATA = "s_game_cardholder_data" // 开卡包活动数据 |
| 16 | MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN = "s_game_cardholder_record_open" // 开卡包活动日志开卡包 | 16 | MYSQL_TABLE_S_CARDHOLDER_RECORD_OPEN = "s_game_cardholder_record_open" // 开卡包活动日志开卡包 |
| 17 | + MYSQL_TABLE_S_CARDHOLDER_RECORD_CARDADD = "s_game_cardholder_record_cardadd" // 开卡包活动日志获取新卡 | ||
| 17 | MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM = "s_game_cardholder_record_rewardalbum" // 开卡包活动日志领取卡组奖励 | 18 | MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM = "s_game_cardholder_record_rewardalbum" // 开卡包活动日志领取卡组奖励 |
| 18 | MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND = "s_game_cardholder_record_rewardround" // 开卡包活动日志领取轮次奖励 | 19 | MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDROUND = "s_game_cardholder_record_rewardround" // 开卡包活动日志领取轮次奖励 |
| 19 | 20 |
service/cardholder/dto-record.go
| @@ -58,6 +58,28 @@ func NewRecordOpen(recordBase RecordBase, | @@ -58,6 +58,28 @@ func NewRecordOpen(recordBase RecordBase, | ||
| 58 | } | 58 | } |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | +// RecordCardAdd 获取新卡 | ||
| 62 | +type RecordCardAdd struct { | ||
| 63 | + RecordBase | ||
| 64 | + CardId int `gorm:"comment:卡牌ID"` | ||
| 65 | +} | ||
| 66 | + | ||
| 67 | +func (d *RecordCardAdd) MysqlInfo(suffix string) *svmysql.MysqlInfo { | ||
| 68 | + tableName := svconst.MYSQL_TABLE_S_CARDHOLDER_RECORD_CARDADD | ||
| 69 | + return &svmysql.MysqlInfo{ | ||
| 70 | + DbMysql: svconst.DbCommon, | ||
| 71 | + TableName: fmt.Sprintf("%s_%s", tableName, suffix), | ||
| 72 | + } | ||
| 73 | +} | ||
| 74 | + | ||
| 75 | +func NewRecordCardAdd(recordBase RecordBase, | ||
| 76 | + cardId int) *RecordCardAdd { | ||
| 77 | + return &RecordCardAdd{ | ||
| 78 | + RecordBase: recordBase, | ||
| 79 | + CardId: cardId, | ||
| 80 | + } | ||
| 81 | +} | ||
| 82 | + | ||
| 61 | // RecordRewardAlbum 领取卡组奖励 | 83 | // RecordRewardAlbum 领取卡组奖励 |
| 62 | type RecordRewardAlbum struct { | 84 | type RecordRewardAlbum struct { |
| 63 | RecordBase | 85 | RecordBase |
service/cardholder/handle.go
| @@ -3,6 +3,7 @@ package cardholder | @@ -3,6 +3,7 @@ package cardholder | ||
| 3 | import ( | 3 | import ( |
| 4 | "apigame/configs/confcardholder" | 4 | "apigame/configs/confcardholder" |
| 5 | "apigame/models" | 5 | "apigame/models" |
| 6 | + "apigame/service-common/svmysql" | ||
| 6 | "apigame/service/code-msg" | 7 | "apigame/service/code-msg" |
| 7 | "apigame/util/util-lx/lxalilog" | 8 | "apigame/util/util-lx/lxalilog" |
| 8 | "apigame/util/util-lx/lxtime" | 9 | "apigame/util/util-lx/lxtime" |
| @@ -17,14 +18,16 @@ func HandleGetConfig(req *models.ReqCardHolderGetConfig) (code string, rsp model | @@ -17,14 +18,16 @@ func HandleGetConfig(req *models.ReqCardHolderGetConfig) (code string, rsp model | ||
| 17 | gameId := req.GameID | 18 | gameId := req.GameID |
| 18 | 19 | ||
| 19 | // 尝试更新配置 | 20 | // 尝试更新配置 |
| 20 | - config, _ := confcardholder.GetCurrent(gameId) | ||
| 21 | - rsp.ActivityId = config.Id | ||
| 22 | - rsp.PrepareTime = config.PreviewTime | ||
| 23 | - rsp.StartTime = config.StartTime | ||
| 24 | - rsp.EndTime = config.EndTime | ||
| 25 | - rsp.OpenLevel = config.OpenLevel | ||
| 26 | - | ||
| 27 | - rsp.Config = config.Client | 21 | + config, hasConfig := confcardholder.GetCurrent(gameId) |
| 22 | + if hasConfig { | ||
| 23 | + rsp.ActivityId = config.Id | ||
| 24 | + rsp.PrepareTime = config.PreviewTime | ||
| 25 | + rsp.StartTime = config.StartTime | ||
| 26 | + rsp.EndTime = config.EndTime | ||
| 27 | + rsp.OpenLevel = config.OpenLevel | ||
| 28 | + | ||
| 29 | + rsp.Config = config.Client | ||
| 30 | + } | ||
| 28 | 31 | ||
| 29 | return | 32 | return |
| 30 | } | 33 | } |
| @@ -135,6 +138,79 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH | @@ -135,6 +138,79 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH | ||
| 135 | return | 138 | return |
| 136 | } | 139 | } |
| 137 | 140 | ||
| 141 | +// HandleCardAdd 获取新卡 | ||
| 142 | +func HandleCardAdd(req *models.ReqCardAdd) (code string, rsp models.RspCardAdd) { | ||
| 143 | + rsp = models.RspCardAdd{ | ||
| 144 | + CardId: req.CardId, | ||
| 145 | + AwardAlbum: make(map[int]string), | ||
| 146 | + } | ||
| 147 | + code = code_msg.RECODE_OK | ||
| 148 | + gameId := req.GameID | ||
| 149 | + playerUid := req.UID | ||
| 150 | + | ||
| 151 | + // 尝试更新配置 | ||
| 152 | + config, hasConfig := confcardholder.GetCurrent(gameId) | ||
| 153 | + if !hasConfig { | ||
| 154 | + code = code_msg.RECODE_MERGE_CARDHOLDER_NOTOPEN_ERROR | ||
| 155 | + return | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + // 检查活动状态 | ||
| 159 | + code = CheckStatus(config) | ||
| 160 | + if code != code_msg.RECODE_OK { | ||
| 161 | + return | ||
| 162 | + } | ||
| 163 | + // 检查牌ID | ||
| 164 | + _, okCard := config.CardConfig[req.CardId] | ||
| 165 | + if !okCard { | ||
| 166 | + code = code_msg.RECODE_MERGE_CARDHOLDER_CARDID_ERROR | ||
| 167 | + return | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + // 读取游戏数据 | ||
| 171 | + player := LoadPlayer(gameId, playerUid, config) | ||
| 172 | + // 检查游戏数据 轮次等 | ||
| 173 | + code = CheckGameData(player, config) | ||
| 174 | + if code != code_msg.RECODE_OK { | ||
| 175 | + return | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + // 增加卡牌 | ||
| 179 | + player.Details.Cards[req.CardId] += 1 | ||
| 180 | + | ||
| 181 | + // 剩余检查处理 | ||
| 182 | + openMode := 0 | ||
| 183 | + sequenceId, cohort := GetUserSequenceIdAndCohort(player.Uid) | ||
| 184 | + allNewCards := []int{req.CardId} | ||
| 185 | + | ||
| 186 | + // 记录日志 | ||
| 187 | + { | ||
| 188 | + recordBase := NewRecordBase(player.Uid, sequenceId, cohort, config.Id, player.Details.Round) | ||
| 189 | + _ = svmysql.Create(NewRecordCardAdd(recordBase, | ||
| 190 | + req.CardId), | ||
| 191 | + gameId) | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | + awardAlbum, awardRound := DoOpenCheckAward(gameId, | ||
| 195 | + player, config, | ||
| 196 | + sequenceId, cohort, | ||
| 197 | + allNewCards, | ||
| 198 | + openMode) | ||
| 199 | + rsp.AwardAlbum = awardAlbum | ||
| 200 | + rsp.AwardRound = awardRound | ||
| 201 | + | ||
| 202 | + // 计算星星点数 | ||
| 203 | + CalculateStarCount(player, config) | ||
| 204 | + | ||
| 205 | + // 存档 | ||
| 206 | + SavePlayer(gameId, player) | ||
| 207 | + | ||
| 208 | + // 返回信息 | ||
| 209 | + rsp.CardHolderInfo = GetInfo(player, config) | ||
| 210 | + | ||
| 211 | + return | ||
| 212 | +} | ||
| 213 | + | ||
| 138 | // HandleShopExchange 星星商店兑换 | 214 | // HandleShopExchange 星星商店兑换 |
| 139 | func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp models.RspStarShopExchange) { | 215 | func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp models.RspStarShopExchange) { |
| 140 | rsp = models.RspStarShopExchange{ | 216 | rsp = models.RspStarShopExchange{ |
service/code-msg/code-msg.go
| @@ -48,6 +48,7 @@ const ( | @@ -48,6 +48,7 @@ const ( | ||
| 48 | RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR = "2105" | 48 | RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR = "2105" |
| 49 | RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR = "2106" | 49 | RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR = "2106" |
| 50 | RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR = "2107" | 50 | RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR = "2107" |
| 51 | + RECODE_MERGE_CARDHOLDER_CARDID_ERROR = "2108" | ||
| 51 | 52 | ||
| 52 | RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR = "2200" | 53 | RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR = "2200" |
| 53 | RECODE_MERGE_ROOMRANK_LEVEL_ERROR = "2201" | 54 | RECODE_MERGE_ROOMRANK_LEVEL_ERROR = "2201" |
| @@ -102,6 +103,7 @@ var recodeText = map[string]string{ | @@ -102,6 +103,7 @@ var recodeText = map[string]string{ | ||
| 102 | RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR: "商店ID错误", | 103 | RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR: "商店ID错误", |
| 103 | RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR: "星星商店星星不足", | 104 | RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR: "星星商店星星不足", |
| 104 | RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR: "没有星星商店自动兑换信息", | 105 | RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR: "没有星星商店自动兑换信息", |
| 106 | + RECODE_MERGE_CARDHOLDER_CARDID_ERROR: "卡牌ID错误", | ||
| 105 | 107 | ||
| 106 | RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR: "活动未开放", | 108 | RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR: "活动未开放", |
| 107 | RECODE_MERGE_ROOMRANK_LEVEL_ERROR: "参与等级不足", | 109 | RECODE_MERGE_ROOMRANK_LEVEL_ERROR: "参与等级不足", |
service/init.go
| @@ -13,6 +13,7 @@ func Init() { | @@ -13,6 +13,7 @@ func Init() { | ||
| 13 | for _, gameId := range svconst.GameListCardHolder { | 13 | for _, gameId := range svconst.GameListCardHolder { |
| 14 | svmysql.InitTable(new(cardholder.Player), gameId, true) | 14 | svmysql.InitTable(new(cardholder.Player), gameId, true) |
| 15 | svmysql.InitTable(new(cardholder.RecordOpen), gameId, true) | 15 | svmysql.InitTable(new(cardholder.RecordOpen), gameId, true) |
| 16 | + svmysql.InitTable(new(cardholder.RecordCardAdd), gameId, true) | ||
| 16 | svmysql.InitTable(new(cardholder.RecordRewardAlbum), gameId, true) | 17 | svmysql.InitTable(new(cardholder.RecordRewardAlbum), gameId, true) |
| 17 | svmysql.InitTable(new(cardholder.RecordRewardRound), gameId, true) | 18 | svmysql.InitTable(new(cardholder.RecordRewardRound), gameId, true) |
| 18 | } | 19 | } |