From 5dfa463a392e96b8103d1683927a72e06c1cd764 Mon Sep 17 00:00:00 2001 From: 陆恒 Date: Wed, 3 Jun 2020 14:56:41 +0800 Subject: [PATCH] 提交聊天相关接口 --- src/HttpServer/logic/constdef.go | 21 +++++++++++---------- src/HttpServer/logic/datadef.go | 33 ++++++++++++++++++++++++++++++++- src/HttpServer/logic/function.go | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ src/HttpServer/logic/httpserver.go | 24 ++++++++++++++++++++++++ src/HttpServer/logic/logic.go | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- src/common/redis/redis.go | 20 ++++++++++++++++++++ src/mysql/dbmysql.go | 93 ++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------- 7 files changed, 441 insertions(+), 69 deletions(-) diff --git a/src/HttpServer/logic/constdef.go b/src/HttpServer/logic/constdef.go index d9ae257..4ceb6d9 100644 --- a/src/HttpServer/logic/constdef.go +++ b/src/HttpServer/logic/constdef.go @@ -1,21 +1,22 @@ package logic var ( - WETCHATAPPID="wx572a2a5ec4538f33" + WETCHATAPPID = "wx572a2a5ec4538f33" WETCHATSERCRT = "b31e2e7406af88fe7395cd178bdb64fc" ) const ( - ENV_ENUM = 100 - LBASE64 = 1 - RESURL = "https://pck2d.miso-lab.com/" + ENV_ENUM = 100 + LBASE64 = 1 + CHATLIMITNUM = 50 //聊天记录保存数量 + RESURL = "https://pck2d.miso-lab.com/" VERSION_CONFIG = "version/v1.9.json" ) const ( - FRIEND_MAX_NUM = 50 //好友人数上限 - FRIEND_APPLY_LIMIT = 50 //好友申请当日上限 - FRIEND_APPROVE_LIMIT = 50 //好友批准当日上限 - FRIEND_RECOMMAND_NUM = 3 //推荐好友数量 - TEAM_MAXNUM = 4 //队伍最大人数 -) \ No newline at end of file + FRIEND_MAX_NUM = 50 //好友人数上限 + FRIEND_APPLY_LIMIT = 50 //好友申请当日上限 + FRIEND_APPROVE_LIMIT = 50 //好友批准当日上限 + FRIEND_RECOMMAND_NUM = 3 //推荐好友数量 + TEAM_MAXNUM = 4 //队伍最大人数 +) diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 3f75806..1ffd61c 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -201,6 +201,37 @@ type QueryNewMessageResp struct { Result QueryNewMessageResult `json:"result"` } +type UnlockEmjReq struct { + Uuid int `json:"uuid"` + Pos int `json:"pos"` +} + +type DoChatReq struct { + Uuid int `json:"uuid"` + Ctype int `json:"ctype"` + Taruuid int `json:"taruuid"` + Message string `json:"message"` +} + +type DoChatResp struct { + Status string `json:"status"` + Result CommonResult `json:"result"` +} + +type UnlockEmjDesc struct { + Emjinfo []int `json:"emjinfo"` +} + +type UnlockEmjResult struct { + Code int `json:"code"` + Data UnlockEmjDesc `json:"data"` +} + +type UnlockEmjResp struct { + Status string `json:"status"` + Result UnlockEmjResult `json:"result"` +} + type InviteWorkReq struct { Uuid int `json:"uuid"` } @@ -372,7 +403,7 @@ type MsgCheckDesc struct { } type MsgCheckResp struct { - Errcode string `json:"errcode"` + Errcode int `json:"errcode"` Errmsg string `json:"errmsg"` } diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index a5463c1..c1c6129 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -841,7 +841,7 @@ func GetdagongList(uuid int) (*WorkList, []InviteWorkOffDesc, error) { //加入打工列表 func AddDagongList(uuid int, masteruuid int, list WorkList) error { - nickname, headurl, err := mysql.QueryNameAndHead(uuid) + nickname, headurl, _, err := mysql.QueryNameAndHead(uuid) if err != nil { logger.Error("AddDagongList err=%v", err) return err @@ -886,17 +886,45 @@ func QueryUserTeamId(uuid int) (int, error) { return tmp.Team_id, nil } -func GetChatEmojInfo(uuid int) []int { +func GetChatEmojInfo(uuid int) *EmojunlockInfo { var tmp EmojunlockInfo vv, err := redishandler.GetRedisClient().HGet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid)) if err != nil { - return nil + //return nil + //如果还没有则做一个初始化 + tmp.Emojinfo = append(tmp.Emojinfo, 0) + tmp.Emojinfo = append(tmp.Emojinfo, 0) + tmp.Emojinfo = append(tmp.Emojinfo, 0) + tmp.Emojinfo = append(tmp.Emojinfo, 0) + savestr, err := json.Marshal(&tmp) + if err != nil { + logger.Error("GetChatEmojInfo err=%v", err) + } + err = redishandler.GetRedisClient().HSet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid), string(savestr)) + if err != nil { + logger.Error("GetChatEmojInfo err=%v", err) + } + return &tmp } err = json.Unmarshal([]byte(vv), &tmp) if err != nil { return nil } - return tmp.Emojinfo + return &tmp +} + +func SaveChatEmojInfo(uuid int, save *EmojunlockInfo) error { + savestr, err := json.Marshal(save) + if err != nil { + logger.Error("SaveChatEmojInfo err=%v") + return err + } + err = redishandler.GetRedisClient().HSet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid), string(savestr)) + if err != nil { + logger.Error("SaveChatEmojInfo err=%v", err) + return err + } + return nil } func CheckTeamHasNewMessage(uuid int) (bool, error) { @@ -976,7 +1004,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { tmp.Uuid = val tmp.Isnew = 1 tmp.Ctype = 2 - heads, names, err := mysql.QueryNameAndHead(val) + heads, names, _, err := mysql.QueryNameAndHead(val) if err != nil { logger.Error("GetPrivateBriefList err=%v", err) } @@ -998,7 +1026,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { tmp.Uuid = val tmp.Isnew = 0 tmp.Ctype = 2 - heads, names, err := mysql.QueryNameAndHead(val) + heads, names, _, err := mysql.QueryNameAndHead(val) if err != nil { logger.Error("GetPrivateBriefList err=%v", err) } @@ -1119,3 +1147,159 @@ func GetPrivateChatMessage(uuid, taduid int) []QueryChatMessageData { sort.Sort(rtsl) return rtsl } + +func WorldChat(message string, uuid int) (int, string) { + length, err := redishandler.GetRedisClient().LLen(redis.WORLD_CHAT_INFO_KEY) + if err == nil { + if length >= CHATLIMITNUM { + //需要先把多余的聊天记录删除 + delcnt := length - CHATLIMITNUM + for i := 0; i < delcnt; i++ { + _, err = redishandler.GetRedisClient().RPop(redis.WORLD_CHAT_INFO_KEY) + if err != nil { + logger.Error("WorldChat failed err=%v", err) + } + } + } + } + + //构建新的结构 + var chats QueryChatMessageData + chats.Message = message + chats.Uuid = uuid + chats.Chattime = int(time.Now().Unix()) + name, head, sex, err := mysql.QueryNameAndHead(uuid) + if err != nil { + logger.Error("WorldChat err=%v", err) + } + chats.Headurl = head + chats.Nickname = name + chats.Sex = sex + + savestr, err := json.Marshal(&chats) + if err != nil { + logger.Error("WorldChat err=%v", err) + return 1, "json failed" + } + + err = redishandler.GetRedisClient().LPush(redis.WORLD_CHAT_INFO_KEY, string(savestr)) + if err != nil { + logger.Error("WorldChat err=%v", err) + return 2, "redis failed" + } + return 0, "success" +} + +func TeamChat(message string, uuid int) (int, string) { + tid, err := QueryUserTeamId(uuid) + if err != nil { + logger.Error("TeamChat err=%v", err) + return 1, "getteamid failed" + } + rkey := redis.USER_CHAT_TEAM_INFO_KEY + ":" + strconv.Itoa(tid) + length, err := redishandler.GetRedisClient().LLen(rkey) + if err == nil { + if length >= CHATLIMITNUM { + //需要先把多余的聊天记录删除 + delcnt := length - CHATLIMITNUM + for i := 0; i < delcnt; i++ { + _, err = redishandler.GetRedisClient().RPop(rkey) + if err != nil { + logger.Error("TeamChat failed err=%v", err) + } + } + } + } + + //构建新的结构 + var chats QueryChatMessageData + chats.Message = message + chats.Uuid = uuid + chats.Chattime = int(time.Now().Unix()) + name, head, sex, err := mysql.QueryNameAndHead(uuid) + if err != nil { + logger.Error("TeamChat err=%v", err) + } + chats.Headurl = head + chats.Nickname = name + chats.Sex = sex + + savestr, err := json.Marshal(&chats) + if err != nil { + logger.Error("TeamChat err=%v", err) + return 1, "json failed" + } + + err = redishandler.GetRedisClient().LPush(rkey, string(savestr)) + if err != nil { + logger.Error("TeamChat err=%v", err) + return 2, "redis failed" + } + return 0, "" +} + +func PrivateChat(message string, uuid int, taruid int) (int, string) { + //存入待收人的列表 + rkey := redis.USER_CHAT_PRIVATE_INFO_KEY + ":" + strconv.Itoa(taruid) + ":" + strconv.Itoa(uuid) + length, err := redishandler.GetRedisClient().LLen(rkey) + if err == nil { + if length >= CHATLIMITNUM { + //需要先把多余的聊天记录删除 + delcnt := length - CHATLIMITNUM + for i := 0; i < delcnt; i++ { + _, err = redishandler.GetRedisClient().RPop(rkey) + if err != nil { + logger.Error("PrivateChat failed err=%v", err) + } + } + } + } + + //构建新的结构 + var chats QueryChatMessageData + chats.Message = message + chats.Uuid = uuid + chats.Chattime = int(time.Now().Unix()) + name, head, sex, err := mysql.QueryNameAndHead(uuid) + if err != nil { + logger.Error("PrivateChat err=%v", err) + } + chats.Headurl = head + chats.Nickname = name + chats.Sex = sex + + savestr, err := json.Marshal(&chats) + if err != nil { + logger.Error("PrivateChat err=%v", err) + return 1, "json failed" + } + + err = redishandler.GetRedisClient().LPush(rkey, string(savestr)) + if err != nil { + logger.Error("PrivateChat err=%v", err) + return 2, "redis failed" + } + + //存入自己的聊天记录 + rkey = redis.USER_CHAT_PRIVATE_INFO_KEY + ":" + strconv.Itoa(uuid) + ":" + strconv.Itoa(taruid) + length, err = redishandler.GetRedisClient().LLen(rkey) + if err == nil { + if length >= CHATLIMITNUM { + //需要先把多余的聊天记录删除 + delcnt := length - CHATLIMITNUM + for i := 0; i < delcnt; i++ { + _, err = redishandler.GetRedisClient().RPop(rkey) + if err != nil { + logger.Error("PrivateChat failed err=%v", err) + } + } + } + } + + err = redishandler.GetRedisClient().LPush(rkey, string(savestr)) + if err != nil { + logger.Error("PrivateChat err=%v", err) + return 2, "redis failed" + } + return 0, "" +} diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index b54f479..277cf5e 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -96,11 +96,35 @@ func startServerHttpServe() { http.HandleFunc("/catcafe/chat/queryNewMessage", queryNewMessage) //查询红点请求 http.HandleFunc("/catcafe/chat/queryBrifeMessage", queryBrifeMessage) //获取聊天页签请求 http.HandleFunc("/catcafe/chat/queryChatMessage", queryChatMessage) //获取详细聊天信息 + http.HandleFunc("/catcafe/chat/unlockEmj", UnlockEmj) //获取详细聊天信息 + http.HandleFunc("/catcafe/chat/doChat", DoChat) //请求聊天 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) } +func DoChat(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("DoChat , body:%v", s) + + HandleDoChat(w, s) +} + +func UnlockEmj(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("UnlockEmj , body:%v", s) + + HandleUnlockEmj(w, s) +} + func queryChatMessage(w http.ResponseWriter, r *http.Request) { result, _ := ioutil.ReadAll(r.Body) diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 8a4d73b..f9d16d9 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -271,6 +271,121 @@ func HandleQueryInvite(w http.ResponseWriter, data string) { fmt.Fprint(w, string(respstr)) } +func HandleDoChat(w http.ResponseWriter, data string) { + + SetHeader(w) + var resp DoChatResp + resp.Status = "true" + var rdata DoChatReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleDoChat json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + //需要验证敏感词 + msgtoken := GetAccessToken() + msgurl := URL_WEIXINMSG_CHECK + "?access_token=" + msgtoken + var check MsgCheckDesc + check.Content = rdata.Message + bys, err := json.Marshal(&check) + if err != nil { + logger.Error("HandleDoChat json failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + body := bytes.NewBuffer(bys) + res, err := http.Post(msgurl, "application/json;charset=utf-8", body) + if err != nil { + logger.Error(" HandleDoChat ERROR_HTTPPOSTFAILED err=%v", err) + resp.Result.Code = ERROR_HTTPPOSTFAILED + return + } + + result, _ := ioutil.ReadAll(res.Body) + defer res.Body.Close() + + var msgresp MsgCheckResp + _ = json.Unmarshal(result, &msgresp) + + if msgresp.Errcode != 0 { + resp.Result.Code = msgresp.Errcode + resp.Result.Data = msgresp.Errmsg + break + } + + if rdata.Ctype == 0 { + resp.Result.Code, resp.Result.Data = WorldChat(rdata.Message, rdata.Uuid) + } else if rdata.Ctype == 1 { + resp.Result.Code, resp.Result.Data = TeamChat(rdata.Message, rdata.Uuid) + } else if rdata.Ctype == 2 { + resp.Result.Code, resp.Result.Data = PrivateChat(rdata.Message, rdata.Uuid, rdata.Taruuid) + } else { + logger.Error("HandleDoChat failed err ctypr") + resp.Result.Code = ERROR_CHATPARAMFAILED + resp.Result.Data = "ctypr failed" + break + } + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandleUnlockEmj(w http.ResponseWriter, data string) { + + SetHeader(w) + var resp UnlockEmjResp + resp.Status = "true" + var rdata UnlockEmjReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleUnlockEmj json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + if rdata.Pos < 0 { + logger.Error("HandleUnlockEmj param failed=%v", rdata) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + emjs := GetChatEmojInfo(rdata.Uuid) + if emjs == nil { + logger.Error("HandleUnlockEmj redis failed=%v", rdata) + resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED + break + } + + if rdata.Pos > len(emjs.Emojinfo)-1 { + logger.Error("HandleUnlockEmj param failed=%v", rdata) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + emjs.Emojinfo[rdata.Pos] = 1 + err = SaveChatEmojInfo(rdata.Uuid, emjs) + if err != nil { + logger.Error("HandleUnlockEmj redis failed=%v", rdata) + resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED + break + } + resp.Result.Data.Emjinfo = append(resp.Result.Data.Emjinfo, emjs.Emojinfo...) + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + func HandlequeryChatMessage(w http.ResponseWriter, data string) { SetHeader(w) @@ -331,7 +446,9 @@ func HandlequeryBrifeMessage(w http.ResponseWriter, data string) { //先查询表情信息 emjs := GetChatEmojInfo(rdata.Uuid) - resp.Result.Data.Emojinfo = append(resp.Result.Data.Emojinfo, emjs...) + if emjs != nil { + resp.Result.Data.Emojinfo = append(resp.Result.Data.Emojinfo, emjs.Emojinfo...) + } //世界频道 var world QueryBrifeMessageData @@ -1425,8 +1542,8 @@ func HandleTextCheck(w http.ResponseWriter, data string) { var msgresp MsgCheckResp _ = json.Unmarshal(result, &msgresp) - code, _ := strconv.Atoi(msgresp.Errcode) - resp.Result.Code = code + //code, _ := strconv.Atoi(msgresp.Errcode) + resp.Result.Code = msgresp.Errcode resp.Result.Data = msgresp.Errmsg resp.Result.Code = ERROR_OK diff --git a/src/common/redis/redis.go b/src/common/redis/redis.go index 5defd5e..908069c 100644 --- a/src/common/redis/redis.go +++ b/src/common/redis/redis.go @@ -324,6 +324,16 @@ func (client *RedisClient) LPop(listName string) (string, error) { return value, err } +func (client *RedisClient) RPop(listName string) (string, error) { + conn := client.m_pool.Get() + defer conn.Close() + value, err := redis.String(conn.Do("RPOP", listName)) + if err != nil { + //fmt.Println("LPop redis get failed:", err) + } + return value, err +} + func (client *RedisClient) LRem(listName string, count int, value string) error { conn := client.m_pool.Get() defer conn.Close() @@ -345,6 +355,16 @@ func (client *RedisClient) RPush(listName string, element string) error { return err } +func (client *RedisClient) LPush(listName string, element string) error { + conn := client.m_pool.Get() + defer conn.Close() + _, err := redis.Int(conn.Do("LPUSH", listName, element)) + if err != nil { + //fmt.Println("RPush redis get failed:", err) + } + return err +} + func (client *RedisClient) LLen(listName string) (int, error) { conn := client.m_pool.Get() defer conn.Close() diff --git a/src/mysql/dbmysql.go b/src/mysql/dbmysql.go index b60b908..d8bd7cb 100644 --- a/src/mysql/dbmysql.go +++ b/src/mysql/dbmysql.go @@ -14,13 +14,13 @@ import ( ) var ( - m_game_db *sql.DB + m_game_db *sql.DB ) type QuerInviteDesc struct { - Uuid int - NickName string - HeadUrl string + Uuid int + NickName string + HeadUrl string IsFecthed int } @@ -55,7 +55,7 @@ func ExcuteCmd(cmd string) error { return err } -func TestClearData(uid int) (int,error) { +func TestClearData(uid int) (int, error) { cmd := fmt.Sprintf("select coin from b_user_ext_04 where user_id=%d", uid) rows, err := m_game_db.Query(cmd) @@ -64,52 +64,51 @@ func TestClearData(uid int) (int,error) { } if err != nil { logger.Notic("TestClearData mysql select error:%v", err) - return 0,err + return 0, err } - var value int for rows.Next() { err = rows.Scan(&value) if err != nil { logger.Notic("TestClearData mysql handle result error:%v", err) - return 0,err + return 0, err } - logger.Info("TestClearData coin=%v",value) + logger.Info("TestClearData coin=%v", value) break } - return value,nil + return value, nil } -func DoAddGold(uuid,gold,love int) error { - for i:=0;i<10;i++ { +func DoAddGold(uuid, gold, love int) error { + for i := 0; i < 10; i++ { tablename := "b_user_ext_0" + strconv.Itoa(i) cmd := "update " + tablename + " set coin = " + strconv.Itoa(gold) + " where user_id= " + strconv.Itoa(uuid) err := ExcuteCmd(cmd) if err != nil { - logger.Error("DoAddGold err=%v,cmd=%v",err,cmd) + logger.Error("DoAddGold err=%v,cmd=%v", err, cmd) return err } cmd = "update " + tablename + " set love_exp = " + strconv.Itoa(love) + " where user_id= " + strconv.Itoa(uuid) err = ExcuteCmd(cmd) if err != nil { - logger.Error("DoAddGold err=%v,cmd=%v",err,cmd) + logger.Error("DoAddGold err=%v,cmd=%v", err, cmd) return err } } return nil } -func DoClearData(uuid int) error{ +func DoClearData(uuid int) error { //先删除十张分表的数据 - for i:=0;i<10;i++ { + for i := 0; i < 10; i++ { tablename := "b_base_data_0" + strconv.Itoa(i) cmd := "DELETE from " + tablename + " where data_uid= " + strconv.Itoa(uuid) err := ExcuteCmd(cmd) if err != nil { - logger.Error("DoClearData err=%v,cmd=%v",err,cmd) + logger.Error("DoClearData err=%v,cmd=%v", err, cmd) return err } } @@ -117,12 +116,10 @@ func DoClearData(uuid int) error{ } - - -func QueryAllData(f *os.File) error{ +func QueryAllData(f *os.File) error { //先查询十张分表的数据 - for i:=0;i<10;i++ { + for i := 0; i < 10; i++ { tablename := "b_user_ext_0" + strconv.Itoa(i) cmd := "SELECT user_id,lv,exp,login_time from " + tablename rows, err := m_game_db.Query(cmd) @@ -140,7 +137,7 @@ func QueryAllData(f *os.File) error{ Ulv := 0 Exp := 0 LoginTime := 0 - err = rows.Scan(&Uid, &Ulv, &Exp,&LoginTime) //不scan会导致连接不释放 + err = rows.Scan(&Uid, &Ulv, &Exp, &LoginTime) //不scan会导致连接不释放 if err != nil { logger.Error("Scan failed,err:%v", err) return err @@ -154,10 +151,10 @@ func QueryAllData(f *os.File) error{ tm := time.Unix(int64(LoginTime), 0) //fmt.Println(tm.Format("2006-01-02 15:04:05")) str := strconv.Itoa(Uid) + " " + strconv.Itoa(Ulv) + " " + strconv.Itoa(Exp) + " " + tm.Format("2006-01-02 15:04:05") + "\n" - _,err = f.WriteString(str) + _, err = f.WriteString(str) //logger.Info("ddt str=%v",str) if err != nil { - logger.Error("WRITETOFILEFAILED ERR=%v",err) + logger.Error("WRITETOFILEFAILED ERR=%v", err) return err } //fmt.Fprintln(w, str) @@ -168,42 +165,39 @@ func QueryAllData(f *os.File) error{ } - - - -func QueryInvite(uuid int) ([]QuerInviteDesc,error){ +func QueryInvite(uuid int) ([]QuerInviteDesc, error) { var rtslice []QuerInviteDesc //首先取出邀请关系id rkey := redis.USER_INVITEREWARD_FETCH_REWARD + ":" + strconv.Itoa(uuid) - vv,err := redishandler.GetRedisClient().HGetAllKeys(rkey) + vv, err := redishandler.GetRedisClient().HGetAllKeys(rkey) if err != nil { - logger.Error("QueryInvite err=%v",err) - return nil,err + logger.Error("QueryInvite err=%v", err) + return nil, err } - for _,val := range vv { + for _, val := range vv { var tmp QuerInviteDesc bytestr := string(val.([]byte)) - bytenum,_ := strconv.Atoi(bytestr) - tmp.Uuid =bytenum - val,err :=redishandler.GetRedisClient().HGet(rkey,bytestr) + bytenum, _ := strconv.Atoi(bytestr) + tmp.Uuid = bytenum + val, err := redishandler.GetRedisClient().HGet(rkey, bytestr) if err != nil { tmp.IsFecthed = 1 - logger.Error("QueryInvite failed err=%v",err) + logger.Error("QueryInvite failed err=%v", err) continue } - stat,_ := strconv.Atoi(val) + stat, _ := strconv.Atoi(val) tmp.IsFecthed = stat - rtslice = append(rtslice,tmp) + rtslice = append(rtslice, tmp) } //需要查询对应的数据 - for k,val := range rtslice { - for i:=0;i<10;i++ { + for k, val := range rtslice { + for i := 0; i < 10; i++ { tablename := "b_user_ext_0" + strconv.Itoa(i) cmd := "SELECT nickname,avatar_url from " + tablename + " where user_id= " + strconv.Itoa(val.Uuid) rows, err := m_game_db.Query(cmd) @@ -229,15 +223,16 @@ func QueryInvite(uuid int) ([]QuerInviteDesc,error){ } } - return rtslice,nil + return rtslice, nil } -func QueryNameAndHead(uuid int) (string,string,error) { +func QueryNameAndHead(uuid int) (string, string, int, error) { var nickname string var headurl string - for i:=0;i<10;i++ { + var gender int + for i := 0; i < 10; i++ { tablename := "b_user_ext_0" + strconv.Itoa(i) - cmd := "SELECT nickname,avatar_url from " + tablename + " where user_id= " + strconv.Itoa(uuid) + cmd := "SELECT nickname,avatar_url,gender from " + tablename + " where user_id= " + strconv.Itoa(uuid) rows, err := m_game_db.Query(cmd) defer func() { if rows != nil { @@ -247,17 +242,17 @@ func QueryNameAndHead(uuid int) (string,string,error) { if err != nil { logger.Error("Query failed,err:%v", err) - return "","",err + return "", "", 1, err } for rows.Next() { - err = rows.Scan(&nickname, &headurl) //不scan会导致连接不释放 + err = rows.Scan(&nickname, &headurl, &gender) //不scan会导致连接不释放 if err != nil { logger.Error("Scan failed,err:%v", err) - return "","",err + return "", "", 1, err } } } - return nickname,headurl,nil -} \ No newline at end of file + return nickname, headurl, gender, nil +} -- libgit2 0.21.0