diff --git a/src/server/game/friend_func.go b/src/server/game/friend_func.go index df93cd82..b1c9a191 100644 --- a/src/server/game/friend_func.go +++ b/src/server/game/friend_func.go @@ -104,9 +104,10 @@ func (p *Player) GetVisitorPlayer() int { func GetRecommendPlayer(p *Player, Num int) []int { uids, err := db.GetCommendPlayerFromDb(p.M_DwUin, GoUtil.Now()-259200, 4) if err != nil { + log.Debug("GetCommendPlayerFromDb err:%v, uid=%d", err, p.M_DwUin) return nil } - PlayerList1 := make([]int, 0) + PlayerList1 := make([]int, 0, len(uids)) FriendMod := p.PlayMod.getFriendMod() for _, Uid := range uids { if Uid == int(p.M_DwUin) { @@ -118,45 +119,29 @@ func GetRecommendPlayer(p *Player, Num int) []int { if FriendMod.CheckAddBefore(Uid) { continue } - PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Uid) - if PlayerSimpleData == nil { - continue - } PlayerList1 = append(PlayerList1, Uid) } + // 按照时间门槛筛选用户 + filterByTime := func(excludeSeconds int64) []int { + now := GoUtil.Now() + result := make([]int, 0, len(PlayerList1)) + for _, Uid := range PlayerList1 { + recommendTime := FriendMod.GetRecommendTime(Uid) + if recommendTime == 0 || recommendTime <= now-excludeSeconds { + result = append(result, Uid) + } + } + return result + } // 排查7日内推荐过的用户 - now := GoUtil.Now() - candidateList := make([]int, 0) - for _, Uid := range PlayerList1 { - recommendTime := FriendMod.GetRecommendTime(Uid) - if recommendTime != 0 && recommendTime > now-604800 { - candidateList = append(candidateList, Uid) - continue - } - } - // 用户数不低于5则进入下一步筛选 + candidateList := filterByTime(604800) + // 用户数低于5则放宽到3日 if len(candidateList) < 5 { - // 排查3日内推荐过的用户 - candidateList = make([]int, 0) - for _, Uid := range PlayerList1 { - recommendTime := FriendMod.GetRecommendTime(Uid) - if recommendTime != 0 && recommendTime > now-259200 { - candidateList = append(candidateList, Uid) - continue - } - } + candidateList = filterByTime(259200) } - // 用户数不低于5则进入下一步筛选 + // 用户数低于5则放宽到2日 if len(candidateList) < 5 { - // 排查2日内推荐过的用户 - candidateList = make([]int, 0) - for _, Uid := range PlayerList1 { - recommendTime := FriendMod.GetRecommendTime(Uid) - if recommendTime != 0 && recommendTime > now-172800 { - candidateList = append(candidateList, Uid) - continue - } - } + candidateList = filterByTime(172800) } if len(candidateList) == 0 { @@ -164,6 +149,7 @@ func GetRecommendPlayer(p *Player, Num int) []int { } if len(candidateList) == 0 { + candidateList = make([]int, 0, len(uids)) for _, Uid := range uids { if Uid == int(p.M_DwUin) { continue @@ -178,6 +164,9 @@ func GetRecommendPlayer(p *Player, Num int) []int { baseList = append(baseList, ps) } } + if len(baseList) == 0 { + return nil + } BaseMod := p.PlayMod.getBaseMod() level := BaseMod.GetLevel() diffLimit := 10