package dto import ( "apigame/service/constd" "apigame/util/utdto" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" "encoding/json" ) // CardHolderData 卡牌活动持久数据 type CardHolderData struct { Uid int64 `gorm:"primaryKey;comment:玩家唯一ID"` ActivityId int64 `gorm:"comment:活动ID"` Details *CardHolderDataDetails `gorm:"-"` // 活动详情 DetailsText string `gorm:"comment:活动详情封装"` CreateTime int64 `gorm:"comment:创建时间戳"` UpdateTime int64 `gorm:"comment:修改时间戳"` } // CardHolderDataDetails 卡牌活动详情 type CardHolderDataDetails struct { 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{ 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() string { return utdto.MYSQL_TABLE_TEMPLATE } func (d *CardHolderData) GetTableName(gameId string) string { return constd.MYSQL_TABLE_S_CARDHOLDER_DATA + gameId } 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 } }