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