roll.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package models
  2. // 兑换码
  3. import (
  4. "box-gm/utils"
  5. "errors"
  6. "fmt"
  7. "log"
  8. "sync"
  9. "github.com/astaxie/beego"
  10. "github.com/astaxie/beego/validation"
  11. )
  12. type RollConditionInfo struct {
  13. Conditions string `json:"c"` // 条件
  14. CValue int `json:"cv"` // 条件值
  15. }
  16. type RollInfo struct {
  17. Id int // 活动ID
  18. Name string `orm:"size(64)" valid:"Required"` // 房间名
  19. BandShareCode string `orm:"size(10)" valid:"Required"` // 限制绑定推广码
  20. CreateTime int64 `valid:"Required"` // 创建时间
  21. ShowStartTime int64 `valid:"Required"` // 开始展示时间
  22. SignupStartTime int64 `valid:"Required"` // 报名开始时间
  23. SignupEndTime int64 `valid:"Required"` // 报名结束时间
  24. AwardTime int64 `valid:"Required"` // 开奖时间
  25. Conditions []*RollConditionInfo // 参与条件列表
  26. ItemIdList []int // 奖励物品ID列表
  27. SignupUidList []int // 报名玩家ID列表列表
  28. }
  29. type RollInfoArray []*RollInfo
  30. var rollList RollInfoArray
  31. var riMutex sync.Mutex
  32. // 初始化兑换码
  33. func InitRollInfo() {
  34. beego.Info("load exchange code info", len(rollList))
  35. }
  36. func checkRollInfo(hf *RollInfo) (err error) {
  37. valid := validation.Validation{}
  38. b, _ := valid.Valid(&hf)
  39. if !b {
  40. for _, err := range valid.Errors {
  41. log.Println(err.Key, err.Message)
  42. return errors.New(err.Message)
  43. }
  44. }
  45. return nil
  46. }
  47. // 新增兑换码
  48. func AddRollInfo(hf *RollInfo) error {
  49. pool := utils.GetAccountRedisPool()
  50. if pool == nil {
  51. return fmt.Errorf("get redis pool fail")
  52. }
  53. rd := pool.Get()
  54. defer rd.Close()
  55. if err := checkRollInfo(hf); err != nil {
  56. return err
  57. }
  58. riMutex.Lock()
  59. rollList = append(rollList, hf)
  60. riMutex.Unlock()
  61. return nil
  62. }
  63. // 修改兑换码
  64. func UpdateRollInfo(hf *RollInfo) error {
  65. pool := utils.GetAccountRedisPool()
  66. if pool == nil {
  67. return fmt.Errorf("get redis pool fail")
  68. }
  69. rd := pool.Get()
  70. defer rd.Close()
  71. if err := checkRollInfo(hf); err != nil {
  72. return err
  73. }
  74. riMutex.Lock()
  75. for i := 0; i < len(rollList); i++ {
  76. if hf.Id == rollList[i].Id {
  77. old := rollList[i]
  78. old.Name = hf.Name
  79. old.BandShareCode = hf.BandShareCode
  80. old.ShowStartTime = hf.ShowStartTime
  81. old.SignupStartTime = hf.SignupStartTime
  82. old.SignupEndTime = hf.SignupEndTime
  83. old.AwardTime = hf.AwardTime
  84. old.Conditions = hf.Conditions
  85. old.ItemIdList = hf.ItemIdList
  86. break
  87. }
  88. }
  89. riMutex.Unlock()
  90. return nil
  91. }
  92. // 删除兑换码
  93. func DelRollInfoById(id int) error {
  94. pool := utils.GetAccountRedisPool()
  95. if pool == nil {
  96. return fmt.Errorf("get redis pool fail")
  97. }
  98. rd := pool.Get()
  99. defer rd.Close()
  100. riMutex.Lock()
  101. defer riMutex.Unlock()
  102. for i := 0; i < len(rollList); i++ {
  103. if id == rollList[i].Id {
  104. ii := i + 1
  105. rollList = append(rollList[:i], rollList[ii:]...)
  106. }
  107. }
  108. return nil
  109. }
  110. // 获取兑换码信息
  111. func GetRollInfoByCode(id int) (hf *RollInfo) {
  112. riMutex.Lock()
  113. defer riMutex.Unlock()
  114. for i := 0; i < len(rollList); i++ {
  115. if id == rollList[i].Id {
  116. return rollList[i]
  117. }
  118. }
  119. return nil
  120. }
  121. func GetRollInfo() RollInfoArray {
  122. riMutex.Lock()
  123. defer riMutex.Unlock()
  124. return rollList
  125. }