Commit 5dfa463a392e96b8103d1683927a72e06c1cd764
1 parent
6e0d8bcb
Exists in
master
提交聊天相关接口
Showing
7 changed files
with
441 additions
and
69 deletions
Show diff stats
src/HttpServer/logic/constdef.go
| 1 | package logic | 1 | package logic |
| 2 | 2 | ||
| 3 | var ( | 3 | var ( |
| 4 | - WETCHATAPPID="wx572a2a5ec4538f33" | 4 | + WETCHATAPPID = "wx572a2a5ec4538f33" |
| 5 | WETCHATSERCRT = "b31e2e7406af88fe7395cd178bdb64fc" | 5 | WETCHATSERCRT = "b31e2e7406af88fe7395cd178bdb64fc" |
| 6 | ) | 6 | ) |
| 7 | 7 | ||
| 8 | const ( | 8 | const ( |
| 9 | - ENV_ENUM = 100 | ||
| 10 | - LBASE64 = 1 | ||
| 11 | - RESURL = "https://pck2d.miso-lab.com/" | 9 | + ENV_ENUM = 100 |
| 10 | + LBASE64 = 1 | ||
| 11 | + CHATLIMITNUM = 50 //聊天记录保存数量 | ||
| 12 | + RESURL = "https://pck2d.miso-lab.com/" | ||
| 12 | VERSION_CONFIG = "version/v1.9.json" | 13 | VERSION_CONFIG = "version/v1.9.json" |
| 13 | ) | 14 | ) |
| 14 | 15 | ||
| 15 | const ( | 16 | const ( |
| 16 | - FRIEND_MAX_NUM = 50 //好友人数上限 | ||
| 17 | - FRIEND_APPLY_LIMIT = 50 //好友申请当日上限 | ||
| 18 | - FRIEND_APPROVE_LIMIT = 50 //好友批准当日上限 | ||
| 19 | - FRIEND_RECOMMAND_NUM = 3 //推荐好友数量 | ||
| 20 | - TEAM_MAXNUM = 4 //队伍最大人数 | ||
| 21 | -) | ||
| 22 | \ No newline at end of file | 17 | \ No newline at end of file |
| 18 | + FRIEND_MAX_NUM = 50 //好友人数上限 | ||
| 19 | + FRIEND_APPLY_LIMIT = 50 //好友申请当日上限 | ||
| 20 | + FRIEND_APPROVE_LIMIT = 50 //好友批准当日上限 | ||
| 21 | + FRIEND_RECOMMAND_NUM = 3 //推荐好友数量 | ||
| 22 | + TEAM_MAXNUM = 4 //队伍最大人数 | ||
| 23 | +) |
src/HttpServer/logic/datadef.go
| @@ -201,6 +201,37 @@ type QueryNewMessageResp struct { | @@ -201,6 +201,37 @@ type QueryNewMessageResp struct { | ||
| 201 | Result QueryNewMessageResult `json:"result"` | 201 | Result QueryNewMessageResult `json:"result"` |
| 202 | } | 202 | } |
| 203 | 203 | ||
| 204 | +type UnlockEmjReq struct { | ||
| 205 | + Uuid int `json:"uuid"` | ||
| 206 | + Pos int `json:"pos"` | ||
| 207 | +} | ||
| 208 | + | ||
| 209 | +type DoChatReq struct { | ||
| 210 | + Uuid int `json:"uuid"` | ||
| 211 | + Ctype int `json:"ctype"` | ||
| 212 | + Taruuid int `json:"taruuid"` | ||
| 213 | + Message string `json:"message"` | ||
| 214 | +} | ||
| 215 | + | ||
| 216 | +type DoChatResp struct { | ||
| 217 | + Status string `json:"status"` | ||
| 218 | + Result CommonResult `json:"result"` | ||
| 219 | +} | ||
| 220 | + | ||
| 221 | +type UnlockEmjDesc struct { | ||
| 222 | + Emjinfo []int `json:"emjinfo"` | ||
| 223 | +} | ||
| 224 | + | ||
| 225 | +type UnlockEmjResult struct { | ||
| 226 | + Code int `json:"code"` | ||
| 227 | + Data UnlockEmjDesc `json:"data"` | ||
| 228 | +} | ||
| 229 | + | ||
| 230 | +type UnlockEmjResp struct { | ||
| 231 | + Status string `json:"status"` | ||
| 232 | + Result UnlockEmjResult `json:"result"` | ||
| 233 | +} | ||
| 234 | + | ||
| 204 | type InviteWorkReq struct { | 235 | type InviteWorkReq struct { |
| 205 | Uuid int `json:"uuid"` | 236 | Uuid int `json:"uuid"` |
| 206 | } | 237 | } |
| @@ -372,7 +403,7 @@ type MsgCheckDesc struct { | @@ -372,7 +403,7 @@ type MsgCheckDesc struct { | ||
| 372 | } | 403 | } |
| 373 | 404 | ||
| 374 | type MsgCheckResp struct { | 405 | type MsgCheckResp struct { |
| 375 | - Errcode string `json:"errcode"` | 406 | + Errcode int `json:"errcode"` |
| 376 | Errmsg string `json:"errmsg"` | 407 | Errmsg string `json:"errmsg"` |
| 377 | } | 408 | } |
| 378 | 409 |
src/HttpServer/logic/function.go
| @@ -841,7 +841,7 @@ func GetdagongList(uuid int) (*WorkList, []InviteWorkOffDesc, error) { | @@ -841,7 +841,7 @@ func GetdagongList(uuid int) (*WorkList, []InviteWorkOffDesc, error) { | ||
| 841 | //加入打工列表 | 841 | //加入打工列表 |
| 842 | func AddDagongList(uuid int, masteruuid int, list WorkList) error { | 842 | func AddDagongList(uuid int, masteruuid int, list WorkList) error { |
| 843 | 843 | ||
| 844 | - nickname, headurl, err := mysql.QueryNameAndHead(uuid) | 844 | + nickname, headurl, _, err := mysql.QueryNameAndHead(uuid) |
| 845 | if err != nil { | 845 | if err != nil { |
| 846 | logger.Error("AddDagongList err=%v", err) | 846 | logger.Error("AddDagongList err=%v", err) |
| 847 | return err | 847 | return err |
| @@ -886,17 +886,45 @@ func QueryUserTeamId(uuid int) (int, error) { | @@ -886,17 +886,45 @@ func QueryUserTeamId(uuid int) (int, error) { | ||
| 886 | return tmp.Team_id, nil | 886 | return tmp.Team_id, nil |
| 887 | } | 887 | } |
| 888 | 888 | ||
| 889 | -func GetChatEmojInfo(uuid int) []int { | 889 | +func GetChatEmojInfo(uuid int) *EmojunlockInfo { |
| 890 | var tmp EmojunlockInfo | 890 | var tmp EmojunlockInfo |
| 891 | vv, err := redishandler.GetRedisClient().HGet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid)) | 891 | vv, err := redishandler.GetRedisClient().HGet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid)) |
| 892 | if err != nil { | 892 | if err != nil { |
| 893 | - return nil | 893 | + //return nil |
| 894 | + //如果还没有则做一个初始化 | ||
| 895 | + tmp.Emojinfo = append(tmp.Emojinfo, 0) | ||
| 896 | + tmp.Emojinfo = append(tmp.Emojinfo, 0) | ||
| 897 | + tmp.Emojinfo = append(tmp.Emojinfo, 0) | ||
| 898 | + tmp.Emojinfo = append(tmp.Emojinfo, 0) | ||
| 899 | + savestr, err := json.Marshal(&tmp) | ||
| 900 | + if err != nil { | ||
| 901 | + logger.Error("GetChatEmojInfo err=%v", err) | ||
| 902 | + } | ||
| 903 | + err = redishandler.GetRedisClient().HSet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid), string(savestr)) | ||
| 904 | + if err != nil { | ||
| 905 | + logger.Error("GetChatEmojInfo err=%v", err) | ||
| 906 | + } | ||
| 907 | + return &tmp | ||
| 894 | } | 908 | } |
| 895 | err = json.Unmarshal([]byte(vv), &tmp) | 909 | err = json.Unmarshal([]byte(vv), &tmp) |
| 896 | if err != nil { | 910 | if err != nil { |
| 897 | return nil | 911 | return nil |
| 898 | } | 912 | } |
| 899 | - return tmp.Emojinfo | 913 | + return &tmp |
| 914 | +} | ||
| 915 | + | ||
| 916 | +func SaveChatEmojInfo(uuid int, save *EmojunlockInfo) error { | ||
| 917 | + savestr, err := json.Marshal(save) | ||
| 918 | + if err != nil { | ||
| 919 | + logger.Error("SaveChatEmojInfo err=%v") | ||
| 920 | + return err | ||
| 921 | + } | ||
| 922 | + err = redishandler.GetRedisClient().HSet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid), string(savestr)) | ||
| 923 | + if err != nil { | ||
| 924 | + logger.Error("SaveChatEmojInfo err=%v", err) | ||
| 925 | + return err | ||
| 926 | + } | ||
| 927 | + return nil | ||
| 900 | } | 928 | } |
| 901 | 929 | ||
| 902 | func CheckTeamHasNewMessage(uuid int) (bool, error) { | 930 | func CheckTeamHasNewMessage(uuid int) (bool, error) { |
| @@ -976,7 +1004,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { | @@ -976,7 +1004,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { | ||
| 976 | tmp.Uuid = val | 1004 | tmp.Uuid = val |
| 977 | tmp.Isnew = 1 | 1005 | tmp.Isnew = 1 |
| 978 | tmp.Ctype = 2 | 1006 | tmp.Ctype = 2 |
| 979 | - heads, names, err := mysql.QueryNameAndHead(val) | 1007 | + heads, names, _, err := mysql.QueryNameAndHead(val) |
| 980 | if err != nil { | 1008 | if err != nil { |
| 981 | logger.Error("GetPrivateBriefList err=%v", err) | 1009 | logger.Error("GetPrivateBriefList err=%v", err) |
| 982 | } | 1010 | } |
| @@ -998,7 +1026,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { | @@ -998,7 +1026,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { | ||
| 998 | tmp.Uuid = val | 1026 | tmp.Uuid = val |
| 999 | tmp.Isnew = 0 | 1027 | tmp.Isnew = 0 |
| 1000 | tmp.Ctype = 2 | 1028 | tmp.Ctype = 2 |
| 1001 | - heads, names, err := mysql.QueryNameAndHead(val) | 1029 | + heads, names, _, err := mysql.QueryNameAndHead(val) |
| 1002 | if err != nil { | 1030 | if err != nil { |
| 1003 | logger.Error("GetPrivateBriefList err=%v", err) | 1031 | logger.Error("GetPrivateBriefList err=%v", err) |
| 1004 | } | 1032 | } |
| @@ -1119,3 +1147,159 @@ func GetPrivateChatMessage(uuid, taduid int) []QueryChatMessageData { | @@ -1119,3 +1147,159 @@ func GetPrivateChatMessage(uuid, taduid int) []QueryChatMessageData { | ||
| 1119 | sort.Sort(rtsl) | 1147 | sort.Sort(rtsl) |
| 1120 | return rtsl | 1148 | return rtsl |
| 1121 | } | 1149 | } |
| 1150 | + | ||
| 1151 | +func WorldChat(message string, uuid int) (int, string) { | ||
| 1152 | + length, err := redishandler.GetRedisClient().LLen(redis.WORLD_CHAT_INFO_KEY) | ||
| 1153 | + if err == nil { | ||
| 1154 | + if length >= CHATLIMITNUM { | ||
| 1155 | + //需要先把多余的聊天记录删除 | ||
| 1156 | + delcnt := length - CHATLIMITNUM | ||
| 1157 | + for i := 0; i < delcnt; i++ { | ||
| 1158 | + _, err = redishandler.GetRedisClient().RPop(redis.WORLD_CHAT_INFO_KEY) | ||
| 1159 | + if err != nil { | ||
| 1160 | + logger.Error("WorldChat failed err=%v", err) | ||
| 1161 | + } | ||
| 1162 | + } | ||
| 1163 | + } | ||
| 1164 | + } | ||
| 1165 | + | ||
| 1166 | + //构建新的结构 | ||
| 1167 | + var chats QueryChatMessageData | ||
| 1168 | + chats.Message = message | ||
| 1169 | + chats.Uuid = uuid | ||
| 1170 | + chats.Chattime = int(time.Now().Unix()) | ||
| 1171 | + name, head, sex, err := mysql.QueryNameAndHead(uuid) | ||
| 1172 | + if err != nil { | ||
| 1173 | + logger.Error("WorldChat err=%v", err) | ||
| 1174 | + } | ||
| 1175 | + chats.Headurl = head | ||
| 1176 | + chats.Nickname = name | ||
| 1177 | + chats.Sex = sex | ||
| 1178 | + | ||
| 1179 | + savestr, err := json.Marshal(&chats) | ||
| 1180 | + if err != nil { | ||
| 1181 | + logger.Error("WorldChat err=%v", err) | ||
| 1182 | + return 1, "json failed" | ||
| 1183 | + } | ||
| 1184 | + | ||
| 1185 | + err = redishandler.GetRedisClient().LPush(redis.WORLD_CHAT_INFO_KEY, string(savestr)) | ||
| 1186 | + if err != nil { | ||
| 1187 | + logger.Error("WorldChat err=%v", err) | ||
| 1188 | + return 2, "redis failed" | ||
| 1189 | + } | ||
| 1190 | + return 0, "success" | ||
| 1191 | +} | ||
| 1192 | + | ||
| 1193 | +func TeamChat(message string, uuid int) (int, string) { | ||
| 1194 | + tid, err := QueryUserTeamId(uuid) | ||
| 1195 | + if err != nil { | ||
| 1196 | + logger.Error("TeamChat err=%v", err) | ||
| 1197 | + return 1, "getteamid failed" | ||
| 1198 | + } | ||
| 1199 | + rkey := redis.USER_CHAT_TEAM_INFO_KEY + ":" + strconv.Itoa(tid) | ||
| 1200 | + length, err := redishandler.GetRedisClient().LLen(rkey) | ||
| 1201 | + if err == nil { | ||
| 1202 | + if length >= CHATLIMITNUM { | ||
| 1203 | + //需要先把多余的聊天记录删除 | ||
| 1204 | + delcnt := length - CHATLIMITNUM | ||
| 1205 | + for i := 0; i < delcnt; i++ { | ||
| 1206 | + _, err = redishandler.GetRedisClient().RPop(rkey) | ||
| 1207 | + if err != nil { | ||
| 1208 | + logger.Error("TeamChat failed err=%v", err) | ||
| 1209 | + } | ||
| 1210 | + } | ||
| 1211 | + } | ||
| 1212 | + } | ||
| 1213 | + | ||
| 1214 | + //构建新的结构 | ||
| 1215 | + var chats QueryChatMessageData | ||
| 1216 | + chats.Message = message | ||
| 1217 | + chats.Uuid = uuid | ||
| 1218 | + chats.Chattime = int(time.Now().Unix()) | ||
| 1219 | + name, head, sex, err := mysql.QueryNameAndHead(uuid) | ||
| 1220 | + if err != nil { | ||
| 1221 | + logger.Error("TeamChat err=%v", err) | ||
| 1222 | + } | ||
| 1223 | + chats.Headurl = head | ||
| 1224 | + chats.Nickname = name | ||
| 1225 | + chats.Sex = sex | ||
| 1226 | + | ||
| 1227 | + savestr, err := json.Marshal(&chats) | ||
| 1228 | + if err != nil { | ||
| 1229 | + logger.Error("TeamChat err=%v", err) | ||
| 1230 | + return 1, "json failed" | ||
| 1231 | + } | ||
| 1232 | + | ||
| 1233 | + err = redishandler.GetRedisClient().LPush(rkey, string(savestr)) | ||
| 1234 | + if err != nil { | ||
| 1235 | + logger.Error("TeamChat err=%v", err) | ||
| 1236 | + return 2, "redis failed" | ||
| 1237 | + } | ||
| 1238 | + return 0, "" | ||
| 1239 | +} | ||
| 1240 | + | ||
| 1241 | +func PrivateChat(message string, uuid int, taruid int) (int, string) { | ||
| 1242 | + //存入待收人的列表 | ||
| 1243 | + rkey := redis.USER_CHAT_PRIVATE_INFO_KEY + ":" + strconv.Itoa(taruid) + ":" + strconv.Itoa(uuid) | ||
| 1244 | + length, err := redishandler.GetRedisClient().LLen(rkey) | ||
| 1245 | + if err == nil { | ||
| 1246 | + if length >= CHATLIMITNUM { | ||
| 1247 | + //需要先把多余的聊天记录删除 | ||
| 1248 | + delcnt := length - CHATLIMITNUM | ||
| 1249 | + for i := 0; i < delcnt; i++ { | ||
| 1250 | + _, err = redishandler.GetRedisClient().RPop(rkey) | ||
| 1251 | + if err != nil { | ||
| 1252 | + logger.Error("PrivateChat failed err=%v", err) | ||
| 1253 | + } | ||
| 1254 | + } | ||
| 1255 | + } | ||
| 1256 | + } | ||
| 1257 | + | ||
| 1258 | + //构建新的结构 | ||
| 1259 | + var chats QueryChatMessageData | ||
| 1260 | + chats.Message = message | ||
| 1261 | + chats.Uuid = uuid | ||
| 1262 | + chats.Chattime = int(time.Now().Unix()) | ||
| 1263 | + name, head, sex, err := mysql.QueryNameAndHead(uuid) | ||
| 1264 | + if err != nil { | ||
| 1265 | + logger.Error("PrivateChat err=%v", err) | ||
| 1266 | + } | ||
| 1267 | + chats.Headurl = head | ||
| 1268 | + chats.Nickname = name | ||
| 1269 | + chats.Sex = sex | ||
| 1270 | + | ||
| 1271 | + savestr, err := json.Marshal(&chats) | ||
| 1272 | + if err != nil { | ||
| 1273 | + logger.Error("PrivateChat err=%v", err) | ||
| 1274 | + return 1, "json failed" | ||
| 1275 | + } | ||
| 1276 | + | ||
| 1277 | + err = redishandler.GetRedisClient().LPush(rkey, string(savestr)) | ||
| 1278 | + if err != nil { | ||
| 1279 | + logger.Error("PrivateChat err=%v", err) | ||
| 1280 | + return 2, "redis failed" | ||
| 1281 | + } | ||
| 1282 | + | ||
| 1283 | + //存入自己的聊天记录 | ||
| 1284 | + rkey = redis.USER_CHAT_PRIVATE_INFO_KEY + ":" + strconv.Itoa(uuid) + ":" + strconv.Itoa(taruid) | ||
| 1285 | + length, err = redishandler.GetRedisClient().LLen(rkey) | ||
| 1286 | + if err == nil { | ||
| 1287 | + if length >= CHATLIMITNUM { | ||
| 1288 | + //需要先把多余的聊天记录删除 | ||
| 1289 | + delcnt := length - CHATLIMITNUM | ||
| 1290 | + for i := 0; i < delcnt; i++ { | ||
| 1291 | + _, err = redishandler.GetRedisClient().RPop(rkey) | ||
| 1292 | + if err != nil { | ||
| 1293 | + logger.Error("PrivateChat failed err=%v", err) | ||
| 1294 | + } | ||
| 1295 | + } | ||
| 1296 | + } | ||
| 1297 | + } | ||
| 1298 | + | ||
| 1299 | + err = redishandler.GetRedisClient().LPush(rkey, string(savestr)) | ||
| 1300 | + if err != nil { | ||
| 1301 | + logger.Error("PrivateChat err=%v", err) | ||
| 1302 | + return 2, "redis failed" | ||
| 1303 | + } | ||
| 1304 | + return 0, "" | ||
| 1305 | +} |
src/HttpServer/logic/httpserver.go
| @@ -96,11 +96,35 @@ func startServerHttpServe() { | @@ -96,11 +96,35 @@ func startServerHttpServe() { | ||
| 96 | http.HandleFunc("/catcafe/chat/queryNewMessage", queryNewMessage) //查询红点请求 | 96 | http.HandleFunc("/catcafe/chat/queryNewMessage", queryNewMessage) //查询红点请求 |
| 97 | http.HandleFunc("/catcafe/chat/queryBrifeMessage", queryBrifeMessage) //获取聊天页签请求 | 97 | http.HandleFunc("/catcafe/chat/queryBrifeMessage", queryBrifeMessage) //获取聊天页签请求 |
| 98 | http.HandleFunc("/catcafe/chat/queryChatMessage", queryChatMessage) //获取详细聊天信息 | 98 | http.HandleFunc("/catcafe/chat/queryChatMessage", queryChatMessage) //获取详细聊天信息 |
| 99 | + http.HandleFunc("/catcafe/chat/unlockEmj", UnlockEmj) //获取详细聊天信息 | ||
| 100 | + http.HandleFunc("/catcafe/chat/doChat", DoChat) //请求聊天 | ||
| 99 | 101 | ||
| 100 | err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) | 102 | err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) |
| 101 | CheckErr(err) | 103 | CheckErr(err) |
| 102 | } | 104 | } |
| 103 | 105 | ||
| 106 | +func DoChat(w http.ResponseWriter, r *http.Request) { | ||
| 107 | + | ||
| 108 | + result, _ := ioutil.ReadAll(r.Body) | ||
| 109 | + r.Body.Close() | ||
| 110 | + | ||
| 111 | + s := string(result) | ||
| 112 | + logger.Info("DoChat , body:%v", s) | ||
| 113 | + | ||
| 114 | + HandleDoChat(w, s) | ||
| 115 | +} | ||
| 116 | + | ||
| 117 | +func UnlockEmj(w http.ResponseWriter, r *http.Request) { | ||
| 118 | + | ||
| 119 | + result, _ := ioutil.ReadAll(r.Body) | ||
| 120 | + r.Body.Close() | ||
| 121 | + | ||
| 122 | + s := string(result) | ||
| 123 | + logger.Info("UnlockEmj , body:%v", s) | ||
| 124 | + | ||
| 125 | + HandleUnlockEmj(w, s) | ||
| 126 | +} | ||
| 127 | + | ||
| 104 | func queryChatMessage(w http.ResponseWriter, r *http.Request) { | 128 | func queryChatMessage(w http.ResponseWriter, r *http.Request) { |
| 105 | 129 | ||
| 106 | result, _ := ioutil.ReadAll(r.Body) | 130 | result, _ := ioutil.ReadAll(r.Body) |
src/HttpServer/logic/logic.go
| @@ -271,6 +271,121 @@ func HandleQueryInvite(w http.ResponseWriter, data string) { | @@ -271,6 +271,121 @@ func HandleQueryInvite(w http.ResponseWriter, data string) { | ||
| 271 | fmt.Fprint(w, string(respstr)) | 271 | fmt.Fprint(w, string(respstr)) |
| 272 | } | 272 | } |
| 273 | 273 | ||
| 274 | +func HandleDoChat(w http.ResponseWriter, data string) { | ||
| 275 | + | ||
| 276 | + SetHeader(w) | ||
| 277 | + var resp DoChatResp | ||
| 278 | + resp.Status = "true" | ||
| 279 | + var rdata DoChatReq | ||
| 280 | + err := json.Unmarshal([]byte(data), &rdata) | ||
| 281 | + for { | ||
| 282 | + if err != nil { | ||
| 283 | + logger.Error("HandleDoChat json unmarshal failed=%v", err) | ||
| 284 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | ||
| 285 | + break | ||
| 286 | + } | ||
| 287 | + | ||
| 288 | + //需要验证敏感词 | ||
| 289 | + msgtoken := GetAccessToken() | ||
| 290 | + msgurl := URL_WEIXINMSG_CHECK + "?access_token=" + msgtoken | ||
| 291 | + var check MsgCheckDesc | ||
| 292 | + check.Content = rdata.Message | ||
| 293 | + bys, err := json.Marshal(&check) | ||
| 294 | + if err != nil { | ||
| 295 | + logger.Error("HandleDoChat json failed=%v", err) | ||
| 296 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | ||
| 297 | + break | ||
| 298 | + } | ||
| 299 | + | ||
| 300 | + body := bytes.NewBuffer(bys) | ||
| 301 | + res, err := http.Post(msgurl, "application/json;charset=utf-8", body) | ||
| 302 | + if err != nil { | ||
| 303 | + logger.Error(" HandleDoChat ERROR_HTTPPOSTFAILED err=%v", err) | ||
| 304 | + resp.Result.Code = ERROR_HTTPPOSTFAILED | ||
| 305 | + return | ||
| 306 | + } | ||
| 307 | + | ||
| 308 | + result, _ := ioutil.ReadAll(res.Body) | ||
| 309 | + defer res.Body.Close() | ||
| 310 | + | ||
| 311 | + var msgresp MsgCheckResp | ||
| 312 | + _ = json.Unmarshal(result, &msgresp) | ||
| 313 | + | ||
| 314 | + if msgresp.Errcode != 0 { | ||
| 315 | + resp.Result.Code = msgresp.Errcode | ||
| 316 | + resp.Result.Data = msgresp.Errmsg | ||
| 317 | + break | ||
| 318 | + } | ||
| 319 | + | ||
| 320 | + if rdata.Ctype == 0 { | ||
| 321 | + resp.Result.Code, resp.Result.Data = WorldChat(rdata.Message, rdata.Uuid) | ||
| 322 | + } else if rdata.Ctype == 1 { | ||
| 323 | + resp.Result.Code, resp.Result.Data = TeamChat(rdata.Message, rdata.Uuid) | ||
| 324 | + } else if rdata.Ctype == 2 { | ||
| 325 | + resp.Result.Code, resp.Result.Data = PrivateChat(rdata.Message, rdata.Uuid, rdata.Taruuid) | ||
| 326 | + } else { | ||
| 327 | + logger.Error("HandleDoChat failed err ctypr") | ||
| 328 | + resp.Result.Code = ERROR_CHATPARAMFAILED | ||
| 329 | + resp.Result.Data = "ctypr failed" | ||
| 330 | + break | ||
| 331 | + } | ||
| 332 | + break | ||
| 333 | + } | ||
| 334 | + | ||
| 335 | + //回包 | ||
| 336 | + respstr, _ := json.Marshal(&resp) | ||
| 337 | + fmt.Fprint(w, string(respstr)) | ||
| 338 | +} | ||
| 339 | + | ||
| 340 | +func HandleUnlockEmj(w http.ResponseWriter, data string) { | ||
| 341 | + | ||
| 342 | + SetHeader(w) | ||
| 343 | + var resp UnlockEmjResp | ||
| 344 | + resp.Status = "true" | ||
| 345 | + var rdata UnlockEmjReq | ||
| 346 | + err := json.Unmarshal([]byte(data), &rdata) | ||
| 347 | + for { | ||
| 348 | + if err != nil { | ||
| 349 | + logger.Error("HandleUnlockEmj json unmarshal failed=%v", err) | ||
| 350 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | ||
| 351 | + break | ||
| 352 | + } | ||
| 353 | + | ||
| 354 | + if rdata.Pos < 0 { | ||
| 355 | + logger.Error("HandleUnlockEmj param failed=%v", rdata) | ||
| 356 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | ||
| 357 | + break | ||
| 358 | + } | ||
| 359 | + | ||
| 360 | + emjs := GetChatEmojInfo(rdata.Uuid) | ||
| 361 | + if emjs == nil { | ||
| 362 | + logger.Error("HandleUnlockEmj redis failed=%v", rdata) | ||
| 363 | + resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED | ||
| 364 | + break | ||
| 365 | + } | ||
| 366 | + | ||
| 367 | + if rdata.Pos > len(emjs.Emojinfo)-1 { | ||
| 368 | + logger.Error("HandleUnlockEmj param failed=%v", rdata) | ||
| 369 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | ||
| 370 | + break | ||
| 371 | + } | ||
| 372 | + | ||
| 373 | + emjs.Emojinfo[rdata.Pos] = 1 | ||
| 374 | + err = SaveChatEmojInfo(rdata.Uuid, emjs) | ||
| 375 | + if err != nil { | ||
| 376 | + logger.Error("HandleUnlockEmj redis failed=%v", rdata) | ||
| 377 | + resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED | ||
| 378 | + break | ||
| 379 | + } | ||
| 380 | + resp.Result.Data.Emjinfo = append(resp.Result.Data.Emjinfo, emjs.Emojinfo...) | ||
| 381 | + break | ||
| 382 | + } | ||
| 383 | + | ||
| 384 | + //回包 | ||
| 385 | + respstr, _ := json.Marshal(&resp) | ||
| 386 | + fmt.Fprint(w, string(respstr)) | ||
| 387 | +} | ||
| 388 | + | ||
| 274 | func HandlequeryChatMessage(w http.ResponseWriter, data string) { | 389 | func HandlequeryChatMessage(w http.ResponseWriter, data string) { |
| 275 | 390 | ||
| 276 | SetHeader(w) | 391 | SetHeader(w) |
| @@ -331,7 +446,9 @@ func HandlequeryBrifeMessage(w http.ResponseWriter, data string) { | @@ -331,7 +446,9 @@ func HandlequeryBrifeMessage(w http.ResponseWriter, data string) { | ||
| 331 | 446 | ||
| 332 | //先查询表情信息 | 447 | //先查询表情信息 |
| 333 | emjs := GetChatEmojInfo(rdata.Uuid) | 448 | emjs := GetChatEmojInfo(rdata.Uuid) |
| 334 | - resp.Result.Data.Emojinfo = append(resp.Result.Data.Emojinfo, emjs...) | 449 | + if emjs != nil { |
| 450 | + resp.Result.Data.Emojinfo = append(resp.Result.Data.Emojinfo, emjs.Emojinfo...) | ||
| 451 | + } | ||
| 335 | 452 | ||
| 336 | //世界频道 | 453 | //世界频道 |
| 337 | var world QueryBrifeMessageData | 454 | var world QueryBrifeMessageData |
| @@ -1425,8 +1542,8 @@ func HandleTextCheck(w http.ResponseWriter, data string) { | @@ -1425,8 +1542,8 @@ func HandleTextCheck(w http.ResponseWriter, data string) { | ||
| 1425 | var msgresp MsgCheckResp | 1542 | var msgresp MsgCheckResp |
| 1426 | _ = json.Unmarshal(result, &msgresp) | 1543 | _ = json.Unmarshal(result, &msgresp) |
| 1427 | 1544 | ||
| 1428 | - code, _ := strconv.Atoi(msgresp.Errcode) | ||
| 1429 | - resp.Result.Code = code | 1545 | + //code, _ := strconv.Atoi(msgresp.Errcode) |
| 1546 | + resp.Result.Code = msgresp.Errcode | ||
| 1430 | resp.Result.Data = msgresp.Errmsg | 1547 | resp.Result.Data = msgresp.Errmsg |
| 1431 | 1548 | ||
| 1432 | resp.Result.Code = ERROR_OK | 1549 | resp.Result.Code = ERROR_OK |
src/common/redis/redis.go
| @@ -324,6 +324,16 @@ func (client *RedisClient) LPop(listName string) (string, error) { | @@ -324,6 +324,16 @@ func (client *RedisClient) LPop(listName string) (string, error) { | ||
| 324 | return value, err | 324 | return value, err |
| 325 | } | 325 | } |
| 326 | 326 | ||
| 327 | +func (client *RedisClient) RPop(listName string) (string, error) { | ||
| 328 | + conn := client.m_pool.Get() | ||
| 329 | + defer conn.Close() | ||
| 330 | + value, err := redis.String(conn.Do("RPOP", listName)) | ||
| 331 | + if err != nil { | ||
| 332 | + //fmt.Println("LPop redis get failed:", err) | ||
| 333 | + } | ||
| 334 | + return value, err | ||
| 335 | +} | ||
| 336 | + | ||
| 327 | func (client *RedisClient) LRem(listName string, count int, value string) error { | 337 | func (client *RedisClient) LRem(listName string, count int, value string) error { |
| 328 | conn := client.m_pool.Get() | 338 | conn := client.m_pool.Get() |
| 329 | defer conn.Close() | 339 | defer conn.Close() |
| @@ -345,6 +355,16 @@ func (client *RedisClient) RPush(listName string, element string) error { | @@ -345,6 +355,16 @@ func (client *RedisClient) RPush(listName string, element string) error { | ||
| 345 | return err | 355 | return err |
| 346 | } | 356 | } |
| 347 | 357 | ||
| 358 | +func (client *RedisClient) LPush(listName string, element string) error { | ||
| 359 | + conn := client.m_pool.Get() | ||
| 360 | + defer conn.Close() | ||
| 361 | + _, err := redis.Int(conn.Do("LPUSH", listName, element)) | ||
| 362 | + if err != nil { | ||
| 363 | + //fmt.Println("RPush redis get failed:", err) | ||
| 364 | + } | ||
| 365 | + return err | ||
| 366 | +} | ||
| 367 | + | ||
| 348 | func (client *RedisClient) LLen(listName string) (int, error) { | 368 | func (client *RedisClient) LLen(listName string) (int, error) { |
| 349 | conn := client.m_pool.Get() | 369 | conn := client.m_pool.Get() |
| 350 | defer conn.Close() | 370 | defer conn.Close() |
src/mysql/dbmysql.go
| @@ -14,13 +14,13 @@ import ( | @@ -14,13 +14,13 @@ import ( | ||
| 14 | ) | 14 | ) |
| 15 | 15 | ||
| 16 | var ( | 16 | var ( |
| 17 | - m_game_db *sql.DB | 17 | + m_game_db *sql.DB |
| 18 | ) | 18 | ) |
| 19 | 19 | ||
| 20 | type QuerInviteDesc struct { | 20 | type QuerInviteDesc struct { |
| 21 | - Uuid int | ||
| 22 | - NickName string | ||
| 23 | - HeadUrl string | 21 | + Uuid int |
| 22 | + NickName string | ||
| 23 | + HeadUrl string | ||
| 24 | IsFecthed int | 24 | IsFecthed int |
| 25 | } | 25 | } |
| 26 | 26 | ||
| @@ -55,7 +55,7 @@ func ExcuteCmd(cmd string) error { | @@ -55,7 +55,7 @@ func ExcuteCmd(cmd string) error { | ||
| 55 | return err | 55 | return err |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | -func TestClearData(uid int) (int,error) { | 58 | +func TestClearData(uid int) (int, error) { |
| 59 | cmd := fmt.Sprintf("select coin from b_user_ext_04 where user_id=%d", uid) | 59 | cmd := fmt.Sprintf("select coin from b_user_ext_04 where user_id=%d", uid) |
| 60 | 60 | ||
| 61 | rows, err := m_game_db.Query(cmd) | 61 | rows, err := m_game_db.Query(cmd) |
| @@ -64,52 +64,51 @@ func TestClearData(uid int) (int,error) { | @@ -64,52 +64,51 @@ func TestClearData(uid int) (int,error) { | ||
| 64 | } | 64 | } |
| 65 | if err != nil { | 65 | if err != nil { |
| 66 | logger.Notic("TestClearData mysql select error:%v", err) | 66 | logger.Notic("TestClearData mysql select error:%v", err) |
| 67 | - return 0,err | 67 | + return 0, err |
| 68 | } | 68 | } |
| 69 | 69 | ||
| 70 | - | ||
| 71 | var value int | 70 | var value int |
| 72 | for rows.Next() { | 71 | for rows.Next() { |
| 73 | 72 | ||
| 74 | err = rows.Scan(&value) | 73 | err = rows.Scan(&value) |
| 75 | if err != nil { | 74 | if err != nil { |
| 76 | logger.Notic("TestClearData mysql handle result error:%v", err) | 75 | logger.Notic("TestClearData mysql handle result error:%v", err) |
| 77 | - return 0,err | 76 | + return 0, err |
| 78 | } | 77 | } |
| 79 | - logger.Info("TestClearData coin=%v",value) | 78 | + logger.Info("TestClearData coin=%v", value) |
| 80 | 79 | ||
| 81 | break | 80 | break |
| 82 | } | 81 | } |
| 83 | - return value,nil | 82 | + return value, nil |
| 84 | } | 83 | } |
| 85 | 84 | ||
| 86 | -func DoAddGold(uuid,gold,love int) error { | ||
| 87 | - for i:=0;i<10;i++ { | 85 | +func DoAddGold(uuid, gold, love int) error { |
| 86 | + for i := 0; i < 10; i++ { | ||
| 88 | tablename := "b_user_ext_0" + strconv.Itoa(i) | 87 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
| 89 | cmd := "update " + tablename + " set coin = " + strconv.Itoa(gold) + " where user_id= " + strconv.Itoa(uuid) | 88 | cmd := "update " + tablename + " set coin = " + strconv.Itoa(gold) + " where user_id= " + strconv.Itoa(uuid) |
| 90 | err := ExcuteCmd(cmd) | 89 | err := ExcuteCmd(cmd) |
| 91 | if err != nil { | 90 | if err != nil { |
| 92 | - logger.Error("DoAddGold err=%v,cmd=%v",err,cmd) | 91 | + logger.Error("DoAddGold err=%v,cmd=%v", err, cmd) |
| 93 | return err | 92 | return err |
| 94 | } | 93 | } |
| 95 | cmd = "update " + tablename + " set love_exp = " + strconv.Itoa(love) + " where user_id= " + strconv.Itoa(uuid) | 94 | cmd = "update " + tablename + " set love_exp = " + strconv.Itoa(love) + " where user_id= " + strconv.Itoa(uuid) |
| 96 | err = ExcuteCmd(cmd) | 95 | err = ExcuteCmd(cmd) |
| 97 | if err != nil { | 96 | if err != nil { |
| 98 | - logger.Error("DoAddGold err=%v,cmd=%v",err,cmd) | 97 | + logger.Error("DoAddGold err=%v,cmd=%v", err, cmd) |
| 99 | return err | 98 | return err |
| 100 | } | 99 | } |
| 101 | } | 100 | } |
| 102 | return nil | 101 | return nil |
| 103 | } | 102 | } |
| 104 | 103 | ||
| 105 | -func DoClearData(uuid int) error{ | 104 | +func DoClearData(uuid int) error { |
| 106 | //先删除十张分表的数据 | 105 | //先删除十张分表的数据 |
| 107 | - for i:=0;i<10;i++ { | 106 | + for i := 0; i < 10; i++ { |
| 108 | tablename := "b_base_data_0" + strconv.Itoa(i) | 107 | tablename := "b_base_data_0" + strconv.Itoa(i) |
| 109 | cmd := "DELETE from " + tablename + " where data_uid= " + strconv.Itoa(uuid) | 108 | cmd := "DELETE from " + tablename + " where data_uid= " + strconv.Itoa(uuid) |
| 110 | err := ExcuteCmd(cmd) | 109 | err := ExcuteCmd(cmd) |
| 111 | if err != nil { | 110 | if err != nil { |
| 112 | - logger.Error("DoClearData err=%v,cmd=%v",err,cmd) | 111 | + logger.Error("DoClearData err=%v,cmd=%v", err, cmd) |
| 113 | return err | 112 | return err |
| 114 | } | 113 | } |
| 115 | } | 114 | } |
| @@ -117,12 +116,10 @@ func DoClearData(uuid int) error{ | @@ -117,12 +116,10 @@ func DoClearData(uuid int) error{ | ||
| 117 | 116 | ||
| 118 | } | 117 | } |
| 119 | 118 | ||
| 120 | - | ||
| 121 | - | ||
| 122 | -func QueryAllData(f *os.File) error{ | 119 | +func QueryAllData(f *os.File) error { |
| 123 | 120 | ||
| 124 | //先查询十张分表的数据 | 121 | //先查询十张分表的数据 |
| 125 | - for i:=0;i<10;i++ { | 122 | + for i := 0; i < 10; i++ { |
| 126 | tablename := "b_user_ext_0" + strconv.Itoa(i) | 123 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
| 127 | cmd := "SELECT user_id,lv,exp,login_time from " + tablename | 124 | cmd := "SELECT user_id,lv,exp,login_time from " + tablename |
| 128 | rows, err := m_game_db.Query(cmd) | 125 | rows, err := m_game_db.Query(cmd) |
| @@ -140,7 +137,7 @@ func QueryAllData(f *os.File) error{ | @@ -140,7 +137,7 @@ func QueryAllData(f *os.File) error{ | ||
| 140 | Ulv := 0 | 137 | Ulv := 0 |
| 141 | Exp := 0 | 138 | Exp := 0 |
| 142 | LoginTime := 0 | 139 | LoginTime := 0 |
| 143 | - err = rows.Scan(&Uid, &Ulv, &Exp,&LoginTime) //不scan会导致连接不释放 | 140 | + err = rows.Scan(&Uid, &Ulv, &Exp, &LoginTime) //不scan会导致连接不释放 |
| 144 | if err != nil { | 141 | if err != nil { |
| 145 | logger.Error("Scan failed,err:%v", err) | 142 | logger.Error("Scan failed,err:%v", err) |
| 146 | return err | 143 | return err |
| @@ -154,10 +151,10 @@ func QueryAllData(f *os.File) error{ | @@ -154,10 +151,10 @@ func QueryAllData(f *os.File) error{ | ||
| 154 | tm := time.Unix(int64(LoginTime), 0) | 151 | tm := time.Unix(int64(LoginTime), 0) |
| 155 | //fmt.Println(tm.Format("2006-01-02 15:04:05")) | 152 | //fmt.Println(tm.Format("2006-01-02 15:04:05")) |
| 156 | str := strconv.Itoa(Uid) + " " + strconv.Itoa(Ulv) + " " + strconv.Itoa(Exp) + " " + tm.Format("2006-01-02 15:04:05") + "\n" | 153 | str := strconv.Itoa(Uid) + " " + strconv.Itoa(Ulv) + " " + strconv.Itoa(Exp) + " " + tm.Format("2006-01-02 15:04:05") + "\n" |
| 157 | - _,err = f.WriteString(str) | 154 | + _, err = f.WriteString(str) |
| 158 | //logger.Info("ddt str=%v",str) | 155 | //logger.Info("ddt str=%v",str) |
| 159 | if err != nil { | 156 | if err != nil { |
| 160 | - logger.Error("WRITETOFILEFAILED ERR=%v",err) | 157 | + logger.Error("WRITETOFILEFAILED ERR=%v", err) |
| 161 | return err | 158 | return err |
| 162 | } | 159 | } |
| 163 | //fmt.Fprintln(w, str) | 160 | //fmt.Fprintln(w, str) |
| @@ -168,42 +165,39 @@ func QueryAllData(f *os.File) error{ | @@ -168,42 +165,39 @@ func QueryAllData(f *os.File) error{ | ||
| 168 | 165 | ||
| 169 | } | 166 | } |
| 170 | 167 | ||
| 171 | - | ||
| 172 | - | ||
| 173 | - | ||
| 174 | -func QueryInvite(uuid int) ([]QuerInviteDesc,error){ | 168 | +func QueryInvite(uuid int) ([]QuerInviteDesc, error) { |
| 175 | var rtslice []QuerInviteDesc | 169 | var rtslice []QuerInviteDesc |
| 176 | 170 | ||
| 177 | //首先取出邀请关系id | 171 | //首先取出邀请关系id |
| 178 | rkey := redis.USER_INVITEREWARD_FETCH_REWARD + ":" + strconv.Itoa(uuid) | 172 | rkey := redis.USER_INVITEREWARD_FETCH_REWARD + ":" + strconv.Itoa(uuid) |
| 179 | - vv,err := redishandler.GetRedisClient().HGetAllKeys(rkey) | 173 | + vv, err := redishandler.GetRedisClient().HGetAllKeys(rkey) |
| 180 | if err != nil { | 174 | if err != nil { |
| 181 | - logger.Error("QueryInvite err=%v",err) | ||
| 182 | - return nil,err | 175 | + logger.Error("QueryInvite err=%v", err) |
| 176 | + return nil, err | ||
| 183 | } | 177 | } |
| 184 | 178 | ||
| 185 | - for _,val := range vv { | 179 | + for _, val := range vv { |
| 186 | var tmp QuerInviteDesc | 180 | var tmp QuerInviteDesc |
| 187 | 181 | ||
| 188 | bytestr := string(val.([]byte)) | 182 | bytestr := string(val.([]byte)) |
| 189 | - bytenum,_ := strconv.Atoi(bytestr) | ||
| 190 | - tmp.Uuid =bytenum | ||
| 191 | - val,err :=redishandler.GetRedisClient().HGet(rkey,bytestr) | 183 | + bytenum, _ := strconv.Atoi(bytestr) |
| 184 | + tmp.Uuid = bytenum | ||
| 185 | + val, err := redishandler.GetRedisClient().HGet(rkey, bytestr) | ||
| 192 | if err != nil { | 186 | if err != nil { |
| 193 | tmp.IsFecthed = 1 | 187 | tmp.IsFecthed = 1 |
| 194 | - logger.Error("QueryInvite failed err=%v",err) | 188 | + logger.Error("QueryInvite failed err=%v", err) |
| 195 | continue | 189 | continue |
| 196 | } | 190 | } |
| 197 | 191 | ||
| 198 | - stat,_ := strconv.Atoi(val) | 192 | + stat, _ := strconv.Atoi(val) |
| 199 | tmp.IsFecthed = stat | 193 | tmp.IsFecthed = stat |
| 200 | 194 | ||
| 201 | - rtslice = append(rtslice,tmp) | 195 | + rtslice = append(rtslice, tmp) |
| 202 | } | 196 | } |
| 203 | 197 | ||
| 204 | //需要查询对应的数据 | 198 | //需要查询对应的数据 |
| 205 | - for k,val := range rtslice { | ||
| 206 | - for i:=0;i<10;i++ { | 199 | + for k, val := range rtslice { |
| 200 | + for i := 0; i < 10; i++ { | ||
| 207 | tablename := "b_user_ext_0" + strconv.Itoa(i) | 201 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
| 208 | cmd := "SELECT nickname,avatar_url from " + tablename + " where user_id= " + strconv.Itoa(val.Uuid) | 202 | cmd := "SELECT nickname,avatar_url from " + tablename + " where user_id= " + strconv.Itoa(val.Uuid) |
| 209 | rows, err := m_game_db.Query(cmd) | 203 | rows, err := m_game_db.Query(cmd) |
| @@ -229,15 +223,16 @@ func QueryInvite(uuid int) ([]QuerInviteDesc,error){ | @@ -229,15 +223,16 @@ func QueryInvite(uuid int) ([]QuerInviteDesc,error){ | ||
| 229 | } | 223 | } |
| 230 | } | 224 | } |
| 231 | 225 | ||
| 232 | - return rtslice,nil | 226 | + return rtslice, nil |
| 233 | } | 227 | } |
| 234 | 228 | ||
| 235 | -func QueryNameAndHead(uuid int) (string,string,error) { | 229 | +func QueryNameAndHead(uuid int) (string, string, int, error) { |
| 236 | var nickname string | 230 | var nickname string |
| 237 | var headurl string | 231 | var headurl string |
| 238 | - for i:=0;i<10;i++ { | 232 | + var gender int |
| 233 | + for i := 0; i < 10; i++ { | ||
| 239 | tablename := "b_user_ext_0" + strconv.Itoa(i) | 234 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
| 240 | - cmd := "SELECT nickname,avatar_url from " + tablename + " where user_id= " + strconv.Itoa(uuid) | 235 | + cmd := "SELECT nickname,avatar_url,gender from " + tablename + " where user_id= " + strconv.Itoa(uuid) |
| 241 | rows, err := m_game_db.Query(cmd) | 236 | rows, err := m_game_db.Query(cmd) |
| 242 | defer func() { | 237 | defer func() { |
| 243 | if rows != nil { | 238 | if rows != nil { |
| @@ -247,17 +242,17 @@ func QueryNameAndHead(uuid int) (string,string,error) { | @@ -247,17 +242,17 @@ func QueryNameAndHead(uuid int) (string,string,error) { | ||
| 247 | 242 | ||
| 248 | if err != nil { | 243 | if err != nil { |
| 249 | logger.Error("Query failed,err:%v", err) | 244 | logger.Error("Query failed,err:%v", err) |
| 250 | - return "","",err | 245 | + return "", "", 1, err |
| 251 | } | 246 | } |
| 252 | for rows.Next() { | 247 | for rows.Next() { |
| 253 | 248 | ||
| 254 | - err = rows.Scan(&nickname, &headurl) //不scan会导致连接不释放 | 249 | + err = rows.Scan(&nickname, &headurl, &gender) //不scan会导致连接不释放 |
| 255 | if err != nil { | 250 | if err != nil { |
| 256 | logger.Error("Scan failed,err:%v", err) | 251 | logger.Error("Scan failed,err:%v", err) |
| 257 | - return "","",err | 252 | + return "", "", 1, err |
| 258 | } | 253 | } |
| 259 | } | 254 | } |
| 260 | } | 255 | } |
| 261 | 256 | ||
| 262 | - return nickname,headurl,nil | ||
| 263 | -} | ||
| 264 | \ No newline at end of file | 257 | \ No newline at end of file |
| 258 | + return nickname, headurl, gender, nil | ||
| 259 | +} |