|
|
@@ -1,15 +1,18 @@
|
|
1
|
1
|
package models
|
|
2
|
2
|
|
|
3
|
|
-// 兑换码
|
|
|
3
|
+// roll房
|
|
4
|
4
|
import (
|
|
5
|
5
|
"box-gm/utils"
|
|
|
6
|
+ "encoding/json"
|
|
6
|
7
|
"errors"
|
|
7
|
8
|
"fmt"
|
|
8
|
9
|
"log"
|
|
9
|
10
|
"sync"
|
|
|
11
|
+ "time"
|
|
10
|
12
|
|
|
11
|
13
|
"github.com/astaxie/beego"
|
|
12
|
14
|
"github.com/astaxie/beego/validation"
|
|
|
15
|
+ "github.com/garyburd/redigo/redis"
|
|
13
|
16
|
)
|
|
14
|
17
|
|
|
15
|
18
|
type RollConditionInfo struct {
|
|
|
@@ -34,11 +37,89 @@ type RollInfoArray []*RollInfo
|
|
34
|
37
|
|
|
35
|
38
|
var rollList RollInfoArray
|
|
36
|
39
|
var riMutex sync.Mutex
|
|
|
40
|
+var ROLL_MAIN_KEY = "roll:room"
|
|
37
|
41
|
|
|
38
|
|
-// 初始化兑换码
|
|
|
42
|
+func get_roll_key(id int) string {
|
|
|
43
|
+ return fmt.Sprintf("%s:%d", ROLL_MAIN_KEY, id)
|
|
|
44
|
+}
|
|
|
45
|
+
|
|
|
46
|
+func CreateRollId() int {
|
|
|
47
|
+ pool := utils.GetAccountRedisPool()
|
|
|
48
|
+ if pool == nil {
|
|
|
49
|
+ fmt.Println("get redis pool fail")
|
|
|
50
|
+ return 0
|
|
|
51
|
+ }
|
|
|
52
|
+ rd := pool.Get()
|
|
|
53
|
+ if rd == nil {
|
|
|
54
|
+ fmt.Println("get redis conn fail")
|
|
|
55
|
+ return 0
|
|
|
56
|
+ }
|
|
|
57
|
+ defer rd.Close()
|
|
|
58
|
+
|
|
|
59
|
+ reply, err := rd.Do("hincrby", "global", "max:roll:room:id", 1)
|
|
|
60
|
+ if err != nil {
|
|
|
61
|
+ fmt.Printf("redis hincrby err: %v", err)
|
|
|
62
|
+ return 0
|
|
|
63
|
+ }
|
|
|
64
|
+ id, err := redis.Int(reply, err)
|
|
|
65
|
+ if err != nil {
|
|
|
66
|
+ fmt.Printf("redis hincrby err: %v", err)
|
|
|
67
|
+ return 0
|
|
|
68
|
+ }
|
|
|
69
|
+ return id
|
|
|
70
|
+}
|
|
|
71
|
+
|
|
|
72
|
+// 初始化roll房信息
|
|
39
|
73
|
func InitRollInfo() {
|
|
|
74
|
+ // 活跃ID列表
|
|
|
75
|
+ pool := utils.GetAccountRedisPool()
|
|
|
76
|
+ if pool == nil {
|
|
|
77
|
+ fmt.Println("get redis pool fail")
|
|
|
78
|
+ return
|
|
|
79
|
+ }
|
|
|
80
|
+ rd := pool.Get()
|
|
|
81
|
+ defer rd.Close()
|
|
|
82
|
+
|
|
|
83
|
+ result, _ := redis.Values(rd.Do("smembers", ROLL_MAIN_KEY))
|
|
|
84
|
+ for _, v := range result {
|
|
|
85
|
+ id := utils.StringToInt(v.([]byte))
|
|
|
86
|
+ pKey := get_roll_key(id)
|
|
|
87
|
+ name, _ := redis.String(rd.Do("hget", pKey, "name"))
|
|
|
88
|
+ bandShareCode, _ := redis.String(rd.Do("hget", pKey, "bandShareCode"))
|
|
|
89
|
+ creatTime, _ := redis.Int64(rd.Do("hget", pKey, "creatTime"))
|
|
|
90
|
+ showStartTime, _ := redis.Int64(rd.Do("hget", pKey, "showStartTime"))
|
|
|
91
|
+ signupStartTime, _ := redis.Int64(rd.Do("hget", pKey, "signupStartTime"))
|
|
|
92
|
+ signupEndTime, _ := redis.Int64(rd.Do("hget", pKey, "signupEndTime"))
|
|
|
93
|
+ awardTime, _ := redis.Int64(rd.Do("hget", pKey, "awardTime"))
|
|
|
94
|
+
|
|
|
95
|
+ conditions, _ := redis.String(rd.Do("hget", pKey, "conditions"))
|
|
|
96
|
+ var _conditions []*RollConditionInfo
|
|
|
97
|
+ json.Unmarshal([]byte(conditions), &_conditions)
|
|
|
98
|
+
|
|
|
99
|
+ itemIdList, _ := redis.String(rd.Do("hget", pKey, "itemIdList"))
|
|
|
100
|
+ var _itemIdList []int
|
|
|
101
|
+ json.Unmarshal([]byte(itemIdList), &_itemIdList)
|
|
40
|
102
|
|
|
41
|
|
- beego.Info("load exchange code info", len(rollList))
|
|
|
103
|
+ signupUidList, _ := redis.String(rd.Do("hget", pKey, "signupUidList"))
|
|
|
104
|
+ var _signupUidList []int
|
|
|
105
|
+ json.Unmarshal([]byte(signupUidList), &_signupUidList)
|
|
|
106
|
+
|
|
|
107
|
+ rollList = append(rollList, &RollInfo{
|
|
|
108
|
+ Id: id,
|
|
|
109
|
+ Name: name,
|
|
|
110
|
+ BandShareCode: bandShareCode,
|
|
|
111
|
+ CreateTime: creatTime,
|
|
|
112
|
+ ShowStartTime: showStartTime,
|
|
|
113
|
+ SignupStartTime: signupStartTime,
|
|
|
114
|
+ SignupEndTime: signupEndTime,
|
|
|
115
|
+ AwardTime: awardTime,
|
|
|
116
|
+ Conditions: _conditions,
|
|
|
117
|
+ ItemIdList: _itemIdList,
|
|
|
118
|
+ SignupUidList: _signupUidList,
|
|
|
119
|
+ })
|
|
|
120
|
+ }
|
|
|
121
|
+
|
|
|
122
|
+ beego.Info("load roll info", len(rollList))
|
|
42
|
123
|
}
|
|
43
|
124
|
|
|
44
|
125
|
func checkRollInfo(hf *RollInfo) (err error) {
|
|
|
@@ -53,7 +134,7 @@ func checkRollInfo(hf *RollInfo) (err error) {
|
|
53
|
134
|
return nil
|
|
54
|
135
|
}
|
|
55
|
136
|
|
|
56
|
|
-// 新增兑换码
|
|
|
137
|
+// 新增roll房信息
|
|
57
|
138
|
func AddRollInfo(hf *RollInfo) error {
|
|
58
|
139
|
pool := utils.GetAccountRedisPool()
|
|
59
|
140
|
if pool == nil {
|
|
|
@@ -66,6 +147,45 @@ func AddRollInfo(hf *RollInfo) error {
|
|
66
|
147
|
return err
|
|
67
|
148
|
}
|
|
68
|
149
|
|
|
|
150
|
+ if hf.Id == 0 {
|
|
|
151
|
+ hf.Id = CreateRollId()
|
|
|
152
|
+ }
|
|
|
153
|
+ if hf.Id == 0 {
|
|
|
154
|
+ return fmt.Errorf("分配roll房ID失败")
|
|
|
155
|
+ }
|
|
|
156
|
+ // 插入数据库
|
|
|
157
|
+ db, err := utils.GetMysqlHandler()
|
|
|
158
|
+ if err != nil {
|
|
|
159
|
+ log.Println("GetMysqlHandler, Error: ", err)
|
|
|
160
|
+ return err
|
|
|
161
|
+ }
|
|
|
162
|
+
|
|
|
163
|
+ hf.CreateTime = time.Now().Unix()
|
|
|
164
|
+
|
|
|
165
|
+ bConditions, _ := json.Marshal(hf.Conditions)
|
|
|
166
|
+ bItemIdList, _ := json.Marshal(hf.ItemIdList)
|
|
|
167
|
+ columns := "id,name,bandShareCode,creatTime,showStartTime,signupStartTime,signupEndTime,awardTime,conditions,itemIdList"
|
|
|
168
|
+ values := fmt.Sprintf("%d, '%s', '%s', %d, %d, %d, %d, %d, '%s', '%s'", hf.Id, hf.Name, hf.BandShareCode, hf.CreateTime, hf.ShowStartTime, hf.SignupStartTime, hf.SignupEndTime, hf.AwardTime, bConditions, bItemIdList)
|
|
|
169
|
+ sql := fmt.Sprintf("insert into mdl_roll (%s) value (%s);", columns, values)
|
|
|
170
|
+ _, err = db.Exec(sql)
|
|
|
171
|
+ if err != nil {
|
|
|
172
|
+ log.Println("AddRollInfo Insert data Exec Failed, Error: ", err)
|
|
|
173
|
+ return err
|
|
|
174
|
+ }
|
|
|
175
|
+
|
|
|
176
|
+ pKey := get_roll_key(hf.Id)
|
|
|
177
|
+ rd.Do("hset", pKey, "name", hf.Name)
|
|
|
178
|
+ rd.Do("hset", pKey, "bandShareCode", hf.BandShareCode)
|
|
|
179
|
+ rd.Do("hset", pKey, "creatTime", hf.CreateTime)
|
|
|
180
|
+ rd.Do("hset", pKey, "showStartTime", hf.ShowStartTime)
|
|
|
181
|
+ rd.Do("hset", pKey, "signupStartTime", hf.SignupStartTime)
|
|
|
182
|
+ rd.Do("hset", pKey, "signupEndTime", hf.SignupEndTime)
|
|
|
183
|
+ rd.Do("hset", pKey, "awardTime", hf.AwardTime)
|
|
|
184
|
+ rd.Do("hset", pKey, "conditions", hf.Conditions)
|
|
|
185
|
+ rd.Do("hset", pKey, "itemIdList", hf.ItemIdList)
|
|
|
186
|
+
|
|
|
187
|
+ rd.Do("sadd", ROLL_MAIN_KEY, hf.Id)
|
|
|
188
|
+
|
|
69
|
189
|
riMutex.Lock()
|
|
70
|
190
|
rollList = append(rollList, hf)
|
|
71
|
191
|
riMutex.Unlock()
|
|
|
@@ -73,7 +193,7 @@ func AddRollInfo(hf *RollInfo) error {
|
|
73
|
193
|
return nil
|
|
74
|
194
|
}
|
|
75
|
195
|
|
|
76
|
|
-// 修改兑换码
|
|
|
196
|
+// 修改roll房信息
|
|
77
|
197
|
func UpdateRollInfo(hf *RollInfo) error {
|
|
78
|
198
|
pool := utils.GetAccountRedisPool()
|
|
79
|
199
|
if pool == nil {
|
|
|
@@ -86,6 +206,34 @@ func UpdateRollInfo(hf *RollInfo) error {
|
|
86
|
206
|
return err
|
|
87
|
207
|
}
|
|
88
|
208
|
|
|
|
209
|
+ // 更新数据库
|
|
|
210
|
+ db, err := utils.GetMysqlHandler()
|
|
|
211
|
+ if err != nil {
|
|
|
212
|
+ log.Println("GetMysqlHandler, Error: ", err)
|
|
|
213
|
+ return err
|
|
|
214
|
+ }
|
|
|
215
|
+ bConditions, _ := json.Marshal(hf.Conditions)
|
|
|
216
|
+ bItemIdList, _ := json.Marshal(hf.ItemIdList)
|
|
|
217
|
+ sets := fmt.Sprintf("name='%s',bandShareCode='%s',showStartTime=%d,signupStartTime=%d,signupEndTime=%d,awardTime=%d,conditions='%s',itemIdList='%s'",
|
|
|
218
|
+ hf.Name, hf.BandShareCode, hf.ShowStartTime, hf.SignupStartTime, hf.SignupEndTime, hf.AwardTime, bConditions, bItemIdList)
|
|
|
219
|
+ sql := fmt.Sprintf("UPDATE mdl_roll SET %s WHERE id=%d;", sets, hf.Id)
|
|
|
220
|
+ // log.Println("order_insert_db sql:", sql)
|
|
|
221
|
+ _, err = db.Exec(sql)
|
|
|
222
|
+ if err != nil {
|
|
|
223
|
+ log.Println("UpdateRollInfo update data Exec Failed, Error: ", err)
|
|
|
224
|
+ return err
|
|
|
225
|
+ }
|
|
|
226
|
+
|
|
|
227
|
+ pKey := get_roll_key(hf.Id)
|
|
|
228
|
+ rd.Do("hset", pKey, "name", hf.Name)
|
|
|
229
|
+ rd.Do("hset", pKey, "bandShareCode", hf.BandShareCode)
|
|
|
230
|
+ rd.Do("hset", pKey, "showStartTime", hf.ShowStartTime)
|
|
|
231
|
+ rd.Do("hset", pKey, "signupStartTime", hf.SignupStartTime)
|
|
|
232
|
+ rd.Do("hset", pKey, "signupEndTime", hf.SignupEndTime)
|
|
|
233
|
+ rd.Do("hset", pKey, "awardTime", hf.AwardTime)
|
|
|
234
|
+ rd.Do("hset", pKey, "conditions", hf.Conditions)
|
|
|
235
|
+ rd.Do("hset", pKey, "itemIdList", hf.ItemIdList)
|
|
|
236
|
+
|
|
89
|
237
|
riMutex.Lock()
|
|
90
|
238
|
for i := 0; i < len(rollList); i++ {
|
|
91
|
239
|
if hf.Id == rollList[i].Id {
|
|
|
@@ -105,10 +253,36 @@ func UpdateRollInfo(hf *RollInfo) error {
|
|
105
|
253
|
riMutex.Unlock()
|
|
106
|
254
|
|
|
107
|
255
|
return nil
|
|
|
256
|
+}
|
|
|
257
|
+
|
|
|
258
|
+// 更新参与玩家列表
|
|
|
259
|
+func UpdateSignupUidList(id int) error {
|
|
|
260
|
+ pool := utils.GetAccountRedisPool()
|
|
|
261
|
+ if pool == nil {
|
|
|
262
|
+ return fmt.Errorf("get redis pool fail")
|
|
|
263
|
+ }
|
|
|
264
|
+ rd := pool.Get()
|
|
|
265
|
+ defer rd.Close()
|
|
108
|
266
|
|
|
|
267
|
+ pKey := get_roll_key(id)
|
|
|
268
|
+ signupUidList, _ := redis.String(rd.Do("hget", pKey, "signupUidList"))
|
|
|
269
|
+ var _signupUidList []int
|
|
|
270
|
+ json.Unmarshal([]byte(signupUidList), &_signupUidList)
|
|
|
271
|
+
|
|
|
272
|
+ riMutex.Lock()
|
|
|
273
|
+ for i := 0; i < len(rollList); i++ {
|
|
|
274
|
+ if id == rollList[i].Id {
|
|
|
275
|
+ old := rollList[i]
|
|
|
276
|
+
|
|
|
277
|
+ old.SignupUidList = _signupUidList
|
|
|
278
|
+ break
|
|
|
279
|
+ }
|
|
|
280
|
+ }
|
|
|
281
|
+ riMutex.Unlock()
|
|
|
282
|
+ return nil
|
|
109
|
283
|
}
|
|
110
|
284
|
|
|
111
|
|
-// 删除兑换码
|
|
|
285
|
+// 删除roll房信息
|
|
112
|
286
|
func DelRollInfoById(id int) error {
|
|
113
|
287
|
pool := utils.GetAccountRedisPool()
|
|
114
|
288
|
if pool == nil {
|
|
|
@@ -120,6 +294,14 @@ func DelRollInfoById(id int) error {
|
|
120
|
294
|
riMutex.Lock()
|
|
121
|
295
|
defer riMutex.Unlock()
|
|
122
|
296
|
|
|
|
297
|
+ pKey := get_roll_key(id)
|
|
|
298
|
+ _, err := rd.Do("del", pKey)
|
|
|
299
|
+ if err != nil {
|
|
|
300
|
+ log.Println(err)
|
|
|
301
|
+ return err
|
|
|
302
|
+ }
|
|
|
303
|
+ rd.Do("srem", ROLL_MAIN_KEY, id)
|
|
|
304
|
+
|
|
123
|
305
|
for i := 0; i < len(rollList); i++ {
|
|
124
|
306
|
if id == rollList[i].Id {
|
|
125
|
307
|
ii := i + 1
|
|
|
@@ -130,11 +312,13 @@ func DelRollInfoById(id int) error {
|
|
130
|
312
|
return nil
|
|
131
|
313
|
}
|
|
132
|
314
|
|
|
133
|
|
-// 获取兑换码信息
|
|
134
|
|
-func GetRollInfoByCode(id int) (hf *RollInfo) {
|
|
|
315
|
+// 获取roll房信息信息
|
|
|
316
|
+func GetRollInfoById(id int) (hf *RollInfo) {
|
|
135
|
317
|
riMutex.Lock()
|
|
136
|
318
|
defer riMutex.Unlock()
|
|
137
|
319
|
|
|
|
320
|
+ // 更新参与列表
|
|
|
321
|
+ UpdateSignupUidList(id)
|
|
138
|
322
|
for i := 0; i < len(rollList); i++ {
|
|
139
|
323
|
if id == rollList[i].Id {
|
|
140
|
324
|
return rollList[i]
|
|
|
@@ -143,9 +327,14 @@ func GetRollInfoByCode(id int) (hf *RollInfo) {
|
|
143
|
327
|
|
|
144
|
328
|
return nil
|
|
145
|
329
|
}
|
|
146
|
|
-func GetRollInfo() RollInfoArray {
|
|
|
330
|
+func GetRollInfoList() RollInfoArray {
|
|
147
|
331
|
riMutex.Lock()
|
|
148
|
332
|
defer riMutex.Unlock()
|
|
149
|
333
|
|
|
|
334
|
+ // 更新参与列表
|
|
|
335
|
+ for _, v := range rollList {
|
|
|
336
|
+ UpdateSignupUidList(v.Id)
|
|
|
337
|
+ }
|
|
|
338
|
+
|
|
150
|
339
|
return rollList
|
|
151
|
340
|
}
|