handle.go 4.16 KB
package ht_cardholder

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

// HandleInfo 卡包信息
func HandleInfo(req *dto.ReqHtCardHolderInfo) (code string, rsp dto.RspHtCardHolderInfo) {
	rsp = dto.RspHtCardHolderInfo{}
	code = constd.RECODE_OK

	// 尝试更新配置
	TryUpdateConfigs()

	// 读取游戏数据
	gameData := LoadData(req.UID)

	rsp.HtCardHolderInfo = gameData.GetInfo()

	return
}

// HandleGetNew 获取卡包
func HandleGetNew(req *dto.ReqHtCardHolderGetNew) (code string, rsp dto.RspHtCardHolderGetNew) {
	rsp = dto.RspHtCardHolderGetNew{}
	code = constd.RECODE_OK

	// 尝试更新配置
	TryUpdateConfigs()

	// 检查活动状态
	code = CheckStatus()
	if code != constd.RECODE_OK {
		return
	}
	// 检查卡包ID
	_, okCardholderConfig := Registry.Config.CardholderConfig[strconv.Itoa(req.Id)]
	if !okCardholderConfig {
		code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR
		return
	}
	// 检查卡包数量
	if req.Count < 1 {
		code = constd.RECODE_MERGE_CARDHOLDER_COUNTILLEGAL_ERROR
		return
	}

	// 读取游戏数据
	gameData := LoadData(req.UID)

	gameData.DetailsData.Cardholder[req.Id] += req.Count
	SaveData(gameData)

	rsp.HtCardHolderInfo = gameData.GetInfo()

	return
}

// HandleOpen 打开卡包
func HandleOpen(req *dto.ReqHtCardHolderOpen) (code string, rsp dto.RspHtCardHolderOpen) {
	rsp = dto.RspHtCardHolderOpen{}
	code = constd.RECODE_OK

	// 尝试更新配置
	TryUpdateConfigs()

	// 检查活动状态
	code = CheckStatus()
	if code != constd.RECODE_OK {
		return
	}
	//// 检查卡包ID
	//confCardholder, okCardholderConfig := Registry.Config.CardholderConfig[strconv.Itoa(req.Id)]
	//if !okCardholderConfig {
	//	code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDERID_ERROR
	//	return
	//}
	//
	//// 读取游戏数据
	//gameData := LoadData(req.UID)
	//
	//// 判断卡包数目
	//countOld, _ := gameData.DetailsData.Cardholder[req.Id]
	//if countOld < 1 {
	//	code = constd.RECODE_MERGE_CARDHOLDER_CARDHOLDER_NOTENOUGH_ERROR
	//	return
	//}
	//
	//// 开始处理抽卡
	//sequenceId, cohort := GetUserSequenceIdAndCohort(req.UID)
	//// 先抽保底卡
	//if confCardholder.GuaranteedStar != "0" {
	//	confGuaranteed, hasGuaranteed := FindCardSequenceConfig(confCardholder.GuaranteedStar, sequenceId, cohort)
	//	if hasGuaranteed {
	//
	//	}
	//}

	return
}

// 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.DetailsData = models.NewHtCardHolderDataDetails()
			d.Decode()
		}
	}
	return
}

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

// CheckStatus 判断活动是否开启
func CheckStatus() string {
	sec := lxtime.NowUninx()
	if Registry.Config.Id == 0 {
		return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
	}
	if sec < Registry.Config.Raw.StartTime {
		return constd.RECODE_MERGE_CARDHOLDER_NOTOPEN1_ERROR
	}
	if sec > Registry.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
}