| 
					
				 | 
			
			
				@@ -18,6 +18,7 @@ import com.tzld.longarticle.recommend.server.model.entity.crawler.PublishSortLog 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.entity.longArticle.DatastatSortStrategy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.param.MiniprogramTaskParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.param.PublishContentParam; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.tzld.longarticle.recommend.server.model.vo.FirstContentScoreExport; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.vo.IntermediateIndicatorsExport; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.vo.NewSortStrategyExport; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.tzld.longarticle.recommend.server.model.vo.ProduceAuditLayoutContentObjVO; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -459,8 +460,8 @@ public class DataDashboardService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<Article> hisArticles = hisArticleMap.getOrDefault(article.getTitle(), new ArrayList<>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             hisArticles = hisArticles.stream().filter(o -> o.getUpdateTime() < (article.getUpdateTime() - 3600 * 8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && (1 == o.getItemIndex() || 2 == o.getItemIndex()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            && !ScoreStrategy.hisContentLateFilter(o.getUpdateTime())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    && (1 == o.getItemIndex() || 2 == o.getItemIndex()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    && !ScoreStrategy.hisContentLateFilter(o.getUpdateTime())).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Integer readCount = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Double readAvgCount = 0.0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int firstCount = 0; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1317,4 +1318,131 @@ public class DataDashboardService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @XxlJob("scheduleExportFirstContentScore") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public ReturnT<String> scheduleExportFirstContentScore(String param) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> dateStrList = DateUtils.getBeforeDays(null, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        exportFeishuFirstContentScore(dateStrList, sheetToken, "XBFd16"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return ReturnT.SUCCESS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void firstContentScoreExport(String dateStr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> dateStrList = DateUtils.getBeforeDays(dateStr, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        exportFeishuFirstContentScore(dateStrList, sheetToken, "XBFd16"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void exportFeishuFirstContentScore(List<String> dateStrList, String sheetToken, String sheetId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<FirstContentScoreExport> scoreDataList = firstContentScoreData(dateStrList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (CollectionUtil.isEmpty(scoreDataList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int rowNum = scoreDataList.size(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<List<Object>> rows = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Field[] fields = FirstContentScoreExport.class.getDeclaredFields(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (FirstContentScoreExport datum : scoreDataList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Object> rowDatas = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            rows.add(rowDatas); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Field field : fields) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                field.setAccessible(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    rowDatas.add(field.get(datum)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } catch (IllegalAccessException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    log.error("获取值出错:{}", field.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    throw new RuntimeException(e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Pair<String, String>> styles = Arrays 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .asList( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("F", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("G", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("H", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("I", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("J", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("K", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("L", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("M", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("N", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("O", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("P", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("Q", "#,##0.00"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Pair.of("T", "#,##0.00") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        doSendFeishuSheet(dateStrList, sheetToken, sheetId, rowNum, rows, 2, styles); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private List<FirstContentScoreExport> firstContentScoreData(List<String> dateStrList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<FirstContentScoreExport> result = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<PublishSortLog> sortLogList = publishSortLogRepository.findByDateStrIn(dateStrList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sortLogList = sortLogList.stream().filter(o -> o.getIndex() == 1).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sortLogList.sort(Comparator.comparing(PublishSortLog::getGhId).thenComparing(PublishSortLog::getDateStr)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<String> ghIds = sortLogList.stream().map(PublishSortLog::getGhId).distinct().collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        long minTimestamp = DateUtils.dateStrToTimestamp(dateStrList.get(0), "yyyyMMdd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Article> articleList = articleRepository.getByGhIdInAndUpdateTimeGreaterThanAndTypeEquals(ghIds, minTimestamp, "9"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        articleList = articleList.stream().filter(o -> o.getItemIndex() == 1).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Map<String, Article>> articleMap = articleList.stream().collect( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Collectors.groupingBy(Article::getGhId, Collectors.toMap( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        o -> DateUtils.timestampToYMDStr(o.getUpdateTime(), "yyyyMMdd"), o -> o, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        (existing, replacement) -> replacement))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String ymd = DateUtils.timestampToYMDStr(minTimestamp - 86400 * 7, "yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AccountAvgInfo> accountAvgInfoList = accountAvgInfoRepository.getAllByUpdateTimeGreaterThanEqual(ymd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Map<String, AccountAvgInfo>> accountAvgInfoMap = accountAvgInfoList.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .filter(o -> Objects.equals(o.getPosition(), "1")).collect(Collectors.groupingBy(AccountAvgInfo::getGhId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Collectors.toMap(AccountAvgInfo::getUpdateTime, o -> o))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String title = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (PublishSortLog publishSortLog : sortLogList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, Article> dateArticleMap = articleMap.get(publishSortLog.getGhId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (Objects.isNull(dateArticleMap)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Article article = dateArticleMap.get(publishSortLog.getDateStr()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (Objects.isNull(article) || !publishSortLog.getTitle().equals(article.getTitle())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (publishSortLog.getTitle().equals(title)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            FirstContentScoreExport item = new FirstContentScoreExport(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            title = publishSortLog.getTitle(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setDateStr(publishSortLog.getDateStr()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setGhId(publishSortLog.getGhId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setAccountName(publishSortLog.getAccountName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setTitle(publishSortLog.getTitle()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setStrategy(publishSortLog.getStrategy()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setScore(Double.valueOf(publishSortLog.getScore())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JSONObject scoreMap = JSONObject.parseObject(publishSortLog.getScoreMap()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setHisFissionFansRateRateStrategy(scoreMap.getDoubleValue("HisFissionFansRateRateStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setHisFissionAvgReadRateRateStrategy(scoreMap.getDoubleValue("HisFissionAvgReadRateRateStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setPublishTimesStrategy(scoreMap.getDoubleValue("PublishTimesStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setViewCountRateCorrelationStrategy(scoreMap.getDoubleValue("ViewCountRateCorrelationStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setHisFissionAvgReadSumRateStrategy(scoreMap.getDoubleValue("HisFissionAvgReadSumRateStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setHisFissionAvgReadRateCorrelationRateStrategy(scoreMap.getDoubleValue("HisFissionAvgReadRateCorrelationRateStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setHisFissionFansSumRateStrategy(scoreMap.getDoubleValue("HisFissionFansSumRateStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setSimilarityStrategy(scoreMap.getDoubleValue("SimilarityStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setViewCountStrategy(scoreMap.getDoubleValue("ViewCountStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setViewCountRateStrategy(scoreMap.getDoubleValue("ViewCountRateStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setHisFissionDeWeightAvgReadSumRateStrategy(scoreMap.getDoubleValue("HisFissionDeWeightAvgReadSumRateStrategy")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.setReadCount(article.getShowViewCount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, AccountAvgInfo> map = accountAvgInfoMap.get(article.getGhId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (Objects.nonNull(map)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<String> avgMapDateList = new ArrayList<>(map.keySet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String publishDate = DateUtils.findNearestDate(avgMapDateList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        DateUtils.timestampToYMDStr(article.getUpdateTime(), "yyyy-MM-dd"), "yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AccountAvgInfo accountAvgInfo = map.get(publishDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (Objects.nonNull(accountAvgInfo)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    item.setReadAvg(accountAvgInfo.getReadAvg()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    item.setReadAvgRate(article.getShowViewCount() / (double) accountAvgInfo.getReadAvg()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result.add(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        result.sort(Comparator.comparing(FirstContentScoreExport::getDateStr).reversed() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .thenComparing(FirstContentScoreExport::getGhId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |