package vidser import ( "91porn-server/app/service/vidhelpser" "91porn-server/common/cachev2" "91porn-server/common/constant/redisconst" "91porn-server/common/log" "91porn-server/models/v/discount_area_mod" "91porn-server/models/v/discount_area_video_mod" "91porn-server/models/v/vidmod" "fmt" "go.mongodb.org/mongo-driver/bson/primitive" "time" ) // GetDiscountArea 获取折扣专区 func GetDiscountArea() (list []discount_area_mod.DiscountArea, err error) { _, err = cachev2.Classes().CacheTime(redisconst.DiscountAreaExpire).AutoListKey(redisconst.DiscountArea).ResBind(&list).Cache(discount_area_mod.GetAllDiscountArea) if err != nil { log.Error(fmt.Sprintf("cachev2 discount_area_mod.GetAllDiscountArea err:%v", err)) return } return list, nil } // GetDiscountAreaVideos 获取折扣专区下的视频 func GetDiscountAreaVideos(uid uint64, req *DiscountVideoReq) (data *DiscountVideoResp, err error) { data = &DiscountVideoResp{ List: []*vidmod.VideoInfo{}, } var videos []*vidmod.VideoModel key := fmt.Sprintf("DiscountAreaVideoList:%v:%v:%v:%v", req.DiscountId, req.SortType, req.PageSize, req.PageNumber) _, err = cachev2.Classes().CacheTime(2*time.Minute).AutoListKey(key).ResBind(&videos).Cache(discountAreaVideos, req) if err != nil { log.Error(fmt.Sprintf("cachev2 discountAreaVideos err:%v", err)) return } if len(videos) == 0 { log.Warn(fmt.Sprintf("discountAreaVideos is null, discountAreaId:%v", req.DiscountId)) return data, nil } if len(videos) > int(req.PageSize) { data.HasNext = true videos = videos[:req.PageSize] } videoList := vidhelpser.EncodeVideoInfo(uid, videos) data.List = videoList return } // 获取折扣专区视频列表 func discountAreaVideos(req *DiscountVideoReq) (list []*vidmod.VideoModel, err error) { // 按照排序类型查询方式不同 switch req.SortType { case 2: //按照最热查询 list, err = vidmod.GetVideoListByCond(req.Filter(), req.Options()) default: list, err = newDiscountAreaVideos(req) return } if err != nil { log.Error(fmt.Sprintf("discountAreaVideos err:%v", err)) return } return } func newDiscountAreaVideos(req *DiscountVideoReq) (res []*vidmod.VideoModel, err error) { // 按照最新添加到折扣专区的顺序排 discountAreaVideoList, _, err := discount_area_video_mod.GetListByCond(req.Filter(), req.Options()) if err != nil { log.Error(fmt.Sprintf("discount_area_video_mod.GetListByCond err:%v", err)) return } vids := []primitive.ObjectID{} for _, v := range discountAreaVideoList { vids = append(vids, v.VideoID) } // 获取视频 list, err := vidmod.GetVideoListByIDsNoStatus(vids) if err != nil { log.Error(fmt.Sprintf("vidmod.GetVideoListByIDs err:%v", err)) return } // 按照原来的顺序返回(不要使用sort包排序。按照时间排序,会出现问题) videoMap := make(map[primitive.ObjectID]*vidmod.VideoModel) for _, v := range list { videoMap[v.ID] = v } for _, v := range discountAreaVideoList { video := videoMap[v.VideoID] res = append(res, video) } return }