Commit 87f7705683acf0c79a282512aa2b538abd22f1e5

Authored by 陆恒
1 parent eef4f826
Exists in master

提交新增加的一系列接口

src/HttpServer/conf/conf.go
... ... @@ -14,10 +14,16 @@ type RedisConf struct {
14 14 Password string `xml:",attr"`
15 15 }
16 16  
  17 +type ConiSrvConf struct {
  18 + Host string `xml:",attr"`
  19 + Key string `xml:",attr"`
  20 +}
  21 +
17 22 type TexasConf struct {
18 23 GameDB MysqlConf `xml:"GameDB"`
19 24 ServerHttpAddr ServerHttpAddrConf `xml:"ServerHttpAddr"`
20 25 Redis RedisConf `xml:"Redis"`
  26 + CoinSrv ConiSrvConf `xml:"CoinSrv"`
21 27 }
22 28  
23 29 var (
... ... @@ -70,3 +76,7 @@ type ServerHttpAddrConf struct {
70 76 Host string `xml:",attr"`
71 77 IsTest string `xml:",attr"`
72 78 }
  79 +
  80 +func GetCoinConf() ConiSrvConf {
  81 + return config.CoinSrv
  82 +}
... ...
src/HttpServer/jsonconf/LuckyBagConfig.json 0 → 100644
... ... @@ -0,0 +1,37 @@
  1 +[
  2 + {
  3 + "id": 1,
  4 + "coin": 88,
  5 + "rate": 5
  6 + },
  7 + {
  8 + "id": 2,
  9 + "coin": 108,
  10 + "rate": 15
  11 + },
  12 + {
  13 + "id": 3,
  14 + "coin": 148,
  15 + "rate": 25
  16 + },
  17 + {
  18 + "id": 4,
  19 + "coin": 168,
  20 + "rate": 25
  21 + },
  22 + {
  23 + "id": 5,
  24 + "coin": 188,
  25 + "rate": 15
  26 + },
  27 + {
  28 + "id": 6,
  29 + "coin": 228,
  30 + "rate": 10
  31 + },
  32 + {
  33 + "id": 7,
  34 + "coin": 268,
  35 + "rate": 5
  36 + }
  37 +]
0 38 \ No newline at end of file
... ...
src/HttpServer/jsonconf/RedPackageConfig.json 0 → 100644
... ... @@ -0,0 +1,152 @@
  1 +[
  2 + {
  3 + "id": 1,
  4 + "point": 200,
  5 + "free_coin": 60,
  6 + "video_coin": 150
  7 + },
  8 + {
  9 + "id": 2,
  10 + "point": 500,
  11 + "free_coin": 60,
  12 + "video_coin": 150
  13 + },
  14 + {
  15 + "id": 3,
  16 + "point": 800,
  17 + "free_coin": 50,
  18 + "video_coin": 150
  19 + },
  20 + {
  21 + "id": 4,
  22 + "point": 1200,
  23 + "free_coin": 50,
  24 + "video_coin": 150
  25 + },
  26 + {
  27 + "id": 5,
  28 + "point": 1600,
  29 + "free_coin": 40,
  30 + "video_coin": 150
  31 + },
  32 + {
  33 + "id": 6,
  34 + "point": 2000,
  35 + "free_coin": 40,
  36 + "video_coin": 150
  37 + },
  38 + {
  39 + "id": 7,
  40 + "point": 2400,
  41 + "free_coin": 40,
  42 + "video_coin": 150
  43 + },
  44 + {
  45 + "id": 8,
  46 + "point": 2800,
  47 + "free_coin": 40,
  48 + "video_coin": 150
  49 + },
  50 + {
  51 + "id": 9,
  52 + "point": 3200,
  53 + "free_coin": 35,
  54 + "video_coin": 150
  55 + },
  56 + {
  57 + "id": 10,
  58 + "point": 3600,
  59 + "free_coin": 35,
  60 + "video_coin": 150
  61 + },
  62 + {
  63 + "id": 11,
  64 + "point": 3800,
  65 + "free_coin": 30,
  66 + "video_coin": 150
  67 + },
  68 + {
  69 + "id": 12,
  70 + "point": 4000,
  71 + "free_coin": 30,
  72 + "video_coin": 150
  73 + },
  74 + {
  75 + "id": 13,
  76 + "point": 4200,
  77 + "free_coin": 30,
  78 + "video_coin": 150
  79 + },
  80 + {
  81 + "id": 14,
  82 + "point": 4400,
  83 + "free_coin": 25,
  84 + "video_coin": 150
  85 + },
  86 + {
  87 + "id": 15,
  88 + "point": 4600,
  89 + "free_coin": 25,
  90 + "video_coin": 150
  91 + },
  92 + {
  93 + "id": 16,
  94 + "point": 4800,
  95 + "free_coin": 25,
  96 + "video_coin": 150
  97 + },
  98 + {
  99 + "id": 17,
  100 + "point": 5000,
  101 + "free_coin": 25,
  102 + "video_coin": 150
  103 + },
  104 + {
  105 + "id": 18,
  106 + "point": 5200,
  107 + "free_coin": 20,
  108 + "video_coin": 150
  109 + },
  110 + {
  111 + "id": 19,
  112 + "point": 5400,
  113 + "free_coin": 20,
  114 + "video_coin": 150
  115 + },
  116 + {
  117 + "id": 20,
  118 + "point": 5600,
  119 + "free_coin": 20,
  120 + "video_coin": 150
  121 + },
  122 + {
  123 + "id": 21,
  124 + "point": 5800,
  125 + "free_coin": 20,
  126 + "video_coin": 150
  127 + },
  128 + {
  129 + "id": 22,
  130 + "point": 6000,
  131 + "free_coin": 20,
  132 + "video_coin": 150
  133 + },
  134 + {
  135 + "id": 23,
  136 + "point": 6200,
  137 + "free_coin": 20,
  138 + "video_coin": 150
  139 + },
  140 + {
  141 + "id": 24,
  142 + "point": 6400,
  143 + "free_coin": 20,
  144 + "video_coin": 150
  145 + },
  146 + {
  147 + "id": 25,
  148 + "point": 6600,
  149 + "free_coin": 20,
  150 + "video_coin": 150
  151 + }
  152 +]
0 153 \ No newline at end of file
... ...
src/HttpServer/jsonconf/jsonconf.go
... ... @@ -12,64 +12,71 @@ var (
12 12 )
13 13  
14 14 type AchieveDesc struct {
15   - Type int `json:"type"`
16   - Id int `json:"id"`
17   - Desc string `json:"desc"`
18   - Aim int `json:"aim"`
19   - Coin int `json:"coin"`
  15 + Type int `json:"type"`
  16 + Id int `json:"id"`
  17 + Desc string `json:"desc"`
  18 + Aim int `json:"aim"`
  19 + Coin int `json:"coin"`
20 20 Is_video int `json:"is_video"`
21 21 }
22 22  
23 23 type TaskDesc struct {
24   - Id int `json:"id"`
25   - Type int `json:"type"`
26   - Day_type int `json:"day_type"`
27   - Active int `json:"active"`
28   - Coin int `json:"coin"`
29   - Desc string `json:"desc"`
  24 + Id int `json:"id"`
  25 + Type int `json:"type"`
  26 + Day_type int `json:"day_type"`
  27 + Active int `json:"active"`
  28 + Coin int `json:"coin"`
  29 + Desc string `json:"desc"`
30 30 }
31 31  
32   -
33   -
34 32 type TrunTableConfigDesc struct {
35   - Id int `json:"id"`
  33 + Id int `json:"id"`
36 34 Name string `json:"name"`
37   - Type int `json:"type"`
38   - Desc int `json:"desc"`
39   - Rate int `json:"rate"`
  35 + Type int `json:"type"`
  36 + Desc int `json:"desc"`
  37 + Rate int `json:"rate"`
40 38 }
41 39  
42 40 type RmbConfigDesc struct {
43   - Id int `json:"id"`
44   - Rmb_num float32 `json:"rmb_num"`
45   - Time int `json:"time"`
46   - Login_day int `json:"login_day"`
  41 + Id int `json:"id"`
  42 + Rmb_num float32 `json:"rmb_num"`
  43 + Time int `json:"time"`
  44 + Login_day int `json:"login_day"`
47 45 }
48 46  
49   -
50   -
51   -
52   -
53 47 type SignConfigDesc struct {
54   - Id int `json:"id"`
55   - Sign_coin int `json:"sign_coin"`
  48 + Id int `json:"id"`
  49 + Sign_coin int `json:"sign_coin"`
56 50 Video_coin int `json:"video_coin"`
57 51 }
58 52  
  53 +type RedPackageConfigDesc struct {
  54 + Id int `json:"id"`
  55 + Point int `json:"point"`
  56 + Free_coin int `json:"free_coin"`
  57 + Video_coin int `json:"video_coin"`
  58 +}
  59 +
  60 +type LuckyBagConfigDesc struct {
  61 + Id int `json:"id"`
  62 + Coin int `json:"coin"`
  63 + Rate int `json:"rate"`
  64 +}
  65 +
59 66 type GameConfig struct {
60   - AchieventConfig []AchieveDesc
61   - TaskConfig []TaskDesc
62   - SignConfig []SignConfigDesc
63   - RmbConfig []RmbConfigDesc
64   - TrunTableConfig []TrunTableConfigDesc
  67 + AchieventConfig []AchieveDesc
  68 + TaskConfig []TaskDesc
  69 + SignConfig []SignConfigDesc
  70 + RmbConfig []RmbConfigDesc
  71 + TrunTableConfig []TrunTableConfigDesc
  72 + RedPackageConfig []RedPackageConfigDesc
  73 + LuckyBagConfig []LuckyBagConfigDesc
65 74 }
66 75  
67 76 func GetJsonConf() *GameConfig {
68 77 return g_jsonconf
69 78 }
70 79  
71   -
72   -
73 80 func file_get_contents(path string) ([]byte, error) {
74 81 f, err := os.Open(path)
75 82 if err != nil {
... ... @@ -146,8 +153,50 @@ func LoadJsonConf() error {
146 153 return err
147 154 }
148 155  
  156 + path = "../jsonconf/RedPackageConfig.json"
  157 + content, err = file_get_contents(path)
  158 + if err != nil {
  159 + logger.Info("loadJsonConf failed1,err=%v", err)
  160 + return err
  161 + }
149 162  
  163 + err = json.Unmarshal([]byte(content), &g_jsonconf.RedPackageConfig)
  164 + if err != nil {
  165 + logger.Info("loadJsonConf failed1,err=%v", err)
  166 + return err
  167 + }
  168 +
  169 + path = "../jsonconf/LuckyBagConfig.json"
  170 + content, err = file_get_contents(path)
  171 + if err != nil {
  172 + logger.Info("loadJsonConf failed1,err=%v", err)
  173 + return err
  174 + }
  175 +
  176 + err = json.Unmarshal([]byte(content), &g_jsonconf.LuckyBagConfig)
  177 + if err != nil {
  178 + logger.Info("loadJsonConf failed1,err=%v", err)
  179 + return err
  180 + }
150 181  
151 182 logger.Info("loadJsonConf success pconf=%+v,err=%v", *g_jsonconf, err)
152 183 return err
153 184 }
  185 +
  186 +func GetRedPackageConfig(id int) *RedPackageConfigDesc {
  187 + for _, val := range g_jsonconf.RedPackageConfig {
  188 + if val.Id == id {
  189 + return &val
  190 + }
  191 + }
  192 + return nil
  193 +}
  194 +
  195 +func GetsignConfig(id int) *SignConfigDesc {
  196 + for _, v := range g_jsonconf.SignConfig {
  197 + if v.Id == id {
  198 + return &v
  199 + }
  200 + }
  201 + return nil
  202 +}
... ...
src/HttpServer/logic/constdef.go
... ... @@ -57,4 +57,17 @@ const (
57 57 FREE_REDBAG_NUM = 3 //玩家免费红包次数
58 58 READGOLDMULTI = 700 //阅读量到金币转化倍数
59 59 SDKOPGOLD_TYPEWE = 302 //微转发金币类型
  60 + GUANGOLDNUMLIMIT = 900 //存钱罐金币上限
  61 + LUCKYBAGDAYLIMIT = 10 //每日福袋次数
  62 +)
  63 +
  64 +const (
  65 + REDBAGTYPE_101 = 101 //免费人物升级
  66 + REDBAGTYPE_102 = 102 //任务
  67 + REDBAGTYPE_103 = 103 //,免费红包
  68 + REDBAGTYPE_104 = 104 //付费人物升级
  69 + REDBAGTYPE_105 = 105 //存钱罐
  70 + REDBAGTYPE_106 = 106 //付费红包
  71 + REDBAGTYPE_107 = 107 //签到
  72 + REDBAGTYPE_302 = 302 //微转发
60 73 )
... ...
src/HttpServer/logic/datadef.go
... ... @@ -12,10 +12,11 @@ type UserLoginReq struct {
12 12 }
13 13  
14 14 type UserLoginData struct {
15   - Isnew int `json:"isnew"`
16   - Walletgold int `json:"walletgold"`
17   - Guangold int `json:"guangold"`
18   - PlayerData string `json:"playerData"`
  15 + Isnew int `json:"isnew"`
  16 + Walletgold int `json:"walletgold"`
  17 + Guangold int `json:"guangold"`
  18 + PlayerData string `json:"playerData"`
  19 + Offlinegold int `json:"offlinegold"`
19 20 }
20 21  
21 22 type UserLoginResp struct {
... ... @@ -56,10 +57,11 @@ type UpdatedataResp struct {
56 57 }
57 58  
58 59 type SyncuserdataData struct {
59   - Walletgold int `json:"walletgold"`
60   - Guangold int `json:"guangold"`
61   - Sumloginday int `json:"sumloginday"`
62   - Nowtime int `json:"nowtime"`
  60 + Walletgold int `json:"walletgold"`
  61 + Guangold int `json:"guangold"`
  62 + Sumloginday int `json:"sumloginday"`
  63 + Nowtime int `json:"nowtime"`
  64 + Luckbaglefttime int `json:"luckbaglefttime"`
63 65 }
64 66  
65 67 type SyncuserdataResp struct {
... ... @@ -116,9 +118,7 @@ type QueryguaninfoResp struct {
116 118 }
117 119  
118 120 type GetguangoldReq struct {
119   - Goldnum int `json:"goldnum"`
120   - Gameid string `json:"gameid"`
121   - Channel string `json:"channel"`
  121 + Goldnum int `json:"goldnum"`
122 122 }
123 123  
124 124 type GetguangoldData struct {
... ... @@ -132,15 +132,13 @@ type GetguangoldResp struct {
132 132 }
133 133  
134 134 type DrawguangoldReq struct {
135   - Goldnum int `json:"goldnum"`
136   - Gameid string `json:"gameid"`
137   - Channel string `json:"channel"`
  135 + Goldnum int `json:"goldnum"`
138 136 }
139 137  
140 138 type DrawguangoldData struct {
141   - Guangold int `json:"guangold"`
142   - Wallgold int `json:"wallgold"`
143   - Totalfetchcnt int `json:"totalfetchcnt"`
  139 + Guangold int `json:"guangold"`
  140 + Wallgold int `json:"wallgold"`
  141 + //Totalfetchcnt int `json:"totalfetchcnt"`
144 142 }
145 143  
146 144 type DrawguangoldResp struct {
... ... @@ -149,12 +147,109 @@ type DrawguangoldResp struct {
149 147 Data DrawguangoldData `json:"data"`
150 148 }
151 149  
  150 +type FetchfenredbagReq struct {
  151 + Id int `json:"id"`
  152 + Ftype int `json:"ftype"`
  153 +}
  154 +
  155 +type FetchfenredbagData struct {
  156 + Wallgold int `json:"wallgold"`
  157 +}
  158 +
  159 +type FetchfenredbagResp struct {
  160 + Code int `json:"code"`
  161 + Message string `json:"message"`
  162 + Data FetchfenredbagData `json:"data"`
  163 +}
  164 +
  165 +type FetchluckybagData struct {
  166 + Wallgold int `json:"wallgold"`
  167 + Lefttimes int `json:"lefttimes"`
  168 +}
  169 +
  170 +type FetchluckybagResp struct {
  171 + Code int `json:"code"`
  172 + Message string `json:"message"`
  173 + Data FetchluckybagData `json:"data"`
  174 +}
  175 +
  176 +type QuersigndataData struct {
  177 + Curday int `json:"curday"`
  178 + Issigntaday int `json:"issigntaday"`
  179 +}
  180 +
  181 +type QuersigndataResp struct {
  182 + Code int `json:"code"`
  183 + Message string `json:"message"`
  184 + Data QuersigndataData `json:"data"`
  185 +}
  186 +
  187 +type FetchoffliengoldData struct {
  188 + Walletgold int `json:"walletgold"`
  189 + Getgold int `json:"getgold"`
  190 +}
  191 +
  192 +type FetchoffliengoldResp struct {
  193 + Code int `json:"code"`
  194 + Message string `json:"message"`
  195 + Data FetchoffliengoldData `json:"data"`
  196 +}
  197 +
  198 +type DosignData struct {
  199 + Curday int `json:"curday"`
  200 + Issigntaday int `json:"issigntaday"`
  201 + Walletgold int `json:"walletgold"`
  202 +}
  203 +
  204 +type DosignReq struct {
  205 + Ftype int `json:"ftype"`
  206 +}
  207 +
  208 +type DosignResp struct {
  209 + Code int `json:"code"`
  210 + Message string `json:"message"`
  211 + Data DosignData `json:"data"`
  212 +}
  213 +
152 214 type QuerdrawinfoResp struct {
153 215 Code int `json:"code"`
154 216 Message string `json:"message"`
155 217 Data WithDrawInfo `json:"data"`
156 218 }
157 219  
  220 +type UploadhigestscoreReq struct {
  221 + Score int64 `json:"score"`
  222 +}
  223 +
  224 +type UploadhigestscoreData struct {
  225 +}
  226 +
  227 +type UploadhigestscoreResp struct {
  228 + Code int `json:"code"`
  229 + Message string `json:"message"`
  230 + Data UploadhigestscoreData `json:"data"`
  231 +}
  232 +
  233 +type Queryrankinfolist struct {
  234 + Rank int `json:"rank"`
  235 + Nickname string `json:"nickname"`
  236 + Headurl string `json:"headurl"`
  237 + Socre int64 `json:"socre"`
  238 + UniqueId string `json:"uniqueId"`
  239 +}
  240 +
  241 +type QueryrankinfoData struct {
  242 + Selfrank int `json:"selfrank"`
  243 + Selfsocre int64 `json:"selfsocre"`
  244 + Ranklist []Queryrankinfolist `json:"ranklist"`
  245 +}
  246 +
  247 +type QueryrankinfoResp struct {
  248 + Code int `json:"code"`
  249 + Message string `json:"message"`
  250 + Data QueryrankinfoData `json:"data"`
  251 +}
  252 +
158 253 type GetcashReq struct {
159 254 Gameid string `json:"gameid"`
160 255 Channel string `json:"channel"`
... ... @@ -376,31 +471,36 @@ type WithDrawDesc struct {
376 471  
377 472 //玩家数据
378 473 type UserData struct {
379   - Userid string //玩家w唯一id
380   - Lv int //玩家当前等级
381   - LvRewardGet int //当前等级奖励是否已经领取 1未领取 2普通领取 3双倍领取
382   - Exp int //玩家当前经验值
383   - NickName string //昵称
384   - HeadUrl string //头像
385   - RegTime int //注册时间
386   - GuanGold int //玩家存钱罐中金币数量
387   - RealGold int //玩家实际金币数量(可用于提现的)
388   - WatchAddsTime int //当天剩余红包次数 初始化50次
389   - LastLoginTime int //上次登陆时间
390   - ContinueLoginDay int //连续登录天数
391   - SumLoginDay int //累计登陆天数
392   - GetFromGuanCnt int //当天从存钱款提取金币次数
393   - SignRound int //签到轮数
394   - SignSum int //累计签到天数
395   - IsSignToday int //今日是否已经签到 1是 0否
396   - LeftFreeRB int //剩余免费红包次数
397   - UpLvCostTime int //上一个等级升级时间
398   - UpLvCostTimeSec int //上一个等级升级的时间点时刻
399   - ReadNum int //玩家微转发阅读量
400   - GetCashCnt int //当天提现次数
401   - WithDraw WithDrawInfo //提现记录信息
402   - Task TaskInfo //玩家任务完成相关信息
403   - Achieve AchieveMentInfo //玩家成就完成相关数据
  474 + Userid string //玩家w唯一id
  475 + Lv int //玩家当前等级
  476 + LvRewardGet int //当前等级奖励是否已经领取 1未领取 2普通领取 3双倍领取
  477 + Exp int //玩家当前经验值
  478 + NickName string //昵称
  479 + HeadUrl string //头像
  480 + RegTime int //注册时间
  481 + GuanGold int //玩家存钱罐中金币数量
  482 + RealGold int //玩家实际金币数量(可用于提现的)
  483 + WatchAddsTime int //当天剩余红包次数 初始化50次
  484 + LastLoginTime int //上次登陆时间
  485 + ContinueLoginDay int //连续登录天数
  486 + SumLoginDay int //累计登陆天数
  487 + GetFromGuanCnt int //当天从存钱款提取金币次数
  488 + SignRound int //签到轮数
  489 + SignSum int //累计签到天数
  490 + IsSignToday int //今日是否已经签到 1是 0否
  491 + LeftFreeRB int //剩余免费红包次数
  492 + UpLvCostTime int //上一个等级升级时间
  493 + UpLvCostTimeSec int //上一个等级升级的时间点时刻
  494 + ReadNum int //玩家微转发阅读量
  495 + GetCashCnt int //当天提现次数
  496 + RedBagFetchIdlist []int //记录当前以及领取的红包id
  497 + LuckyBagLeftTimes int //当日福袋剩余次数
  498 + LastUpdateTime int //上一次同步时间
  499 + OfflineGold int //离线金币数量
  500 + HighScore int64 //玩家历史最高分
  501 + WithDraw WithDrawInfo //提现记录信息
  502 + Task TaskInfo //玩家任务完成相关信息
  503 + Achieve AchieveMentInfo //玩家成就完成相关数据
404 504 }
405 505  
406 506 //----------------------------------------------------------------------------------------------------------------------
... ...
src/HttpServer/logic/function.go
1 1 package logic
2 2  
3 3 import (
  4 + "HttpServer/conf"
4 5 "HttpServer/jsonconf"
5 6 "HttpServer/redishandler"
6 7 "bytes"
... ... @@ -11,6 +12,7 @@ import (
11 12 "encoding/json"
12 13 "errors"
13 14 "io/ioutil"
  15 + "math/rand"
14 16 "net/http"
15 17 "sort"
16 18 "strconv"
... ... @@ -23,6 +25,91 @@ func SetHeader(w http.ResponseWriter) {
23 25 w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid,Gameid,Channel")
24 26 }
25 27  
  28 +func (u *UserData) IsRedIdInList(id int) bool {
  29 + for _, v := range u.RedBagFetchIdlist {
  30 + if v == id {
  31 + return true
  32 + }
  33 + }
  34 + return false
  35 +}
  36 +
  37 +func (u *UserData) HandlePassDay(uuid int, channel string) {
  38 + isdiffday := false
  39 + nowtime := time.Now()
  40 + lasttime := time.Unix(int64(u.LastLoginTime), 0)
  41 + nowdaynum := time.Now().Day()
  42 + lastdaynum := time.Unix(int64(u.LastLoginTime), 0).Day()
  43 + nowtimestamp := time.Date(nowtime.Year(), nowtime.Month(), nowtime.Day(), 0, 0, 0, 0, nowtime.Location())
  44 + lasttimestamp := time.Date(lasttime.Year(), lasttime.Month(), lasttime.Day(), 0, 0, 0, 0, lasttime.Location())
  45 +
  46 + logger.Info("HandlePassDay lasttime=%v,lasttimestamp=%v", lasttime, lasttimestamp)
  47 + if nowdaynum == lastdaynum {
  48 + //同一天
  49 + if int64(u.LastLoginTime)-time.Now().Unix() > 86400 {
  50 + //已经过了很多天了
  51 + //u.LastLoginTime = int(time.Now().Unix())
  52 + u.ContinueLoginDay = 1
  53 + isdiffday = true
  54 + } else {
  55 + //t同一天 不做处理
  56 + }
  57 + } else {
  58 + //不是同一天了
  59 + isdiffday = true
  60 + if nowtimestamp.Unix() != lasttimestamp.Unix()+86400 {
  61 + //超过一天了
  62 + u.ContinueLoginDay = 1
  63 + } else {
  64 + u.ContinueLoginDay++
  65 + }
  66 + logger.Info("HandlePassDay now=%v,last=%v", nowtimestamp.Unix(), lasttimestamp.Unix())
  67 + }
  68 +
  69 + if isdiffday {
  70 + //跨天了
  71 + u.SumLoginDay++
  72 + u.WatchAddsTime = WATCH_ADD_DAY_LIMIT
  73 + //todo 重置任务相关的数据
  74 + u.GetFromGuanCnt = 0
  75 + u.GetCashCnt = 0
  76 +
  77 + u.Task.GetGuanGold = 0
  78 + u.Task.GetRedbagCnt = 0
  79 + u.Task.OnlineMin = 0
  80 + u.Task.PassLevel = 0
  81 + u.Task.UseItemCnt = 0
  82 + u.Task.PlaySmall = 0
  83 + u.RedBagFetchIdlist = u.RedBagFetchIdlist[:0]
  84 + u.LuckyBagLeftTimes = LUCKYBAGDAYLIMIT
  85 +
  86 + err := InitTaskAndAchievement(uuid, channel)
  87 + if err != nil {
  88 + logger.Error("InitTaskAndAchievement err=%v", err)
  89 + }
  90 +
  91 + //签到数据处理
  92 + u.IsSignToday = 0
  93 + if u.SignSum >= 7 {
  94 + //进入新的一轮
  95 + u.SignSum = 0
  96 + u.SignRound++
  97 + }
  98 + }
  99 +
  100 + u.LastLoginTime = int(nowtime.Unix())
  101 + uniqueid := strconv.Itoa(uuid) + channel
  102 + SaveUserInfo(u, uniqueid)
  103 +}
  104 +
  105 +func (udata *UserData) AddToRank() error {
  106 + err := redishandler.GetRedisClient().Zadd(redis.USER_SCORE_RANK, float64(udata.HighScore), udata.Userid)
  107 + if err != nil {
  108 + logger.Error("AddToRank failed err=%v", err)
  109 + }
  110 + return err
  111 +}
  112 +
26 113 func GettotalParam(paramlist []string) string {
27 114 //排序
28 115 sort.Strings(paramlist)
... ... @@ -48,7 +135,7 @@ func GetHashValue(signsum string) string {
48 135  
49 136 func DoHttpPost(bys []byte, apistr string) (string, error) {
50 137 body := bytes.NewBuffer(bys)
51   - url1 := XIAOXINGXING_SDKURLOFFICAL + apistr //"api/server/addcoin"
  138 + url1 := conf.GetCoinConf().Host + apistr //"api/server/addcoin"
52 139  
53 140 res, err := http.Post(url1, "application/json;charset=utf-8", body)
54 141 if err != nil {
... ... @@ -63,10 +150,10 @@ func DoHttpPost(bys []byte, apistr string) (string, error) {
63 150  
64 151 func GetCoinFromSdk(uuid int, gameid string, channel string) (int, error) {
65 152  
66   - SERVERKEY := XIAOXINGXING_SERVERKEYTEST
67   - if gameid == "1015" {
  153 + SERVERKEY := conf.GetCoinConf().Key
  154 + /*if gameid == "1015" {
68 155 SERVERKEY = XIAOXINGXING_SERVERKEYTEST_1015
69   - }
  156 + }*/
70 157  
71 158 var paramlist []string
72 159 var params GetCoinDesc
... ... @@ -288,8 +375,7 @@ func InitTaskAndAchievement(uuid int, channel string) error {
288 375 return nil
289 376 }
290 377  
291   -
292   -func InitUserInfo(resp *UserLoginResp, uniqueuid ,gameid ,channel string,uuid int) error {
  378 +func InitUserInfo(resp *UserLoginResp, uniqueuid, gameid, channel string, uuid int) error {
293 379  
294 380 var initdata UserData
295 381 initdata.Lv = 1
... ... @@ -310,6 +396,7 @@ func InitUserInfo(resp *UserLoginResp, uniqueuid ,gameid ,channel string,uuid in
310 396 initdata.NickName = "著名沙雕"
311 397 initdata.HeadUrl = "1"
312 398 initdata.RegTime = int(time.Now().Unix())
  399 + initdata.LuckyBagLeftTimes = LUCKYBAGDAYLIMIT
313 400  
314 401 for _, val := range jsonconf.GetJsonConf().RmbConfig {
315 402 var tmp WithDrawDesc
... ... @@ -372,17 +459,116 @@ func GetUserInfo(uniqueid string) (*UserData, error) {
372 459 return &tmp, nil
373 460 }
374 461  
375   -func SaveUserSelfData(uniqueid ,savedata string) error {
  462 +func SaveUserSelfData(uniqueid, savedata string) error {
376 463 err := redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, uniqueid, savedata)
377 464 return err
378 465 }
379 466  
380   -func GetUserSelfData(uniqueid string) (string,error) {
  467 +func GetUserSelfData(uniqueid string) (string, error) {
381 468 data, err := redishandler.GetRedisClient().HGet(redis.USER_SELF_DATA_KEY, uniqueid)
382 469 if err != nil {
383 470 return "", err
384 471 }
385 472  
386   -
387 473 return data, nil
388   -}
389 474 \ No newline at end of file
  475 +}
  476 +
  477 +func AddCoinToSdk(uuid int, goldnum int, gameid string, channel string, atype int) (int, error) {
  478 + SERVERKEY := conf.GetCoinConf().Key
  479 + /*if gameid == "1015" {
  480 + SERVERKEY = XIAOXINGXING_SERVERKEYTEST_1015
  481 + }*/
  482 + var paramlist []string
  483 + sign_type := "sign_type=md5"
  484 + paramlist = append(paramlist, sign_type)
  485 + time_stamp := "time_stamp=" + strconv.Itoa(int(time.Now().Unix()))
  486 + paramlist = append(paramlist, time_stamp)
  487 + paramgameid := "gameid=" + gameid
  488 + paramlist = append(paramlist, paramgameid)
  489 + pchannel := "channel=" + channel
  490 + paramlist = append(paramlist, pchannel)
  491 + puid := "uid=" + strconv.Itoa(uuid)
  492 + paramlist = append(paramlist, puid)
  493 + pcoin := "coin=" + strconv.Itoa(goldnum)
  494 + paramlist = append(paramlist, pcoin)
  495 + ptyp := "typ=" + strconv.Itoa(atype)
  496 + paramlist = append(paramlist, ptyp)
  497 +
  498 + sumparam := GettotalParam(paramlist)
  499 + //加serverkey
  500 + signsum := sumparam + SERVERKEY
  501 + logger.Info("AddCoinToSdk sumparam=%v", signsum)
  502 +
  503 + //进行hash
  504 + sign := GetHashValue(signsum)
  505 +
  506 + var req AddCoinDesc
  507 + req.Channel = channel
  508 + req.Gameid = gameid
  509 + req.Coin = goldnum
  510 + req.Sign = sign
  511 + req.Sign_type = "md5"
  512 + req.Time_stamp = strconv.Itoa(int(time.Now().Unix()))
  513 + req.Typ = atype
  514 + req.Uid = uuid
  515 +
  516 + bys, err := json.Marshal(&req)
  517 + if err != nil {
  518 + logger.Error("AddCoinToSdk failed=%v", err)
  519 + return 0, err
  520 + }
  521 + res, err := DoHttpPost(bys, "api/server/addcoin")
  522 + if err != nil {
  523 + logger.Error("AddCoinToSdk failed=%v", err)
  524 + return 0, err
  525 + }
  526 +
  527 + logger.Info("AddCoinToSdk res=%v", res)
  528 + var resp AddCoinResp
  529 + err = json.Unmarshal([]byte(res), &resp)
  530 + if err != nil {
  531 + logger.Error("AddCoinToSdk failed=%v", err)
  532 + return 0, err
  533 + }
  534 +
  535 + if resp.Code != "0" {
  536 + gold, _ := GetCoinFromSdk(uuid, gameid, channel)
  537 + logger.Error("AddCoinToSdk failed=%v", resp.Msg)
  538 + return gold, err
  539 + }
  540 + return resp.Data.Mycoin, nil
  541 +}
  542 +
  543 +//计算福袋金额
  544 +func CalcLuckYBagNum() int {
  545 + rtnum := 0
  546 +
  547 + sumrate := 0
  548 + tmprate := 0
  549 + idx := -1
  550 + rand.Seed(time.Now().UnixNano())
  551 + randnum := rand.Intn(100)
  552 + cflist := jsonconf.GetJsonConf().LuckyBagConfig
  553 + for _, vv := range cflist {
  554 + sumrate += vv.Rate
  555 + }
  556 + logger.Info("CalcLuckYBagNum sumrate=%v,randnum=%v,cflist=%+v", sumrate, randnum, cflist)
  557 + for k, v := range cflist {
  558 + tmprate += int(v.Rate * 100 / sumrate)
  559 + logger.Info("DrawTable tmprate=%v", tmprate)
  560 + if tmprate >= randnum {
  561 + idx = k
  562 + break
  563 + }
  564 + }
  565 +
  566 + if idx == -1 {
  567 + if len(cflist) > 0 {
  568 + rtnum = cflist[0].Coin
  569 + }
  570 + } else {
  571 + rtnum = cflist[idx].Coin
  572 + }
  573 +
  574 + return rtnum
  575 +}
... ...
src/HttpServer/logic/httpserver.go
... ... @@ -49,13 +49,22 @@ func startServerHttpServe() {
49 49 http.HandleFunc("/russiaxiaoxiao/uploaduserbasicinfo", Uploaduserbasicinfo) //上传基本信息
50 50 http.HandleFunc("/russiaxiaoxiao/updatedata", Updatedata) //update数据
51 51 http.HandleFunc("/russiaxiaoxiao/syncuserdata", Syncuserdata) //同步玩家数据
  52 + http.HandleFunc("/russiaxiaoxiao/getguangold", Getguangold) //获取金币存入存钱罐
  53 + http.HandleFunc("/russiaxiaoxiao/drawguangold", Drawguangold) //提取存钱罐金币
  54 + http.HandleFunc("/russiaxiaoxiao/fetchfenredbag", Fetchfenredbag) //请求领取每日消除红包
  55 + http.HandleFunc("/russiaxiaoxiao/fetchluckybag", Fetchluckybag) //请求领取每日福袋
  56 + http.HandleFunc("/russiaxiaoxiao/quersigndata", Quersigndata) //获取签到数据
  57 + http.HandleFunc("/russiaxiaoxiao/dosign", Dosign) //签到
  58 + http.HandleFunc("/russiaxiaoxiao/fetchoffliengold", Fetchoffliengold) //请求领取离线金币
  59 + http.HandleFunc("/russiaxiaoxiao/uploadhigestscore", Uploadhigestscore) //上报玩家历史最高分
  60 + http.HandleFunc("/russiaxiaoxiao/queryrankinfo", Queryrankinfo) //查询排行榜
52 61  
53 62 //..........................................
54   - http.HandleFunc("/eliminatestar/getuserdata", Getuserdata) //获取玩家数据
55   - http.HandleFunc("/eliminatestar/watchads", Watchads) //观看激励视频
56   - http.HandleFunc("/eliminatestar/queryguaninfo", Queryguaninfo) //获取存钱罐数据
57   - http.HandleFunc("/eliminatestar/getguangold", Getguangold) //获取金币到存钱罐
58   - http.HandleFunc("/eliminatestar/drawguangold", Drawguangold) //提取存钱罐的金币到个人钱包
  63 + http.HandleFunc("/eliminatestar/getuserdata", Getuserdata) //获取玩家数据
  64 + http.HandleFunc("/eliminatestar/watchads", Watchads) //观看激励视频
  65 + http.HandleFunc("/eliminatestar/queryguaninfo", Queryguaninfo) //获取存钱罐数据
  66 + //http.HandleFunc("/eliminatestar/getguangold", Getguangold) //获取金币到存钱罐
  67 + //http.HandleFunc("/eliminatestar/drawguangold", Drawguangold) //提取存钱罐的金币到个人钱包
59 68 http.HandleFunc("/eliminatestar/querdrawinfo", Querdrawinfo) //获取提现档位信息接口
60 69 http.HandleFunc("/eliminatestar/getcash", Getcash) //提现
61 70 http.HandleFunc("/eliminatestar/getcashrecord", Getcashrecord) //提现记录列表
... ... @@ -478,46 +487,255 @@ func Querdrawinfo(w http.ResponseWriter, r *http.Request) {
478 487 //HandlerQuerdrawinfo(w, s, Uuid)
479 488 }
480 489  
  490 +func Queryrankinfo(w http.ResponseWriter, r *http.Request) {
  491 +
  492 + gameid := ""
  493 + channel := ""
  494 + uniqueid := ""
  495 + Uuid := 0
  496 + if len(r.Header) > 0 {
  497 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  498 + gameid = r.Header.Get("Gameid")
  499 + channel = r.Header.Get("Channel")
  500 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
  501 + }
  502 +
  503 + if Uuid == 0 {
  504 + SetHeader(w)
  505 + logger.Error("Uuid is nil!")
  506 + return
  507 + }
  508 + result, _ := ioutil.ReadAll(r.Body)
  509 + r.Body.Close()
  510 +
  511 + s := string(result)
  512 + logger.Info("Queryrankinfo , body:%v,uuid=%v", s, uniqueid)
  513 +
  514 + HandlerQueryrankinfo(w, s, uniqueid, gameid, channel, Uuid)
  515 +
  516 +}
  517 +
  518 +func Uploadhigestscore(w http.ResponseWriter, r *http.Request) {
  519 +
  520 + gameid := ""
  521 + channel := ""
  522 + uniqueid := ""
  523 + Uuid := 0
  524 + if len(r.Header) > 0 {
  525 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  526 + gameid = r.Header.Get("Gameid")
  527 + channel = r.Header.Get("Channel")
  528 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
  529 + }
  530 +
  531 + if Uuid == 0 {
  532 + SetHeader(w)
  533 + logger.Error("Uuid is nil!")
  534 + return
  535 + }
  536 + result, _ := ioutil.ReadAll(r.Body)
  537 + r.Body.Close()
  538 +
  539 + s := string(result)
  540 + logger.Info("Uploadhigestscore , body:%v,uuid=%v", s, uniqueid)
  541 +
  542 + HandlerUploadhigestscore(w, s, uniqueid, gameid, channel, Uuid)
  543 +
  544 +}
  545 +
  546 +func Fetchoffliengold(w http.ResponseWriter, r *http.Request) {
  547 +
  548 + gameid := ""
  549 + channel := ""
  550 + uniqueid := ""
  551 + Uuid := 0
  552 + if len(r.Header) > 0 {
  553 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  554 + gameid = r.Header.Get("Gameid")
  555 + channel = r.Header.Get("Channel")
  556 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
  557 + }
  558 +
  559 + if Uuid == 0 {
  560 + SetHeader(w)
  561 + logger.Error("Uuid is nil!")
  562 + return
  563 + }
  564 + result, _ := ioutil.ReadAll(r.Body)
  565 + r.Body.Close()
  566 +
  567 + s := string(result)
  568 + logger.Info("Fetchoffliengold , body:%v,uuid=%v", s, uniqueid)
  569 +
  570 + HandlerFetchoffliengold(w, s, uniqueid, gameid, channel, Uuid)
  571 +
  572 +}
  573 +
  574 +func Dosign(w http.ResponseWriter, r *http.Request) {
  575 +
  576 + gameid := ""
  577 + channel := ""
  578 + uniqueid := ""
  579 + Uuid := 0
  580 + if len(r.Header) > 0 {
  581 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  582 + gameid = r.Header.Get("Gameid")
  583 + channel = r.Header.Get("Channel")
  584 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
  585 + }
  586 +
  587 + if Uuid == 0 {
  588 + SetHeader(w)
  589 + logger.Error("Uuid is nil!")
  590 + return
  591 + }
  592 + result, _ := ioutil.ReadAll(r.Body)
  593 + r.Body.Close()
  594 +
  595 + s := string(result)
  596 + logger.Info("Dosign , body:%v,uuid=%v", s, uniqueid)
  597 +
  598 + HandlerDosign(w, s, uniqueid, gameid, channel, Uuid)
  599 +
  600 +}
  601 +
  602 +func Quersigndata(w http.ResponseWriter, r *http.Request) {
  603 +
  604 + gameid := ""
  605 + channel := ""
  606 + uniqueid := ""
  607 + Uuid := 0
  608 + if len(r.Header) > 0 {
  609 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  610 + gameid = r.Header.Get("Gameid")
  611 + channel = r.Header.Get("Channel")
  612 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
  613 + }
  614 +
  615 + if Uuid == 0 {
  616 + SetHeader(w)
  617 + logger.Error("Uuid is nil!")
  618 + return
  619 + }
  620 + result, _ := ioutil.ReadAll(r.Body)
  621 + r.Body.Close()
  622 +
  623 + s := string(result)
  624 + logger.Info("Quersigndata , body:%v,uuid=%v", s, uniqueid)
  625 +
  626 + HandlerQuersigndata(w, s, uniqueid, gameid, channel, Uuid)
  627 +
  628 +}
  629 +
  630 +func Fetchluckybag(w http.ResponseWriter, r *http.Request) {
  631 +
  632 + gameid := ""
  633 + channel := ""
  634 + uniqueid := ""
  635 + Uuid := 0
  636 + if len(r.Header) > 0 {
  637 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  638 + gameid = r.Header.Get("Gameid")
  639 + channel = r.Header.Get("Channel")
  640 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
  641 + }
  642 +
  643 + if Uuid == 0 {
  644 + SetHeader(w)
  645 + logger.Error("Uuid is nil!")
  646 + return
  647 + }
  648 + result, _ := ioutil.ReadAll(r.Body)
  649 + r.Body.Close()
  650 +
  651 + s := string(result)
  652 + logger.Info("Fetchluckybag , body:%v,uuid=%v", s, uniqueid)
  653 +
  654 + HandlerFetchluckybag(w, s, uniqueid, gameid, channel, Uuid)
  655 +
  656 +}
  657 +
  658 +func Fetchfenredbag(w http.ResponseWriter, r *http.Request) {
  659 +
  660 + gameid := ""
  661 + channel := ""
  662 + uniqueid := ""
  663 + Uuid := 0
  664 + if len(r.Header) > 0 {
  665 + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  666 + gameid = r.Header.Get("Gameid")
  667 + channel = r.Header.Get("Channel")
  668 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
  669 + }
  670 +
  671 + if Uuid == 0 {
  672 + SetHeader(w)
  673 + logger.Error("Uuid is nil!")
  674 + return
  675 + }
  676 + result, _ := ioutil.ReadAll(r.Body)
  677 + r.Body.Close()
  678 +
  679 + s := string(result)
  680 + logger.Info("Fetchfenredbag , body:%v,uuid=%v", s, uniqueid)
  681 +
  682 + HandlerFetchfenredbag(w, s, uniqueid, gameid, channel, Uuid)
  683 +
  684 +}
  685 +
481 686 func Drawguangold(w http.ResponseWriter, r *http.Request) {
482 687  
  688 + gameid := ""
  689 + channel := ""
  690 + uniqueid := ""
483 691 Uuid := 0
484 692 if len(r.Header) > 0 {
485 693 Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  694 + gameid = r.Header.Get("Gameid")
  695 + channel = r.Header.Get("Channel")
  696 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
486 697 }
487 698  
488 699 if Uuid == 0 {
489 700 SetHeader(w)
490   - //logger.Error("Uuid is nil!")
  701 + logger.Error("Uuid is nil!")
491 702 return
492 703 }
493 704 result, _ := ioutil.ReadAll(r.Body)
494 705 r.Body.Close()
495 706  
496 707 s := string(result)
497   - logger.Info("Drawguangold , body:%v,uuid=%v", s, Uuid)
  708 + logger.Info("Drawguangold , body:%v,uuid=%v", s, uniqueid)
  709 +
  710 + HandlerDrawguangold(w, s, uniqueid, gameid, channel, Uuid)
498 711  
499   - //HandlerDrawguangold(w, s, Uuid)
500 712 }
501 713  
502 714 func Getguangold(w http.ResponseWriter, r *http.Request) {
503 715  
  716 + gameid := ""
  717 + channel := ""
  718 + uniqueid := ""
504 719 Uuid := 0
505 720 if len(r.Header) > 0 {
506 721 Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
  722 + gameid = r.Header.Get("Gameid")
  723 + channel = r.Header.Get("Channel")
  724 + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
507 725 }
508 726  
509 727 if Uuid == 0 {
510 728 SetHeader(w)
511   - //logger.Error("Uuid is nil!")
  729 + logger.Error("Uuid is nil!")
512 730 return
513 731 }
514 732 result, _ := ioutil.ReadAll(r.Body)
515 733 r.Body.Close()
516 734  
517 735 s := string(result)
518   - logger.Info("Getguangold , body:%v,uuid=%v", s, Uuid)
  736 + logger.Info("Getguangold , body:%v,uuid=%v", s, uniqueid)
519 737  
520   - // HandlerGetguangold(w, s, Uuid)
  738 + HandlerGetguangold(w, s, uniqueid, gameid, channel, Uuid)
521 739 }
522 740  
523 741 func Queryguaninfo(w http.ResponseWriter, r *http.Request) {
... ... @@ -569,14 +787,14 @@ func Watchads(w http.ResponseWriter, r *http.Request) {
569 787  
570 788 func Syncuserdata(w http.ResponseWriter, r *http.Request) {
571 789  
572   - //gameid := ""
573   - //channel := ""
  790 + gameid := ""
  791 + channel := ""
574 792 uniqueid := ""
575 793 Uuid := 0
576 794 if len(r.Header) > 0 {
577 795 Uuid, _ = strconv.Atoi(r.Header.Get("Uuid"))
578   - // gameid = r.Header.Get("Gameid")
579   - //channel = r.Header.Get("Channel")
  796 + gameid = r.Header.Get("Gameid")
  797 + channel = r.Header.Get("Channel")
580 798 uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel")
581 799 }
582 800  
... ... @@ -591,7 +809,7 @@ func Syncuserdata(w http.ResponseWriter, r *http.Request) {
591 809 s := string(result)
592 810 logger.Info("Syncuserdata , body:%v,uuid=%v", s, uniqueid)
593 811  
594   - HandlerSyncuserdata(w, s, uniqueid)
  812 + HandlerSyncuserdata(w, s, uniqueid, gameid, channel, Uuid)
595 813 }
596 814  
597 815 func Updatedata(w http.ResponseWriter, r *http.Request) {
... ...
src/HttpServer/logic/logic.go
1 1 package logic
2 2  
3 3 import (
  4 + "HttpServer/jsonconf"
4 5 "HttpServer/redishandler"
5 6 "common/logger"
6 7 "common/redis"
... ... @@ -10,7 +11,7 @@ import (
10 11 "time"
11 12 )
12 13  
13   -func HandlerSyncuserdata(w http.ResponseWriter, data string, uniqueuuid string) {
  14 +func HandlerSyncuserdata(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
14 15 SetHeader(w)
15 16  
16 17 var resp SyncuserdataResp
... ... @@ -28,10 +29,15 @@ func HandlerSyncuserdata(w http.ResponseWriter, data string, uniqueuuid string)
28 29 break
29 30 }
30 31  
  32 + uinfo.LastUpdateTime = int(time.Now().Unix())
  33 + //此处要处理一下跨天逻辑
  34 + uinfo.HandlePassDay(uuid, channel)
  35 +
31 36 resp.Data.Walletgold = uinfo.RealGold
32 37 resp.Data.Guangold = uinfo.GuanGold
33 38 resp.Data.Sumloginday = uinfo.SumLoginDay
34 39 resp.Data.Nowtime = int(time.Now().Unix())
  40 + resp.Data.Luckbaglefttime = uinfo.LuckyBagLeftTimes
35 41 break
36 42 }
37 43  
... ... @@ -111,6 +117,494 @@ func HandlerUploaduserbasicinfo(w http.ResponseWriter, data string, uniqueuuid s
111 117 fmt.Fprint(w, string(respstr))
112 118 }
113 119  
  120 +func HandlerQueryrankinfo(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
  121 + SetHeader(w)
  122 + var resp QueryrankinfoResp
  123 + resp.Code = 0
  124 + resp.Message = "success"
  125 +
  126 + for {
  127 + selfrank := -1
  128 + selfscore := int64(0)
  129 + vv, err := redishandler.GetRedisClient().ZRevRangewithIndex(redis.USER_SCORE_RANK, 0, 99)
  130 + if err == nil {
  131 + rank := 0
  132 + for _, v := range vv {
  133 + rank++
  134 +
  135 + rinfobyte, _ := v.([]byte)
  136 + logger.Info("HandlerQueryPlayerRank ,v=%v", string(rinfobyte))
  137 + //ruid, _ := strconv.Atoi(string(rinfobyte))
  138 + rindo, err := GetUserInfo(string(rinfobyte))
  139 + if err == nil && rindo != nil {
  140 + var tmp Queryrankinfolist
  141 + tmp.UniqueId = string(rinfobyte)
  142 + tmp.Socre = rindo.HighScore
  143 + tmp.Nickname = rindo.NickName
  144 + tmp.Headurl = rindo.HeadUrl
  145 + tmp.Rank = rank
  146 +
  147 + resp.Data.Ranklist = append(resp.Data.Ranklist, tmp)
  148 + }
  149 +
  150 + if string(rinfobyte) == uniqueuuid {
  151 + selfrank = rank
  152 + selfscore = rindo.HighScore
  153 + }
  154 + }
  155 + } else {
  156 + logger.Error("HandlerUpdateUserInfo redisfailed ")
  157 + resp.Code = 1
  158 + resp.Message = "redisfailed"
  159 + break
  160 + }
  161 +
  162 + if selfrank == -1 {
  163 + uinfo, err := GetUserInfo(uniqueuuid)
  164 + if err != nil {
  165 + logger.Info("GetUserInfo HandlerQueryrankinfo data failed:%v,for:%v", err, data)
  166 + resp.Message = "GetUserInfo failed"
  167 + resp.Code = 1
  168 + break
  169 + }
  170 +
  171 + resp.Data.Selfsocre = uinfo.HighScore
  172 + resp.Data.Selfrank = 101 //表示100+
  173 + } else {
  174 + resp.Data.Selfrank = selfrank
  175 + resp.Data.Selfsocre = selfscore
  176 + }
  177 +
  178 + resp.Code = ERROR_OK
  179 + break
  180 + }
  181 +
  182 + //回包
  183 + respstr, _ := json.Marshal(&resp)
  184 + fmt.Fprint(w, string(respstr))
  185 +}
  186 +
  187 +func HandlerUploadhigestscore(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
  188 + SetHeader(w)
  189 + var resp UploadhigestscoreResp
  190 + resp.Code = 0
  191 + resp.Message = "success"
  192 + var rdata UploadhigestscoreReq
  193 + err := json.Unmarshal([]byte(data), &rdata)
  194 + for {
  195 + if err != nil {
  196 + logger.Info("json decode HandlerUploadhigestscore data failed:%v,for:%v", err, data)
  197 + resp.Message = "json解析错误"
  198 + resp.Code = ERROR_JSONUNMASH_ERROR
  199 + break
  200 + }
  201 + uinfo, err := GetUserInfo(uniqueuuid)
  202 + if err != nil {
  203 + logger.Info("GetUserInfo HandlerUploadhigestscore data failed:%v,for:%v", err, data)
  204 + resp.Message = "GetUserInfo failed"
  205 + resp.Code = 1
  206 + break
  207 + }
  208 +
  209 + if rdata.Score < uinfo.HighScore {
  210 + logger.Info("GetUserInfo HandlerUploadhigestscore data failed:%v,for:%v", err, data)
  211 + resp.Message = "分数不足最高分"
  212 + resp.Code = 1
  213 + break
  214 + }
  215 +
  216 + uinfo.HighScore = rdata.Score
  217 +
  218 + uinfo.AddToRank()
  219 + //加入排行榜
  220 + SaveUserInfo(uinfo, uniqueuuid)
  221 + resp.Code = ERROR_OK
  222 + break
  223 + }
  224 +
  225 + //回包
  226 + respstr, _ := json.Marshal(&resp)
  227 + fmt.Fprint(w, string(respstr))
  228 +}
  229 +
  230 +func HandlerDosign(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
  231 + SetHeader(w)
  232 + var resp DosignResp
  233 + resp.Code = 0
  234 + resp.Message = "success"
  235 + var rdata DosignReq
  236 + err := json.Unmarshal([]byte(data), &rdata)
  237 + for {
  238 + if err != nil {
  239 + logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data)
  240 + resp.Message = "json解析错误"
  241 + resp.Code = ERROR_JSONUNMASH_ERROR
  242 + break
  243 + }
  244 + uinfo, err := GetUserInfo(uniqueuuid)
  245 + if err != nil {
  246 + logger.Info("GetUserInfo HandlerDosign data failed:%v,for:%v", err, data)
  247 + resp.Message = "GetUserInfo failed"
  248 + resp.Code = 1
  249 + break
  250 + }
  251 +
  252 + if uinfo.IsSignToday == 1 {
  253 + logger.Info(" HandlerDosign issign failed:%v,for:%v", err, data)
  254 + resp.Message = "当天已签到"
  255 + resp.Code = 1
  256 + break
  257 + }
  258 +
  259 + uinfo.IsSignToday = 1
  260 + uinfo.SignSum++
  261 + if uinfo.SignSum > 7 {
  262 + uinfo.SignSum = 1
  263 + uinfo.SignRound++
  264 + }
  265 +
  266 + cfg := jsonconf.GetsignConfig(uinfo.SignSum)
  267 + if cfg == nil {
  268 + logger.Info("GetUserInfo HandlerDosign data failed:%v,for:%v", err, data)
  269 + resp.Message = "参数错误"
  270 + resp.Code = 1
  271 + break
  272 + }
  273 +
  274 + readgold := 0
  275 + readgold, err = AddCoinToSdk(uuid, cfg.Sign_coin, gameid, channel, REDBAGTYPE_107)
  276 + if err != nil {
  277 + logger.Info("GetUserInfo HandlerDosign data failed:%v,for:%v", err, data)
  278 + resp.Message = "后台失败!"
  279 + resp.Code = 1
  280 + break
  281 + }
  282 +
  283 + if rdata.Ftype == 2 {
  284 + readgold, err = AddCoinToSdk(uuid, cfg.Video_coin, gameid, channel, REDBAGTYPE_107)
  285 + if err != nil {
  286 + logger.Info("GetUserInfo HandlerDosign data failed:%v,for:%v", err, data)
  287 + resp.Message = "后台失败!"
  288 + resp.Code = 1
  289 + break
  290 + }
  291 + }
  292 +
  293 + uinfo.RealGold = readgold
  294 +
  295 + resp.Data.Curday = uinfo.SignSum
  296 + resp.Data.Issigntaday = uinfo.IsSignToday
  297 + resp.Data.Walletgold = uinfo.RealGold
  298 +
  299 + SaveUserInfo(uinfo, uniqueuuid)
  300 + resp.Code = ERROR_OK
  301 + break
  302 + }
  303 +
  304 + //回包
  305 + respstr, _ := json.Marshal(&resp)
  306 + fmt.Fprint(w, string(respstr))
  307 +}
  308 +
  309 +func HandlerFetchoffliengold(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
  310 + SetHeader(w)
  311 + var resp FetchoffliengoldResp
  312 + resp.Code = 0
  313 + for {
  314 +
  315 + uinfo, err := GetUserInfo(uniqueuuid)
  316 + if err != nil {
  317 + logger.Info("GetUserInfo HandlerFetchoffliengold data failed:%v,for:%v", err, data)
  318 + resp.Message = "GetUserInfo failed"
  319 + resp.Code = 1
  320 + break
  321 + }
  322 +
  323 + if uinfo.OfflineGold <= 0 {
  324 + logger.Info("GetUserInfo HandlerFetchoffliengold data failed:%v,for:%v", err, data)
  325 + resp.Message = "没有离线金币可以领取"
  326 + resp.Code = 1
  327 + break
  328 + }
  329 +
  330 + readgold, err := AddCoinToSdk(uuid, uinfo.OfflineGold, gameid, channel, REDBAGTYPE_106)
  331 + if err != nil {
  332 + logger.Info("GetUserInfo HandlerFetchoffliengold data failed:%v,for:%v", err, data)
  333 + resp.Message = "后台失败!"
  334 + resp.Code = 1
  335 + break
  336 + }
  337 +
  338 + uinfo.RealGold = readgold
  339 +
  340 + resp.Data.Walletgold = uinfo.RealGold
  341 + resp.Data.Getgold = uinfo.OfflineGold
  342 +
  343 + uinfo.OfflineGold = 0
  344 +
  345 + SaveUserInfo(uinfo, uniqueuuid)
  346 + resp.Code = ERROR_OK
  347 + break
  348 + }
  349 +
  350 + //回包
  351 + respstr, _ := json.Marshal(&resp)
  352 + fmt.Fprint(w, string(respstr))
  353 +}
  354 +
  355 +func HandlerQuersigndata(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
  356 + SetHeader(w)
  357 + var resp QuersigndataResp
  358 + resp.Code = 0
  359 + for {
  360 +
  361 + uinfo, err := GetUserInfo(uniqueuuid)
  362 + if err != nil {
  363 + logger.Info("GetUserInfo HandlerQuersigndata data failed:%v,for:%v", err, data)
  364 + resp.Message = "GetUserInfo failed"
  365 + resp.Code = 1
  366 + break
  367 + }
  368 +
  369 + resp.Data.Curday = uinfo.SignSum
  370 + resp.Data.Issigntaday = uinfo.IsSignToday
  371 +
  372 + resp.Code = ERROR_OK
  373 + break
  374 + }
  375 +
  376 + //回包
  377 + respstr, _ := json.Marshal(&resp)
  378 + fmt.Fprint(w, string(respstr))
  379 +}
  380 +
  381 +func HandlerFetchluckybag(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
  382 + SetHeader(w)
  383 +
  384 + var resp FetchluckybagResp
  385 + resp.Code = 0
  386 +
  387 + for {
  388 +
  389 + uinfo, err := GetUserInfo(uniqueuuid)
  390 + if err != nil {
  391 + logger.Info("GetUserInfo HandlerFetchluckybag data failed:%v,for:%v", err, data)
  392 + resp.Message = "GetUserInfo failed"
  393 + resp.Code = 1
  394 + break
  395 + }
  396 +
  397 + //先判断次数是否足够
  398 + if uinfo.LuckyBagLeftTimes < 1 {
  399 + logger.Info("GetUserInfo HandlerFetchluckybag data failed:%v,for:%v", err, data)
  400 + resp.Message = "当日已经没有福袋可以领取了!"
  401 + resp.Code = 1
  402 + break
  403 + }
  404 +
  405 + addcoin := CalcLuckYBagNum()
  406 + if addcoin == 0 {
  407 + logger.Info("GetUserInfo HandlerFetchluckybag data failed:%v,for:%v", err, data)
  408 + resp.Message = "CalcLuckYBagNum!"
  409 + resp.Code = 1
  410 + break
  411 + }
  412 +
  413 + realgold, err := AddCoinToSdk(uuid, addcoin, gameid, channel, REDBAGTYPE_106)
  414 + if err != nil {
  415 + logger.Info("GetUserInfo HandlerFetchluckybag data failed:%v,for:%v", err, data)
  416 + resp.Message = "后台加金币失败了"
  417 + resp.Code = 1
  418 + break
  419 + }
  420 +
  421 + uinfo.RealGold = realgold
  422 + uinfo.LuckyBagLeftTimes--
  423 +
  424 + resp.Data.Wallgold = uinfo.RealGold
  425 + resp.Data.Lefttimes = uinfo.LuckyBagLeftTimes
  426 +
  427 + SaveUserInfo(uinfo, uniqueuuid)
  428 +
  429 + resp.Code = ERROR_OK
  430 + break
  431 + }
  432 +
  433 + //回包
  434 + respstr, _ := json.Marshal(&resp)
  435 + fmt.Fprint(w, string(respstr))
  436 +}
  437 +
  438 +func HandlerFetchfenredbag(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
  439 + SetHeader(w)
  440 +
  441 + var resp FetchfenredbagResp
  442 + resp.Code = 0
  443 + var rdata FetchfenredbagReq
  444 + err := json.Unmarshal([]byte(data), &rdata)
  445 + for {
  446 +
  447 + if err != nil {
  448 + logger.Info("json decode HandlerFetchfenredbag data failed:%v,for:%v", err, data)
  449 + resp.Message = "json解析错误"
  450 + resp.Code = ERROR_JSONUNMASH_ERROR
  451 + break
  452 + }
  453 +
  454 + uinfo, err := GetUserInfo(uniqueuuid)
  455 + if err != nil {
  456 + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data)
  457 + resp.Message = "GetUserInfo failed"
  458 + resp.Code = 1
  459 + break
  460 + }
  461 +
  462 + cfg := jsonconf.GetRedPackageConfig(rdata.Id)
  463 + if cfg == nil {
  464 + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data)
  465 + resp.Message = "参数错误"
  466 + resp.Code = 1
  467 + break
  468 + }
  469 +
  470 + //需要判断一下当天是否已经领取过了
  471 + if uinfo.IsRedIdInList(rdata.Id) {
  472 + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data)
  473 + resp.Message = "此档位奖励已经领取过了!"
  474 + resp.Code = 1
  475 + break
  476 + }
  477 +
  478 + readgold := 0
  479 + readgold, err = AddCoinToSdk(uuid, cfg.Free_coin, gameid, channel, REDBAGTYPE_103)
  480 + if err != nil {
  481 + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data)
  482 + resp.Message = "后台失败!"
  483 + resp.Code = 1
  484 + break
  485 + }
  486 +
  487 + if rdata.Ftype == 2 {
  488 + readgold, err = AddCoinToSdk(uuid, cfg.Video_coin, gameid, channel, REDBAGTYPE_106)
  489 + if err != nil {
  490 + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data)
  491 + resp.Message = "后台失败!"
  492 + resp.Code = 1
  493 + break
  494 + }
  495 + }
  496 +
  497 + uinfo.RealGold = readgold
  498 + uinfo.RedBagFetchIdlist = append(uinfo.RedBagFetchIdlist, rdata.Id)
  499 +
  500 + resp.Data.Wallgold = uinfo.RealGold
  501 +
  502 + SaveUserInfo(uinfo, uniqueuuid)
  503 +
  504 + resp.Code = ERROR_OK
  505 + break
  506 + }
  507 +
  508 + //回包
  509 + respstr, _ := json.Marshal(&resp)
  510 + fmt.Fprint(w, string(respstr))
  511 +}
  512 +
  513 +func HandlerDrawguangold(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
  514 + SetHeader(w)
  515 +
  516 + var resp DrawguangoldResp
  517 + resp.Code = 0
  518 + var rdata DrawguangoldReq
  519 + err := json.Unmarshal([]byte(data), &rdata)
  520 + for {
  521 +
  522 + if err != nil {
  523 + logger.Info("json decode HandlerDrawguangold data failed:%v,for:%v", err, data)
  524 + resp.Message = "json解析错误"
  525 + resp.Code = ERROR_JSONUNMASH_ERROR
  526 + break
  527 + }
  528 +
  529 + uinfo, err := GetUserInfo(uniqueuuid)
  530 + if err != nil {
  531 + logger.Info("GetUserInfo HandlerDrawguangold data failed:%v,for:%v", err, data)
  532 + resp.Message = "GetUserInfo failed"
  533 + resp.Code = 1
  534 + break
  535 + }
  536 +
  537 + if rdata.Goldnum == 0 || uinfo.GuanGold < rdata.Goldnum {
  538 + logger.Info("GetUserInfo HandlerDrawguangold data failed:%v,for:%v", err, data)
  539 + resp.Message = "Goldnum is zero"
  540 + resp.Code = 1
  541 + break
  542 + }
  543 + realgold, err := AddCoinToSdk(uuid, rdata.Goldnum, gameid, channel, REDBAGTYPE_105)
  544 + if err != nil {
  545 + logger.Info("GetUserInfo HandlerDrawguangold data failed:%v,for:%v", err, data)
  546 + resp.Message = "后台提现失败"
  547 + resp.Code = 1
  548 + break
  549 + }
  550 +
  551 + uinfo.RealGold = realgold
  552 +
  553 + uinfo.GuanGold -= rdata.Goldnum
  554 +
  555 + SaveUserInfo(uinfo, uniqueuuid)
  556 +
  557 + resp.Code = ERROR_OK
  558 + break
  559 + }
  560 +
  561 + //回包
  562 + respstr, _ := json.Marshal(&resp)
  563 + fmt.Fprint(w, string(respstr))
  564 +}
  565 +
  566 +func HandlerGetguangold(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
  567 + SetHeader(w)
  568 +
  569 + var resp GetguangoldResp
  570 + resp.Code = 0
  571 + var rdata GetguangoldReq
  572 + err := json.Unmarshal([]byte(data), &rdata)
  573 + for {
  574 +
  575 + if err != nil {
  576 + logger.Info("json decode HandlerGetguangold data failed:%v,for:%v", err, data)
  577 + resp.Message = "json解析错误"
  578 + resp.Code = ERROR_JSONUNMASH_ERROR
  579 + break
  580 + }
  581 +
  582 + uinfo, err := GetUserInfo(uniqueuuid)
  583 + if err != nil {
  584 + logger.Info("GetUserInfo HandlerGetguangold data failed:%v,for:%v", err, data)
  585 + resp.Message = "GetUserInfo failed"
  586 + resp.Code = 1
  587 + break
  588 + }
  589 +
  590 + uinfo.GuanGold += rdata.Goldnum
  591 + if uinfo.GuanGold > GUANGOLDNUMLIMIT {
  592 + uinfo.GuanGold = GUANGOLDNUMLIMIT
  593 + }
  594 +
  595 + resp.Data.Guangold = uinfo.GuanGold
  596 +
  597 + SaveUserInfo(uinfo, uniqueuuid)
  598 +
  599 + resp.Code = ERROR_OK
  600 + break
  601 + }
  602 +
  603 + //回包
  604 + respstr, _ := json.Marshal(&resp)
  605 + fmt.Fprint(w, string(respstr))
  606 +}
  607 +
114 608 func HandlerLogin(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) {
115 609 SetHeader(w)
116 610  
... ... @@ -134,6 +628,7 @@ func HandlerLogin(w http.ResponseWriter, data string, uniqueuuid, gameid, channe
134 628 //不存在老的数据 之间走新号流程
135 629 err = InitUserInfo(&resp, uniqueuuid, gameid, channel, uuid)
136 630  
  631 + resp.Data.Offlinegold = 0
137 632 } else {
138 633 uinfo, err := GetUserInfo(uniqueuuid)
139 634  
... ... @@ -148,6 +643,20 @@ func HandlerLogin(w http.ResponseWriter, data string, uniqueuuid, gameid, channe
148 643 resp.Data.Walletgold = uinfo.RealGold
149 644  
150 645 resp.Data.Isnew = 0
  646 +
  647 + //需要计算一下是否有离线金币
  648 + offset := (int(time.Now().Unix()) - uinfo.LastUpdateTime) / 60
  649 + if offset > 10 {
  650 + offgold := int(float32(offset-10) * 1.5)
  651 + if offgold > 150 {
  652 + offgold = 150
  653 + }
  654 +
  655 + uinfo.OfflineGold = offgold
  656 + uinfo.LastUpdateTime = int(time.Now().Unix())
  657 + }
  658 +
  659 + resp.Data.Offlinegold = uinfo.OfflineGold
151 660 }
152 661  
153 662 pdata, err := GetUserSelfData(uniqueuuid)
... ...
src/common/redis/def.go
1 1 package redis
2 2  
3 3 const (
4   - USER_DATA_KEY = "RUSSIAXIAOXIAO_USER_DATA_KEY" //玩家数据
5   - USER_SELF_DATA_KEY = "RUSSIAXIAOXIAO_USER_SELF_DATA_KEY" //玩家自定义数据
6   - USER_TASKINFO_LIST = "RUSSIAXIAOXIAO_USER_TASKINFO_LIST" //任务列表数据缓存
7   - USER_ACHIEVEMENTINFO_LIST = "RUSSIAXIAOXIAO_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存
8   -
  4 + USER_DATA_KEY = "RUSSIAXIAOXIAO_USER_DATA_KEY" //玩家数据
  5 + USER_SELF_DATA_KEY = "RUSSIAXIAOXIAO_USER_SELF_DATA_KEY" //玩家自定义数据
  6 + USER_TASKINFO_LIST = "RUSSIAXIAOXIAO_USER_TASKINFO_LIST" //任务列表数据缓存
  7 + USER_ACHIEVEMENTINFO_LIST = "RUSSIAXIAOXIAO_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存
  8 + USER_SCORE_RANK = "RUSSIAXIAOXIAO_USER_SCORE_RANK" //玩家排行榜
9 9 )
... ...