Commit cb597df9872747cb6438d84987e27ce765198452

Authored by 陆恒
1 parent 13427da9
Exists in master

提交

src/HttpServer/logic/datadef.go
... ... @@ -9,8 +9,8 @@ package logic
9 9 //"107":"签到罐"
10 10  
11 11 type UserLoginReq struct {
12   - Fromid int `json:"fromid"`
13   - Sharetype int `json:"sharetype"`
  12 + Nickname string `json:"nickname"`
  13 + Headurl string `json:"headurl"`
14 14 Gameid string `json:"gameid"`
15 15 Channel string `json:"channel"`
16 16 }
... ... @@ -258,6 +258,26 @@ type QuerysigndataResp struct {
258 258 Data QuerysigndataData `json:"data"`
259 259 }
260 260  
  261 +type Queryrankinfolist struct {
  262 + Rank int `json:"rank"`
  263 + Nickname string `json:"nickname"`
  264 + Headurl string `json:"headurl"`
  265 + Socre int64 `json:"socre"`
  266 + UniqueId string `json:"uniqueId"`
  267 +}
  268 +
  269 +type QueryrankinfoData struct {
  270 + Selfrank int `json:"selfrank"`
  271 + Selfsocre int64 `json:"selfsocre"`
  272 + Ranklist []Queryrankinfolist `json:"ranklist"`
  273 +}
  274 +
  275 +type QueryrankinfoResp struct {
  276 + Code int `json:"code"`
  277 + Message string `json:"message"`
  278 + Data QueryrankinfoData `json:"data"`
  279 +}
  280 +
261 281 type FetchredbagReq struct {
262 282 Gameid string `json:"gameid"`
263 283 Channel string `json:"channel"`
... ... @@ -351,6 +371,21 @@ type TaskInfo struct {
351 371 PlaySmall int //当日是否试玩小游戏15s 次数
352 372 }
353 373  
  374 +type UploadhigestscoreReq struct {
  375 + Score int64 `json:"score"`
  376 + Gameid string `json:"gameid"`
  377 + Channel string `json:"channel"`
  378 +}
  379 +
  380 +type UploadhigestscoreData struct {
  381 +}
  382 +
  383 +type UploadhigestscoreResp struct {
  384 + Code int `json:"code"`
  385 + Message string `json:"message"`
  386 + Data UploadhigestscoreData `json:"data"`
  387 +}
  388 +
354 389 //
355 390 type AchieveMentInfo struct {
356 391 WatchAdsCnt int //观看广告数
... ... @@ -427,6 +462,9 @@ type UserData struct {
427 462 ShakeTime int //摇一摇
428 463 FetchRedCnt int //领取红包次数计数
429 464 IsNew int //新手状态
  465 + Hfen int64 //当天分数
  466 + Nickname string //昵称
  467 + HeadUrl string //头像
430 468 FetchRdBagNum int //当天已领的红包
431 469 WithDraw WithDrawInfo //提现记录信息
432 470 //SpecialWithDraw WithDrawInfo //活跃提现记录信息
... ...
src/HttpServer/logic/function.go
... ... @@ -670,6 +670,8 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int, uniqueuid s
670 670 initdata.ShakeTime = SHAKELIMIT
671 671 initdata.IsNew = 1
672 672 initdata.FetchRdBagNum = 0
  673 + initdata.Nickname = data.Nickname
  674 + initdata.HeadUrl = data.Headurl
673 675  
674 676 for _, val := range jsonconf.GetJsonConf().WithDrawConfig {
675 677 var tmp WithDrawDesc
... ... @@ -955,6 +957,10 @@ func GetUserData(uuid int, uniqueuid string, req *UserLoginReq, resp *UserLoginR
955 957 return err
956 958 }
957 959  
  960 +
  961 + //更新头像
  962 + data.HeadUrl = req.Headurl
  963 + data.Nickname = req.Nickname
958 964 //此处要处理一下跨天逻辑
959 965 data.HandlePassDay(uuid, req.Channel)
960 966  
... ... @@ -1142,6 +1148,14 @@ func GettotalParam(paramlist []string) string {
1142 1148 return sumparam
1143 1149 }
1144 1150  
  1151 +func (udata *UserData) AddToRank(unid string) error {
  1152 + err := redishandler.GetRedisClient().Zadd(redis.USER_SCORE_RANK, float64(udata.Hfen), unid)
  1153 + if err != nil {
  1154 + logger.Error("AddToRank failed err=%v", err)
  1155 + }
  1156 + return err
  1157 +}
  1158 +
1145 1159 func GetHashValue(signsum string) string {
1146 1160 /*h := sha1.New()
1147 1161 h.Write([]byte(signsum))
... ...
src/HttpServer/logic/httpserver.go
... ... @@ -9,6 +9,7 @@ import (
9 9 "fmt"
10 10 "io/ioutil"
11 11 "strconv"
  12 + "time"
12 13  
13 14 //"log"
14 15 "net/http"
... ... @@ -16,7 +17,15 @@ import (
16 17  
17 18 //定时处理倒计时
18 19 func StartHttpTicker() {
19   -
  20 + for {
  21 + now := time.Now() //获取当前时间,放到now里面,要给next用
  22 + next := now.Add(time.Hour * 24) //通过now偏移24小时
  23 + next = time.Date(next.Year(), next.Month(), next.Day(), 0, 0, 0, 0, next.Location()) //获取下一个凌晨的日期
  24 + t := time.NewTimer(next.Sub(now))//计算当前时间到凌晨的时间间隔,设置一个定时器
  25 + <-t.C
  26 + redishandler.GetRedisClient().Delete(redis.USER_SCORE_RANK)
  27 + logger.Info("Del USER_SCORE_RANK success!")
  28 + }
20 29 }
21 30  
22 31 func StartHttpServe() {
... ... @@ -64,6 +73,8 @@ func startServerHttpServe() {
64 73 http.HandleFunc("/ballbattle/fetchredbag", Fetchredbag) //领取红包
65 74 http.HandleFunc("/ballbattle/savadata", Savadata) //保存数据
66 75 http.HandleFunc("/ballbattle/getdata", Getdata) //获取数据
  76 + http.HandleFunc("/ballbattle/uploadscore", Uploadscore) //上报当天积分
  77 + http.HandleFunc("/ballbattle/queryrankinfo", Queryrankinfo) //获取排行榜信息
67 78 //
68 79 http.HandleFunc("/ballbattle/readNumUpload", ReadNumUpload) //阅读量上报
69 80 http.HandleFunc("/ballbattle/queryreadgold", QueryReadGold) //获取微转发金币数
... ... @@ -144,6 +155,49 @@ func Savadata(w http.ResponseWriter, r *http.Request) {
144 155 HandlerSavadata(w, s, Uuid)
145 156 }
146 157  
  158 +
  159 +func Queryrankinfo(w http.ResponseWriter, r *http.Request) {
  160 +
  161 + Uuid := 0
  162 + if len(r.Header) > 0 {
  163 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  164 + }
  165 +
  166 + if Uuid == 0 {
  167 + SetHeader(w)
  168 + //logger.Error("Uuid is nil!")
  169 + return
  170 + }
  171 + result, _ := ioutil.ReadAll(r.Body)
  172 + r.Body.Close()
  173 +
  174 + s := string(result)
  175 + logger.Info("Queryrankinfo , body:%v,uuid=%v", s, Uuid)
  176 +
  177 + HandlerQueryrankinfo(w, s, Uuid)
  178 +}
  179 +
  180 +func Uploadscore(w http.ResponseWriter, r *http.Request) {
  181 +
  182 + Uuid := 0
  183 + if len(r.Header) > 0 {
  184 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  185 + }
  186 +
  187 + if Uuid == 0 {
  188 + SetHeader(w)
  189 + //logger.Error("Uuid is nil!")
  190 + return
  191 + }
  192 + result, _ := ioutil.ReadAll(r.Body)
  193 + r.Body.Close()
  194 +
  195 + s := string(result)
  196 + logger.Info("Uploadscore , body:%v,uuid=%v", s, Uuid)
  197 +
  198 + HandlerUploadscore(w, s, Uuid)
  199 +}
  200 +
147 201 func Getdata(w http.ResponseWriter, r *http.Request) {
148 202  
149 203 Uuid := 0
... ...
src/HttpServer/logic/logic.go
... ... @@ -525,6 +525,130 @@ func HandlerReadNumUpload(w http.ResponseWriter, data string) {
525 525 fmt.Fprint(w, string(respstr))
526 526 }
527 527  
  528 +
  529 +func HandlerUploadscore(w http.ResponseWriter, data string, uuid int) {
  530 + SetHeader(w)
  531 + var resp UploadhigestscoreResp
  532 + resp.Code = 0
  533 + resp.Message = "success"
  534 + var rdata UploadhigestscoreReq
  535 + err := json.Unmarshal([]byte(data), &rdata)
  536 + for {
  537 + if err != nil {
  538 + logger.Info("json decode HandlerUploadscore data failed:%v,for:%v", err, data)
  539 + resp.Message = "网络错误"
  540 + resp.Code = ERROR_JSONUNMASH_ERROR
  541 + break
  542 + }
  543 +
  544 + //需要加上渠道才是唯一的玩家id,不同渠道视为不同数据
  545 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel
  546 + uinfo, err := GetUserInfo(uniqueuuid)
  547 + if err != nil || uinfo == nil {
  548 + logger.Error("redis failed err=%v", err)
  549 + resp.Message = "服务器错误"
  550 + resp.Code = ERROR_SRV_ERROR
  551 + break
  552 + }
  553 +
  554 + if uinfo.Hfen >= rdata.Score {
  555 + //resp.Message = "服务器错误"
  556 + resp.Code = 0
  557 + break
  558 + }
  559 +
  560 + uinfo.Hfen = rdata.Score
  561 + uinfo.AddToRank(uniqueuuid)
  562 + //加入排行榜
  563 + SaveUserInfo(uinfo, uniqueuuid)
  564 +
  565 + resp.Code = ERROR_OK
  566 + break
  567 + }
  568 +
  569 + //回包
  570 + respstr, _ := json.Marshal(&resp)
  571 + fmt.Fprint(w, string(respstr))
  572 +}
  573 +
  574 +
  575 +func HandlerQueryrankinfo(w http.ResponseWriter, data string, uuid int) {
  576 + SetHeader(w)
  577 + var resp QueryrankinfoResp
  578 + resp.Code = 0
  579 + resp.Message = "success"
  580 + var rdata CommReq
  581 + err := json.Unmarshal([]byte(data), &rdata)
  582 + for {
  583 + if err != nil {
  584 + logger.Info("json decode HandlerQueryrankinfo data failed:%v,for:%v", err, data)
  585 + resp.Message = "网络错误"
  586 + resp.Code = ERROR_JSONUNMASH_ERROR
  587 + break
  588 + }
  589 + uniqueuuid := strconv.Itoa(uuid) + rdata.Channel
  590 +
  591 + selfrank := -1
  592 + selfscore := int64(0)
  593 + vv, err := redishandler.GetRedisClient().ZRevRangewithIndex(redis.USER_SCORE_RANK, 0, 99)
  594 + if err == nil {
  595 + rank := 0
  596 + for _, v := range vv {
  597 + rank++
  598 +
  599 + rinfobyte, _ := v.([]byte)
  600 + logger.Info("HandlerQueryPlayerRank ,v=%v", string(rinfobyte))
  601 + //ruid, _ := strconv.Atoi(string(rinfobyte))
  602 + rindo, err := GetUserInfo(string(rinfobyte))
  603 + if err == nil && rindo != nil {
  604 + var tmp Queryrankinfolist
  605 + tmp.UniqueId = string(rinfobyte)
  606 + tmp.Socre = rindo.Hfen
  607 + tmp.Nickname = rindo.Nickname
  608 + tmp.Headurl = rindo.HeadUrl
  609 + tmp.Rank = rank
  610 +
  611 + resp.Data.Ranklist = append(resp.Data.Ranklist, tmp)
  612 + }
  613 +
  614 + if string(rinfobyte) == uniqueuuid {
  615 + selfrank = rank
  616 + selfscore = rindo.Hfen
  617 + }
  618 + }
  619 + } else {
  620 + logger.Error("HandlerUpdateUserInfo redisfailed ")
  621 + resp.Code = 1
  622 + resp.Message = "redisfailed"
  623 + break
  624 + }
  625 +
  626 + if selfrank == -1 {
  627 + uinfo, err := GetUserInfo(uniqueuuid)
  628 + if err != nil {
  629 + logger.Info("GetUserInfo HandlerQueryrankinfo data failed:%v,for:%v", err, data)
  630 + resp.Message = "GetUserInfo failed"
  631 + resp.Code = 1
  632 + break
  633 + }
  634 +
  635 + resp.Data.Selfsocre = uinfo.Hfen
  636 + resp.Data.Selfrank = 101 //表示100+
  637 + } else {
  638 + resp.Data.Selfrank = selfrank
  639 + resp.Data.Selfsocre = selfscore
  640 + }
  641 +
  642 + resp.Code = ERROR_OK
  643 + break
  644 + }
  645 +
  646 + //回包
  647 + respstr, _ := json.Marshal(&resp)
  648 + fmt.Fprint(w, string(respstr))
  649 +}
  650 +
  651 +
528 652 func HandlerSavadata(w http.ResponseWriter, data string, uuid int) {
529 653 SetHeader(w)
530 654 var resp SavadataResp
... ...
src/common/redis/def.go
... ... @@ -6,4 +6,5 @@ const (
6 6 USER_TASKINFO_LIST = "BALLBATTLE_USER_TASKINFO_LIST" //任务列表数据缓存
7 7 USER_ACHIEVEMENTINFO_LIST = "BALLBATTLE_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存
8 8 USER_SELFDATA_KEY = "BALLBATTLE_USER_SELFDATA_KEY" //玩家自定义数据 需要加上uuid与channel hset field为自定义的key value为保存的数据
  9 + USER_SCORE_RANK = "BALLBATTLE_USER_SCORE_RANK" //玩家排行榜
9 10 )
... ...