From 87f7705683acf0c79a282512aa2b538abd22f1e5 Mon Sep 17 00:00:00 2001 From: 陆恒 Date: Fri, 19 Jun 2020 14:26:49 +0800 Subject: [PATCH] 提交新增加的一系列接口 --- src/HttpServer/conf/conf.go | 10 ++++++++++ src/HttpServer/jsonconf/LuckyBagConfig.json | 37 +++++++++++++++++++++++++++++++++++++ src/HttpServer/jsonconf/RedPackageConfig.json | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/HttpServer/jsonconf/jsonconf.go | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------- src/HttpServer/logic/constdef.go | 13 +++++++++++++ src/HttpServer/logic/datadef.go | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------ src/HttpServer/logic/function.go | 206 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------- src/HttpServer/logic/httpserver.go | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------- src/HttpServer/logic/logic.go | 511 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/common/redis/def.go | 10 +++++----- 10 files changed, 1382 insertions(+), 108 deletions(-) create mode 100644 src/HttpServer/jsonconf/LuckyBagConfig.json create mode 100644 src/HttpServer/jsonconf/RedPackageConfig.json diff --git a/src/HttpServer/conf/conf.go b/src/HttpServer/conf/conf.go index 976c06a..e5a8c1c 100644 --- a/src/HttpServer/conf/conf.go +++ b/src/HttpServer/conf/conf.go @@ -14,10 +14,16 @@ type RedisConf struct { Password string `xml:",attr"` } +type ConiSrvConf struct { + Host string `xml:",attr"` + Key string `xml:",attr"` +} + type TexasConf struct { GameDB MysqlConf `xml:"GameDB"` ServerHttpAddr ServerHttpAddrConf `xml:"ServerHttpAddr"` Redis RedisConf `xml:"Redis"` + CoinSrv ConiSrvConf `xml:"CoinSrv"` } var ( @@ -70,3 +76,7 @@ type ServerHttpAddrConf struct { Host string `xml:",attr"` IsTest string `xml:",attr"` } + +func GetCoinConf() ConiSrvConf { + return config.CoinSrv +} diff --git a/src/HttpServer/jsonconf/LuckyBagConfig.json b/src/HttpServer/jsonconf/LuckyBagConfig.json new file mode 100644 index 0000000..113f554 --- /dev/null +++ b/src/HttpServer/jsonconf/LuckyBagConfig.json @@ -0,0 +1,37 @@ +[ + { + "id": 1, + "coin": 88, + "rate": 5 + }, + { + "id": 2, + "coin": 108, + "rate": 15 + }, + { + "id": 3, + "coin": 148, + "rate": 25 + }, + { + "id": 4, + "coin": 168, + "rate": 25 + }, + { + "id": 5, + "coin": 188, + "rate": 15 + }, + { + "id": 6, + "coin": 228, + "rate": 10 + }, + { + "id": 7, + "coin": 268, + "rate": 5 + } +] \ No newline at end of file diff --git a/src/HttpServer/jsonconf/RedPackageConfig.json b/src/HttpServer/jsonconf/RedPackageConfig.json new file mode 100644 index 0000000..4526795 --- /dev/null +++ b/src/HttpServer/jsonconf/RedPackageConfig.json @@ -0,0 +1,152 @@ +[ + { + "id": 1, + "point": 200, + "free_coin": 60, + "video_coin": 150 + }, + { + "id": 2, + "point": 500, + "free_coin": 60, + "video_coin": 150 + }, + { + "id": 3, + "point": 800, + "free_coin": 50, + "video_coin": 150 + }, + { + "id": 4, + "point": 1200, + "free_coin": 50, + "video_coin": 150 + }, + { + "id": 5, + "point": 1600, + "free_coin": 40, + "video_coin": 150 + }, + { + "id": 6, + "point": 2000, + "free_coin": 40, + "video_coin": 150 + }, + { + "id": 7, + "point": 2400, + "free_coin": 40, + "video_coin": 150 + }, + { + "id": 8, + "point": 2800, + "free_coin": 40, + "video_coin": 150 + }, + { + "id": 9, + "point": 3200, + "free_coin": 35, + "video_coin": 150 + }, + { + "id": 10, + "point": 3600, + "free_coin": 35, + "video_coin": 150 + }, + { + "id": 11, + "point": 3800, + "free_coin": 30, + "video_coin": 150 + }, + { + "id": 12, + "point": 4000, + "free_coin": 30, + "video_coin": 150 + }, + { + "id": 13, + "point": 4200, + "free_coin": 30, + "video_coin": 150 + }, + { + "id": 14, + "point": 4400, + "free_coin": 25, + "video_coin": 150 + }, + { + "id": 15, + "point": 4600, + "free_coin": 25, + "video_coin": 150 + }, + { + "id": 16, + "point": 4800, + "free_coin": 25, + "video_coin": 150 + }, + { + "id": 17, + "point": 5000, + "free_coin": 25, + "video_coin": 150 + }, + { + "id": 18, + "point": 5200, + "free_coin": 20, + "video_coin": 150 + }, + { + "id": 19, + "point": 5400, + "free_coin": 20, + "video_coin": 150 + }, + { + "id": 20, + "point": 5600, + "free_coin": 20, + "video_coin": 150 + }, + { + "id": 21, + "point": 5800, + "free_coin": 20, + "video_coin": 150 + }, + { + "id": 22, + "point": 6000, + "free_coin": 20, + "video_coin": 150 + }, + { + "id": 23, + "point": 6200, + "free_coin": 20, + "video_coin": 150 + }, + { + "id": 24, + "point": 6400, + "free_coin": 20, + "video_coin": 150 + }, + { + "id": 25, + "point": 6600, + "free_coin": 20, + "video_coin": 150 + } +] \ No newline at end of file diff --git a/src/HttpServer/jsonconf/jsonconf.go b/src/HttpServer/jsonconf/jsonconf.go index 30c8ed3..2940a6f 100644 --- a/src/HttpServer/jsonconf/jsonconf.go +++ b/src/HttpServer/jsonconf/jsonconf.go @@ -12,64 +12,71 @@ var ( ) type AchieveDesc struct { - Type int `json:"type"` - Id int `json:"id"` - Desc string `json:"desc"` - Aim int `json:"aim"` - Coin int `json:"coin"` + Type int `json:"type"` + Id int `json:"id"` + Desc string `json:"desc"` + Aim int `json:"aim"` + Coin int `json:"coin"` Is_video int `json:"is_video"` } type TaskDesc struct { - Id int `json:"id"` - Type int `json:"type"` - Day_type int `json:"day_type"` - Active int `json:"active"` - Coin int `json:"coin"` - Desc string `json:"desc"` + Id int `json:"id"` + Type int `json:"type"` + Day_type int `json:"day_type"` + Active int `json:"active"` + Coin int `json:"coin"` + Desc string `json:"desc"` } - - type TrunTableConfigDesc struct { - Id int `json:"id"` + Id int `json:"id"` Name string `json:"name"` - Type int `json:"type"` - Desc int `json:"desc"` - Rate int `json:"rate"` + Type int `json:"type"` + Desc int `json:"desc"` + Rate int `json:"rate"` } type RmbConfigDesc struct { - Id int `json:"id"` - Rmb_num float32 `json:"rmb_num"` - Time int `json:"time"` - Login_day int `json:"login_day"` + Id int `json:"id"` + Rmb_num float32 `json:"rmb_num"` + Time int `json:"time"` + Login_day int `json:"login_day"` } - - - - type SignConfigDesc struct { - Id int `json:"id"` - Sign_coin int `json:"sign_coin"` + Id int `json:"id"` + Sign_coin int `json:"sign_coin"` Video_coin int `json:"video_coin"` } +type RedPackageConfigDesc struct { + Id int `json:"id"` + Point int `json:"point"` + Free_coin int `json:"free_coin"` + Video_coin int `json:"video_coin"` +} + +type LuckyBagConfigDesc struct { + Id int `json:"id"` + Coin int `json:"coin"` + Rate int `json:"rate"` +} + type GameConfig struct { - AchieventConfig []AchieveDesc - TaskConfig []TaskDesc - SignConfig []SignConfigDesc - RmbConfig []RmbConfigDesc - TrunTableConfig []TrunTableConfigDesc + AchieventConfig []AchieveDesc + TaskConfig []TaskDesc + SignConfig []SignConfigDesc + RmbConfig []RmbConfigDesc + TrunTableConfig []TrunTableConfigDesc + RedPackageConfig []RedPackageConfigDesc + LuckyBagConfig []LuckyBagConfigDesc } func GetJsonConf() *GameConfig { return g_jsonconf } - - func file_get_contents(path string) ([]byte, error) { f, err := os.Open(path) if err != nil { @@ -146,8 +153,50 @@ func LoadJsonConf() error { return err } + path = "../jsonconf/RedPackageConfig.json" + content, err = file_get_contents(path) + if err != nil { + logger.Info("loadJsonConf failed1,err=%v", err) + return err + } + err = json.Unmarshal([]byte(content), &g_jsonconf.RedPackageConfig) + if err != nil { + logger.Info("loadJsonConf failed1,err=%v", err) + return err + } + + path = "../jsonconf/LuckyBagConfig.json" + content, err = file_get_contents(path) + if err != nil { + logger.Info("loadJsonConf failed1,err=%v", err) + return err + } + + err = json.Unmarshal([]byte(content), &g_jsonconf.LuckyBagConfig) + if err != nil { + logger.Info("loadJsonConf failed1,err=%v", err) + return err + } logger.Info("loadJsonConf success pconf=%+v,err=%v", *g_jsonconf, err) return err } + +func GetRedPackageConfig(id int) *RedPackageConfigDesc { + for _, val := range g_jsonconf.RedPackageConfig { + if val.Id == id { + return &val + } + } + return nil +} + +func GetsignConfig(id int) *SignConfigDesc { + for _, v := range g_jsonconf.SignConfig { + if v.Id == id { + return &v + } + } + return nil +} diff --git a/src/HttpServer/logic/constdef.go b/src/HttpServer/logic/constdef.go index 97de617..313f5b6 100644 --- a/src/HttpServer/logic/constdef.go +++ b/src/HttpServer/logic/constdef.go @@ -57,4 +57,17 @@ const ( FREE_REDBAG_NUM = 3 //玩家免费红包次数 READGOLDMULTI = 700 //阅读量到金币转化倍数 SDKOPGOLD_TYPEWE = 302 //微转发金币类型 + GUANGOLDNUMLIMIT = 900 //存钱罐金币上限 + LUCKYBAGDAYLIMIT = 10 //每日福袋次数 +) + +const ( + REDBAGTYPE_101 = 101 //免费人物升级 + REDBAGTYPE_102 = 102 //任务 + REDBAGTYPE_103 = 103 //,免费红包 + REDBAGTYPE_104 = 104 //付费人物升级 + REDBAGTYPE_105 = 105 //存钱罐 + REDBAGTYPE_106 = 106 //付费红包 + REDBAGTYPE_107 = 107 //签到 + REDBAGTYPE_302 = 302 //微转发 ) diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 681e644..7af0dda 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -12,10 +12,11 @@ type UserLoginReq struct { } type UserLoginData struct { - Isnew int `json:"isnew"` - Walletgold int `json:"walletgold"` - Guangold int `json:"guangold"` - PlayerData string `json:"playerData"` + Isnew int `json:"isnew"` + Walletgold int `json:"walletgold"` + Guangold int `json:"guangold"` + PlayerData string `json:"playerData"` + Offlinegold int `json:"offlinegold"` } type UserLoginResp struct { @@ -56,10 +57,11 @@ type UpdatedataResp struct { } type SyncuserdataData struct { - Walletgold int `json:"walletgold"` - Guangold int `json:"guangold"` - Sumloginday int `json:"sumloginday"` - Nowtime int `json:"nowtime"` + Walletgold int `json:"walletgold"` + Guangold int `json:"guangold"` + Sumloginday int `json:"sumloginday"` + Nowtime int `json:"nowtime"` + Luckbaglefttime int `json:"luckbaglefttime"` } type SyncuserdataResp struct { @@ -116,9 +118,7 @@ type QueryguaninfoResp struct { } type GetguangoldReq struct { - Goldnum int `json:"goldnum"` - Gameid string `json:"gameid"` - Channel string `json:"channel"` + Goldnum int `json:"goldnum"` } type GetguangoldData struct { @@ -132,15 +132,13 @@ type GetguangoldResp struct { } type DrawguangoldReq struct { - Goldnum int `json:"goldnum"` - Gameid string `json:"gameid"` - Channel string `json:"channel"` + Goldnum int `json:"goldnum"` } type DrawguangoldData struct { - Guangold int `json:"guangold"` - Wallgold int `json:"wallgold"` - Totalfetchcnt int `json:"totalfetchcnt"` + Guangold int `json:"guangold"` + Wallgold int `json:"wallgold"` + //Totalfetchcnt int `json:"totalfetchcnt"` } type DrawguangoldResp struct { @@ -149,12 +147,109 @@ type DrawguangoldResp struct { Data DrawguangoldData `json:"data"` } +type FetchfenredbagReq struct { + Id int `json:"id"` + Ftype int `json:"ftype"` +} + +type FetchfenredbagData struct { + Wallgold int `json:"wallgold"` +} + +type FetchfenredbagResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data FetchfenredbagData `json:"data"` +} + +type FetchluckybagData struct { + Wallgold int `json:"wallgold"` + Lefttimes int `json:"lefttimes"` +} + +type FetchluckybagResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data FetchluckybagData `json:"data"` +} + +type QuersigndataData struct { + Curday int `json:"curday"` + Issigntaday int `json:"issigntaday"` +} + +type QuersigndataResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data QuersigndataData `json:"data"` +} + +type FetchoffliengoldData struct { + Walletgold int `json:"walletgold"` + Getgold int `json:"getgold"` +} + +type FetchoffliengoldResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data FetchoffliengoldData `json:"data"` +} + +type DosignData struct { + Curday int `json:"curday"` + Issigntaday int `json:"issigntaday"` + Walletgold int `json:"walletgold"` +} + +type DosignReq struct { + Ftype int `json:"ftype"` +} + +type DosignResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data DosignData `json:"data"` +} + type QuerdrawinfoResp struct { Code int `json:"code"` Message string `json:"message"` Data WithDrawInfo `json:"data"` } +type UploadhigestscoreReq struct { + Score int64 `json:"score"` +} + +type UploadhigestscoreData struct { +} + +type UploadhigestscoreResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data UploadhigestscoreData `json:"data"` +} + +type Queryrankinfolist struct { + Rank int `json:"rank"` + Nickname string `json:"nickname"` + Headurl string `json:"headurl"` + Socre int64 `json:"socre"` + UniqueId string `json:"uniqueId"` +} + +type QueryrankinfoData struct { + Selfrank int `json:"selfrank"` + Selfsocre int64 `json:"selfsocre"` + Ranklist []Queryrankinfolist `json:"ranklist"` +} + +type QueryrankinfoResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data QueryrankinfoData `json:"data"` +} + type GetcashReq struct { Gameid string `json:"gameid"` Channel string `json:"channel"` @@ -376,31 +471,36 @@ type WithDrawDesc struct { //玩家数据 type UserData struct { - Userid string //玩家w唯一id - Lv int //玩家当前等级 - LvRewardGet int //当前等级奖励是否已经领取 1未领取 2普通领取 3双倍领取 - Exp int //玩家当前经验值 - NickName string //昵称 - HeadUrl string //头像 - RegTime int //注册时间 - GuanGold int //玩家存钱罐中金币数量 - RealGold int //玩家实际金币数量(可用于提现的) - WatchAddsTime int //当天剩余红包次数 初始化50次 - LastLoginTime int //上次登陆时间 - ContinueLoginDay int //连续登录天数 - SumLoginDay int //累计登陆天数 - GetFromGuanCnt int //当天从存钱款提取金币次数 - SignRound int //签到轮数 - SignSum int //累计签到天数 - IsSignToday int //今日是否已经签到 1是 0否 - LeftFreeRB int //剩余免费红包次数 - UpLvCostTime int //上一个等级升级时间 - UpLvCostTimeSec int //上一个等级升级的时间点时刻 - ReadNum int //玩家微转发阅读量 - GetCashCnt int //当天提现次数 - WithDraw WithDrawInfo //提现记录信息 - Task TaskInfo //玩家任务完成相关信息 - Achieve AchieveMentInfo //玩家成就完成相关数据 + Userid string //玩家w唯一id + Lv int //玩家当前等级 + LvRewardGet int //当前等级奖励是否已经领取 1未领取 2普通领取 3双倍领取 + Exp int //玩家当前经验值 + NickName string //昵称 + HeadUrl string //头像 + RegTime int //注册时间 + GuanGold int //玩家存钱罐中金币数量 + RealGold int //玩家实际金币数量(可用于提现的) + WatchAddsTime int //当天剩余红包次数 初始化50次 + LastLoginTime int //上次登陆时间 + ContinueLoginDay int //连续登录天数 + SumLoginDay int //累计登陆天数 + GetFromGuanCnt int //当天从存钱款提取金币次数 + SignRound int //签到轮数 + SignSum int //累计签到天数 + IsSignToday int //今日是否已经签到 1是 0否 + LeftFreeRB int //剩余免费红包次数 + UpLvCostTime int //上一个等级升级时间 + UpLvCostTimeSec int //上一个等级升级的时间点时刻 + ReadNum int //玩家微转发阅读量 + GetCashCnt int //当天提现次数 + RedBagFetchIdlist []int //记录当前以及领取的红包id + LuckyBagLeftTimes int //当日福袋剩余次数 + LastUpdateTime int //上一次同步时间 + OfflineGold int //离线金币数量 + HighScore int64 //玩家历史最高分 + WithDraw WithDrawInfo //提现记录信息 + Task TaskInfo //玩家任务完成相关信息 + Achieve AchieveMentInfo //玩家成就完成相关数据 } //---------------------------------------------------------------------------------------------------------------------- diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index ae61beb..c06cec7 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -1,6 +1,7 @@ package logic import ( + "HttpServer/conf" "HttpServer/jsonconf" "HttpServer/redishandler" "bytes" @@ -11,6 +12,7 @@ import ( "encoding/json" "errors" "io/ioutil" + "math/rand" "net/http" "sort" "strconv" @@ -23,6 +25,91 @@ func SetHeader(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid,Gameid,Channel") } +func (u *UserData) IsRedIdInList(id int) bool { + for _, v := range u.RedBagFetchIdlist { + if v == id { + return true + } + } + return false +} + +func (u *UserData) HandlePassDay(uuid int, channel string) { + isdiffday := false + nowtime := time.Now() + lasttime := time.Unix(int64(u.LastLoginTime), 0) + nowdaynum := time.Now().Day() + lastdaynum := time.Unix(int64(u.LastLoginTime), 0).Day() + nowtimestamp := time.Date(nowtime.Year(), nowtime.Month(), nowtime.Day(), 0, 0, 0, 0, nowtime.Location()) + lasttimestamp := time.Date(lasttime.Year(), lasttime.Month(), lasttime.Day(), 0, 0, 0, 0, lasttime.Location()) + + logger.Info("HandlePassDay lasttime=%v,lasttimestamp=%v", lasttime, lasttimestamp) + if nowdaynum == lastdaynum { + //同一天 + if int64(u.LastLoginTime)-time.Now().Unix() > 86400 { + //已经过了很多天了 + //u.LastLoginTime = int(time.Now().Unix()) + u.ContinueLoginDay = 1 + isdiffday = true + } else { + //t同一天 不做处理 + } + } else { + //不是同一天了 + isdiffday = true + if nowtimestamp.Unix() != lasttimestamp.Unix()+86400 { + //超过一天了 + u.ContinueLoginDay = 1 + } else { + u.ContinueLoginDay++ + } + logger.Info("HandlePassDay now=%v,last=%v", nowtimestamp.Unix(), lasttimestamp.Unix()) + } + + if isdiffday { + //跨天了 + u.SumLoginDay++ + u.WatchAddsTime = WATCH_ADD_DAY_LIMIT + //todo 重置任务相关的数据 + u.GetFromGuanCnt = 0 + u.GetCashCnt = 0 + + u.Task.GetGuanGold = 0 + u.Task.GetRedbagCnt = 0 + u.Task.OnlineMin = 0 + u.Task.PassLevel = 0 + u.Task.UseItemCnt = 0 + u.Task.PlaySmall = 0 + u.RedBagFetchIdlist = u.RedBagFetchIdlist[:0] + u.LuckyBagLeftTimes = LUCKYBAGDAYLIMIT + + err := InitTaskAndAchievement(uuid, channel) + if err != nil { + logger.Error("InitTaskAndAchievement err=%v", err) + } + + //签到数据处理 + u.IsSignToday = 0 + if u.SignSum >= 7 { + //进入新的一轮 + u.SignSum = 0 + u.SignRound++ + } + } + + u.LastLoginTime = int(nowtime.Unix()) + uniqueid := strconv.Itoa(uuid) + channel + SaveUserInfo(u, uniqueid) +} + +func (udata *UserData) AddToRank() error { + err := redishandler.GetRedisClient().Zadd(redis.USER_SCORE_RANK, float64(udata.HighScore), udata.Userid) + if err != nil { + logger.Error("AddToRank failed err=%v", err) + } + return err +} + func GettotalParam(paramlist []string) string { //排序 sort.Strings(paramlist) @@ -48,7 +135,7 @@ func GetHashValue(signsum string) string { func DoHttpPost(bys []byte, apistr string) (string, error) { body := bytes.NewBuffer(bys) - url1 := XIAOXINGXING_SDKURLOFFICAL + apistr //"api/server/addcoin" + url1 := conf.GetCoinConf().Host + apistr //"api/server/addcoin" res, err := http.Post(url1, "application/json;charset=utf-8", body) if err != nil { @@ -63,10 +150,10 @@ func DoHttpPost(bys []byte, apistr string) (string, error) { func GetCoinFromSdk(uuid int, gameid string, channel string) (int, error) { - SERVERKEY := XIAOXINGXING_SERVERKEYTEST - if gameid == "1015" { + SERVERKEY := conf.GetCoinConf().Key + /*if gameid == "1015" { SERVERKEY = XIAOXINGXING_SERVERKEYTEST_1015 - } + }*/ var paramlist []string var params GetCoinDesc @@ -288,8 +375,7 @@ func InitTaskAndAchievement(uuid int, channel string) error { return nil } - -func InitUserInfo(resp *UserLoginResp, uniqueuid ,gameid ,channel string,uuid int) error { +func InitUserInfo(resp *UserLoginResp, uniqueuid, gameid, channel string, uuid int) error { var initdata UserData initdata.Lv = 1 @@ -310,6 +396,7 @@ func InitUserInfo(resp *UserLoginResp, uniqueuid ,gameid ,channel string,uuid in initdata.NickName = "著名沙雕" initdata.HeadUrl = "1" initdata.RegTime = int(time.Now().Unix()) + initdata.LuckyBagLeftTimes = LUCKYBAGDAYLIMIT for _, val := range jsonconf.GetJsonConf().RmbConfig { var tmp WithDrawDesc @@ -372,17 +459,116 @@ func GetUserInfo(uniqueid string) (*UserData, error) { return &tmp, nil } -func SaveUserSelfData(uniqueid ,savedata string) error { +func SaveUserSelfData(uniqueid, savedata string) error { err := redishandler.GetRedisClient().HSet(redis.USER_DATA_KEY, uniqueid, savedata) return err } -func GetUserSelfData(uniqueid string) (string,error) { +func GetUserSelfData(uniqueid string) (string, error) { data, err := redishandler.GetRedisClient().HGet(redis.USER_SELF_DATA_KEY, uniqueid) if err != nil { return "", err } - return data, nil -} \ No newline at end of file +} + +func AddCoinToSdk(uuid int, goldnum int, gameid string, channel string, atype int) (int, error) { + SERVERKEY := conf.GetCoinConf().Key + /*if gameid == "1015" { + SERVERKEY = XIAOXINGXING_SERVERKEYTEST_1015 + }*/ + var paramlist []string + sign_type := "sign_type=md5" + paramlist = append(paramlist, sign_type) + time_stamp := "time_stamp=" + strconv.Itoa(int(time.Now().Unix())) + paramlist = append(paramlist, time_stamp) + paramgameid := "gameid=" + gameid + paramlist = append(paramlist, paramgameid) + pchannel := "channel=" + channel + paramlist = append(paramlist, pchannel) + puid := "uid=" + strconv.Itoa(uuid) + paramlist = append(paramlist, puid) + pcoin := "coin=" + strconv.Itoa(goldnum) + paramlist = append(paramlist, pcoin) + ptyp := "typ=" + strconv.Itoa(atype) + paramlist = append(paramlist, ptyp) + + sumparam := GettotalParam(paramlist) + //加serverkey + signsum := sumparam + SERVERKEY + logger.Info("AddCoinToSdk sumparam=%v", signsum) + + //进行hash + sign := GetHashValue(signsum) + + var req AddCoinDesc + req.Channel = channel + req.Gameid = gameid + req.Coin = goldnum + req.Sign = sign + req.Sign_type = "md5" + req.Time_stamp = strconv.Itoa(int(time.Now().Unix())) + req.Typ = atype + req.Uid = uuid + + bys, err := json.Marshal(&req) + if err != nil { + logger.Error("AddCoinToSdk failed=%v", err) + return 0, err + } + res, err := DoHttpPost(bys, "api/server/addcoin") + if err != nil { + logger.Error("AddCoinToSdk failed=%v", err) + return 0, err + } + + logger.Info("AddCoinToSdk res=%v", res) + var resp AddCoinResp + err = json.Unmarshal([]byte(res), &resp) + if err != nil { + logger.Error("AddCoinToSdk failed=%v", err) + return 0, err + } + + if resp.Code != "0" { + gold, _ := GetCoinFromSdk(uuid, gameid, channel) + logger.Error("AddCoinToSdk failed=%v", resp.Msg) + return gold, err + } + return resp.Data.Mycoin, nil +} + +//计算福袋金额 +func CalcLuckYBagNum() int { + rtnum := 0 + + sumrate := 0 + tmprate := 0 + idx := -1 + rand.Seed(time.Now().UnixNano()) + randnum := rand.Intn(100) + cflist := jsonconf.GetJsonConf().LuckyBagConfig + for _, vv := range cflist { + sumrate += vv.Rate + } + logger.Info("CalcLuckYBagNum sumrate=%v,randnum=%v,cflist=%+v", sumrate, randnum, cflist) + for k, v := range cflist { + tmprate += int(v.Rate * 100 / sumrate) + logger.Info("DrawTable tmprate=%v", tmprate) + if tmprate >= randnum { + idx = k + break + } + } + + if idx == -1 { + if len(cflist) > 0 { + rtnum = cflist[0].Coin + } + } else { + rtnum = cflist[idx].Coin + } + + return rtnum +} diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index 619d3d4..e0b6cf7 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -49,13 +49,22 @@ func startServerHttpServe() { http.HandleFunc("/russiaxiaoxiao/uploaduserbasicinfo", Uploaduserbasicinfo) //上传基本信息 http.HandleFunc("/russiaxiaoxiao/updatedata", Updatedata) //update数据 http.HandleFunc("/russiaxiaoxiao/syncuserdata", Syncuserdata) //同步玩家数据 + http.HandleFunc("/russiaxiaoxiao/getguangold", Getguangold) //获取金币存入存钱罐 + http.HandleFunc("/russiaxiaoxiao/drawguangold", Drawguangold) //提取存钱罐金币 + http.HandleFunc("/russiaxiaoxiao/fetchfenredbag", Fetchfenredbag) //请求领取每日消除红包 + http.HandleFunc("/russiaxiaoxiao/fetchluckybag", Fetchluckybag) //请求领取每日福袋 + http.HandleFunc("/russiaxiaoxiao/quersigndata", Quersigndata) //获取签到数据 + http.HandleFunc("/russiaxiaoxiao/dosign", Dosign) //签到 + http.HandleFunc("/russiaxiaoxiao/fetchoffliengold", Fetchoffliengold) //请求领取离线金币 + http.HandleFunc("/russiaxiaoxiao/uploadhigestscore", Uploadhigestscore) //上报玩家历史最高分 + http.HandleFunc("/russiaxiaoxiao/queryrankinfo", Queryrankinfo) //查询排行榜 //.......................................... - http.HandleFunc("/eliminatestar/getuserdata", Getuserdata) //获取玩家数据 - http.HandleFunc("/eliminatestar/watchads", Watchads) //观看激励视频 - http.HandleFunc("/eliminatestar/queryguaninfo", Queryguaninfo) //获取存钱罐数据 - http.HandleFunc("/eliminatestar/getguangold", Getguangold) //获取金币到存钱罐 - http.HandleFunc("/eliminatestar/drawguangold", Drawguangold) //提取存钱罐的金币到个人钱包 + http.HandleFunc("/eliminatestar/getuserdata", Getuserdata) //获取玩家数据 + http.HandleFunc("/eliminatestar/watchads", Watchads) //观看激励视频 + http.HandleFunc("/eliminatestar/queryguaninfo", Queryguaninfo) //获取存钱罐数据 + //http.HandleFunc("/eliminatestar/getguangold", Getguangold) //获取金币到存钱罐 + //http.HandleFunc("/eliminatestar/drawguangold", Drawguangold) //提取存钱罐的金币到个人钱包 http.HandleFunc("/eliminatestar/querdrawinfo", Querdrawinfo) //获取提现档位信息接口 http.HandleFunc("/eliminatestar/getcash", Getcash) //提现 http.HandleFunc("/eliminatestar/getcashrecord", Getcashrecord) //提现记录列表 @@ -478,46 +487,255 @@ func Querdrawinfo(w http.ResponseWriter, r *http.Request) { //HandlerQuerdrawinfo(w, s, Uuid) } +func Queryrankinfo(w http.ResponseWriter, r *http.Request) { + + gameid := "" + channel := "" + uniqueid := "" + Uuid := 0 + if len(r.Header) > 0 { + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") + } + + if Uuid == 0 { + SetHeader(w) + logger.Error("Uuid is nil!") + return + } + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Queryrankinfo , body:%v,uuid=%v", s, uniqueid) + + HandlerQueryrankinfo(w, s, uniqueid, gameid, channel, Uuid) + +} + +func Uploadhigestscore(w http.ResponseWriter, r *http.Request) { + + gameid := "" + channel := "" + uniqueid := "" + Uuid := 0 + if len(r.Header) > 0 { + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") + } + + if Uuid == 0 { + SetHeader(w) + logger.Error("Uuid is nil!") + return + } + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Uploadhigestscore , body:%v,uuid=%v", s, uniqueid) + + HandlerUploadhigestscore(w, s, uniqueid, gameid, channel, Uuid) + +} + +func Fetchoffliengold(w http.ResponseWriter, r *http.Request) { + + gameid := "" + channel := "" + uniqueid := "" + Uuid := 0 + if len(r.Header) > 0 { + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") + } + + if Uuid == 0 { + SetHeader(w) + logger.Error("Uuid is nil!") + return + } + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Fetchoffliengold , body:%v,uuid=%v", s, uniqueid) + + HandlerFetchoffliengold(w, s, uniqueid, gameid, channel, Uuid) + +} + +func Dosign(w http.ResponseWriter, r *http.Request) { + + gameid := "" + channel := "" + uniqueid := "" + Uuid := 0 + if len(r.Header) > 0 { + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") + } + + if Uuid == 0 { + SetHeader(w) + logger.Error("Uuid is nil!") + return + } + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Dosign , body:%v,uuid=%v", s, uniqueid) + + HandlerDosign(w, s, uniqueid, gameid, channel, Uuid) + +} + +func Quersigndata(w http.ResponseWriter, r *http.Request) { + + gameid := "" + channel := "" + uniqueid := "" + Uuid := 0 + if len(r.Header) > 0 { + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") + } + + if Uuid == 0 { + SetHeader(w) + logger.Error("Uuid is nil!") + return + } + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Quersigndata , body:%v,uuid=%v", s, uniqueid) + + HandlerQuersigndata(w, s, uniqueid, gameid, channel, Uuid) + +} + +func Fetchluckybag(w http.ResponseWriter, r *http.Request) { + + gameid := "" + channel := "" + uniqueid := "" + Uuid := 0 + if len(r.Header) > 0 { + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") + } + + if Uuid == 0 { + SetHeader(w) + logger.Error("Uuid is nil!") + return + } + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Fetchluckybag , body:%v,uuid=%v", s, uniqueid) + + HandlerFetchluckybag(w, s, uniqueid, gameid, channel, Uuid) + +} + +func Fetchfenredbag(w http.ResponseWriter, r *http.Request) { + + gameid := "" + channel := "" + uniqueid := "" + Uuid := 0 + if len(r.Header) > 0 { + Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") + } + + if Uuid == 0 { + SetHeader(w) + logger.Error("Uuid is nil!") + return + } + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("Fetchfenredbag , body:%v,uuid=%v", s, uniqueid) + + HandlerFetchfenredbag(w, s, uniqueid, gameid, channel, Uuid) + +} + func Drawguangold(w http.ResponseWriter, r *http.Request) { + gameid := "" + channel := "" + uniqueid := "" Uuid := 0 if len(r.Header) > 0 { Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") } if Uuid == 0 { SetHeader(w) - //logger.Error("Uuid is nil!") + logger.Error("Uuid is nil!") return } result, _ := ioutil.ReadAll(r.Body) r.Body.Close() s := string(result) - logger.Info("Drawguangold , body:%v,uuid=%v", s, Uuid) + logger.Info("Drawguangold , body:%v,uuid=%v", s, uniqueid) + + HandlerDrawguangold(w, s, uniqueid, gameid, channel, Uuid) - //HandlerDrawguangold(w, s, Uuid) } func Getguangold(w http.ResponseWriter, r *http.Request) { + gameid := "" + channel := "" + uniqueid := "" Uuid := 0 if len(r.Header) > 0 { Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") } if Uuid == 0 { SetHeader(w) - //logger.Error("Uuid is nil!") + logger.Error("Uuid is nil!") return } result, _ := ioutil.ReadAll(r.Body) r.Body.Close() s := string(result) - logger.Info("Getguangold , body:%v,uuid=%v", s, Uuid) + logger.Info("Getguangold , body:%v,uuid=%v", s, uniqueid) - // HandlerGetguangold(w, s, Uuid) + HandlerGetguangold(w, s, uniqueid, gameid, channel, Uuid) } func Queryguaninfo(w http.ResponseWriter, r *http.Request) { @@ -569,14 +787,14 @@ func Watchads(w http.ResponseWriter, r *http.Request) { func Syncuserdata(w http.ResponseWriter, r *http.Request) { - //gameid := "" - //channel := "" + gameid := "" + channel := "" uniqueid := "" Uuid := 0 if len(r.Header) > 0 { Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) - // gameid = r.Header.Get("Gameid") - //channel = r.Header.Get("Channel") + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") } @@ -591,7 +809,7 @@ func Syncuserdata(w http.ResponseWriter, r *http.Request) { s := string(result) logger.Info("Syncuserdata , body:%v,uuid=%v", s, uniqueid) - HandlerSyncuserdata(w, s, uniqueid) + HandlerSyncuserdata(w, s, uniqueid, gameid, channel, Uuid) } func Updatedata(w http.ResponseWriter, r *http.Request) { diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index d0f6d03..8f6ed4c 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -1,6 +1,7 @@ package logic import ( + "HttpServer/jsonconf" "HttpServer/redishandler" "common/logger" "common/redis" @@ -10,7 +11,7 @@ import ( "time" ) -func HandlerSyncuserdata(w http.ResponseWriter, data string, uniqueuuid string) { +func HandlerSyncuserdata(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { SetHeader(w) var resp SyncuserdataResp @@ -28,10 +29,15 @@ func HandlerSyncuserdata(w http.ResponseWriter, data string, uniqueuuid string) break } + uinfo.LastUpdateTime = int(time.Now().Unix()) + //此处要处理一下跨天逻辑 + uinfo.HandlePassDay(uuid, channel) + resp.Data.Walletgold = uinfo.RealGold resp.Data.Guangold = uinfo.GuanGold resp.Data.Sumloginday = uinfo.SumLoginDay resp.Data.Nowtime = int(time.Now().Unix()) + resp.Data.Luckbaglefttime = uinfo.LuckyBagLeftTimes break } @@ -111,6 +117,494 @@ func HandlerUploaduserbasicinfo(w http.ResponseWriter, data string, uniqueuuid s fmt.Fprint(w, string(respstr)) } +func HandlerQueryrankinfo(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + var resp QueryrankinfoResp + resp.Code = 0 + resp.Message = "success" + + for { + selfrank := -1 + selfscore := int64(0) + vv, err := redishandler.GetRedisClient().ZRevRangewithIndex(redis.USER_SCORE_RANK, 0, 99) + if err == nil { + rank := 0 + for _, v := range vv { + rank++ + + rinfobyte, _ := v.([]byte) + logger.Info("HandlerQueryPlayerRank ,v=%v", string(rinfobyte)) + //ruid, _ := strconv.Atoi(string(rinfobyte)) + rindo, err := GetUserInfo(string(rinfobyte)) + if err == nil && rindo != nil { + var tmp Queryrankinfolist + tmp.UniqueId = string(rinfobyte) + tmp.Socre = rindo.HighScore + tmp.Nickname = rindo.NickName + tmp.Headurl = rindo.HeadUrl + tmp.Rank = rank + + resp.Data.Ranklist = append(resp.Data.Ranklist, tmp) + } + + if string(rinfobyte) == uniqueuuid { + selfrank = rank + selfscore = rindo.HighScore + } + } + } else { + logger.Error("HandlerUpdateUserInfo redisfailed ") + resp.Code = 1 + resp.Message = "redisfailed" + break + } + + if selfrank == -1 { + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerQueryrankinfo data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + resp.Data.Selfsocre = uinfo.HighScore + resp.Data.Selfrank = 101 //表示100+ + } else { + resp.Data.Selfrank = selfrank + resp.Data.Selfsocre = selfscore + } + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerUploadhigestscore(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + var resp UploadhigestscoreResp + resp.Code = 0 + resp.Message = "success" + var rdata UploadhigestscoreReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Info("json decode HandlerUploadhigestscore data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerUploadhigestscore data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + if rdata.Score < uinfo.HighScore { + logger.Info("GetUserInfo HandlerUploadhigestscore data failed:%v,for:%v", err, data) + resp.Message = "分数不足最高分" + resp.Code = 1 + break + } + + uinfo.HighScore = rdata.Score + + uinfo.AddToRank() + //加入排行榜 + SaveUserInfo(uinfo, uniqueuuid) + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerDosign(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + var resp DosignResp + resp.Code = 0 + resp.Message = "success" + var rdata DosignReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Info("json decode HandlerDosign data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerDosign data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + if uinfo.IsSignToday == 1 { + logger.Info(" HandlerDosign issign failed:%v,for:%v", err, data) + resp.Message = "当天已签到" + resp.Code = 1 + break + } + + uinfo.IsSignToday = 1 + uinfo.SignSum++ + if uinfo.SignSum > 7 { + uinfo.SignSum = 1 + uinfo.SignRound++ + } + + cfg := jsonconf.GetsignConfig(uinfo.SignSum) + if cfg == nil { + logger.Info("GetUserInfo HandlerDosign data failed:%v,for:%v", err, data) + resp.Message = "参数错误" + resp.Code = 1 + break + } + + readgold := 0 + readgold, err = AddCoinToSdk(uuid, cfg.Sign_coin, gameid, channel, REDBAGTYPE_107) + if err != nil { + logger.Info("GetUserInfo HandlerDosign data failed:%v,for:%v", err, data) + resp.Message = "后台失败!" + resp.Code = 1 + break + } + + if rdata.Ftype == 2 { + readgold, err = AddCoinToSdk(uuid, cfg.Video_coin, gameid, channel, REDBAGTYPE_107) + if err != nil { + logger.Info("GetUserInfo HandlerDosign data failed:%v,for:%v", err, data) + resp.Message = "后台失败!" + resp.Code = 1 + break + } + } + + uinfo.RealGold = readgold + + resp.Data.Curday = uinfo.SignSum + resp.Data.Issigntaday = uinfo.IsSignToday + resp.Data.Walletgold = uinfo.RealGold + + SaveUserInfo(uinfo, uniqueuuid) + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerFetchoffliengold(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + var resp FetchoffliengoldResp + resp.Code = 0 + for { + + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerFetchoffliengold data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + if uinfo.OfflineGold <= 0 { + logger.Info("GetUserInfo HandlerFetchoffliengold data failed:%v,for:%v", err, data) + resp.Message = "没有离线金币可以领取" + resp.Code = 1 + break + } + + readgold, err := AddCoinToSdk(uuid, uinfo.OfflineGold, gameid, channel, REDBAGTYPE_106) + if err != nil { + logger.Info("GetUserInfo HandlerFetchoffliengold data failed:%v,for:%v", err, data) + resp.Message = "后台失败!" + resp.Code = 1 + break + } + + uinfo.RealGold = readgold + + resp.Data.Walletgold = uinfo.RealGold + resp.Data.Getgold = uinfo.OfflineGold + + uinfo.OfflineGold = 0 + + SaveUserInfo(uinfo, uniqueuuid) + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerQuersigndata(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + var resp QuersigndataResp + resp.Code = 0 + for { + + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerQuersigndata data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + resp.Data.Curday = uinfo.SignSum + resp.Data.Issigntaday = uinfo.IsSignToday + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerFetchluckybag(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + + var resp FetchluckybagResp + resp.Code = 0 + + for { + + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerFetchluckybag data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + //先判断次数是否足够 + if uinfo.LuckyBagLeftTimes < 1 { + logger.Info("GetUserInfo HandlerFetchluckybag data failed:%v,for:%v", err, data) + resp.Message = "当日已经没有福袋可以领取了!" + resp.Code = 1 + break + } + + addcoin := CalcLuckYBagNum() + if addcoin == 0 { + logger.Info("GetUserInfo HandlerFetchluckybag data failed:%v,for:%v", err, data) + resp.Message = "CalcLuckYBagNum!" + resp.Code = 1 + break + } + + realgold, err := AddCoinToSdk(uuid, addcoin, gameid, channel, REDBAGTYPE_106) + if err != nil { + logger.Info("GetUserInfo HandlerFetchluckybag data failed:%v,for:%v", err, data) + resp.Message = "后台加金币失败了" + resp.Code = 1 + break + } + + uinfo.RealGold = realgold + uinfo.LuckyBagLeftTimes-- + + resp.Data.Wallgold = uinfo.RealGold + resp.Data.Lefttimes = uinfo.LuckyBagLeftTimes + + SaveUserInfo(uinfo, uniqueuuid) + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerFetchfenredbag(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + + var resp FetchfenredbagResp + resp.Code = 0 + var rdata FetchfenredbagReq + err := json.Unmarshal([]byte(data), &rdata) + for { + + if err != nil { + logger.Info("json decode HandlerFetchfenredbag data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + cfg := jsonconf.GetRedPackageConfig(rdata.Id) + if cfg == nil { + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data) + resp.Message = "参数错误" + resp.Code = 1 + break + } + + //需要判断一下当天是否已经领取过了 + if uinfo.IsRedIdInList(rdata.Id) { + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data) + resp.Message = "此档位奖励已经领取过了!" + resp.Code = 1 + break + } + + readgold := 0 + readgold, err = AddCoinToSdk(uuid, cfg.Free_coin, gameid, channel, REDBAGTYPE_103) + if err != nil { + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data) + resp.Message = "后台失败!" + resp.Code = 1 + break + } + + if rdata.Ftype == 2 { + readgold, err = AddCoinToSdk(uuid, cfg.Video_coin, gameid, channel, REDBAGTYPE_106) + if err != nil { + logger.Info("GetUserInfo HandlerFetchfenredbag data failed:%v,for:%v", err, data) + resp.Message = "后台失败!" + resp.Code = 1 + break + } + } + + uinfo.RealGold = readgold + uinfo.RedBagFetchIdlist = append(uinfo.RedBagFetchIdlist, rdata.Id) + + resp.Data.Wallgold = uinfo.RealGold + + SaveUserInfo(uinfo, uniqueuuid) + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerDrawguangold(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + + var resp DrawguangoldResp + resp.Code = 0 + var rdata DrawguangoldReq + err := json.Unmarshal([]byte(data), &rdata) + for { + + if err != nil { + logger.Info("json decode HandlerDrawguangold data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerDrawguangold data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + if rdata.Goldnum == 0 || uinfo.GuanGold < rdata.Goldnum { + logger.Info("GetUserInfo HandlerDrawguangold data failed:%v,for:%v", err, data) + resp.Message = "Goldnum is zero" + resp.Code = 1 + break + } + realgold, err := AddCoinToSdk(uuid, rdata.Goldnum, gameid, channel, REDBAGTYPE_105) + if err != nil { + logger.Info("GetUserInfo HandlerDrawguangold data failed:%v,for:%v", err, data) + resp.Message = "后台提现失败" + resp.Code = 1 + break + } + + uinfo.RealGold = realgold + + uinfo.GuanGold -= rdata.Goldnum + + SaveUserInfo(uinfo, uniqueuuid) + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerGetguangold(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + + var resp GetguangoldResp + resp.Code = 0 + var rdata GetguangoldReq + err := json.Unmarshal([]byte(data), &rdata) + for { + + if err != nil { + logger.Info("json decode HandlerGetguangold data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil { + logger.Info("GetUserInfo HandlerGetguangold data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 1 + break + } + + uinfo.GuanGold += rdata.Goldnum + if uinfo.GuanGold > GUANGOLDNUMLIMIT { + uinfo.GuanGold = GUANGOLDNUMLIMIT + } + + resp.Data.Guangold = uinfo.GuanGold + + SaveUserInfo(uinfo, uniqueuuid) + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + func HandlerLogin(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { SetHeader(w) @@ -134,6 +628,7 @@ func HandlerLogin(w http.ResponseWriter, data string, uniqueuuid, gameid, channe //不存在老的数据 之间走新号流程 err = InitUserInfo(&resp, uniqueuuid, gameid, channel, uuid) + resp.Data.Offlinegold = 0 } else { uinfo, err := GetUserInfo(uniqueuuid) @@ -148,6 +643,20 @@ func HandlerLogin(w http.ResponseWriter, data string, uniqueuuid, gameid, channe resp.Data.Walletgold = uinfo.RealGold resp.Data.Isnew = 0 + + //需要计算一下是否有离线金币 + offset := (int(time.Now().Unix()) - uinfo.LastUpdateTime) / 60 + if offset > 10 { + offgold := int(float32(offset-10) * 1.5) + if offgold > 150 { + offgold = 150 + } + + uinfo.OfflineGold = offgold + uinfo.LastUpdateTime = int(time.Now().Unix()) + } + + resp.Data.Offlinegold = uinfo.OfflineGold } pdata, err := GetUserSelfData(uniqueuuid) diff --git a/src/common/redis/def.go b/src/common/redis/def.go index b7ecc42..c106107 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -1,9 +1,9 @@ package redis const ( - USER_DATA_KEY = "RUSSIAXIAOXIAO_USER_DATA_KEY" //玩家数据 - USER_SELF_DATA_KEY = "RUSSIAXIAOXIAO_USER_SELF_DATA_KEY" //玩家自定义数据 - USER_TASKINFO_LIST = "RUSSIAXIAOXIAO_USER_TASKINFO_LIST" //任务列表数据缓存 - USER_ACHIEVEMENTINFO_LIST = "RUSSIAXIAOXIAO_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存 - + USER_DATA_KEY = "RUSSIAXIAOXIAO_USER_DATA_KEY" //玩家数据 + USER_SELF_DATA_KEY = "RUSSIAXIAOXIAO_USER_SELF_DATA_KEY" //玩家自定义数据 + USER_TASKINFO_LIST = "RUSSIAXIAOXIAO_USER_TASKINFO_LIST" //任务列表数据缓存 + USER_ACHIEVEMENTINFO_LIST = "RUSSIAXIAOXIAO_USER_ACHIEVEMENTINFO_LIST" //成就列表数据缓存 + USER_SCORE_RANK = "RUSSIAXIAOXIAO_USER_SCORE_RANK" //玩家排行榜 ) -- libgit2 0.21.0