package cardholder import ( "apigame/service-common/svconst" "apigame/service-common/svmysql" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" "encoding/json" ) // DataCardHolder 卡牌活动持久数据 type DataCardHolder struct { Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"` ActivityId int64 `gorm:"comment:活动ID"` Details *DataCardHolderDetails `gorm:"-"` // 活动详情 DetailsText string `gorm:"comment:活动详情封装"` CreateTime int64 `gorm:"comment:创建时间戳"` UpdateTime int64 `gorm:"comment:修改时间戳"` } func (d *DataCardHolder) MysqlInfo(gameId string) *svmysql.MysqlInfo { tableName := svconst.MYSQL_TABLE_S_CARDHOLDER_DATA return &svmysql.MysqlInfo{ DbMysql: svconst.DbCommon, TableName: tableName + gameId, } } // DataCardHolderDetails 卡牌活动详情 type DataCardHolderDetails 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 NewDataCardHolder(uid int64) *DataCardHolder { d := &DataCardHolder{ Uid: uid, Details: NewDataCardHolderDetails(), } d.Encode() return d } func NewDataCardHolderDetails() *DataCardHolderDetails { return &DataCardHolderDetails{ 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 *DataCardHolder) Init(uid int64) { d.Uid = uid d.CreateTime = lxtime.NowUninx() } // Encode 打包数据 func (d *DataCardHolder) Encode() { details, err := json.Marshal(d.Details) if err != nil { lxalilog.Errors(err, "DataCardHolder Encode Error", d.Uid, d.ActivityId) return } d.DetailsText = string(details) } // Decode 分包数据 func (d *DataCardHolder) Decode() { err := json.Unmarshal([]byte(d.DetailsText), d.Details) if err != nil { lxalilog.Errors(err, "DataCardHolder Decode Error", d.Uid, d.ActivityId) return } }