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