Commit 015645a13b3a1781fbc4a51e9bb702f66f8bd9a7

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

refactor♻️:redis对象和mysql对象持久化和读取

service/cardholder/dto-game.go
... ... @@ -2,39 +2,33 @@ package cardholder
2 2  
3 3 import (
4 4 "apigame/common/svconst"
5   - "apigame/common/svdto"
  5 + "apigame/common/svmysql"
6 6 "apigame/service/constd"
7   - "apigame/util/utdto"
8 7 "apigame/util/util-lx/lxalilog"
9 8 "apigame/util/util-lx/lxtime"
10 9 "encoding/json"
11   - "fmt"
12 10 )
13 11  
14   -// CardHolderData 卡牌活动持久数据
15   -type CardHolderData struct {
  12 +// DataCardHolder 卡牌活动持久数据
  13 +type DataCardHolder struct {
16 14 Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"`
17 15 ActivityId int64 `gorm:"comment:活动ID"`
18   - Details *CardHolderDataDetails `gorm:"-"` // 活动详情
  16 + Details *DataCardHolderDetails `gorm:"-"` // 活动详情
19 17 DetailsText string `gorm:"comment:活动详情封装"`
20 18 CreateTime int64 `gorm:"comment:创建时间戳"`
21 19 UpdateTime int64 `gorm:"comment:修改时间戳"`
22 20 }
23 21  
24   -func (c *CardHolderData) TableName() string { return utdto.MYSQL_TABLE_TEMPLATE }
25   -
26   -func (d *CardHolderData) GetRule(gameId string) *svdto.DtoRule {
  22 +func (d *DataCardHolder) MysqlInfo(gameId string) *svmysql.MysqlInfo {
27 23 tableName := constd.MYSQL_TABLE_S_CARDHOLDER_DATA
28   - return &svdto.DtoRule{
  24 + return &svmysql.MysqlInfo{
29 25 DbMysql: svconst.DbCommon,
30 26 TableName: tableName + gameId,
31   - CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId),
32   - CacheTime: 300,
33 27 }
34 28 }
35 29  
36   -// CardHolderDataDetails 卡牌活动详情
37   -type CardHolderDataDetails struct {
  30 +// DataCardHolderDetails 卡牌活动详情
  31 +type DataCardHolderDetails struct {
38 32 Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量
39 33 Album map[int]int // 卡组奖励领取 k=卡组ID v=数量
40 34 StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度
... ... @@ -45,17 +39,17 @@ type CardHolderDataDetails struct {
45 39 AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表
46 40 }
47 41  
48   -func NewCardHolderData(uid int64) *CardHolderData {
49   - d := &CardHolderData{
  42 +func NewDataCardHolder(uid int64) *DataCardHolder {
  43 + d := &DataCardHolder{
50 44 Uid: uid,
51   - Details: NewCardHolderDataDetails(),
  45 + Details: NewDataCardHolderDetails(),
52 46 }
53 47 d.Encode()
54 48 return d
55 49 }
56 50  
57   -func NewCardHolderDataDetails() *CardHolderDataDetails {
58   - return &CardHolderDataDetails{
  51 +func NewDataCardHolderDetails() *DataCardHolderDetails {
  52 + return &DataCardHolderDetails{
59 53 Cards: make(map[int]int),
60 54 Album: make(map[int]int),
61 55 StarSequenceScales: make(map[string]int),
... ... @@ -66,26 +60,26 @@ func NewCardHolderDataDetails() *CardHolderDataDetails {
66 60 }
67 61 }
68 62  
69   -func (d *CardHolderData) Init(uid int64) {
  63 +func (d *DataCardHolder) Init(uid int64) {
70 64 d.Uid = uid
71 65 d.CreateTime = lxtime.NowUninx()
72 66 }
73 67  
74 68 // Encode 打包数据
75   -func (d *CardHolderData) Encode() {
  69 +func (d *DataCardHolder) Encode() {
76 70 details, err := json.Marshal(d.Details)
77 71 if err != nil {
78   - lxalilog.Errors(err, "CardHolderData Encode Error", d.Uid, d.ActivityId)
  72 + lxalilog.Errors(err, "DataCardHolder Encode Error", d.Uid, d.ActivityId)
79 73 return
80 74 }
81 75 d.DetailsText = string(details)
82 76 }
83 77  
84 78 // Decode 分包数据
85   -func (d *CardHolderData) Decode() {
  79 +func (d *DataCardHolder) Decode() {
86 80 err := json.Unmarshal([]byte(d.DetailsText), d.Details)
87 81 if err != nil {
88   - lxalilog.Errors(err, "CardHolderData Decode Error", d.Uid, d.ActivityId)
  82 + lxalilog.Errors(err, "DataCardHolder Decode Error", d.Uid, d.ActivityId)
89 83 return
90 84 }
91 85 }
... ...
service/cardholder/init.go
... ... @@ -3,6 +3,7 @@ package cardholder
3 3 import (
4 4 "apigame/common/svconst"
5 5 "apigame/common/svdto"
  6 + "apigame/common/svmysql"
6 7 )
7 8  
8 9 func Init() {
... ... @@ -10,7 +11,7 @@ func Init() {
10 11 // create table
11 12 // 卡牌卡包
12 13 for _, gameId := range svconst.GameListCardHolder {
13   - svdto.InitTable(new(CardHolderData), gameId)
  14 + svmysql.InitTable(new(DataCardHolder), gameId)
14 15 svdto.InitTable(new(CardHolderRecordOpen), gameId)
15 16 svdto.InitTable(new(CardHolderRecordRewardAlbum), gameId)
16 17 svdto.InitTable(new(CardHolderRecordRewardRound), gameId)
... ...
service/cardholder/logic.go
... ... @@ -2,6 +2,7 @@ package cardholder
2 2  
3 3 import (
4 4 "apigame/common/svdto"
  5 + "apigame/common/svmysql"
5 6 "apigame/configs"
6 7 "apigame/models"
7 8 "apigame/service/constd"
... ... @@ -16,16 +17,16 @@ import (
16 17 )
17 18  
18 19 // SaveData 存储数据
19   -func SaveData(gameId string, d *CardHolderData) {
  20 +func SaveData(gameId string, d *DataCardHolder) {
20 21 d.UpdateTime = lxtime.NowUninx()
21 22 d.Encode()
22 23  
23   - svdto.Save(d, gameId)
  24 + _ = svmysql.Save(d, gameId)
24 25 }
25 26  
26   -func _LoadData(gameId string, uid int64) (d *CardHolderData) {
27   - d = NewCardHolderData(uid)
28   - has, err := svdto.First(d, gameId)
  27 +func _LoadData(gameId string, uid int64) (d *DataCardHolder) {
  28 + d = NewDataCardHolder(uid)
  29 + has, err := svmysql.First(d, gameId)
29 30 if err != nil {
30 31 return
31 32 }
... ... @@ -33,13 +34,13 @@ func _LoadData(gameId string, uid int64) (d *CardHolderData) {
33 34 d.Decode()
34 35 } else {
35 36 d.Init(uid)
36   - svdto.Insert(d, gameId)
  37 + _ = svmysql.Insert(d, gameId)
37 38 }
38 39 return
39 40 }
40 41  
41 42 // LoadData 获取数据 外部接口
42   -func LoadData(gameId string, uid int64, config *configs.CardActivityConfig) (d *CardHolderData) {
  43 +func LoadData(gameId string, uid int64, config *configs.CardActivityConfig) (d *DataCardHolder) {
43 44 configId := config.Id
44 45 d = _LoadData(gameId, uid)
45 46 // 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
... ... @@ -50,7 +51,7 @@ func LoadData(gameId string, uid int64, config *configs.CardActivityConfig) (d *
50 51 starCount := d.Details.StarCount
51 52  
52 53 d.ActivityId = configId
53   - d.Details = NewCardHolderDataDetails()
  54 + d.Details = NewDataCardHolderDetails()
54 55  
55 56 // 使用剩余的星星数来自动兑换卡包
56 57 d.Details.LastStarCount = starCount
... ... @@ -77,7 +78,7 @@ func CheckStatus(conf *configs.CardActivityConfig) string {
77 78 }
78 79  
79 80 // CheckGameData 检查游戏数据 轮次等
80   -func CheckGameData(d *CardHolderData, conf *configs.CardActivityConfig) string {
  81 +func CheckGameData(d *DataCardHolder, conf *configs.CardActivityConfig) string {
81 82 if d.Details.Round > conf.Round {
82 83 return constd.RECODE_MERGE_CARDHOLDER_ROUNDFINISH_ERROR
83 84 }
... ... @@ -120,7 +121,7 @@ func GetListFromArray(array []string, scale, count int) []string {
120 121 }
121 122  
122 123 // GetNewCard 按顺序查找数目最少的一张卡抽取
123   -func GetNewCard(gameData *CardHolderData, conf *configs.CardActivityConfig) int {
  124 +func GetNewCard(gameData *DataCardHolder, conf *configs.CardActivityConfig) int {
124 125 if len(conf.CardConfig) < 1 {
125 126 return 0
126 127 }
... ... @@ -137,7 +138,7 @@ func GetNewCard(gameData *CardHolderData, conf *configs.CardActivityConfig) int
137 138 }
138 139  
139 140 // CheckAlbumFinish 判断卡组是否已集齐
140   -func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *configs.CardActivityConfig) bool {
  141 +func CheckAlbumFinish(albumId int, gameData *DataCardHolder, config *configs.CardActivityConfig) bool {
141 142 for _, conf := range config.CardConfig {
142 143 if conf.SetId == albumId {
143 144 count := gameData.Details.Cards[conf.Id]
... ... @@ -150,7 +151,7 @@ func CheckAlbumFinish(albumId int, gameData *CardHolderData, config *configs.Car
150 151 }
151 152  
152 153 // CheckRoundFinish 判断轮次是否已集齐(所有卡组集齐)
153   -func CheckRoundFinish(gameData *CardHolderData, config *configs.CardActivityConfig) bool {
  154 +func CheckRoundFinish(gameData *DataCardHolder, config *configs.CardActivityConfig) bool {
154 155 for _, conf := range config.AlbumConfig {
155 156 count := gameData.Details.Album[conf.SetId]
156 157 if count < 1 {
... ... @@ -161,14 +162,14 @@ func CheckRoundFinish(gameData *CardHolderData, config *configs.CardActivityConf
161 162 }
162 163  
163 164 // HandleNextRound 处理轮次完成 星级序列刻度 卡牌序列刻度
164   -func HandleNextRound(gameData *CardHolderData) {
  165 +func HandleNextRound(gameData *DataCardHolder) {
165 166 gameData.Details.Round += 1
166 167 gameData.Details.Cards = make(map[int]int)
167 168 gameData.Details.Album = make(map[int]int)
168 169 }
169 170  
170 171 // GetInfo 玩家卡牌活动信息
171   -func GetInfo(gameData *CardHolderData, conf *configs.CardActivityConfig) models.CardHolderInfo {
  172 +func GetInfo(gameData *DataCardHolder, conf *configs.CardActivityConfig) models.CardHolderInfo {
172 173 info := models.CardHolderInfo{
173 174 Cards: make(map[int]int),
174 175 Album: make(map[int]int),
... ... @@ -188,7 +189,7 @@ func GetInfo(gameData *CardHolderData, conf *configs.CardActivityConfig) models.
188 189 // DoOpen 封装的抽卡逻辑
189 190 // openMode:开包类型0客户端驱动1星星商店购买2剩余星星兑换
190 191 func DoOpen(gameId string,
191   - gameData *CardHolderData,
  192 + gameData *DataCardHolder,
192 193 config *configs.CardActivityConfig,
193 194 confCardholder configs.OpenCardholderConfig,
194 195 sequenceId, cohort string,
... ... @@ -251,7 +252,7 @@ func DoOpen(gameId string,
251 252  
252 253 // DoOpenCheckAward 封装的新卡判断是否出发卡组和轮次奖励的逻辑
253 254 func DoOpenCheckAward(gameId string,
254   - gameData *CardHolderData,
  255 + gameData *DataCardHolder,
255 256 config *configs.CardActivityConfig,
256 257 sequenceId, cohort string,
257 258 newCards []int,
... ... @@ -313,7 +314,7 @@ func DoOpenCheckAward(gameId string,
313 314 }
314 315  
315 316 // CalculateStarCount 计算星星点数
316   -func CalculateStarCount(gameData *CardHolderData, config *configs.CardActivityConfig) {
  317 +func CalculateStarCount(gameData *DataCardHolder, config *configs.CardActivityConfig) {
317 318 starCount := 0
318 319 for cardId, cardCount := range gameData.Details.Cards {
319 320 if cardCount <= 1 {
... ... @@ -335,7 +336,7 @@ func CalculateStarCount(gameData *CardHolderData, config *configs.CardActivityCo
335 336 }
336 337  
337 338 // GetStarCardList 按照规则扣除星星数找到需要扣除的卡牌列表
338   -func GetStarCardList(gameData *CardHolderData, config *configs.CardActivityConfig, needStar int) (enough bool, cardList map[int]int) {
  339 +func GetStarCardList(gameData *DataCardHolder, config *configs.CardActivityConfig, needStar int) (enough bool, cardList map[int]int) {
339 340 enough = false
340 341 cardList = make(map[int]int)
341 342 starAmount := 0
... ... @@ -404,7 +405,7 @@ func GetStarCardList(gameData *CardHolderData, config *configs.CardActivityConfi
404 405 }
405 406  
406 407 // NextActivityAutoExchange 活动切换时自动兑换卡包
407   -func NextActivityAutoExchange(gameId string, gameData *CardHolderData, config *configs.CardActivityConfig) {
  408 +func NextActivityAutoExchange(gameId string, gameData *DataCardHolder, config *configs.CardActivityConfig) {
408 409 starCount := gameData.Details.LastStarCount
409 410 // 把星星的配置按照需要的星星数降序排列
410 411 list := lo.Values[int, configs.StarShopConfig](config.StarShopConfig)
... ...