Commit 02370d5ef05e735c211a9bec784b919a2c9787c1

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

feat✨:获取新卡功能

configs/confbase/external.go
... ... @@ -84,25 +84,23 @@ func GetCurrent[T1 IConfData, T2 IConfRawData](gameId string, obj T1) bool {
84 84 currentKey := info.CacheCurrent
85 85 currentId := zredis.GetString(currentKey)
86 86 confRaw := new(T2)
87   - hasFind := false
88   - if currentId == "" {
89   - hasFind = FindDuringTime[T1, T2](obj, confRaw, gameId)
90   - } else {
  87 + if currentId != "" {
91 88 has = GetConfig[T1, T2](gameId, currentId, obj)
92 89 if has {
93 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 105 return has
108 106 }
... ...
controllers/cardholder.go
... ... @@ -47,6 +47,18 @@ func (c *CardHolderController) Open() {
47 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 62 // ShopExchange 星星商店兑换
51 63 func (c *CardHolderController) ShopExchange() {
52 64 req := new(models.ReqStarShopExchange)
... ...
models/cardholder.go
... ... @@ -52,6 +52,21 @@ type RspCardHolderOpen struct {
52 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 70 // ReqStarShopExchange 请求 星星商店兑换
56 71 type ReqStarShopExchange struct {
57 72 BaseLoginInfo
... ...
routers/router.go
... ... @@ -29,6 +29,8 @@ func init() {
29 29 beego.Router(prefix+"/cardholder/info", &controllers.CardHolderController{}, "post:Info")
30 30 // 卡包打开
31 31 beego.Router(prefix+"/cardholder/open", &controllers.CardHolderController{}, "post:Open")
  32 + // 获取新卡
  33 + beego.Router(prefix+"/cardholder/cardadd", &controllers.CardHolderController{}, "post:CardAdd")
32 34 // 星星商店兑换
33 35 beego.Router(prefix+"/cardholder/shopexchange", &controllers.CardHolderController{}, "post:ShopExchange")
34 36 // 上期剩余星星自动兑换信息
... ...
service-common/svconst/mysql.go
... ... @@ -14,6 +14,7 @@ const (
14 14 MYSQL_TABLE_S_CARDHOLDER_CONFIG = "s_card_activity" // 开卡包活动配置
15 15 MYSQL_TABLE_S_CARDHOLDER_DATA = "s_game_cardholder_data" // 开卡包活动数据
16 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 18 MYSQL_TABLE_S_CARDHOLDER_RECORD_REWARDALBUM = "s_game_cardholder_record_rewardalbum" // 开卡包活动日志领取卡组奖励
18 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 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 83 // RecordRewardAlbum 领取卡组奖励
62 84 type RecordRewardAlbum struct {
63 85 RecordBase
... ...
service/cardholder/handle.go
... ... @@ -3,6 +3,7 @@ package cardholder
3 3 import (
4 4 "apigame/configs/confcardholder"
5 5 "apigame/models"
  6 + "apigame/service-common/svmysql"
6 7 "apigame/service/code-msg"
7 8 "apigame/util/util-lx/lxalilog"
8 9 "apigame/util/util-lx/lxtime"
... ... @@ -17,14 +18,16 @@ func HandleGetConfig(req *models.ReqCardHolderGetConfig) (code string, rsp model
17 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 32 return
30 33 }
... ... @@ -135,6 +138,79 @@ func HandleOpen(req *models.ReqCardHolderOpen) (code string, rsp models.RspCardH
135 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 214 // HandleShopExchange 星星商店兑换
139 215 func HandleShopExchange(req *models.ReqStarShopExchange) (code string, rsp models.RspStarShopExchange) {
140 216 rsp = models.RspStarShopExchange{
... ...
service/code-msg/code-msg.go
... ... @@ -48,6 +48,7 @@ const (
48 48 RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR = "2105"
49 49 RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR = "2106"
50 50 RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR = "2107"
  51 + RECODE_MERGE_CARDHOLDER_CARDID_ERROR = "2108"
51 52  
52 53 RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR = "2200"
53 54 RECODE_MERGE_ROOMRANK_LEVEL_ERROR = "2201"
... ... @@ -102,6 +103,7 @@ var recodeText = map[string]string{
102 103 RECODE_MERGE_CARDHOLDER_STARSHOPID_ERROR: "商店ID错误",
103 104 RECODE_MERGE_CARDHOLDER_STAR_NOTENOUGH_ERROR: "星星商店星星不足",
104 105 RECODE_MERGE_CARDHOLDER_NOAUTOEXCHANGEINFO_ERROR: "没有星星商店自动兑换信息",
  106 + RECODE_MERGE_CARDHOLDER_CARDID_ERROR: "卡牌ID错误",
105 107  
106 108 RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR: "活动未开放",
107 109 RECODE_MERGE_ROOMRANK_LEVEL_ERROR: "参与等级不足",
... ...
service/init.go
... ... @@ -13,6 +13,7 @@ func Init() {
13 13 for _, gameId := range svconst.GameListCardHolder {
14 14 svmysql.InitTable(new(cardholder.Player), gameId, true)
15 15 svmysql.InitTable(new(cardholder.RecordOpen), gameId, true)
  16 + svmysql.InitTable(new(cardholder.RecordCardAdd), gameId, true)
16 17 svmysql.InitTable(new(cardholder.RecordRewardAlbum), gameId, true)
17 18 svmysql.InitTable(new(cardholder.RecordRewardRound), gameId, true)
18 19 }
... ...