123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package models
- // 兑换码
- import (
- "box-gm/utils"
- "errors"
- "fmt"
- "log"
- "sync"
- "github.com/astaxie/beego"
- "github.com/astaxie/beego/validation"
- )
- type RollConditionInfo struct {
- Conditions string `json:"c"` // 条件
- CValue int `json:"cv"` // 条件值
- }
- type RollInfo struct {
- Id int // 活动ID
- Name string `orm:"size(64)" valid:"Required"` // 房间名
- BandShareCode string `orm:"size(10)" valid:"Required"` // 限制绑定推广码
- CreateTime int64 `valid:"Required"` // 创建时间
- ShowStartTime int64 `valid:"Required"` // 开始展示时间
- SignupStartTime int64 `valid:"Required"` // 报名开始时间
- SignupEndTime int64 `valid:"Required"` // 报名结束时间
- AwardTime int64 `valid:"Required"` // 开奖时间
- Conditions []*RollConditionInfo // 参与条件列表
- ItemIdList []int // 奖励物品ID列表
- SignupUidList []int // 报名玩家ID列表列表
- }
- type RollInfoArray []*RollInfo
- var rollList RollInfoArray
- var riMutex sync.Mutex
- // 初始化兑换码
- func InitRollInfo() {
- beego.Info("load exchange code info", len(rollList))
- }
- func checkRollInfo(hf *RollInfo) (err error) {
- valid := validation.Validation{}
- b, _ := valid.Valid(&hf)
- if !b {
- for _, err := range valid.Errors {
- log.Println(err.Key, err.Message)
- return errors.New(err.Message)
- }
- }
- return nil
- }
- // 新增兑换码
- func AddRollInfo(hf *RollInfo) error {
- pool := utils.GetAccountRedisPool()
- if pool == nil {
- return fmt.Errorf("get redis pool fail")
- }
- rd := pool.Get()
- defer rd.Close()
- if err := checkRollInfo(hf); err != nil {
- return err
- }
- riMutex.Lock()
- rollList = append(rollList, hf)
- riMutex.Unlock()
- return nil
- }
- // 修改兑换码
- func UpdateRollInfo(hf *RollInfo) error {
- pool := utils.GetAccountRedisPool()
- if pool == nil {
- return fmt.Errorf("get redis pool fail")
- }
- rd := pool.Get()
- defer rd.Close()
- if err := checkRollInfo(hf); err != nil {
- return err
- }
- riMutex.Lock()
- for i := 0; i < len(rollList); i++ {
- if hf.Id == rollList[i].Id {
- old := rollList[i]
- old.Name = hf.Name
- old.BandShareCode = hf.BandShareCode
- old.ShowStartTime = hf.ShowStartTime
- old.SignupStartTime = hf.SignupStartTime
- old.SignupEndTime = hf.SignupEndTime
- old.AwardTime = hf.AwardTime
- old.Conditions = hf.Conditions
- old.ItemIdList = hf.ItemIdList
- break
- }
- }
- riMutex.Unlock()
- return nil
- }
- // 删除兑换码
- func DelRollInfoById(id int) error {
- pool := utils.GetAccountRedisPool()
- if pool == nil {
- return fmt.Errorf("get redis pool fail")
- }
- rd := pool.Get()
- defer rd.Close()
- riMutex.Lock()
- defer riMutex.Unlock()
- for i := 0; i < len(rollList); i++ {
- if id == rollList[i].Id {
- ii := i + 1
- rollList = append(rollList[:i], rollList[ii:]...)
- }
- }
- return nil
- }
- // 获取兑换码信息
- func GetRollInfoByCode(id int) (hf *RollInfo) {
- riMutex.Lock()
- defer riMutex.Unlock()
- for i := 0; i < len(rollList); i++ {
- if id == rollList[i].Id {
- return rollList[i]
- }
- }
- return nil
- }
- func GetRollInfo() RollInfoArray {
- riMutex.Lock()
- defer riMutex.Unlock()
- return rollList
- }
|