diff --git a/src/HttpServer/logic/constdef.go b/src/HttpServer/logic/constdef.go index 326799e..d695f8e 100644 --- a/src/HttpServer/logic/constdef.go +++ b/src/HttpServer/logic/constdef.go @@ -5,4 +5,5 @@ const ( FRIEND_MAX_NUM = 50 //好友人数上限 FRIEND_APPLY_LIMIT = 50 //好友申请当日上限 FRIEND_APPROVE_LIMIT = 50 //好友批准当日上限 + FRIEND_RECOMMAND_NUM = 3 //推荐好友数量 ) \ No newline at end of file diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index db05a27..ef72b74 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -468,6 +468,41 @@ type GetAuditListResp struct { } +type GetRecommendListReq struct{ + Token string `json:"token"` +} + +type GetRecommendListInfo struct { + Userid int `json:"userid"` + Nickname string `json:"nickname"` + Avatar_url string `json:"avatar_url"` + Gender int `json:"gender"` + City string `json:"city"` + Hot int `json:"hot"` + Coin int64 `json:"coin"` + Love_exp int `json:"love_exp"` + Bean int `json:"bean"` + Shop_num int `json:"shop_num"` + Cat_num int `json:"cat_num"` + Lv int `json:"lv"` + Exp int `json:"exp"` + Reg_time int `json:"reg_time"` +} + +type GetRecommendListDesc struct { + Recommend_list []GetRecommendListInfo `json:"recommend_list"` +} + +type GetRecommendListResult struct { + Code int `json:"code"` + Data GetRecommendListDesc `json:"data"` +} + +type GetRecommendListResp struct { + Status string `json:"status"` + Result GetRecommendListResult `json:"result"` +} + //********************************************************************************************************** diff --git a/src/HttpServer/logic/errordef.go b/src/HttpServer/logic/errordef.go index 2a1b204..285af72 100644 --- a/src/HttpServer/logic/errordef.go +++ b/src/HttpServer/logic/errordef.go @@ -29,4 +29,5 @@ const ( RROR_FRIENDGETAPPROVELISTFAILED = 24 //获取申请好友列表失败 RROR_FRIENDINAPPROVELISTFAILED = 25 //已经在等待批准列表 ERROR_FRIENDAPPROVELIMIT = 26 //当日批准已达上限 + ERROR_FRIENDGETRECOMMADNFAILED = 27 //获取推荐好友失败 ) \ No newline at end of file diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index 1b0176d..d787b67 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -18,6 +18,7 @@ func SetHeader(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid") } + func (tinfo *TeamInfo) DoAddBuffTimee(btype int,muti int,resp *AddTeamBuffResp) { addtime := 1800*muti index := 0 @@ -532,4 +533,159 @@ func (flist *FriendList) IsInFreiendList(uuid int) bool { } } return false +} + +func SaveCacheRecommandFriendList(uuid int,data *GetRecommendListDesc) { + savestr,err := json.Marshal(data) + if err != nil { + logger.Error("SaveCacheRecommandFriendList err=%v",err) + return + } + err = redishandler.GetRedisClient().HSet(redis.FRIEND_RECOMMANDLIST_KEY,strconv.Itoa(uuid),string(savestr)) + if err != nil { + logger.Error("SaveCacheRecommandFriendList err=%v",err) + return + } +} + +func GetCacheRecommandFriendList(uuid int) (*GetRecommendListDesc,error) { + rt := new(GetRecommendListDesc) + val,err:= redishandler.GetRedisClient().HGet(redis.FRIEND_RECOMMANDLIST_KEY,strconv.Itoa(uuid)) + if err != nil { + logger.Error("GetCacheRecommandFriendList err=%v",err) + return rt,err + } + + err = json.Unmarshal([]byte(val),rt) + if err != nil { + logger.Error("GetCacheRecommandFriendList err=%v",err) + return nil,err + } + + return rt,nil +} + +func DelCacheRecommandFriendList(uuid int) error { + err := redishandler.GetRedisClient().HDel(redis.FRIEND_RECOMMANDLIST_KEY,strconv.Itoa(uuid)) + return err +} + + +//获取推荐好友列表 +func (flist *FriendList)GetRecommandFriendList(uuid,friendnum int) (*GetRecommendListDesc,error) { + + rlist,err := GetCacheRecommandFriendList(uuid) + if err == nil { + //有缓存 ,直接返回 + return rlist,err + } + + selfext,err := GetUserExt(uuid) + if err != nil { + return nil,err + } + selfbasic,err := GetUserBasic(uuid) + if err != nil { + return nil,err + } + + + + var randlist []int //记录随机的几个好友 + var first []int //初步筛选的id列表 + var second []int //第二步 + var third []int + vv,err := redishandler.GetRedisClient().HGetAllValues(redis.USER_EXT_DATA) + if err != nil { + return nil ,err + } + + for _,val := range vv { + one := new(UserExtData) + bytestr := val.([]byte) + err = json.Unmarshal(bytestr, one) + if err == nil { + if selfext.Hot <= one.Hot+500 && selfext.Hot >= one.Hot-500 { + first = append(first,one.User_id) + } + } + if len(randlist) < friendnum { + randlist = append(randlist,one.User_id) + } + } + + applylist,err := GetUserApplyList(uuid) + if err != nil { + logger.Error("GetRecommandFriendList failed err=%v",err) + second = append(second,first...) + }else { + //第二步判断是否已经在申请列表,不再才加入 + for _,val := range first { + if !applylist.InApplyList(val) { + second = append(second,val) + } + } + } + + //第三步判断性别 + for _,val := range second { + if len(third) >= friendnum { + //数量已经满了,直接退出 + break + } + + tmpbasic,err:= GetUserBasic(val) + if err != nil { + continue + } + if tmpbasic.User_gender != selfbasic.User_gender { + third = append(third,val) + } + } + + //最后判断一下数量是否足够 + if len(third) < friendnum { + //将随机的id补充进去 + for i:=0;i= FRIEND_MAX_NUM { + //好友位已经满了不再做推荐 + resp.Result.Code = ERROR_OK + break + } + + rlist,err := friendlist.GetRecommandFriendList(uuid,FRIEND_RECOMMAND_NUM) + if err != nil { + logger.Error("HandleGetRecommendList GetRecommandFriendList failed=%v", err) + resp.Result.Code = ERROR_FRIENDGETRECOMMADNFAILED + break + } + + for _,val := range rlist.Recommend_list { + resp.Result.Data.Recommend_list = append(resp.Result.Data.Recommend_list,val) + } + + resp.Result.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} \ No newline at end of file diff --git a/src/common/redis/def.go b/src/common/redis/def.go index 8f695f7..5915847 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -14,4 +14,5 @@ const ( FRIEND_LIST_KEY = "CATCAFE_FRIEND_LIST_KEY" //玩家的好友列表的key,需要在末尾加死":uuid" FRIEND_APPLYLIST_KEY = "CATCAFE_FRIEND_APPLYLIST_KEY" //玩家申请好友列表,需要在末尾加死":uuid" FRIEND_APPROVELIST_KEY = "CATCAFE_FRIEND_APPROVELIST_KEY" //待批准好友列表,需要在末尾加死":uuid" + FRIEND_RECOMMANDLIST_KEY = "CATCAFE_FRIEND_RECOMMANDLIST_KEY" //推荐好友缓存key ) -- libgit2 0.21.0