| 
														
															@@ -5,12 +5,16 @@ import com.tzld.longarticle.recommend.server.model.Content; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.model.ContentHisPublishArticle; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.model.ContentHisPublishArticle; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.remote.AIGCRemoteService; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.remote.AIGCRemoteService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.repository.aigc.CrawlerMetaArticleRepository; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.repository.aigc.CrawlerMetaArticleRepository; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import com.tzld.longarticle.recommend.server.repository.crawler.AccountAvgInfoRepository; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import com.tzld.longarticle.recommend.server.repository.crawler.ArticleDetailInfoRepository; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.repository.crawler.ArticleRepository; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.repository.crawler.ArticleRepository; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.repository.entity.aigc.CrawlerMetaArticle; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.repository.entity.aigc.CrawlerMetaArticle; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import com.tzld.longarticle.recommend.server.repository.entity.crawler.AccountAvgInfo; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.repository.entity.crawler.Article; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.repository.entity.crawler.Article; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import com.tzld.longarticle.recommend.server.repository.entity.crawler.ArticleDetailInfo; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import com.tzld.longarticle.recommend.server.repository.mapper.crawler.CrawlerBaseMapper; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.service.AccountIndexAvgViewCountService; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.service.AccountIndexAvgViewCountService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.service.recall.strategy.DefaultRecallStrategy; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.service.recall.strategy.DefaultRecallStrategy; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import com.tzld.longarticle.recommend.server.service.score.AvgReadDTO; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.util.CommonCollectionUtils; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.util.CommonCollectionUtils; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.util.JSONUtils; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.util.JSONUtils; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import com.tzld.longarticle.recommend.server.util.Md5Util; 
														 | 
														
														 | 
														
															 import com.tzld.longarticle.recommend.server.util.Md5Util; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -41,11 +45,17 @@ public class RecallService implements ApplicationContextAware { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Autowired 
														 | 
														
														 | 
														
															     @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     ArticleRepository articleRepository; 
														 | 
														
														 | 
														
															     ArticleRepository articleRepository; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Autowired 
														 | 
														
														 | 
														
															     @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    AccountAvgInfoRepository accountAvgInfoRepository; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    ArticleDetailInfoRepository articleDetailInfoRepository; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     CrawlerMetaArticleRepository crawlerMetaArticleRepository; 
														 | 
														
														 | 
														
															     CrawlerMetaArticleRepository crawlerMetaArticleRepository; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Autowired 
														 | 
														
														 | 
														
															     @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     AIGCRemoteService aigcRemoteService; 
														 | 
														
														 | 
														
															     AIGCRemoteService aigcRemoteService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Autowired 
														 | 
														
														 | 
														
															     @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     AccountIndexAvgViewCountService accountIndexAvgViewCountService; 
														 | 
														
														 | 
														
															     AccountIndexAvgViewCountService accountIndexAvgViewCountService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    CrawlerBaseMapper crawlerBaseMapper; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private final Map<String, RecallStrategy> strategyMap = new HashMap<>(); 
														 | 
														
														 | 
														
															     private final Map<String, RecallStrategy> strategyMap = new HashMap<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private ApplicationContext applicationContext; 
														 | 
														
														 | 
														
															     private ApplicationContext applicationContext; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -177,12 +187,29 @@ public class RecallService implements ApplicationContextAware { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public void setTitleAvgViewCount(List<Content> contentList) { 
														 | 
														
														 | 
														
															     public void setTitleAvgViewCount(List<Content> contentList) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         long start = System.currentTimeMillis(); 
														 | 
														
														 | 
														
															         long start = System.currentTimeMillis(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        List<String> titleList = contentList.stream().map(Content::getTitle).collect(Collectors.toList()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        List<String> crawlerTitleList = contentList.stream().map(Content::getCrawlerTitle).collect(Collectors.toList()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Set<String> titleList = contentList.stream().map(Content::getTitle).collect(Collectors.toSet()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Set<String> crawlerTitleList = contentList.stream().map(Content::getCrawlerTitle).collect(Collectors.toSet()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         titleList.addAll(crawlerTitleList); 
														 | 
														
														 | 
														
															         titleList.addAll(crawlerTitleList); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // 获取历史已发布文章 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         List<Article> hisArticleList = articleRepository.getByTitleIn(titleList); 
														 | 
														
														 | 
														
															         List<Article> hisArticleList = articleRepository.getByTitleIn(titleList); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         Map<String, Map<Integer, List<Article>>> map = hisArticleList.stream() 
														 | 
														
														 | 
														
															         Map<String, Map<Integer, List<Article>>> map = hisArticleList.stream() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 .collect(Collectors.groupingBy(Article::getTitle, Collectors.groupingBy(Article::getItemIndex))); 
														 | 
														
														 | 
														
															                 .collect(Collectors.groupingBy(Article::getTitle, Collectors.groupingBy(Article::getItemIndex))); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Set<String> snList = hisArticleList.stream().map(Article::getWxSn).collect(Collectors.toSet()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        List<ArticleDetailInfo> articleDetailInfoList = articleDetailInfoRepository.getAllByWxSnIn(snList); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Map<String, List<ArticleDetailInfo>> articleDetailInfoMap = articleDetailInfoList.stream() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                .collect(Collectors.groupingBy(ArticleDetailInfo::getWxSn)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // 获取历史已发布文章所属头条内容 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Set<String> ghIds = hisArticleList.stream().map(Article::getGhId).collect(Collectors.toSet()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Set<String> appMsgIds = hisArticleList.stream().map(Article::getAppMsgId).collect(Collectors.toSet()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        List<Article> firstIndexHisArticleList = articleRepository.getByGhIdInAndAppMsgIdInAndItemIndex(ghIds, appMsgIds, 1); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Map<String, Map<String, Article>> firstIndexHisArticleMap = firstIndexHisArticleList.stream().collect( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Collectors.groupingBy(Article::getGhId, Collectors.toMap(Article::getAppMsgId, o -> o))); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // 获取发布账号 位置历史均值 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        List<AccountAvgInfo> accountAvgInfoList = accountAvgInfoRepository.getAllByGhIdIn(ghIds); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Map<String, Map<String, AccountAvgInfo>> accountAvgInfoIndexMap = accountAvgInfoList.stream().collect( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Collectors.groupingBy(AccountAvgInfo::getGhId, Collectors.toMap(AccountAvgInfo::getPosition, o -> o))); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Map<String, AccountAvgInfo> firstIndexAvgInfoMap = accountAvgInfoList.stream().filter(o -> "1".equals(o.getPosition())) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                .collect(Collectors.toMap(AccountAvgInfo::getGhId, o -> o)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         for (Content content : contentList) { 
														 | 
														
														 | 
														
															         for (Content content : contentList) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             List<Article> hisArticles = new ArrayList<>(); 
														 | 
														
														 | 
														
															             List<Article> hisArticles = new ArrayList<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             Map<Integer, List<Article>> indexArticleMap = map.get(content.getTitle()); 
														 | 
														
														 | 
														
															             Map<Integer, List<Article>> indexArticleMap = map.get(content.getTitle()); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -212,22 +239,94 @@ public class RecallService implements ApplicationContextAware { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             for (Article hisArticle : hisArticles) { 
														 | 
														
														 | 
														
															             for (Article hisArticle : hisArticles) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 ContentHisPublishArticle article = new ContentHisPublishArticle(); 
														 | 
														
														 | 
														
															                 ContentHisPublishArticle article = new ContentHisPublishArticle(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 BeanUtils.copyProperties(hisArticle, article); 
														 | 
														
														 | 
														
															                 BeanUtils.copyProperties(hisArticle, article); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                AvgReadDTO dto = accountIndexAvgViewCountService.getAvgReadDto(hisArticle.getGhId() + "_" + hisArticle.getItemIndex()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                article.setViewCount(hisArticle.getShowViewCount()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                article.setArticleDetailInfoList(articleDetailInfoMap.get(hisArticle.getWxSn())); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                // 设置账号位置阅读均值 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 int avgViewCount = 0; 
														 | 
														
														 | 
														
															                 int avgViewCount = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                if (Objects.nonNull(dto)) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Map<String, AccountAvgInfo> indexMap = accountAvgInfoIndexMap.get(hisArticle.getGhId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                if (Objects.nonNull(indexMap) && indexMap.containsKey(hisArticle.getItemIndex().toString())) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     article.setInnerAccount(true); 
														 | 
														
														 | 
														
															                     article.setInnerAccount(true); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                    avgViewCount = (int) dto.getReadAvg(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    avgViewCount = Optional.ofNullable(indexMap.get(hisArticle.getItemIndex().toString()).getReadAvg()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                            .orElse(0.0).intValue(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 } 
														 | 
														
														 | 
														
															                 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 article.setAvgViewCount(avgViewCount); 
														 | 
														
														 | 
														
															                 article.setAvgViewCount(avgViewCount); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                if (Objects.nonNull(article.getAvgViewCount()) && article.getAvgViewCount() > 0) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                    article.setViewCountRate((article.getShowViewCount() * 1.0) / article.getAvgViewCount()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                if (Objects.nonNull(article.getAvgViewCount()) && article.getAvgViewCount() > 0 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                        && Objects.nonNull(article.getViewCount())) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    article.setViewCountRate((article.getViewCount() * 1.0) / article.getAvgViewCount()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                // 设置头条阅读均值 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                AccountAvgInfo firstIndexAvgInfo = firstIndexAvgInfoMap.get(hisArticle.getGhId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                if (Objects.nonNull(firstIndexAvgInfo)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    article.setFans(firstIndexAvgInfo.getFans()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                Map<String, Article> firstIndexArticle = firstIndexHisArticleMap.get(hisArticle.getGhId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                if (Objects.nonNull(firstIndexArticle) && firstIndexArticle.containsKey(hisArticle.getAppMsgId())) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    Article firstArticle = firstIndexArticle.get(hisArticle.getAppMsgId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    article.setFirstViewCount(firstArticle.getShowViewCount()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    if (Objects.nonNull(firstIndexAvgInfo) && Objects.nonNull(firstIndexAvgInfo.getReadAvg()) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                            && firstIndexAvgInfo.getReadAvg() > 0 && Objects.nonNull(firstArticle.getShowViewCount())) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                        article.setFirstViewCountRate((firstArticle.getShowViewCount() * 1.0) / firstIndexAvgInfo.getReadAvg()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 } 
														 | 
														
														 | 
														
															                 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 content.getHisPublishArticleList().add(article); 
														 | 
														
														 | 
														
															                 content.getHisPublishArticleList().add(article); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            // 设置头条阅读均值 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            setT0Data(content); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         log.info("setTitleAvgViewCount cost:{}", System.currentTimeMillis() - start); 
														 | 
														
														 | 
														
															         log.info("setTitleAvgViewCount cost:{}", System.currentTimeMillis() - start); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    private void setT0Data(Content content) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if (CollectionUtils.isEmpty(content.getHisPublishArticleList())) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        int firstLevelSize = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        int fissionSum = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        int fansSum = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        int avgReadCountSum = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Double t0FissionByFansSum = 0.0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Double t0FissionByReadAvgSum = 0.0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        for (ContentHisPublishArticle article : content.getHisPublishArticleList()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (article.getItemIndex() != 1 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    || CollectionUtils.isEmpty(article.getArticleDetailInfoList())) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                continue; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            int sumFission = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            Date minDate = article.getArticleDetailInfoList().stream().map(ArticleDetailInfo::getRecallDt).min(Date::compareTo).orElse(new Date()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            for (ArticleDetailInfo articleDetailInfo : article.getArticleDetailInfoList()) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                if (articleDetailInfo.getRecallDt().equals(minDate) && Objects.nonNull(articleDetailInfo.getFission0())) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    sumFission += articleDetailInfo.getFission0(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (sumFission == 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                continue; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            article.setT0FissionSum(sumFission); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (article.getFans() > 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                article.setT0FissionByFans(sumFission * 1.0 / article.getFans()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                fansSum += (int) article.getFans(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                t0FissionByFansSum += article.getT0FissionByFans(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (Objects.nonNull(article.getAvgViewCount()) && article.getAvgViewCount() > 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                article.setT0FissionByReadAvg(sumFission * 1.0 / article.getAvgViewCount()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                avgReadCountSum += article.getAvgViewCount(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                t0FissionByReadAvgSum += article.getT0FissionByReadAvg(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            fissionSum += sumFission; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            firstLevelSize++; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if (firstLevelSize > 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            content.setT0FissionByFansMean(t0FissionByFansSum / firstLevelSize); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            content.setT0FissionByReadAvgMean(t0FissionByReadAvgSum / firstLevelSize); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (fansSum > 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                content.setT0FissionByFansSumAvg(fissionSum * 1.0 / fansSum); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            if (avgReadCountSum > 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                content.setT0FissionByReadAvgSumAvg(fissionSum * 1.0 / avgReadCountSum); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     public static void main(String[] args) { 
														 | 
														
														 | 
														
															     public static void main(String[] args) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         String url = "http://mp.weixin.qq.com/s?__biz=Mzg2ODk4MTg3OQ==&mid=2247488306&idx=1&sn=93ebadc5bc7161a0dee48355013d3bc4&chksm=cfb6c1cb2bcdd80dd16d5d604d741a0019ae791125265a042d26100ba21ddb9e5c643ecc2264&scene=126&sessionid=1679649075#rd"; 
														 | 
														
														 | 
														
															         String url = "http://mp.weixin.qq.com/s?__biz=Mzg2ODk4MTg3OQ==&mid=2247488306&idx=1&sn=93ebadc5bc7161a0dee48355013d3bc4&chksm=cfb6c1cb2bcdd80dd16d5d604d741a0019ae791125265a042d26100ba21ddb9e5c643ecc2264&scene=126&sessionid=1679649075#rd"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         String md5 = generateArticleUniqueMd5(url); 
														 | 
														
														 | 
														
															         String md5 = generateArticleUniqueMd5(url); 
														 |