Parcourir la source

头尾小程序表现导出

wangyunpeng il y a 3 mois
Parent
commit
cfac20b52e

+ 19 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/FirstEndMiniprogramFirstLevelExport.java

@@ -0,0 +1,19 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Data;
+
+@Data
+public class FirstEndMiniprogramFirstLevelExport {
+    private String dateStr;
+    private String accountName;
+    private String title;
+    private Integer position;
+    private Integer viewCount;
+    private Integer totalFirstLevel;
+    private Integer card1FirstLevel;
+    private Integer card1T0Fission;
+    private Double card1OpenRate;
+    private Integer card2FirstLevel;
+    private Integer card2T0Fission;
+    private Double card2OpenRate;
+}

+ 1 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/crawler/ArticleDetailInfoRepository.java

@@ -9,5 +9,5 @@ import java.util.List;
 @Repository
 public interface ArticleDetailInfoRepository extends JpaRepository<ArticleDetailInfo, ArticleDetailInfo.PK> {
 
-    List<ArticleDetailInfo> getAllByWxSnIn(List<String> wxSnList);
+    List<ArticleDetailInfo> getByWxSnIn(List<String> wxSnList);
 }

+ 2 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/crawler/ArticleRepository.java

@@ -19,6 +19,8 @@ public interface ArticleRepository extends JpaRepository<Article, String> {
     List<Article> getByGhIdInAndAppMsgIdInAndItemIndexAndTypeEqualsAndStatusEquals(Set<String> ghIds, Set<String> appMsgIds,
                                                                                    Integer itemIndex, String type, Integer status);
 
+    List<Article> getByPublishTimestampBetween(Long publishTimestampStart, Long publishTimestampEnd);
+
     List<Article> getByGhIdInAndPublishTimestampBetweenAndTypeEquals(List<String> ghIds, Long publishTimestampStart, Long publishTimestampEnd, String type);
 
     List<Article> getByGhIdInAndPublishTimestampGreaterThanAndTypeEquals(List<String> ghIds, Long publishTimestamp, String type);

+ 122 - 3
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recommend/DataDashboardService.java

@@ -209,7 +209,7 @@ public class DataDashboardService {
         Set<String> snList = articleList.stream().map(Article::getWxSn).collect(Collectors.toSet());
         List<ArticleDetailInfo> articleDetailInfoList = new ArrayList<>();
         for (List<String> partitions : Lists.partition(new ArrayList<>(snList), 1000)) {
-            articleDetailInfoList.addAll(articleDetailInfoRepository.getAllByWxSnIn(partitions));
+            articleDetailInfoList.addAll(articleDetailInfoRepository.getByWxSnIn(partitions));
         }
         log.info("newSortStrategyData articleDetailInfoList finish");
         Map<String, List<ArticleDetailInfo>> articleDetailInfoMap = articleDetailInfoList.stream()
@@ -354,7 +354,7 @@ public class DataDashboardService {
         List<ArticleDetailInfo> hisArticleDetailInfoList = new ArrayList<>();
         List<List<String>> hisSnPartition = Lists.partition(new ArrayList<>(hisWxSnList), 1000);
         for (List<String> sns : hisSnPartition) {
-            hisArticleDetailInfoList.addAll(articleDetailInfoRepository.getAllByWxSnIn(sns));
+            hisArticleDetailInfoList.addAll(articleDetailInfoRepository.getByWxSnIn(sns));
         }
         log.info("newSortStrategyData hisArticleDetailInfoList finish");
         Map<String, List<ArticleDetailInfo>> hisArticleDetailInfoMap = hisArticleDetailInfoList.stream()
@@ -1110,7 +1110,7 @@ public class DataDashboardService {
         List<String> wxSnList = articleList.stream().map(Article::getWxSn).distinct().collect(Collectors.toList());
         List<ArticleDetailInfo> articleDetailInfoList = new ArrayList<>();
         for (List<String> partitions : Lists.partition(wxSnList, 1000)) {
-            articleDetailInfoList.addAll(articleDetailInfoRepository.getAllByWxSnIn(partitions));
+            articleDetailInfoList.addAll(articleDetailInfoRepository.getByWxSnIn(partitions));
         }
         Map<String, List<ArticleDetailInfo>> articleDetailInfoMap = articleDetailInfoList.stream()
                 .collect(Collectors.groupingBy(ArticleDetailInfo::getWxSn));
@@ -2604,4 +2604,123 @@ public class DataDashboardService {
         return sum;
     }
 
+    @XxlJob("firstEndMiniprogramFirstLevel")
+    public ReturnT<String> firstEndMiniprogramFirstLevelJob(String param) {
+        List<String> dateStrList = DateUtils.getBeforeDays(null, null, 1);
+        firstEndMiniprogramFirstLevel(dateStrList);
+        return ReturnT.SUCCESS;
+    }
+
+    public void firstEndMiniprogramFirstLevel(String dateStr) {
+        List<String> dateStrList = DateUtils.getBeforeDays(dateStr, null, 1);
+        if (!StringUtils.hasText(dateStr)) {
+            dateStrList = DateUtils.getBeforeDays(null, null, 1);
+        }
+        firstEndMiniprogramFirstLevel(dateStrList);
+    }
+
+    public void firstEndMiniprogramFirstLevel(List<String> dateStrList) {
+        String minDate = dateStrList.stream().min(String::compareTo).orElse("");
+        String maxDate = dateStrList.stream().max(String::compareTo).orElse("");
+        List<FirstEndMiniprogramFirstLevelExport> exportList = getFirstEndMiniprogramFirstLevelExport(minDate, maxDate);
+        if (CollectionUtil.isEmpty(exportList)) {
+            return;
+        }
+        exportList.sort(Comparator.comparing(FirstEndMiniprogramFirstLevelExport::getDateStr).reversed()
+                .thenComparing(FirstEndMiniprogramFirstLevelExport::getAccountName)
+                .thenComparing(FirstEndMiniprogramFirstLevelExport::getPosition));
+
+        int rowNum = exportList.size();
+        List<List<Object>> rows = new ArrayList<>();
+        Field[] fields = FirstEndMiniprogramFirstLevelExport.class.getDeclaredFields();
+        for (FirstEndMiniprogramFirstLevelExport datum : exportList) {
+            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("I", "0.00%"),
+                        Pair.of("L", "0.00%")
+                );
+
+        doSendFeishuSheet(dateStrList, dailyDetailSheetToken, "QTZqGq", rowNum, rows,
+                2, styles, null, null);
+    }
+
+    private List<FirstEndMiniprogramFirstLevelExport> getFirstEndMiniprogramFirstLevelExport(String beginDate, String endDate) {
+        List<FirstEndMiniprogramFirstLevelExport> result = new ArrayList<>();
+        long beginTimestamp = DateUtils.dateStrToTimestamp(beginDate, "yyyyMMdd");
+        long endTimestamp = DateUtils.dateStrToTimestamp(endDate, "yyyyMMdd") + 86400;
+        List<Article> articleList = articleRepository.getByPublishTimestampBetween(beginTimestamp, endTimestamp);
+        List<String> wxSnList = articleList.stream().map(Article::getWxSn).collect(Collectors.toList());
+        List<ArticleDetailInfo> articleDetailInfoList = new ArrayList<>();
+        for (List<String> partitions : Lists.partition(wxSnList, 1000)) {
+            articleDetailInfoList.addAll(articleDetailInfoRepository.getByWxSnIn(partitions));
+        }
+        Map<String, List<ArticleDetailInfo>> articleDetailInfoMap = articleDetailInfoList.stream()
+                .collect(Collectors.groupingBy(ArticleDetailInfo::getWxSn));
+
+        for (Article article : articleList) {
+            FirstEndMiniprogramFirstLevelExport item = new FirstEndMiniprogramFirstLevelExport();
+            item.setDateStr(DateUtils.timestampToYMDStr(article.getPublishTimestamp(), "yyyyMMdd"));
+            item.setAccountName(article.getAccountName());
+            item.setTitle(article.getTitle());
+            item.setPosition(article.getItemIndex());
+            item.setViewCount(article.getShowViewCount());
+
+            if (Objects.isNull(item.getViewCount()) || item.getViewCount() == 0) {
+                continue;
+            }
+            List<ArticleDetailInfo> detailInfoList = articleDetailInfoMap.get(article.getWxSn());
+            if (CollectionUtil.isNotEmpty(detailInfoList)) {
+                int totalFirstLevel = 0;
+                int card1FirstLevel = 0;
+                int card1T0Fission = 0;
+                int card2FirstLevel = 0;
+                int card2T0Fission = 0;
+                for (ArticleDetailInfo articleDetailInfo : detailInfoList) {
+                    if (Objects.isNull(articleDetailInfo.getFirstLevel())) {
+                        continue;
+                    }
+                    if (articleDetailInfo.getVideoIndex() == 1) {
+                        card1FirstLevel += articleDetailInfo.getFirstLevel();
+                        if (Objects.nonNull(articleDetailInfo.getFission0())) {
+                            card1T0Fission += articleDetailInfo.getFission0();
+                        }
+                    } else if (articleDetailInfo.getVideoIndex() == 2) {
+                        card2FirstLevel += articleDetailInfo.getFirstLevel();
+                        if (Objects.nonNull(articleDetailInfo.getFission0())) {
+                            card2T0Fission += articleDetailInfo.getFission0();
+                        }
+                    }
+                    totalFirstLevel += articleDetailInfo.getFirstLevel();
+                }
+                item.setTotalFirstLevel(totalFirstLevel);
+                item.setCard1FirstLevel(card1FirstLevel);
+                item.setCard1T0Fission(card1T0Fission);
+                item.setCard2FirstLevel(card2FirstLevel);
+                item.setCard2T0Fission(card2T0Fission);
+                if (Objects.nonNull(item.getViewCount()) && item.getViewCount() > 0) {
+                    item.setCard1OpenRate(card1FirstLevel * 1.0 / item.getViewCount());
+                    item.setCard2OpenRate(card2FirstLevel * 1.0 / item.getViewCount());
+                }
+            } else {
+                continue;
+            }
+            result.add(item);
+        }
+        return result;
+    }
+
 }

+ 7 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/web/recommend/DataDashboardController.java

@@ -78,4 +78,11 @@ public class DataDashboardController {
         }).start();
     }
 
+    @GetMapping("/export/firstEndMiniprogramFirstLevel")
+    public void firstEndMiniprogramFirstLevel(String dateStr) {
+        new Thread(() -> {
+            service.firstEndMiniprogramFirstLevel(dateStr);
+        }).start();
+    }
+
 }

+ 1 - 1
long-article-recommend-service/src/test/java/com/tzld/longarticle/recommend/server/RecommendTest.java

@@ -213,7 +213,7 @@ public class RecommendTest {
         accountAvgInfoList = accountAvgInfoList.stream().filter(o -> o.getPosition().equals("1")).collect(Collectors.toList());
         Map<String, AccountAvgInfo> accountAvgInfoMap = accountAvgInfoList.stream().collect(Collectors.toMap(AccountAvgInfo::getGhId, o -> o));
         List<String> wxSnList = articleList.stream().map(Article::getWxSn).collect(Collectors.toList());
-        List<ArticleDetailInfo> articleDetailInfoList = articleDetailInfoRepository.getAllByWxSnIn(wxSnList);
+        List<ArticleDetailInfo> articleDetailInfoList = articleDetailInfoRepository.getByWxSnIn(wxSnList);
         Map<String, List<ArticleDetailInfo>> articleDetailInfoMap = articleDetailInfoList.stream()
                 .collect(Collectors.groupingBy(ArticleDetailInfo::getWxSn));
         JSONArray result = new JSONArray();