dto-game.go
2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package cardholder
import (
"apigame/common/svconst"
"apigame/common/svdto"
"apigame/service/constd"
"apigame/util/utdto"
"apigame/util/util-lx/lxalilog"
"apigame/util/util-lx/lxtime"
"encoding/json"
"fmt"
)
// CardHolderData 卡牌活动持久数据
type CardHolderData struct {
Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"`
ActivityId int64 `gorm:"comment:活动ID"`
Details *CardHolderDataDetails `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 {
tableName := constd.MYSQL_TABLE_S_CARDHOLDER_DATA
return &svdto.DtoRule{
DbMysql: svconst.DbCommon,
TableName: tableName + gameId,
CacheKey: fmt.Sprintf("%s:%s:%s", svdto.REDIS_CACHEP_REFIX, tableName, gameId),
CacheTime: 300,
}
}
// CardHolderDataDetails 卡牌活动详情
type CardHolderDataDetails struct {
Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量
Album map[int]int // 卡组奖励领取 k=卡组ID v=数量
StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度
CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度
Round int // 卡册当前轮次
StarCount int // 星星点数
LastStarCount int // 上期活动剩余星星点数
AutoExchangeHolder []int // 活动切换时自动兑换的卡包列表
}
func NewCardHolderData(uid int64) *CardHolderData {
d := &CardHolderData{
Uid: uid,
Details: NewCardHolderDataDetails(),
}
d.Encode()
return d
}
func NewCardHolderDataDetails() *CardHolderDataDetails {
return &CardHolderDataDetails{
Cards: make(map[int]int),
Album: make(map[int]int),
StarSequenceScales: make(map[string]int),
CardSequenceScales: make(map[string]int),
Round: 1,
StarCount: 0,
AutoExchangeHolder: make([]int, 0),
}
}
func (d *CardHolderData) Init(uid int64) {
d.Uid = uid
d.CreateTime = lxtime.NowUninx()
}
// Encode 打包数据
func (d *CardHolderData) Encode() {
details, err := json.Marshal(d.Details)
if err != nil {
lxalilog.Errors(err, "CardHolderData Encode Error", d.Uid, d.ActivityId)
return
}
d.DetailsText = string(details)
}
// Decode 分包数据
func (d *CardHolderData) Decode() {
err := json.Unmarshal([]byte(d.DetailsText), d.Details)
if err != nil {
lxalilog.Errors(err, "CardHolderData Decode Error", d.Uid, d.ActivityId)
return
}
}