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,8 +12,11 @@ import ( | ||
12 | "encoding/hex" | 12 | "encoding/hex" |
13 | "encoding/json" | 13 | "encoding/json" |
14 | "errors" | 14 | "errors" |
15 | + "fmt" | ||
15 | "io/ioutil" | 16 | "io/ioutil" |
16 | "net/http" | 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,3 +89,39 @@ func GetBytedanceGlobalID(access_token, openid string) (globalid int64, err erro | ||
86 | return | 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 | package logic | 1 | package logic |
2 | 2 | ||
3 | const ( | 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,6 +432,15 @@ func HandlerFetchproterybox(w http.ResponseWriter, data string) { | ||
432 | break | 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 | if uinfo.LeftCnt == 0 { | 445 | if uinfo.LeftCnt == 0 { |
437 | logger.Info(" HandlerFetchproterybox LeftCnt failed:%v,for:%v", err, data) | 446 | logger.Info(" HandlerFetchproterybox LeftCnt failed:%v,for:%v", err, data) |
@@ -472,7 +481,8 @@ func HandlerFetchproterybox(w http.ResponseWriter, data string) { | @@ -472,7 +481,8 @@ func HandlerFetchproterybox(w http.ResponseWriter, data string) { | ||
472 | resp.RetData.Goldnum = addgold | 481 | resp.RetData.Goldnum = addgold |
473 | resp.RetData.Sumgold = sumgold | 482 | resp.RetData.Sumgold = sumgold |
474 | resp.RetData.Curlevle = uinfo.CalcCurLe() | 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 | resp.RetData.Curpoerty = uinfo.Property | 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,3 +406,14 @@ func (client *RedisClient) HMGets(key string) ([]interface{}, error) { | ||
406 | } | 406 | } |
407 | return v, err | 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 | +} |