| 
					
				 | 
			
			
				@@ -1,5 +1,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.tzld.longarticle.recommend.server.service.recommend; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.core.lang.UUID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.common.enums.StatusEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.common.enums.aigc.CrawlerModeEnum; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -8,8 +9,10 @@ import com.tzld.longarticle.recommend.server.common.enums.recommend.ArticlePoolP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.common.enums.recommend.FeishuRobotIdEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.mapper.longArticle.LongArticleBaseMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.entity.aigc.PublishAccount; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.tzld.longarticle.recommend.server.model.entity.crawler.PublishSortLog; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.entity.longArticle.ArticlePoolPromotionSource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.entity.longArticle.DatastatSortStrategy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.tzld.longarticle.recommend.server.model.entity.longArticle.PublishSingleVideoSource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.vo.IdNameVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.vo.WxContentDetailResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.vo.aigc.CommonListDataVO; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -22,14 +25,17 @@ import com.tzld.longarticle.recommend.server.remote.aigc.AIGCProduceContentListS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.remote.aigc.AIGCProducePlanDetailService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.remote.aigc.AIGCProducePlanSaveService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.repository.aigc.PublishAccountRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.tzld.longarticle.recommend.server.repository.crawler.PublishSortLogRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.repository.longArticle.ArticlePoolPromotionSourceRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.repository.longArticle.DatastatSortStrategyRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.tzld.longarticle.recommend.server.repository.longArticle.PublishSingleVideoSourceRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.util.DateUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.util.Md5Util; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.util.TitleSimilarCheckUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.util.feishu.FeishuMessageSender; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.collections4.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.BeanUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.util.StringUtils; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -62,6 +68,10 @@ public class ArticlePromotionService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     PublishAccountRepository publishAccountRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ArticleService articleService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    PublishSortLogRepository publishSortLogRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    PublishSingleVideoSourceRepository publishSingleVideoSourceRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @ApolloJsonValue("${articlePromotionProduceConfig:{}}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private Map<String, Map<String, Map<String, String>>> produceConfig; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -361,7 +371,8 @@ public class ArticlePromotionService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void articleVideoPoolPromotion(Integer viewCountFilter, Double viewCountRateFilter, List<Integer> positionFilter) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void articleVideoPoolPromotion(Integer viewCountFilter, Double viewCountRateFilter, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                          List<Integer> positionFilter, Integer poolLevel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String dateStrFilter = DateUtils.getBeforeDaysDateStr("yyyyMMdd", 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 获取内部表现 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<DatastatSortStrategy> list = longArticleBaseMapper.getArticlePromotion(viewCountFilter, viewCountRateFilter, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -371,11 +382,48 @@ public class ArticlePromotionService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<DatastatSortStrategy> distinct = filterSameTitle(list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         distinct.sort(Comparator.comparing(DatastatSortStrategy::getDateStr, Comparator.reverseOrder())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         log.info("优质文章数量(去重后): {}", distinct.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        saveArticleVideoPoolPromotion(distinct); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        saveArticleVideoPoolPromotion(distinct, poolLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private void saveArticleVideoPoolPromotion(List<DatastatSortStrategy> promotionList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void saveArticleVideoPoolPromotion(List<DatastatSortStrategy> promotionList, Integer poolLevel) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtils.isEmpty(promotionList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> ghIds = promotionList.stream().map(DatastatSortStrategy::getGhId).distinct().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> dateStr = promotionList.stream().map(DatastatSortStrategy::getDateStr).distinct().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PublishSortLog> sortLogList = publishSortLogRepository.getByGhIdInAndDateStrIn(ghIds, dateStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Map<String, List<PublishSortLog>>> sortLogMap = sortLogList.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .collect(Collectors.groupingBy(PublishSortLog::getGhId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Collectors.groupingBy(PublishSortLog::getDateStr))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (DatastatSortStrategy data : promotionList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<PublishSortLog> logs = sortLogMap.get(data.getGhId()).get(data.getDateStr()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (CollectionUtils.isEmpty(logs)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String sourceId = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (PublishSortLog publishSortLog : logs) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (data.getTitle().equals(publishSortLog.getTitle())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sourceId = publishSortLog.getSourceId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!StringUtils.hasText(sourceId)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PublishSingleVideoSource singleVideoSource = publishSingleVideoSourceRepository.getByContentTraceId(sourceId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (singleVideoSource == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PublishSingleVideoSource upLevel = new PublishSingleVideoSource(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BeanUtils.copyProperties(singleVideoSource, upLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            singleVideoSource.setBadStatus(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            singleVideoSource.setUpLevelTimestamp(System.currentTimeMillis() / 1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            publishSingleVideoSourceRepository.save(singleVideoSource); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            upLevel.setId(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            upLevel.setContentTraceId("video" + UUID.randomUUID().toString().replace("-", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            upLevel.setFlowPoolLevel(poolLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            publishSingleVideoSourceRepository.save(upLevel); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |