You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.7 KiB
89 lines
2.7 KiB
package v2 |
|
|
|
import ( |
|
"context" |
|
|
|
v2pb "go-common/app/interface/live/app-interface/api/http/v2" |
|
recommendV1 "go-common/app/service/live/recommend/api/grpc/v1" |
|
"go-common/library/log" |
|
) |
|
|
|
const ( |
|
_recTypeRecommend = 5 |
|
_recNum = 6 //获取推荐的数量 |
|
) |
|
|
|
func (s *IndexService) getLiveRecRoomList(ctx context.Context, respMyIdol *v2pb.MMyIdol, mid int64, build int64, platform string, recPage int64, quality int64) (respLiuGangRecRoomList []*v2pb.CommonRoomItem, err error) { |
|
duplicate := make([]int64, 0) |
|
// ctx可以换带cancel或timeout的 |
|
for _, idol := range respMyIdol.List { |
|
duplicate = append(duplicate, idol.Roomid) |
|
} |
|
|
|
return s.getRecInfo(ctx, mid, duplicate, build, platform, recPage, quality) |
|
} |
|
|
|
func (s *IndexService) getLiveRecRoomListForChange(ctx context.Context, mid int64, build int64, platform string, duplicate []int64, recPage int64, quality int64) (respLiuGangRecRoomList []*v2pb.CommonRoomItem, err error) { |
|
return s.getRecInfo(ctx, mid, duplicate, build, platform, recPage, quality) |
|
} |
|
|
|
func (s *IndexService) getRecInfo(ctx context.Context, mid int64, duplicate []int64, build int64, platform string, recPage int64, quality int64) (respLiveRecRoomList []*v2pb.CommonRoomItem, err error) { |
|
// 天马对关注去重 |
|
duplicates := duplicate |
|
|
|
idolDuplicateMap := make(map[int64]bool) |
|
|
|
for _, id := range duplicates { |
|
if _, ok := idolDuplicateMap[id]; !ok { |
|
idolDuplicateMap[id] = true |
|
} |
|
} |
|
// 获取强推 |
|
strongRecLen := 0 |
|
//不考虑位置好的 |
|
recPool := s.getRecPoolAllPosition(ctx, nil, duplicates) |
|
// 获取强推 |
|
if len(recPool) > 0 { |
|
for _, strongInfo := range recPool { |
|
if strongInfo.Roomid == 0 { |
|
continue |
|
} |
|
if _, ok := idolDuplicateMap[strongInfo.Roomid]; !ok { |
|
duplicates = append(duplicates, strongInfo.Roomid) |
|
strongRecLen++ |
|
} |
|
} |
|
} |
|
|
|
respLiveRecRoomList = make([]*v2pb.CommonRoomItem, 0) |
|
count := _recNum - strongRecLen |
|
if count <= 0 { |
|
count = _recNum |
|
} |
|
GetRandomRecResp, err := s.recommendConn.RandomRecsByUser(ctx, &recommendV1.GetRandomRecReq{ |
|
Uid: mid, |
|
Count: uint32(count), // 首页6个推荐 |
|
ExistIds: duplicates, |
|
}) |
|
|
|
if err != nil { |
|
log.Error("[GetLiveRoomList]GetLiveRecResp err, err:%+v", err) |
|
return |
|
} |
|
|
|
if GetRandomRecResp == nil { |
|
log.Error("[GetLiveRoomList]GetLiveRecResp empty err") |
|
return |
|
} |
|
|
|
if len(GetRandomRecResp.RoomIds) < count { |
|
log.Info("[GetLiveRoomList]GetLiveRecResp not enough num:%d,mid:%d", len(GetRandomRecResp.RoomIds), mid) |
|
return |
|
} |
|
|
|
respLiveRecRoomList, err = s.getRecRoomList(ctx, GetRandomRecResp.RoomIds, recPool, build, platform, idolDuplicateMap, _recTypeRecommend, quality) |
|
if err != nil { |
|
log.Error("[GetLiveRoomList]FillLiveRecRoomList err:%+v", err) |
|
} |
|
return |
|
}
|
|
|