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 }