diff --git a/service/cardholder/dto-game.go b/service/cardholder/dto-game.go index ee5b75f..4069890 100644 --- a/service/cardholder/dto-game.go +++ b/service/cardholder/dto-game.go @@ -2,39 +2,33 @@ package cardholder import ( "apigame/common/svconst" - "apigame/common/svdto" + "apigame/common/svmysql" "apigame/service/constd" - "apigame/util/utdto" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" "encoding/json" - "fmt" ) -// CardHolderData 卡牌活动持久数据 -type CardHolderData struct { +// DataCardHolder 卡牌活动持久数据 +type DataCardHolder struct { Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"` ActivityId int64 `gorm:"comment:活动ID"` - Details *CardHolderDataDetails `gorm:"-"` // 活动详情 + Details *DataCardHolderDetails `gorm:"-"` // 活动详情 DetailsText string `gorm:"comment:活动详情封装"` CreateTime int64 `gorm:"comment:创建时间戳"` UpdateTime int64 `gorm:"comment:修改时间戳"` } -func (c *CardHolderData) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE } - -func (d *CardHolderData) GetRule(gameId string) *svdto.DtoRule { +func (d *DataCardHolder) MysqlInfo(gameId string) *svmysql.MysqlInfo { tableName := constd.MYSQL_TABLE_S_CARDHOLDER_DATA - return &svdto.DtoRule{ + return &svmysql.MysqlInfo{ DbMysql: svconst.DbCommon, TableName: tableName + gameId, - CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId), - CacheTime: 300, } } -// CardHolderDataDetails 卡牌活动详情 -type CardHolderDataDetails struct { +// DataCardHolderDetails 卡牌活动详情 +type DataCardHolderDetails struct { Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量 Album map[int]int // 卡组奖励领取 k=卡组ID v=数量 StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度 @@ -45,17 +39,17 @@ type CardHolderDataDetails struct { AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表 } -func NewCardHolderData(uid int64) *CardHolderData { - d := &CardHolderData{ +func NewDataCardHolder(uid int64) *DataCardHolder { + d := &DataCardHolder{ Uid: uid, - Details: NewCardHolderDataDetails(), + Details: NewDataCardHolderDetails(), } d.Encode() return d } -func NewCardHolderDataDetails() *CardHolderDataDetails { - return &CardHolderDataDetails{ +func NewDataCardHolderDetails() *DataCardHolderDetails { + return &DataCardHolderDetails{ Cards: make(map[int]int), Album: make(map[int]int), StarSequenceScales: make(map[string]int), @@ -66,26 +60,26 @@ func NewCardHolderDataDetails() *CardHolderDataDetails { } } -func (d *CardHolderData) Init(uid int64) { +func (d *DataCardHolder) Init(uid int64) { d.Uid = uid d.CreateTime = lxtime.NowUninx() } // Encode 打包数据 -func (d *CardHolderData) Encode() { +func (d *DataCardHolder) Encode() { details, err := json.Marshal(d.Details) if err != nil { - lxalilog.Errors(err, "CardHolderData Encode Error", d.Uid, d.ActivityId) + lxalilog.Errors(err, "DataCardHolder Encode Error", d.Uid, d.ActivityId) return } d.DetailsText = string(details) } // Decode 分包数据 -func (d *CardHolderData) Decode() { +func (d *DataCardHolder) Decode() { err := json.Unmarshal([]byte(d.DetailsText), d.Details) if err != nil { - lxalilog.Errors(err, "CardHolderData Decode Error", d.Uid, d.ActivityId) + lxalilog.Errors(err, "DataCardHolder Decode Error", d.Uid, d.ActivityId) return } } diff --git a/service/cardholder/init.go b/service/cardholder/init.go index 207b98a..98472cc 100644 --- a/service/cardholder/init.go +++ b/service/cardholder/init.go @@ -3,6 +3,7 @@ package cardholder import ( "apigame/common/svconst" "apigame/common/svdto" + "apigame/common/svmysql" ) func Init() { @@ -10,7 +11,7 @@ func Init() { // create table // 卡牌卡包 for _, gameId := range svconst.GameListCardHolder { - svdto.InitTable(new(CardHolderData), gameId) + svmysql.InitTable(new(DataCardHolder), gameId) svdto.InitTable(new(CardHolderRecordOpen), gameId) svdto.InitTable(new(CardHolderRecordRewardAlbum), gameId) svdto.InitTable(new(CardHolderRecordRewardRound), gameId) diff --git a/service/cardholder/logic.go b/service/cardholder/logic.go index b2c18ba..a222bf3 100644 --- a/service/cardholder/logic.go +++ b/service/cardholder/logic.go @@ -2,6 +2,7 @@ package cardholder import ( "apigame/common/svdto" + "apigame/common/svmysql" "apigame/configs" "apigame/models" "apigame/service/constd" @@ -16,16 +17,16 @@ import ( ) // SaveData 存储数据 -func SaveData(gameId string, d *CardHolderData) { +func SaveData(gameId string, d *DataCardHolder) { d.UpdateTime = lxtime.NowUninx() d.Encode() - svdto.Save(d, gameId) + _ = svmysql.Save(d, gameId) } -func _LoadData(gameId string, uid int64) (d *CardHolderData) { - d = NewCardHolderData(uid) - has, err := svdto.First(d, gameId) +func _LoadData(gameId string, uid int64) (d *DataCardHolder) { + d = NewDataCardHolder(uid) + has, err := svmysql.First(d, gameId) if err != nil { return } @@ -33,13 +34,13 @@ func _LoadData(gameId string, uid int64) (d *CardHolderData) { d.Decode() } else { d.Init(uid) - svdto.Insert(d, gameId) + _ = svmysql.Insert(d, gameId) } return } // LoadData 获取数据 外部接口 -func LoadData(gameId string, uid int64, config *configs.CardActivityConfig) (d *CardHolderData) { +func LoadData(gameId string, uid int64, config *configs.CardActivityConfig) (d *DataCardHolder) { configId := config.Id d = _LoadData(gameId, uid) // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新 @@ -50,7 +51,7 @@ func LoadData(gameId string, uid int64, config *configs.CardActivityConfig) (d * starCount := d.Details.StarCount d.ActivityId = configId - d.Details = NewCardHolderDataDetails() + d.Details = NewDataCardHolderDetails() // 使用剩余的星星数来自动兑换卡包 d.Details.LastStarCount = starCount @@ -77,7 +78,7 @@ func CheckStatus(conf *configs.CardActivityConfig) string { } // CheckGameData 检查游戏数据 轮次等 -func CheckGameData(d *CardHolderData, conf *configs.CardActivityConfig) string { +func CheckGameData(d *DataCardHolder, conf *configs.CardActivityConfig) string { if d.Details.Round > conf.Round { return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR } @@ -120,7 +121,7 @@ func GetListFromArray(array []string, scale, count int) []string { } // GetNewCard 按顺序查找数目最少的一张卡抽取 -func GetNewCard(gameData *CardHolderData, conf *configs.CardActivityConfig) int { +func GetNewCard(gameData *DataCardHolder, conf *configs.CardActivityConfig) int { if len(conf.CardConfig) < 1 { return 0 } @@ -137,7 +138,7 @@ func GetNewCard(gameData *CardHolderData, conf *configs.CardActivityConfig) int } // CheckAlbumFinish 判断卡组是否已集齐 -func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *configs.CardActivityConfig) bool { +func CheckAlbumFinish(albumId int, gameData *DataCardHolder, config *configs.CardActivityConfig) bool { for _, conf := range config.CardConfig { if conf.SetId == albumId { count := gameData.Details.Cards[conf.Id] @@ -150,7 +151,7 @@ func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *configs.Car } // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐) -func CheckRoundFinish(gameData *CardHolderData, config *configs.CardActivityConfig) bool { +func CheckRoundFinish(gameData *DataCardHolder, config *configs.CardActivityConfig) bool { for _, conf := range config.AlbumConfig { count := gameData.Details.Album[conf.SetId] if count < 1 { @@ -161,14 +162,14 @@ func CheckRoundFinish(gameData *CardHolderData, config *configs.CardActivityConf } // HandleNextRound 处理轮次完成 星级序列刻度 卡牌序列刻度 -func HandleNextRound(gameData *CardHolderData) { +func HandleNextRound(gameData *DataCardHolder) { gameData.Details.Round += 1 gameData.Details.Cards = make(map[int]int) gameData.Details.Album = make(map[int]int) } // GetInfo 玩家卡牌活动信息 -func GetInfo(gameData *CardHolderData, conf *configs.CardActivityConfig) models.CardHolderInfo { +func GetInfo(gameData *DataCardHolder, conf *configs.CardActivityConfig) models.CardHolderInfo { info := models.CardHolderInfo{ Cards: make(map[int]int), Album: make(map[int]int), @@ -188,7 +189,7 @@ func GetInfo(gameData *CardHolderData, conf *configs.CardActivityConfig) models. // DoOpen 封装的抽卡逻辑 // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换 func DoOpen(gameId string, - gameData *CardHolderData, + gameData *DataCardHolder, config *configs.CardActivityConfig, confCardholder configs.OpenCardholderConfig, sequenceId, cohort string, @@ -251,7 +252,7 @@ func DoOpen(gameId string, // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑 func DoOpenCheckAward(gameId string, - gameData *CardHolderData, + gameData *DataCardHolder, config *configs.CardActivityConfig, sequenceId, cohort string, newCards []int, @@ -313,7 +314,7 @@ func DoOpenCheckAward(gameId string, } // CalculateStarCount 计算星星点数 -func CalculateStarCount(gameData *CardHolderData, config *configs.CardActivityConfig) { +func CalculateStarCount(gameData *DataCardHolder, config *configs.CardActivityConfig) { starCount := 0 for cardId, cardCount := range gameData.Details.Cards { if cardCount <= 1 { @@ -335,7 +336,7 @@ func CalculateStarCount(gameData *CardHolderData, config *configs.CardActivityCo } // GetStarCardList 按照规则扣除星星数找到需要扣除的卡牌列表 -func GetStarCardList(gameData *CardHolderData, config *configs.CardActivityConfig, needStar int) (enough bool, cardList map[int]int) { +func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfig, needStar int) (enough bool, cardList map[int]int) { enough = false cardList = make(map[int]int) starAmount := 0 @@ -404,7 +405,7 @@ func GetStarCardList(gameData *CardHolderData, config *configs.CardActivityConfi } // NextActivityAutoExchange 活动切换时自动兑换卡包 -func NextActivityAutoExchange(gameId string, gameData *CardHolderData, config *configs.CardActivityConfig) { +func NextActivityAutoExchange(gameId string, gameData *DataCardHolder, config *configs.CardActivityConfig) { starCount := gameData.Details.LastStarCount // 把星星的配置按照需要的星星数降序排列 list := lo.Values[int, configs.StarShopConfig](config.StarShopConfig) -- libgit2 0.21.0