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