Commit b54d20a9617eea804741c97033c8bc61287954bb
1 parent
cacc58db
Exists in
master
新增发放金币 并发处理
Showing
4 changed files
with
71 additions
and
11 deletions
Show diff stats
src/HttpServer/logic/bytedance.go
... | ... | @@ -12,8 +12,11 @@ import ( |
12 | 12 | "encoding/hex" |
13 | 13 | "encoding/json" |
14 | 14 | "errors" |
15 | + "fmt" | |
15 | 16 | "io/ioutil" |
16 | 17 | "net/http" |
18 | + "strconv" | |
19 | + "time" | |
17 | 20 | ) |
18 | 21 | |
19 | 22 | // 计算签名算法 |
... | ... | @@ -86,3 +89,39 @@ func GetBytedanceGlobalID(access_token, openid string) (globalid int64, err erro |
86 | 89 | return |
87 | 90 | |
88 | 91 | } |
92 | + | |
93 | +//并发次数 | |
94 | +func GetConcurrency(key, openid string) int { | |
95 | + rediskey := key + "_" + openid | |
96 | + defaultval := fmt.Sprintf("%d", DAILY_FETCH_CNT) | |
97 | + b, _ := redishandler.GetRedisClient().Exists(rediskey) | |
98 | + if b == true { | |
99 | + defaultval, _ = redishandler.GetRedisClient().GetString(rediskey) | |
100 | + } else { | |
101 | + redishandler.GetRedisClient().SetExString(rediskey, defaultval, 86400) | |
102 | + } | |
103 | + | |
104 | + intval, _ := strconv.Atoi(defaultval) | |
105 | + | |
106 | + | |
107 | + return intval | |
108 | +} | |
109 | + | |
110 | +//并发次数 | |
111 | +func Decrcurrency(key, openid string) int { | |
112 | + rediskey := key + "_" + openid | |
113 | + b, _ := redishandler.GetRedisClient().Exists(rediskey) | |
114 | + intval := 0 | |
115 | + if b == true { | |
116 | + defaultval, _ := redishandler.GetRedisClient().Decr(rediskey) | |
117 | + intval, _ = strconv.Atoi(defaultval) | |
118 | + } | |
119 | + | |
120 | + return intval | |
121 | +} | |
122 | + | |
123 | +//当前日期字符串 | |
124 | +func DateNowStr() string { | |
125 | + tim := time.Unix(time.Now().Unix(), 0).Format("060102") | |
126 | + return fmt.Sprintf("%s", tim) | |
127 | +} | ... | ... |
src/HttpServer/logic/errordef.go
1 | 1 | package logic |
2 | 2 | |
3 | 3 | const ( |
4 | - ERROR_OK = 0 //没有错误 | |
5 | - ERROR_UNMASH_JSONFAILED = 1 //json解析失败 | |
6 | - ERROR_SERVER_FAILED = 2 //j服务器错误 | |
7 | - ERROR_FETCHLIMIT = 3 //当天领取次数达到上限 | |
8 | - ERROR_READCFG_FAILED = 4 //读取配置错误 | |
9 | - ERROR_PROPERTY_NOTENOUGH = 5 //当前物资不足 | |
10 | - ERROR_TOUTIAOAPI_FAILED = 6 //头条接口失败 | |
11 | - ERROR_PARAM_INVALID = 7 //等级参数无效 | |
12 | - ERROR_GOLD_LIMIT = 8 //当日合成获得金币已达上限 | |
13 | - ERROR_ALREADY_SIGNED = 9 //当日已签到 | |
4 | + ERROR_OK = 0 //没有错误 | |
5 | + ERROR_UNMASH_JSONFAILED = 1 //json解析失败 | |
6 | + ERROR_SERVER_FAILED = 2 //j服务器错误 | |
7 | + ERROR_FETCHLIMIT = 3 //当天领取次数达到上限 | |
8 | + ERROR_READCFG_FAILED = 4 //读取配置错误 | |
9 | + ERROR_PROPERTY_NOTENOUGH = 5 //当前物资不足 | |
10 | + ERROR_TOUTIAOAPI_FAILED = 6 //头条接口失败 | |
11 | + ERROR_PARAM_INVALID = 7 //等级参数无效 | |
12 | + ERROR_GOLD_LIMIT = 8 //当日合成获得金币已达上限 | |
13 | + ERROR_ALREADY_SIGNED = 9 //当日已签到 | |
14 | 14 | |
15 | 15 | ) | ... | ... |
src/HttpServer/logic/logic.go
... | ... | @@ -432,6 +432,15 @@ func HandlerFetchproterybox(w http.ResponseWriter, data string) { |
432 | 432 | break |
433 | 433 | } |
434 | 434 | |
435 | + currkey := "leftcnt_" + DateNowStr() | |
436 | + newleftcnt := GetConcurrency(currkey, rdata.Openid) | |
437 | + if newleftcnt < 1 { | |
438 | + logger.Info(" HandlerFetchproterybox GetConcurrency LeftCnt failed:%v,for:%v", err, data) | |
439 | + resp.RetMsg = "当天领取已达上限" | |
440 | + resp.ErrNum = ERROR_FETCHLIMIT | |
441 | + break | |
442 | + } | |
443 | + | |
435 | 444 | //判断当前剩余次数 |
436 | 445 | if uinfo.LeftCnt == 0 { |
437 | 446 | logger.Info(" HandlerFetchproterybox LeftCnt failed:%v,for:%v", err, data) |
... | ... | @@ -472,7 +481,8 @@ func HandlerFetchproterybox(w http.ResponseWriter, data string) { |
472 | 481 | resp.RetData.Goldnum = addgold |
473 | 482 | resp.RetData.Sumgold = sumgold |
474 | 483 | resp.RetData.Curlevle = uinfo.CalcCurLe() |
475 | - resp.RetData.Leftcnt = uinfo.LeftCnt | |
484 | + //resp.RetData.Leftcnt = uinfo.LeftCnt | |
485 | + resp.RetData.Leftcnt = Decrcurrency(currkey, rdata.Openid) | |
476 | 486 | resp.RetData.Curpoerty = uinfo.Property |
477 | 487 | |
478 | 488 | //保存 | ... | ... |
src/common/redis/redis.go
... | ... | @@ -406,3 +406,14 @@ func (client *RedisClient) HMGets(key string) ([]interface{}, error) { |
406 | 406 | } |
407 | 407 | return v, err |
408 | 408 | } |
409 | + | |
410 | +// 递减 | |
411 | +func (client *RedisClient) Decr(key string) (string, error) { | |
412 | + conn := client.m_pool.Get() | |
413 | + defer conn.Close() | |
414 | + value, err := redis.String(conn.Do("DECR", key)) | |
415 | + if err != nil { | |
416 | + //fmt.Println("redis set failed:", err) | |
417 | + } | |
418 | + return value, err | |
419 | +} | ... | ... |