From f13ed98e1de0ec7b85ed179212cc095f63480eed Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 25 三月 2021 18:18:20 +0800 Subject: [PATCH] 全网搜优酷兼容 --- src/main/java/com/yeshi/buwan/service/imp/SearchService.java | 251 +++++++++++++++++++++++++++++++++---------------- 1 files changed, 168 insertions(+), 83 deletions(-) diff --git a/src/main/java/com/yeshi/buwan/service/imp/SearchService.java b/src/main/java/com/yeshi/buwan/service/imp/SearchService.java index 57b6482..84b4f1e 100644 --- a/src/main/java/com/yeshi/buwan/service/imp/SearchService.java +++ b/src/main/java/com/yeshi/buwan/service/imp/SearchService.java @@ -5,6 +5,7 @@ import com.yeshi.buwan.domain.*; import com.yeshi.buwan.domain.solr.SolrAlbumVideo; import com.yeshi.buwan.domain.system.DetailSystem; +import com.yeshi.buwan.domain.video.InternetSearchVideo; import com.yeshi.buwan.domain.web.DetailSystemSelect; import com.yeshi.buwan.domain.web.HotSearchAdmin; import com.yeshi.buwan.dto.search.SolrResultDTO; @@ -12,6 +13,7 @@ import com.yeshi.buwan.pptv.PPTVUtil; import com.yeshi.buwan.service.inter.video.VideoInfoExtraService; import com.yeshi.buwan.service.manager.SolrAlbumVideoDataManager; +import com.yeshi.buwan.service.manager.SolrInternetSearchVideoDataManager; import com.yeshi.buwan.util.*; import com.yeshi.buwan.util.factory.VideoInfoFactory; import com.yeshi.buwan.util.video.VideoConstant; @@ -31,7 +33,7 @@ @Service public class SearchService { - private Logger logger= LoggerFactory.getLogger(SearchService.class); + private Logger logger = LoggerFactory.getLogger(SearchService.class); @Resource @@ -50,6 +52,9 @@ private DetailSystemDao detailSystemDao; @Resource private SolrAlbumVideoDataManager solrAlbumDataManager; + + @Resource + private SolrInternetSearchVideoDataManager solrInternetSearchVideoDataManager; @Resource private VideoInfoExtraService videoInfoExtraService; @@ -251,9 +256,94 @@ } - @Cacheable(value = "userCache", key = "'searchNew'+'-'+#detailSystem+'-'+#key+'-'+#page+'-'+#videoType+'-'+#system+'-'+#cacheMD5") - public VideoListResultVO searchNew(String detailSystem, String ip, String uid, String key, int page, int videoType, - String system, List<Long> resourceList, String cacheMD5) { + private VideoInfo loadAlbumData(VideoInfo video) { + video.setShowType(1); + if (!StringUtil.isNullOrEmpty(video.getMainActor())) { + video.setMainActor("涓绘紨锛�" + video.getMainActor()); + } + + //璁剧疆tag + String tag = ""; + if (!StringUtil.isNullOrEmpty(video.getYear())) { + tag += video.getYear() + "/"; + } + + if (video.getVideoType() != null) { + String vt = VideoConstant.getMainCategoryName(video.getVideoType().getId()); + if (!StringUtil.isNullOrEmpty(vt)) { + tag += vt + "/"; + } + } + + if (!StringUtil.isNullOrEmpty(video.getArea())) { + tag += video.getArea() + "/"; + } + + if (tag.endsWith("/")) + tag = tag.substring(0, tag.length() - 1); + video.setTag(tag); + + return video; + + } + + + private SearchResult searchAlbum(int videoType, String key, int page, int pageSize) { + List<VideoInfo> localList = new ArrayList<>(); + //涓撹緫瑙嗛闆嗗悎 + Set<String> solrAlbumVids = new HashSet<>(); + + SolrVideoSearchFilter filter = new SolrVideoSearchFilter(); + filter.setKey(key); + if (videoType == Constant.SEARCH_RESULT_TYPE_HIGH_DEFINITION) { + filter.setResourceIds(new String[]{PPTVUtil.RESOURCE_ID + ""}); + logger.info("楂樻竻鎼滅储# key锛歿}", key); + } else + filter.setVideoType(videoType == 0 ? null : videoType); + filter.setContentType(1); + + SolrResultDTO solrResultDTO = solrAlbumDataManager.find(filter, page, pageSize); + Set<String> albumSet = new HashSet<>(); + int albumCount = 0; + if (solrResultDTO != null) { + albumCount = solrResultDTO.getTotalCount(); + for (SolrAlbumVideo sv : (List<SolrAlbumVideo>) solrResultDTO.getVideoList()) { + VideoInfo video = VideoInfoFactory.create(sv); + albumSet.add(video.getName() + "#" + video.getVideoType().getId()); + video = loadAlbumData(video); + localList.add(video); + solrAlbumVids.add(video.getId()); + } + } + + //绗竴椤佃�屼笖涓嶄负楂樻竻鏃舵悳绱� + if (page == 1 && videoType != Constant.SEARCH_RESULT_TYPE_HIGH_DEFINITION) { + //page涓�1鏃� 鍏ㄧ綉鎼� + SolrResultDTO internetSearchResultDTO = solrInternetSearchVideoDataManager.find(filter, 1, 20); + if (internetSearchResultDTO != null && internetSearchResultDTO.getVideoList().size() > 0) { + List<InternetSearchVideo> isvList = internetSearchResultDTO.getVideoList(); + //鍒犻櫎鍓嶉潰鏈夌殑鏁版嵁锛屾牴鎹畆ootType涓庡悕绉扮瓫閫� + for (int i = 0; i < isvList.size(); i++) { + String uniqueId = isvList.get(i).getName() + "#" + isvList.get(i).getRootType(); + if (albumSet.contains(uniqueId)) { + isvList.remove(i); + i--; + } + } + for (InternetSearchVideo sv : isvList) { + VideoInfo video = VideoInfoFactory.create(sv); + video = loadAlbumData(video); + localList.add(video); + } + } + //todo 鎸夊叧閿瘝鐨勫尮閰嶅害鎺掑簭 + + } + return new SearchResult(albumCount, localList); + } + + private void filterSearchResult(List<VideoInfo> localList, List<Long> resourceList) { + String sql = ""; String resourceWhere = ""; for (Long re : resourceList) { resourceWhere += " rv.resourceid=" + re + " or"; @@ -262,6 +352,40 @@ if (resourceWhere.endsWith("or")) resourceWhere = resourceWhere.substring(0, resourceWhere.length() - 2); + + List<String> filterVideoIdList = new ArrayList<>(); + + for (int i = 0; i < localList.size(); i++) { + if (NumberUtil.isNumeric(localList.get(i).getId())) { + filterVideoIdList.add(localList.get(i).getId()); + sql += " select count(*) from wk_resource_video rv left join wk_video_video v on rv.videoid=v.id where v.id is not null and v.show=1 and rv.videoid=" + + localList.get(i).getId() + " and (" + resourceWhere + ") union all"; + } + } + + if (sql.endsWith("union all")) + sql = sql.substring(0, sql.length() - 9); + + List rlist = StringUtil.isNullOrEmpty(sql) ? new ArrayList() : videoInfoDao.sqlList(sql); + Set<String> deleteVids = new HashSet<>(); + for (int i = 0; i < filterVideoIdList.size(); i++) { + if (Integer.parseInt(rlist.get(i) + "") < 1) { + deleteVids.add(filterVideoIdList.get(i)); + } + } + + for (int i = 0; i < localList.size(); i++) { + if (deleteVids.contains(localList.get(i).getId())) { + localList.remove(i); + i--; + } + } + } + + + @Cacheable(value = "userCache", key = "'searchNew'+'-'+#detailSystem+'-'+#key+'-'+#page+'-'+#videoType+'-'+#system+'-'+#cacheMD5") + public VideoListResultVO searchNew(String detailSystem, String ip, String uid, String key, int page, int videoType, + String system, List<Long> resourceList, String cacheMD5) { SearchHistory sh = new SearchHistory(); sh.setCreatetime((new StringBuilder(String.valueOf(System.currentTimeMillis()))).toString()); sh.setIp(ip); @@ -286,55 +410,18 @@ localList = new ArrayList<>(); //鍏堟悳绱笓杈� int pageSize = 20; - //涓撹緫瑙嗛闆嗗悎 - Set<String> solrAlbumVids = new HashSet<>(); - - SolrVideoSearchFilter filter = new SolrVideoSearchFilter(); - filter.setKey(key); - if (videoType == Constant.SEARCH_RESULT_TYPE_HIGH_DEFINITION) { - filter.setResourceIds(new String[]{PPTVUtil.RESOURCE_ID + ""}); - logger.info("楂樻竻鎼滅储# key锛歿}",key); - } else - filter.setVideoType(videoType == 0 ? null : videoType); - filter.setContentType(1); - - SolrResultDTO solrResultDTO = solrAlbumDataManager.find(filter, page, pageSize); - if (solrResultDTO != null) { - albumCount = solrResultDTO.getTotalCount(); - - for (SolrAlbumVideo sv : (List<SolrAlbumVideo>) solrResultDTO.getVideoList()) { - VideoInfo video = VideoInfoFactory.create(sv); - video.setShowType(1); - if (!StringUtil.isNullOrEmpty(video.getMainActor())) { - video.setMainActor("涓绘紨锛�" + video.getMainActor()); - } - - //璁剧疆tag - String tag = ""; - if (!StringUtil.isNullOrEmpty(sv.getYear())) { - tag += sv.getYear() + "/"; - } - - if (video.getVideoType() != null) { - String vt = VideoConstant.getMainCategoryName(sv.getRootVideoType()); - if (!StringUtil.isNullOrEmpty(vt)) { - tag += vt + "/"; - } - } - - if (!StringUtil.isNullOrEmpty(video.getArea())) { - tag += video.getArea() + "/"; - } - - if (tag.endsWith("/")) - tag = tag.substring(0, tag.length() - 1); - video.setTag(tag); - - localList.add(video); - solrAlbumVids.add(video.getId()); - } + SearchResult searchResult = searchAlbum(videoType, key, page, pageSize); + if (searchResult != null && searchResult.videoInfoList != null) { + localList.addAll(searchResult.videoInfoList); } - int commonSolrPage = page - solrResultDTO.getTotalCount() / pageSize; + + Set<String> solrAlbumVids = new HashSet<>(); + for (VideoInfo videoInfo : localList) { + solrAlbumVids.add(videoInfo.getId()); + } + + + int commonSolrPage = page - searchResult.getTotalCount() / pageSize; if (videoType == 0 && commonSolrPage > 0) { //鎼滅储鍘熷鐨� @@ -350,42 +437,13 @@ } } System.out.println("鎼滅储鑰楁椂:" + (System.currentTimeMillis() - startt)); - - String sql = ""; - startt = System.currentTimeMillis(); - for (int i = 0; i < localList.size(); i++) { - sql += " select count(*) from wk_resource_video rv left join wk_video_video v on rv.videoid=v.id where v.id is not null and v.show=1 and rv.videoid=" - + localList.get(i).getId() + " and (" + resourceWhere + ") union all"; - } - - if (sql.endsWith("union all")) - sql = sql.substring(0, sql.length() - 9); - - List rlist = StringUtil.isNullOrEmpty(sql) ? new ArrayList() : videoInfoDao.sqlList(sql); - List<Integer> pList = new ArrayList<>(); - for (int i = 0; i < localList.size(); i++) { - if (Integer.parseInt(rlist.get(i) + "") < 1) { - pList.add(i); - // localList.remove(i); - // i--; - } - } - - Collections.sort(pList); - for (int i = pList.size() - 1; i >= 0; i--) { - localList.remove((int) pList.get(i)); - } - - System.out.println("鎺掗櫎鑰楁椂:" + (System.currentTimeMillis() - startt)); - + filterSearchResult(localList, resourceList); } catch (Exception e) { e.printStackTrace(); } finally { } if (localList != null && localList.size() > 0) { - for (VideoInfo info : localList) { - list.add(info); - } + list.addAll(localList); } //鑾峰彇闄勫姞淇℃伅 @@ -649,4 +707,31 @@ return videoInfoList; } + + class SearchResult { + private int totalCount; + private List<VideoInfo> videoInfoList; + + public SearchResult(int totalCount, List<VideoInfo> videoInfoList) { + this.totalCount = totalCount; + this.videoInfoList = videoInfoList; + } + + public int getTotalCount() { + return totalCount; + } + + public void setTotalCount(int totalCount) { + this.totalCount = totalCount; + } + + public List<VideoInfo> getVideoInfoList() { + return videoInfoList; + } + + public void setVideoInfoList(List<VideoInfo> videoInfoList) { + this.videoInfoList = videoInfoList; + } + } + } -- Gitblit v1.8.0