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.
74 lines
2.2 KiB
74 lines
2.2 KiB
package v2 |
|
|
|
import ( |
|
"context" |
|
|
|
"github.com/pkg/errors" |
|
|
|
v2pb "go-common/app/interface/live/app-interface/api/http/v2" |
|
"go-common/app/interface/live/app-interface/dao" |
|
"go-common/library/ecode" |
|
) |
|
|
|
const ( |
|
_skyHorseRecTimeOut = 100 |
|
_recTypeForce = 3 |
|
_mobileIndexBadgeColorDefault = "#FB9E60" |
|
_recTypeSkyHorse = 4 |
|
) |
|
|
|
func (s *IndexService) getSkyHorseRoomListForIndex(ctx context.Context, respMyIdol *v2pb.MMyIdol, mid int64, buvid string, build int64, platform string, recPage int64, quality int64) (respSkyHorseRoomList []*v2pb.CommonRoomItem, err error) { |
|
respSkyHorseRoomList = make([]*v2pb.CommonRoomItem, 0) |
|
duplicate := make([]int64, 0) |
|
// ctx可以换带cancel或timeout的 |
|
for _, idol := range respMyIdol.List { |
|
duplicate = append(duplicate, idol.Roomid) |
|
} |
|
respSkyHorseRoomList, err = s.getSkyHorseRoomList(ctx, mid, buvid, build, platform, duplicate, recPage, quality) |
|
if err != nil { |
|
return |
|
} |
|
return |
|
} |
|
|
|
func (s *IndexService) getSkyHorseRoomList(ctx context.Context, uid int64, buvid string, build int64, platform string, idolIds []int64, recPage int64, quality int64) (respSkyHorseRoomList []*v2pb.CommonRoomItem, err error) { |
|
// 天马对关注去重 |
|
duplicates := idolIds |
|
|
|
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++ |
|
} |
|
} |
|
} |
|
|
|
skyHorseRec, skyHorseErr := dao.SkyHorseApi.GetSkyHorseRec(ctx, uid, buvid, build, platform, duplicates, strongRecLen, _skyHorseRecTimeOut) |
|
if skyHorseErr != nil { |
|
err = errors.WithMessage(ecode.SkyHorseError, "") |
|
return |
|
} |
|
|
|
roomIds := make([]int64, 0) |
|
for _, skyHorseInfo := range skyHorseRec.Data { |
|
roomIds = append(roomIds, int64(skyHorseInfo.Id)) |
|
} |
|
|
|
return s.getRecRoomList(ctx, roomIds, recPool, build, platform, idolDuplicateMap, _recTypeSkyHorse, quality) |
|
}
|
|
|