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) }