From fd03e31f173ad9c52b15a30a9127e2b6a468538d Mon Sep 17 00:00:00 2001
From: shikeying <shikeying@163.com>
Date: 星期一, 26 九月 2022 18:50:33 +0800
Subject: [PATCH] 视频相似度分析2

---
 recommend-video/src/main/java/com/iplatform/recvideo/support/DefaultSimilarExecutor.java |   71 ++++++++++++++++++++++++++++++++++-
 1 files changed, 68 insertions(+), 3 deletions(-)

diff --git a/recommend-video/src/main/java/com/iplatform/recvideo/support/DefaultSimilarExecutor.java b/recommend-video/src/main/java/com/iplatform/recvideo/support/DefaultSimilarExecutor.java
index ea9327b..ceec831 100644
--- a/recommend-video/src/main/java/com/iplatform/recvideo/support/DefaultSimilarExecutor.java
+++ b/recommend-video/src/main/java/com/iplatform/recvideo/support/DefaultSimilarExecutor.java
@@ -2,20 +2,26 @@
 
 import com.iplatform.model.po.Rc_video_t1;
 import com.iplatform.model.po.Rc_video_t2;
+import com.iplatform.model.po.Rc_video_user;
 import com.iplatform.recvideo.Constants;
 import com.iplatform.recvideo.SimilarExecutor;
 import com.iplatform.recvideo.SimilarVideoInfo;
 import com.iplatform.recvideo.SimilarVideoOrder;
+import com.iplatform.recvideo.SimilarVideoUser;
+import com.iplatform.recvideo.SimilarVideoUserOrder;
 import com.iplatform.recvideo.VideoFolderInfo;
 import com.iplatform.recvideo.service.VideoExecutorServiceImpl;
 import com.iplatform.recvideo.util.PythonInvokeUtils;
+import com.walker.infrastructure.utils.DateUtils;
 import com.walker.infrastructure.utils.NumberGenerator;
 import com.walker.infrastructure.utils.StringUtils;
 import org.springframework.web.client.RestTemplate;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 public class DefaultSimilarExecutor extends SimilarExecutor {
 
@@ -70,7 +76,7 @@
     }
 
     @Override
-    protected void writeRcVideoT2(VideoFolderInfo videoFolderInfo) {
+    protected void writeRcVideoT2(VideoFolderInfo videoFolderInfo, String batchId) {
         logger.debug("姝e湪鍐欏叆'Rc_video_t2',鍘熷瑙嗛:" + videoFolderInfo.getVideoId());
         List<Rc_video_t1> list = this.videoExecutorService.queryVideoT_1List(videoFolderInfo.getVideoId());
         if(StringUtils.isEmptyList(list)){
@@ -79,7 +85,7 @@
         }
         SimilarVideoOrder similarVideoOrder = new SimilarVideoOrder(list);
         List<SimilarVideoInfo> similarVideoInfoList = similarVideoOrder.calculateOrder();
-        List<Rc_video_t2> video2List = this.toRcVideoT2List(videoFolderInfo.getVideoId(), similarVideoInfoList);
+        List<Rc_video_t2> video2List = this.toRcVideoT2List(videoFolderInfo.getVideoId(), similarVideoInfoList, batchId);
         if(video2List == null){
             logger.warn("writeRcVideoT2(): similarVideoInfoList涓虹┖锛屼笉鑳芥墽琛�, srcVideoId = " + videoFolderInfo.getVideoId());
             return;
@@ -90,9 +96,67 @@
     @Override
     protected void writeRcVideoUser(String batchId, List<String> recVideoIdList) {
         logger.info("姝e湪鍐欏叆涓�娆$敤鎴锋帹鑽愯棰戞暟鎹�, batchId = " + batchId);
+        List<Map<String, Object>> batchUserVideoList = this.videoExecutorService.queryBatchUserVideoList(batchId);
+        if(StringUtils.isEmptyList(batchUserVideoList)){
+            logger.error("鏈壘鍒版壒娆$敤鎴疯棰戣褰曪紝鏃犳硶鏇存柊鐢ㄦ埛鎺ㄨ崘瑙嗛鏁版嵁锛宐atchId = " + batchId);
+            return;
+        }
+        List<Rc_video_t2> video2List = this.videoExecutorService.queryVideoT_2List(batchId);
+        if(StringUtils.isEmptyList(video2List)){
+            logger.warn("浠庤〃'rc_video_t2'鏈姞杞藉埌鎵规瑙嗛缁撴灉璁板綍锛屾棤娉曠户缁啓鍏ョ敤鎴锋帹鑽愯棰�'rc_video_user'");
+            return;
+        }
+
+        // 鍘熷瑙嗛ID涓庣敤鎴峰叧绯�
+        Map<String, Long> srcVideoIdUserCache = new HashMap<>();
+        for(Map<String, Object> m : batchUserVideoList){
+            srcVideoIdUserCache.put(m.get("src_video_id").toString(), Long.parseLong(m.get("user_id").toString()));
+        }
+
+        // 鎺ㄨ崘瑙嗛ID涓庣敤鎴峰叧绯�
+        Map<String, Long> videoIdUserCache = new HashMap<>();
+        Long userId = null;
+        for(Rc_video_t2 e : video2List){
+            userId = srcVideoIdUserCache.get(e.getSrc_video_id());
+            if(userId == null){
+                throw new IllegalArgumentException("鎺ㄨ崘瑙嗛鐨勫師濮嬭棰戞湭鎵惧埌瀵瑰簲鐢ㄦ埛锛宻rc_video = " + e.getSrc_video_id() + ", rec_video = " + e.getSim_video_id());
+            }
+            videoIdUserCache.put(e.getSim_video_id(), userId);
+        }
+
+        SimilarVideoUserOrder similarVideoUserOrder = new SimilarVideoUserOrder(videoIdUserCache, video2List);
+        List<SimilarVideoUser> similarVideoUserList = similarVideoUserOrder.calculateOrder();
+        List<Rc_video_user> videoUserList = this.toRcVideoUserList(similarVideoUserList);
+        if(videoUserList == null){
+            logger.warn("writeRcVideoUser(): similarVideoUserList锛屼笉鑳芥墽琛�, batchId = " + batchId);
+            return;
+        }
+
+        // 鐢ㄦ埛鎺ㄨ崘瑙嗛璁板綍锛岄渶瑕佹洿鏂帮紝濡傛灉涓嶅瓨鍦ㄦ墠鍐欏叆銆�
+        // 娉ㄦ剰锛氳繖閲屾殏鏃朵笉鏇存柊锛屽叏閮ㄥ啓鍏ワ紝杩欐牱鐢ㄦ埛鎺ㄨ崘琛ㄤ腑浼氬瓨鍦ㄨ緝澶氶噸澶嶆暟鎹紝鍚庣画瑕佹坊鍔犲畾鏃朵换鍔℃竻闄ら噸澶嶆暟鎹嵆鍙��
+        this.videoExecutorService.execBatchInsertVideoUser(videoUserList, batchId);
+        logger.debug("鎵规浠诲姟鐘舵�佸凡鏇存柊鎴愬姛! " + batchId);
     }
 
-    private List<Rc_video_t2> toRcVideoT2List(String srcVideoId, List<SimilarVideoInfo> similarVideoInfoList){
+    private List<Rc_video_user> toRcVideoUserList(List<SimilarVideoUser> similarVideoUserList){
+        if(StringUtils.isEmptyList(similarVideoUserList)){
+            return null;
+        }
+        List<Rc_video_user> resultList = new ArrayList<>(similarVideoUserList.size());
+        Rc_video_user rc_video_t2 = null;
+        for(SimilarVideoUser e : similarVideoUserList){
+            rc_video_t2 = new Rc_video_user(NumberGenerator.getLongSequenceNumber());
+            rc_video_t2.setCreate_time(Long.parseLong(DateUtils.getDateTimeSecondForShow()));
+            rc_video_t2.setUser_id(e.getUserId());
+            rc_video_t2.setVideo_id(e.getRecommendVideoId());
+            rc_video_t2.setScore(e.getScore());
+            resultList.add(rc_video_t2);
+        }
+        return resultList;
+    }
+
+    private List<Rc_video_t2> toRcVideoT2List(String srcVideoId
+            , List<SimilarVideoInfo> similarVideoInfoList, String batchId){
         if(StringUtils.isEmptyList(similarVideoInfoList)){
             return null;
         }
@@ -103,6 +167,7 @@
             rc_video_t2.setSrc_video_id(srcVideoId);
             rc_video_t2.setSim_video_id(e.getId());
             rc_video_t2.setScore(e.getScore());
+            rc_video_t2.setBatch_id(batchId);
             resultList.add(rc_video_t2);
         }
         return resultList;

--
Gitblit v1.9.1