cardholder.go 3.16 KB
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(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
	}
}