cardholder.go
3.65 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package dto
import (
"apigame/models"
"apigame/service/constd"
"apigame/util/util-lx/lxalilog"
"apigame/util/util-lx/lxtime"
"encoding/json"
"fmt"
"github.com/astaxie/beego/orm"
)
func InitCardholder() {
// create table
o := orm.NewOrm()
for _, gameId := range constd.GameListCardHolder {
CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderData), gameId)
CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordGetNew), gameId)
CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordOpen), gameId)
CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardAlbum), gameId)
CreateTable(o, constd.MYSQL_MERGECOMMON, new(CardHolderRecordRewardRound), gameId)
}
}
// CardHolderData 卡牌活动持久数据
type CardHolderData struct {
Uid int64 // 玩家唯一ID
ActivityId int64 // 活动ID
Details *CardHolderDataDetails // 活动详情
DetailsText string // 活动详情封装
CreateTime int64 // 创建时间戳
UpdateTime int64 // 修改时间戳
}
// CardHolderDataDetails 卡牌活动详情
type CardHolderDataDetails struct {
Cardholder map[int]int // 卡包数量 k=卡包ID v=卡包数量
Cards map[int]int // 每张卡集了多少张 k=卡牌ID v=数量
Album map[string]int // 卡组奖励领取 k=卡组ID v=数量
StarSequenceScales map[string]int // 星级序列刻度 k=ID_用户序列_用户分组 v=刻度
CardSequenceScales map[string]int // 卡牌序列刻度 k=ID_用户序列_用户分组 v=刻度
Round int // 卡册当前轮次
}
func NewCardHolderData(uid int64) *CardHolderData {
d := &CardHolderData{
Uid: uid,
Details: NewCardHolderDataDetails(),
}
d.Encode()
return d
}
func NewCardHolderDataDetails() *CardHolderDataDetails {
return &CardHolderDataDetails{
Cardholder: make(map[int]int),
Cards: make(map[int]int),
Album: make(map[string]int),
StarSequenceScales: make(map[string]int),
CardSequenceScales: make(map[string]int),
Round: 1,
}
}
func (d *CardHolderData) TableName(gameId string) string {
return constd.MYSQL_TABLE_S_CARDHOLDER_DATA + gameId
}
func (d *CardHolderData) CreateSqlPath() string {
return constd.MYSQL_TABLE_S_CARDHOLDER_DATA
}
func (d *CardHolderData) SqlPairs() map[string]string {
m := make(map[string]string)
m["activity_id"] = fmt.Sprintf("%d", d.ActivityId)
m["details_text"] = fmt.Sprintf("'%s'", d.DetailsText)
m["create_time"] = fmt.Sprintf("%d", d.CreateTime)
m["update_time"] = fmt.Sprintf("%d", d.UpdateTime)
return m
}
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
}
}
// GetInfo 封装成返回数据
func (d *CardHolderData) GetInfo() models.CardHolderInfo {
info := models.CardHolderInfo{
Cardholder: make(map[int]int),
Cards: make(map[int]int),
Album: make(map[string]int),
Round: 0,
}
for i, i2 := range d.Details.Cardholder {
info.Cardholder[i] = i2
}
for i, i2 := range d.Details.Cards {
info.Cards[i] = i2
}
for i, i2 := range d.Details.Album {
info.Album[i] = i2
}
info.Round = d.Details.Round
return info
}