From f788607ff771a47bc60d6a86e00b3433c40f3d2c Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 24 九月 2021 15:22:03 +0800
Subject: [PATCH] 接入视频直播

---
 src/main/java/com/yeshi/buwan/service/imp/SearchService.java |   97 ++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 77 insertions(+), 20 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 84b4f1e..011d7d2 100644
--- a/src/main/java/com/yeshi/buwan/service/imp/SearchService.java
+++ b/src/main/java/com/yeshi/buwan/service/imp/SearchService.java
@@ -10,10 +10,10 @@
 import com.yeshi.buwan.domain.web.HotSearchAdmin;
 import com.yeshi.buwan.dto.search.SolrResultDTO;
 import com.yeshi.buwan.dto.search.SolrVideoSearchFilter;
-import com.yeshi.buwan.pptv.PPTVUtil;
+import com.yeshi.buwan.videos.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.service.manager.search.SolrAlbumVideoDataManager;
+import com.yeshi.buwan.service.manager.search.SolrInternetSearchVideoDataManager;
 import com.yeshi.buwan.util.*;
 import com.yeshi.buwan.util.factory.VideoInfoFactory;
 import com.yeshi.buwan.util.video.VideoConstant;
@@ -34,6 +34,8 @@
 @Service
 public class SearchService {
     private Logger logger = LoggerFactory.getLogger(SearchService.class);
+
+    private final String ALBUM_SEARCH_FUZZY_KEYS = "銆�,銆�,銆�";
 
 
     @Resource
@@ -288,18 +290,25 @@
     }
 
 
-    private SearchResult searchAlbum(int videoType, String key, int page, int pageSize) {
+    public SearchResult searchAlbum(int videoType, String key, List<Long> resourceIds, int page, int pageSize, boolean fuzzy) {
         List<VideoInfo> localList = new ArrayList<>();
         //涓撹緫瑙嗛闆嗗悎
         Set<String> solrAlbumVids = new HashSet<>();
 
         SolrVideoSearchFilter filter = new SolrVideoSearchFilter();
+        filter.setFuzzy(fuzzy);
         filter.setKey(key);
         if (videoType == Constant.SEARCH_RESULT_TYPE_HIGH_DEFINITION) {
-            filter.setResourceIds(new String[]{PPTVUtil.RESOURCE_ID + ""});
+            filter.setResourceIds(Arrays.asList(new String[]{PPTVUtil.RESOURCE_ID + ""}));
             logger.info("楂樻竻鎼滅储# key锛歿}", key);
-        } else
+        } else {
+            List<String> rids = new ArrayList<>();
+            for (Long rid : resourceIds) {
+                rids.add(rid + "");
+            }
+            filter.setResourceIds(rids);
             filter.setVideoType(videoType == 0 ? null : videoType);
+        }
         filter.setContentType(1);
 
         SolrResultDTO solrResultDTO = solrAlbumDataManager.find(filter, page, pageSize);
@@ -309,35 +318,76 @@
             albumCount = solrResultDTO.getTotalCount();
             for (SolrAlbumVideo sv : (List<SolrAlbumVideo>) solrResultDTO.getVideoList()) {
                 VideoInfo video = VideoInfoFactory.create(sv);
-                albumSet.add(video.getName() + "#" + video.getVideoType().getId());
+                albumSet.add(video.getName() + "#" + video.getVideoType().getId() + "#" + video.getYear());
                 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();
+                List<InternetSearchVideo> iList = internetSearchResultDTO.getVideoList();
+                List<InternetSearchVideo> isvList = new ArrayList<>();
+                if (iList != null && iList.size() > 0)
+                    isvList.addAll(iList);
                 //鍒犻櫎鍓嶉潰鏈夌殑鏁版嵁锛屾牴鎹畆ootType涓庡悕绉扮瓫閫�
                 for (int i = 0; i < isvList.size(); i++) {
-                    String uniqueId = isvList.get(i).getName() + "#" + isvList.get(i).getRootType();
+                    String uniqueId = isvList.get(i).getName() + "#" + isvList.get(i).getRootType() + "#" + isvList.get(i).getYear();
                     if (albumSet.contains(uniqueId)) {
                         isvList.remove(i);
                         i--;
                     }
                 }
-                for (InternetSearchVideo sv : isvList) {
-                    VideoInfo video = VideoInfoFactory.create(sv);
-                    video = loadAlbumData(video);
-                    localList.add(video);
+
+                //绮剧‘鍖归厤锛屼笉鍒嗚瘝
+                if (!fuzzy) {
+                    for (InternetSearchVideo sv : isvList) {
+                        VideoInfo video = VideoInfoFactory.create(sv);
+                        video = loadAlbumData(video);
+                        //绗竴涓笓杈戞暟閲�
+                        if (albumCount < 3) {
+                            localList.add(video);
+                        } else {
+                            if (video.getName().equalsIgnoreCase(key))
+                                localList.add(video);
+                        }
+                    }
+                } else {
+                    for (InternetSearchVideo sv : isvList) {
+                        VideoInfo video = VideoInfoFactory.create(sv);
+                        video = loadAlbumData(video);
+                        localList.add(video);
+                    }
                 }
             }
-            //todo 鎸夊叧閿瘝鐨勫尮閰嶅害鎺掑簭
+            //鎸夊叧閿瘝鐨勫尮閰嶅害鎺掑簭
+            Comparator<VideoInfo> cm = (VideoInfo o1, VideoInfo o2) -> {
+                if (o1.getDefinition() - o2.getDefinition() == 0) {
+                    float s1 = CompareStrSimUtil.getSimilarityRatio(o1.getName(), key, true);
+                    float s2 = CompareStrSimUtil.getSimilarityRatio(o2.getName(), key, true);
+//                        if (s1 != s2)//鐩镐技搴﹁秺楂樿秺闈犲墠
+                    try {
+                        return s1 != s2 ? (s2 > s1 ? 1 : -1) : (Integer.parseInt(o2.getYear()) - Integer.parseInt(o1.getYear()));
+                    } catch (Exception e) {
+                        return s2 > s1 ? 1 : -1;
+                    }
+//                        else
+//                            return o1.getDefinition() - o2.getDefinition();//楂樻竻鎺掑湪鍓�
+                } else {
+                    return o2.getDefinition() - o1.getDefinition();//楂樻竻鎺掑湪鍓�
+                }
 
+            };
+
+            Collections.sort(localList, cm);
+        }
+        //鏈悳绱㈠埌鍐呭
+        if (localList == null || localList.size() == 0) {
+            logger.warn("涓撹緫鎼滅储鏃犵粨鏋�#{}", key);
         }
         return new SearchResult(albumCount, localList);
     }
@@ -392,9 +442,11 @@
         if (!StringUtil.isNullOrEmpty(key) && key.length() > 30)
             key = key.substring(0, 30);
         sh.setKey(key);
-        UserInfo user = new UserInfo();
-        user.setId(uid);
-        sh.setUser(user);
+        if (uid != null) {
+            UserInfo user = new UserInfo();
+            user.setId(uid);
+            sh.setUser(user);
+        }
 
         searchDao.create(sh);
         // 鏌ヨ鏁版嵁搴�
@@ -410,7 +462,12 @@
             localList = new ArrayList<>();
             //鍏堟悳绱笓杈�
             int pageSize = 20;
-            SearchResult searchResult = searchAlbum(videoType, key, page, pageSize);
+            SearchResult searchResult = searchAlbum(videoType, key, resourceList, page, pageSize, false);
+
+            if (page == 1 && (searchResult == null || searchResult.videoInfoList == null || searchResult.videoInfoList.size() == 0)) {
+                searchResult = searchAlbum(videoType, key, resourceList, page, pageSize, true);
+            }
+
             if (searchResult != null && searchResult.videoInfoList != null) {
                 localList.addAll(searchResult.videoInfoList);
             }
@@ -708,7 +765,7 @@
     }
 
 
-    class SearchResult {
+    public static class SearchResult {
         private int totalCount;
         private List<VideoInfo> videoInfoList;
 

--
Gitblit v1.8.0