wangyunpeng 9 ore fa
parent
commit
ec17af4b9c

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

@@ -13,8 +13,12 @@ public class CategoryGroupFunnelExport {
     private Double auditRate;
     private Long videoAuditPassCount;
     private Double videoAuditPassRate;
+    private Double supplyDemandProportion;
+    private Double auditPassTotalProportion;
+    private Double auditPassSupplyDemandRate;
     private Double readRate;
     private Double openRate;
     private Double fissionRate;
+    private Double viewCountProportion;
 
 }

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

@@ -60,6 +60,8 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
 
 import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -3890,9 +3892,13 @@ public class DataDashboardService {
                 .asList(
                         Pair.of("G", "0%"),
                         Pair.of("I", "0%"),
-                        Pair.of("J", "0.00%"),
+                        Pair.of("J", "0%"),
                         Pair.of("K", "0%"),
-                        Pair.of("L", "0%")
+                        Pair.of("L", "0%"),
+                        Pair.of("M", "0%"),
+                        Pair.of("N", "0%"),
+                        Pair.of("O", "0%"),
+                        Pair.of("P", "0%")
                 );
         doSendFeishuSheet(dateStrList, dailyDetailSheetToken, "0Lwz8A", rowNum, rows,
                 2, styles, null, null);
@@ -3911,7 +3917,7 @@ public class DataDashboardService {
         for (CategoryGroupFunnelExport item : matchCategoryList) {
             item.setDateStr(dateStr);
             if (Objects.nonNull(item.getMatchCount()) && item.getMatchCount() > 0) {
-                item.setMatchSuccessRate((double) item.getMatchSuccessCount() / item.getMatchCount());
+                item.setMatchSuccessRate(round((double) item.getMatchSuccessCount() / item.getMatchCount(), 2));
             }
             result.add(item);
         }
@@ -3929,25 +3935,76 @@ public class DataDashboardService {
             export.setVideoAuditCount(item.getVideoAuditCount());
             if (Objects.nonNull(export.getMatchSuccessCount()) && export.getMatchSuccessCount() > 0
                     && Objects.nonNull(export.getVideoAuditCount())) {
-                export.setAuditRate((double) export.getVideoAuditCount() / export.getMatchSuccessCount());
+                export.setAuditRate(round((double) export.getVideoAuditCount() / export.getMatchSuccessCount(), 2));
             }
             if (Objects.nonNull(export.getVideoAuditCount()) && export.getVideoAuditCount() > 0) {
-                export.setVideoAuditPassRate((double) export.getVideoAuditPassCount() / export.getVideoAuditCount());
+                export.setVideoAuditPassRate(round((double) export.getVideoAuditPassCount() / export.getVideoAuditCount(), 2));
             }
         }
         List<CategoryGroupDataExport> dataList = buildCategoryGroupDataExport(dateStr);
         Map<String, CategoryGroupDataExport> categoryDataMap = dataList.stream().filter(o -> o.getPosition().equals("头条"))
                 .collect(Collectors.toMap(CategoryGroupDataExport::getCategory, Function.identity()));
+        long auditPassTotal = result.stream().filter(o -> Objects.nonNull(o.getVideoAuditPassCount()))
+                .mapToLong(CategoryGroupFunnelExport::getVideoAuditPassCount).sum();
+        int viewCountTotal = dataList.stream().filter(o -> o.getPosition().equals("头条"))
+                .filter(o -> Objects.nonNull(o.getViewCount()))
+                .mapToInt(CategoryGroupDataExport::getViewCount).sum();
+
+        List<String> dateStrList = DateUtils.getBeforeDays(null, dateStr, 7);
+        List<CategoryGroupDataExport> dataSevenDaysList = new ArrayList<>();
+        for (String dt : dateStrList) {
+            dataSevenDaysList.addAll(buildCategoryGroupDataExport(dt));
+        }
+        int sevenSumViewCount = dataSevenDaysList.stream().filter(o -> o.getPosition().equals("头条"))
+                .filter(o -> Objects.nonNull(o.getViewCount()))
+               .mapToInt(CategoryGroupDataExport::getViewCount).sum();
+        Map<String, List<CategoryGroupDataExport>> categoryDataSevenDaysMap = dataSevenDaysList.stream().filter(o -> o.getPosition().equals("头条"))
+                .collect(Collectors.groupingBy(CategoryGroupDataExport::getCategory));
         for (CategoryGroupFunnelExport export : result) {
             CategoryGroupDataExport data = categoryDataMap.get(export.getCategory());
             if (Objects.nonNull(data)) {
                 export.setReadRate(data.getReadRate());
                 export.setOpenRate(data.getOpenRate());
                 export.setFissionRate(data.getFissionRate());
-            }
-        }
-
-        // sum
+                if (viewCountTotal > 0 && Objects.nonNull(data.getViewCount())) {
+                    export.setViewCountProportion(round((double) data.getViewCount() / viewCountTotal, 2));
+                }
+            }
+            List<CategoryGroupDataExport> sevenDaysCategoryDataList = categoryDataSevenDaysMap.get(export.getCategory());
+            if (CollectionUtil.isNotEmpty(sevenDaysCategoryDataList)) {
+                int sevenDaysViewCount = sevenDaysCategoryDataList.stream().filter(o -> Objects.nonNull(o.getViewCount()))
+                       .mapToInt(CategoryGroupDataExport::getViewCount).sum();
+                if (sevenSumViewCount > 0) {
+                    export.setSupplyDemandProportion(round((double) sevenDaysViewCount / sevenSumViewCount, 2));
+                }
+            }
+            if (Objects.nonNull(export.getVideoAuditPassCount()) && auditPassTotal > 0) {
+                export.setAuditPassTotalProportion(round((double) export.getVideoAuditPassCount() / auditPassTotal, 2));
+            }
+            if (Objects.nonNull(export.getSupplyDemandProportion())
+                    && export.getSupplyDemandProportion() > 0
+                    && Objects.nonNull(export.getAuditPassTotalProportion())) {
+                export.setAuditPassSupplyDemandRate(round(export.getAuditPassTotalProportion() / export.getSupplyDemandProportion(), 2));
+            }
+        }
+        List<String> categorySort = Arrays.asList("历史人物","国家大事","社会法治","奇闻趣事","现代人物","情感故事","家长里短","怀旧时光","社会现象","名人八卦","知识科普","军事历史","健康养生","政治新闻","财经科技");
+        // 创建自定义排序比较器
+        Comparator<CategoryGroupFunnelExport> comparator = (o1, o2) -> {
+            int index1 = categorySort.indexOf(o1.getCategory());
+            int index2 = categorySort.indexOf(o2.getCategory());
+            // 处理未出现在排序列表中的分类(放到最后)
+            if (index1 == -1) index1 = Integer.MAX_VALUE;
+            if (index2 == -1) index2 = Integer.MAX_VALUE;
+            return Integer.compare(index1, index2);
+        };
+        // 使用自定义排序器进行排序
+        result.sort(comparator);
         return result;
     }
+
+    private double round(double value, int places) {
+        BigDecimal bd = BigDecimal.valueOf(value);
+        bd = bd.setScale(places, RoundingMode.HALF_UP);
+        return bd.doubleValue();
+    }
 }