logic.go 2.91 KB
package ht_cardholder

import (
	"apigame/lx-util/lxalilog"
	"apigame/lx-util/lxtime"
	"apigame/models"
	"apigame/service/constd"
	"apigame/util/uttype"
	"github.com/astaxie/beego/orm"
)

// SaveData 存储数据
func SaveData(d *models.HtCardHolderData) {
	d.UpdateTime = lxtime.NowUninx()
	d.Encode()
	o := orm.NewOrm()
	o.Using(constd.MYSQL_DEFAULT)
	if _, err := o.InsertOrUpdate(d); err != nil {
		lxalilog.Errors(err, "ht_cardholder SaveData Error", d.Uid)
	}
}

func _LoadData(uid int64) (d *models.HtCardHolderData) {
	d = models.NewHtCardHolderData(uid)
	o := orm.NewOrm()
	o.Using(constd.MYSQL_DEFAULT)
	qs := o.QueryTable(d)
	qs = qs.Filter("uid", uid)
	count, err := qs.Count()
	if count == 0 {
		d.CreateTime = lxtime.NowUninx()
	} else {
		err = qs.One(d)
		if err != nil {
			lxalilog.Errors(err, "ht_cardholder LoadData Error", uid)
		} else {
			d.Details = models.NewHtCardHolderDataDetails()
			d.Decode()
		}
	}
	return
}

// LoadData 获取数据 外部接口
func LoadData(uid int64) (d *models.HtCardHolderData) {
	d = _LoadData(uid)
	// 如果当前有上线活动(活动ID不为0),且活动ID和玩家数据不同,说明活动已切换 需更新
	if Config.Id != 0 &&
		Config.Id != d.ActivityId {
		d.ActivityId = Config.Id
		d.Details = models.NewHtCardHolderDataDetails()
		SaveData(d)
	}
	return
}

// CheckStatus 判断活动是否开启
func CheckStatus() string {
	sec := lxtime.NowUninx()
	if Config.Id == 0 {
		return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
	}
	if sec < Config.Raw.StartTime {
		return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
	}
	if sec > Config.Raw.EndTime {
		return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN2_ERROR
	}
	return constd.RECODE_OK
}

// GetUserSequenceIdAndCohort 获取 用户序列组ID(sequenceId) 用户分组(cohort)
func GetUserSequenceIdAndCohort(uid int64) (sequenceId, cohort string) {
	// todo 这里后续要对接
	sequenceId = "1"
	cohort = "1"
	return
}

// GetOneFromArray 从配置的数组里获取一个值 scale=之前刻度
func GetOneFromArray(array []string, scale int) string {
	length := len(array)
	if length < 1 {
		return ""
	}
	if length == 1 {
		return array[0]
	}
	return array[scale%length]
}

// GetListFromArray 从配置的数组里获取一组值 scale=之前刻度 count=数目
func GetListFromArray(array []string, scale, count int) []string {
	list := make([]string, 0)
	if count < 0 {
		return list
	}
	s := scale
	for i := 0; i < count; i++ {
		one := GetOneFromArray(array, s)
		list = append(list, one)
		s++
	}
	return list
}

// GetNewCard 按顺序查找数目最少的一张卡抽取
func GetNewCard(gameData *models.HtCardHolderData) int {
	if len(Config.CardConfig) < 1 {
		return 0
	}
	rate := int64(100000000)
	list := make([]int64, 0)
	for id, _ := range Config.CardConfig {
		count, _ := gameData.Details.Cards[id]
		index := int64(count)*rate + int64(id)
		list = append(list, index)
	}

	indexMin := uttype.Min(list...)
	return int(indexMin % rate)
}