فهرست منبع

导出显示次日第三日裂变数据

wangyunpeng 10 ماه پیش
والد
کامیت
8777a3c1cc

+ 11 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/NewSortStrategyExport.java

@@ -19,10 +19,21 @@ public class NewSortStrategyExport {
     private Double avgViewCount;
     private Integer firstViewCount;
     private Double firstAvgViewCount;
+    // 首日
     private Integer firstLevel;
     private Integer fission0;
     private Integer fission1;
     private Integer fission2;
+    // 次日
+    private Integer secondFirstLevel;
+    private Integer secondFission0;
+    private Integer secondFission1;
+    private Integer secondFission2;
+    // 第三日
+    private Integer thirdFirstLevel;
+    private Integer thirdFission0;
+    private Integer thirdFission1;
+    private Integer thirdFission2;
     private Double readRate = 0.0;
     private Double readFansRate = 0.0;
     private Double firstReadRate = 0.0;

+ 18 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/entity/longArticle/DatastatSortStrategy.java

@@ -32,6 +32,8 @@ public class DatastatSortStrategy implements Serializable {
     private String accountType;
     @Column(name = "account_status")
     private String accountStatus;
+    @Column(name = "bussiness_type")
+    private String businessType;
     @Column(name = "strategy")
     private String strategy;
     @Column(name = "fans")
@@ -52,6 +54,22 @@ public class DatastatSortStrategy implements Serializable {
     private Integer fission1;
     @Column(name = "fission2")
     private Integer fission2;
+    @Column(name = "second_first_level")
+    private Integer secondFirstLevel;
+    @Column(name = "second_fission0")
+    private Integer secondFission0;
+    @Column(name = "second_fission1")
+    private Integer secondFission1;
+    @Column(name = "second_fission2")
+    private Integer secondFission2;
+    @Column(name = "third_first_level")
+    private Integer thirdFirstLevel;
+    @Column(name = "third_fission0")
+    private Integer thirdFission0;
+    @Column(name = "third_fission1")
+    private Integer thirdFission1;
+    @Column(name = "third_fission2")
+    private Integer thirdFission2;
     @Column(name = "read_rate")
     private Double readRate;
     @Column(name = "read_fans_rate")

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

@@ -34,12 +34,9 @@ import org.springframework.data.util.Pair;
 import org.springframework.http.*;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
 
 import java.lang.reflect.Field;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -77,39 +74,16 @@ public class DataDashboardService {
     private static final String sheetToken = "M0pLs3uF6hfL0htn2dMcB9eFn8e";
 
     public void export(String dateStr) {
-        List<String> dateStrList = getBeforeThreeDays(dateStr);
+        List<String> dateStrList = DateUtils.getBeforeDays(dateStr, 5);
         exportFeishuNewSortStrategy(dateStrList, sheetToken, "7d4e12");
     }
 
     @Scheduled(cron = "0 0 4 * * ?")
     public void scheduledExport() {
-        List<String> dateStrList = getBeforeThreeDays(null);
+        List<String> dateStrList = DateUtils.getBeforeDays(null, 5);
         exportFeishuNewSortStrategy(dateStrList, sheetToken, "7d4e12");
     }
 
-    private List<String> getBeforeThreeDays(String dateStr) {
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
-        // 获取今天的日期
-        LocalDate today = LocalDate.now();
-        if (!StringUtils.hasText(dateStr)) {
-            dateStr = today.format(formatter);
-        }
-        // 解析输入的日期字符串为LocalDate对象
-        LocalDate date = LocalDate.parse(dateStr, formatter);
-        // 获取从输入日期前三天的日期
-        LocalDate startDate = date.minusDays(3);
-        // 存储所有日期的列表
-        List<String> datesList = new ArrayList<>();
-        // 从startDate到today遍历日期
-        while (!startDate.isAfter(today)) {
-            // 将当前日期格式化为"yyyyMMdd"并添加到列表中
-            datesList.add(startDate.format(formatter));
-            // 日期加1天
-            startDate = startDate.plusDays(1);
-        }
-        return datesList;
-    }
-
 
     private void exportFeishuNewSortStrategy(List<String> dateStrList, String sheetToken, String sheetId) {
         String minDate = dateStrList.stream().min(String::compareTo).orElse("");
@@ -139,15 +113,15 @@ public class DataDashboardService {
 
         List<Pair<String, String>> styles = Arrays
                 .asList(
-                        Pair.of("S", "0.00%"),
-                        Pair.of("T", "0.00%"),
-                        Pair.of("U", "0.00%"),
-                        Pair.of("V", "0.00%"),
-                        Pair.of("W", "0.00%"),
-                        Pair.of("X", "0.00%"),
+                        Pair.of("AA", "0.00%"),
+                        Pair.of("AB", "0.00%"),
+                        Pair.of("AC", "0.00%"),
                         Pair.of("AD", "0.00%"),
                         Pair.of("AE", "0.00%"),
-                        Pair.of("AF", "0.00%")
+                        Pair.of("AF", "0.00%"),
+                        Pair.of("AL", "0.00%"),
+                        Pair.of("AM", "0.00%"),
+                        Pair.of("AN", "0.00%")
                 );
 
         doSendFeishuSheet(dateStrList, sheetToken, sheetId, rowNum, rows, 2, styles);
@@ -277,17 +251,39 @@ public class DataDashboardService {
             Article firstArticle = articleMap.get(article.getGhId()).get(article.getAppMsgId()).get(1);
             Map<String, String> dateStrategy = sortStrategyMap.get(article.getGhId());
             Date minDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).min(Date::compareTo).orElse(new Date());
-            int sumfirstLevel = 0;
+            Date secondDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).filter(o -> o.after(minDate)).min(Date::compareTo).orElse(new Date());
+            Date thirdDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).filter(o -> o.after(secondDate)).min(Date::compareTo).orElse(new Date());
+            int sumFirstLevel = 0;
             int sumFission0 = 0;
             int sumFission1 = 0;
             int sumFission2 = 0;
+            int sumSecondFirstLevel = 0;
+            int sumSecondFission0 = 0;
+            int sumSecondFission1 = 0;
+            int sumSecondFission2 = 0;
+            int sumThirdFirstLevel = 0;
+            int sumThirdFission0 = 0;
+            int sumThirdFission1 = 0;
+            int sumThirdFission2 = 0;
             for (ArticleDetailInfo articleDetailInfo : articleDetailInfos) {
                 if (articleDetailInfo.getRecallDt().equals(minDate)) {
-                    sumfirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
+                    sumFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
                     sumFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
                     sumFission1 += Optional.ofNullable(articleDetailInfo.getFission1()).orElse(0);
                     sumFission2 += Optional.ofNullable(articleDetailInfo.getFission2()).orElse(0);
                 }
+                if (articleDetailInfo.getRecallDt().equals(secondDate)) {
+                    sumSecondFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
+                    sumSecondFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
+                    sumSecondFission1 += Optional.ofNullable(articleDetailInfo.getFission1()).orElse(0);
+                    sumSecondFission2 += Optional.ofNullable(articleDetailInfo.getFission2()).orElse(0);
+                }
+                if (articleDetailInfo.getRecallDt().equals(thirdDate)) {
+                    sumThirdFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
+                    sumThirdFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
+                    sumThirdFission1 += Optional.ofNullable(articleDetailInfo.getFission1()).orElse(0);
+                    sumThirdFission2 += Optional.ofNullable(articleDetailInfo.getFission2()).orElse(0);
+                }
             }
             Map<String, Map<String, AccountAvgInfo>> dateAvgMap = accountAvgInfoIndexMap.get(article.getGhId());
             String hisPublishDate = DateUtils.timestampToYMDStr(article.getUpdateTime(), "yyyy-MM-dd");
@@ -312,10 +308,18 @@ public class DataDashboardService {
             obj.setViewCount(article.getShowViewCount());
             obj.setDateStr(date);
             obj.setPublishTime(DateUtils.timestampToYMDStr(article.getUpdateTime(), "HH:mm:ss"));
-            obj.setFirstLevel(sumfirstLevel);
+            obj.setFirstLevel(sumFirstLevel);
             obj.setFission0(sumFission0);
             obj.setFission1(sumFission1);
             obj.setFission2(sumFission2);
+            obj.setSecondFirstLevel(sumSecondFirstLevel);
+            obj.setSecondFission0(sumSecondFission0);
+            obj.setSecondFission1(sumSecondFission1);
+            obj.setSecondFission2(sumSecondFission2);
+            obj.setThirdFirstLevel(sumThirdFirstLevel);
+            obj.setThirdFission0(sumThirdFission0);
+            obj.setThirdFission1(sumThirdFission1);
+            obj.setThirdFission2(sumThirdFission2);
             obj.setWxSn(article.getWxSn());
             if (Objects.nonNull(firstArticle)) {
                 obj.setFirstViewCount(firstArticle.getShowViewCount());
@@ -345,11 +349,11 @@ public class DataDashboardService {
                     obj.setReadFansRate((article.getShowViewCount() * 1.0) / avgInfo.getFans());
                 }
             }
-            if (sumfirstLevel > 0) {
-                obj.setFission0FirstRate((sumFission0 * 1.0) / sumfirstLevel);
+            if (sumFirstLevel > 0) {
+                obj.setFission0FirstRate((sumFission0 * 1.0) / sumFirstLevel);
             }
             if (article.getShowViewCount() > 0) {
-                obj.setFirstReadRate((sumfirstLevel * 1.0) / article.getShowViewCount());
+                obj.setFirstReadRate((sumFirstLevel * 1.0) / article.getShowViewCount());
             }
             if (sumFission0 > 0) {
                 obj.setFission1Fission0Rate((sumFission1 * 1.0) / sumFission0);

+ 26 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/util/DateUtils.java

@@ -1,5 +1,7 @@
 package com.tzld.longarticle.recommend.server.util;
 
+import org.springframework.util.StringUtils;
+
 import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.time.LocalDate;
@@ -7,6 +9,7 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
@@ -114,6 +117,29 @@ public final class DateUtils {
         return nearestDateStr;  // 返回最近的日期字符串
     }
 
+    public static List<String> getBeforeDays(String dateStr, int days) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        // 获取今天的日期
+        LocalDate today = LocalDate.now();
+        if (!StringUtils.hasText(dateStr)) {
+            dateStr = today.format(formatter);
+        }
+        // 解析输入的日期字符串为LocalDate对象
+        LocalDate date = LocalDate.parse(dateStr, formatter);
+        // 获取从输入日期前三天的日期
+        LocalDate startDate = date.minusDays(days);
+        // 存储所有日期的列表
+        List<String> datesList = new ArrayList<>();
+        // 从startDate到today遍历日期
+        while (!startDate.isAfter(today)) {
+            // 将当前日期格式化为"yyyyMMdd"并添加到列表中
+            datesList.add(startDate.format(formatter));
+            // 日期加1天
+            startDate = startDate.plusDays(1);
+        }
+        return datesList;
+    }
+
 
     public static void main(String[] args) {
         Calendar calendar = Calendar.getInstance();

+ 11 - 7
long-article-recommend-service/src/main/resources/mapper/longArticle/LongArticleBaseMapper.xml

@@ -8,9 +8,11 @@
 
     <insert id="batchInsertDatastatSortStrategy">
         INSERT INTO datastat_sort_strategy
-        (date_str, publish_time, account_mode, account_source, account_type, account_status, account_name, strategy,
-        fans, view_count, avg_view_count, first_view_count, first_avg_view_count, first_level, fission0, fission1,
-        fission2, read_rate, read_fans_rate, first_read_rate, fission0_first_rate, fission1_fission0_rate,
+        (date_str, publish_time, account_mode, account_source, account_type, account_status, bussiness_type,
+        account_name, strategy, fans, view_count, avg_view_count, first_view_count, first_avg_view_count,
+        first_level, fission0, fission1, fission2, second_first_level, second_fission0, second_fission1,
+        second_fission2, third_first_level, third_fission0, third_fission1, third_fission2,
+        read_rate, read_fans_rate, first_read_rate, fission0_first_rate, fission1_fission0_rate,
         fission0_read_avg_rate, position, gh_id, title, link, wx_sn, fission0_read_avg_100_rate,
         fission0_read_avg_500_rate, fission0_read_avg_1000_rate, crawler_plan_name, crawler_plan_tag,
         produce_plan_name, produce_plan_tag, publish_plan_name, publish_mini_program_insert_strategy,
@@ -18,10 +20,12 @@
         VALUES
         <foreach collection="list" item="item" separator=",">
             (#{item.dateStr}, #{item.publishTime}, #{item.accountMode}, #{item.accountSource}, #{item.accountType},
-            #{item.accountStatus}, #{item.accountName}, #{item.strategy}, #{item.fans}, #{item.viewCount},
-            #{item.avgViewCount}, #{item.firstViewCount}, #{item.firstAvgViewCount}, #{item.firstLevel},
-            #{item.fission0}, #{item.fission1}, #{item.fission2}, #{item.readRate}, #{item.readFansRate},
-            #{item.firstReadRate}, #{item.fission0FirstRate}, #{item.fission1Fission0Rate},
+            #{item.accountStatus}, #{item.businessType}, #{item.accountName}, #{item.strategy}, #{item.fans},
+            #{item.viewCount}, #{item.avgViewCount}, #{item.firstViewCount}, #{item.firstAvgViewCount},
+            #{item.firstLevel}, #{item.fission0}, #{item.fission1}, #{item.fission2}, #{item.secondFirstLevel},
+            #{item.secondFission0}, #{item.secondFission1}, #{item.secondFission2}, #{item.thirdFirstLevel},
+            #{item.thirdFission0}, #{item.thirdFission1}, #{item.thirdFission2}, #{item.readRate},
+            #{item.readFansRate}, #{item.firstReadRate}, #{item.fission0FirstRate}, #{item.fission1Fission0Rate},
             #{item.fission0ReadAvgRate}, #{item.position}, #{item.ghId}, #{item.title}, #{item.link},
             #{item.wxSn}, #{item.fission0ReadAvg100Rate}, #{item.fission0ReadAvg500Rate},
             #{item.fission0ReadAvg1000Rate}, #{item.crawlerPlanName}, #{item.crawlerPlanTag},