package dto import ( "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(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 { 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(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 } }