Kaynağa Gözat

导出兼容无裂变数据

wangyunpeng 8 ay önce
ebeveyn
işleme
4181e36d7a

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

@@ -278,74 +278,17 @@ public class DataDashboardService {
         // result
         List<NewSortStrategyExport> result = new ArrayList<>();
         for (Article article : articleList) {
+            NewSortStrategyExport obj = new NewSortStrategyExport();
             List<ArticleDetailInfo> articleDetailInfos = articleDetailInfoMap.get(article.getWxSn());
-            if (CollectionUtils.isEmpty(articleDetailInfos)) {
-                continue;
-            }
+            setObjLongDetailInfo(article, obj, articleDetailInfos);
             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());
-            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);
-                    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);
-                }
-            }
             AccountAvgInfo avgInfo = getAccountAvgInfo(accountAvgInfoIndexMap, article.getGhId(),
                     article.getUpdateTime(), article.getItemIndex());
             AccountAvgInfo firstAvgInfo = getAccountAvgInfo(accountAvgInfoIndexMap, article.getGhId(),
                     article.getUpdateTime(), 1);
             String date = DateUtils.timestampToYMDStr(article.getUpdateTime(), "yyyyMMdd");
-            NewSortStrategyExport obj = new NewSortStrategyExport();
-            obj.setGhId(article.getGhId());
-            obj.setAccountName(article.getAccountName());
-            obj.setTitle(article.getTitle());
-            obj.setLink(article.getContentUrl());
-            obj.setPosition(article.getItemIndex());
-            obj.setViewCount(article.getShowViewCount());
-            obj.setDateStr(date);
-            obj.setPublishTime(DateUtils.timestampToYMDStr(article.getUpdateTime(), "HH:mm:ss"));
-            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());
+            setObjBaseInfo(article, obj, date);
             if (Objects.nonNull(firstArticle)) {
                 obj.setFirstViewCount(firstArticle.getShowViewCount());
             }
@@ -355,34 +298,7 @@ public class DataDashboardService {
             if (Objects.nonNull(dateStrategy)) {
                 obj.setStrategy(dateStrategy.get(date));
             }
-            if (Objects.nonNull(avgInfo)) {
-                obj.setAccountMode(avgInfo.getAccountMode());
-                obj.setAccountSource(avgInfo.getAccountSource());
-                obj.setAccountType(avgInfo.getAccountType());
-                obj.setAccountStatus(avgInfo.getAccountStatus());
-                obj.setBusinessType(AccountBusinessTypeEnum.from(avgInfo.getBusinessType()).getDescription());
-                obj.setFans(avgInfo.getFans());
-                obj.setAvgViewCount(avgInfo.getReadAvg());
-                if (avgInfo.getReadAvg() > 0) {
-                    obj.setReadRate((article.getShowViewCount() * 1.0) / avgInfo.getReadAvg());
-                    obj.setFission0ReadAvgRate((sumFission0 * 1.0) / avgInfo.getReadAvg());
-                    obj.setFission0ReadAvg100Rate((sumFission0 * 1.0) / (avgInfo.getReadAvg() + 100));
-                    obj.setFission0ReadAvg500Rate((sumFission0 * 1.0) / (avgInfo.getReadAvg() + 500));
-                    obj.setFission0ReadAvg1000Rate((sumFission0 * 1.0) / (avgInfo.getReadAvg() + 1000));
-                }
-                if (avgInfo.getFans() > 0) {
-                    obj.setReadFansRate((article.getShowViewCount() * 1.0) / avgInfo.getFans());
-                }
-            }
-            if (sumFirstLevel > 0) {
-                obj.setFission0FirstRate((sumFission0 * 1.0) / sumFirstLevel);
-            }
-            if (article.getShowViewCount() > 0) {
-                obj.setFirstReadRate((sumFirstLevel * 1.0) / article.getShowViewCount());
-            }
-            if (sumFission0 > 0) {
-                obj.setFission1Fission0Rate((sumFission1 * 1.0) / sumFission0);
-            }
+            setObjAvgInfo(article, obj, avgInfo);
             result.add(obj);
             // aigc 数据
             PublishAccount publishAccount = publishAccountMap.get(article.getGhId());
@@ -516,6 +432,104 @@ public class DataDashboardService {
         return result;
     }
 
+    private void setObjBaseInfo(Article article, NewSortStrategyExport obj, String date) {
+        obj.setGhId(article.getGhId());
+        obj.setAccountName(article.getAccountName());
+        obj.setTitle(article.getTitle());
+        obj.setLink(article.getContentUrl());
+        obj.setPosition(article.getItemIndex());
+        obj.setViewCount(article.getShowViewCount());
+        obj.setDateStr(date);
+        obj.setPublishTime(DateUtils.timestampToYMDStr(article.getUpdateTime(), "HH:mm:ss"));
+        obj.setWxSn(article.getWxSn());
+    }
+
+    private void setObjLongDetailInfo(Article article, NewSortStrategyExport obj, List<ArticleDetailInfo> articleDetailInfos) {
+        if (CollectionUtils.isNotEmpty(articleDetailInfos)) {
+            Date publishDate = DateUtils.getStartDateOfDay(article.getUpdateTime());
+            articleDetailInfos = articleDetailInfos.stream().filter(o -> !o.getRecallDt().before(publishDate))
+                    .collect(Collectors.toList());
+            Date minDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).min(Date::compareTo).orElse(new Date());
+            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);
+                    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);
+                }
+            }
+            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);
+        }
+    }
+
+    private void setObjAvgInfo(Article article, NewSortStrategyExport obj, AccountAvgInfo avgInfo) {
+        if (Objects.nonNull(avgInfo)) {
+            obj.setAccountMode(avgInfo.getAccountMode());
+            obj.setAccountSource(avgInfo.getAccountSource());
+            obj.setAccountType(avgInfo.getAccountType());
+            obj.setAccountStatus(avgInfo.getAccountStatus());
+            obj.setBusinessType(AccountBusinessTypeEnum.from(avgInfo.getBusinessType()).getDescription());
+            obj.setFans(avgInfo.getFans());
+            obj.setAvgViewCount(avgInfo.getReadAvg());
+            if (avgInfo.getReadAvg() > 0) {
+                obj.setReadRate((article.getShowViewCount() * 1.0) / avgInfo.getReadAvg());
+                obj.setFission0ReadAvgRate((obj.getFission0() * 1.0) / avgInfo.getReadAvg());
+                obj.setFission0ReadAvg100Rate((obj.getFission0() * 1.0) / (avgInfo.getReadAvg() + 100));
+                obj.setFission0ReadAvg500Rate((obj.getFission0() * 1.0) / (avgInfo.getReadAvg() + 500));
+                obj.setFission0ReadAvg1000Rate((obj.getFission0() * 1.0) / (avgInfo.getReadAvg() + 1000));
+            }
+            if (avgInfo.getFans() > 0) {
+                obj.setReadFansRate((article.getShowViewCount() * 1.0) / avgInfo.getFans());
+            }
+        }
+        if (obj.getFirstLevel() > 0) {
+            obj.setFission0FirstRate((obj.getFission0() * 1.0) / obj.getFirstLevel());
+        }
+        if (article.getShowViewCount() > 0) {
+            obj.setFirstReadRate((obj.getFirstLevel() * 1.0) / article.getShowViewCount());
+        }
+        if (obj.getFission0() > 0) {
+            obj.setFission1Fission0Rate((obj.getFission1() * 1.0) / obj.getFission0());
+        }
+    }
+
     private Map<String, ProducePlan> getTitleSourceProducePlanMap(List<String> titleList) {
         List<ProduceContentDTO> sourceProduceContentList = new ArrayList<>();
         for (List<String> partitions : Lists.partition(titleList, 1000)) {
@@ -983,94 +997,14 @@ public class DataDashboardService {
                                                                      Map<String, Map<String, Map<String, AccountAvgInfo>>> accountAvgInfoIndexMap) {
         List<NewSortStrategyExport> result = new ArrayList<>();
         for (Article article : todayPublish) {
+            NewSortStrategyExport obj = new NewSortStrategyExport();
             List<ArticleDetailInfo> articleDetailInfos = articleDetailInfoMap.get(article.getWxSn());
-            if (CollectionUtils.isEmpty(articleDetailInfos)) {
-                continue;
-            }
-            Date minDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).min(Date::compareTo).orElse(new Date());
-            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);
-                    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);
-                }
-            }
+            setObjLongDetailInfo(article, obj, articleDetailInfos);
             AccountAvgInfo avgInfo = getAccountAvgInfo(accountAvgInfoIndexMap, article.getGhId(),
                     article.getUpdateTime(), article.getItemIndex());
             String date = DateUtils.timestampToYMDStr(article.getUpdateTime(), "yyyyMMdd");
-            NewSortStrategyExport obj = new NewSortStrategyExport();
-            obj.setGhId(article.getGhId());
-            obj.setAccountName(article.getAccountName());
-            obj.setTitle(article.getTitle());
-            obj.setLink(article.getContentUrl());
-            obj.setPosition(article.getItemIndex());
-            obj.setViewCount(article.getShowViewCount());
-            obj.setDateStr(date);
-            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(avgInfo)) {
-                obj.setAccountMode(avgInfo.getAccountMode());
-                obj.setAccountSource(avgInfo.getAccountSource());
-                obj.setAccountType(avgInfo.getAccountType());
-                obj.setAccountStatus(avgInfo.getAccountStatus());
-                obj.setBusinessType(AccountBusinessTypeEnum.from(avgInfo.getBusinessType()).getDescription());
-                obj.setFans(avgInfo.getFans());
-                obj.setAvgViewCount(avgInfo.getReadAvg());
-                if (avgInfo.getReadAvg() > 0) {
-                    obj.setReadRate((article.getShowViewCount() * 1.0) / avgInfo.getReadAvg());
-                    obj.setFission0ReadAvgRate((sumFission0 * 1.0) / avgInfo.getReadAvg());
-                }
-                if (avgInfo.getFans() > 0) {
-                    obj.setReadFansRate((article.getShowViewCount() * 1.0) / avgInfo.getFans());
-                }
-            }
-            if (sumFirstLevel > 0) {
-                obj.setFission0FirstRate((sumFission0 * 1.0) / sumFirstLevel);
-            }
-            if (article.getShowViewCount() > 0) {
-                obj.setFirstReadRate((sumFirstLevel * 1.0) / article.getShowViewCount());
-            }
-            if (sumFission0 > 0) {
-                obj.setFission1Fission0Rate((sumFission1 * 1.0) / sumFission0);
-            }
+            setObjBaseInfo(article, obj, date);
+            setObjAvgInfo(article, obj, avgInfo);
             result.add(obj);
         }
         return result;
@@ -1115,20 +1049,19 @@ public class DataDashboardService {
                 item.setAverageViewToBaseRatio(item.getRedundantViewCount() / (double) item.getRedundantViewBase());
             }
             List<ArticleDetailInfo> articleDetailInfos = articleDetailInfoMap.get(publish.getWxSn());
-            if (CollectionUtils.isEmpty(articleDetailInfos)) {
-                continue;
-            }
-            int sumFirstLevel = 0;
-            int sumFission0 = 0;
-            Date minDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).min(Date::compareTo).orElse(new Date());
-            for (ArticleDetailInfo articleDetailInfo : articleDetailInfos) {
-                if (articleDetailInfo.getRecallDt().equals(minDate)) {
-                    sumFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
-                    sumFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
+            if (CollectionUtils.isNotEmpty(articleDetailInfos)) {
+                int sumFirstLevel = 0;
+                int sumFission0 = 0;
+                Date minDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).min(Date::compareTo).orElse(new Date());
+                for (ArticleDetailInfo articleDetailInfo : articleDetailInfos) {
+                    if (articleDetailInfo.getRecallDt().equals(minDate)) {
+                        sumFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
+                        sumFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
+                    }
                 }
+                item.setRedundantFirstLayerUV(item.getRedundantFirstLayerUV() + sumFirstLevel);
+                item.setRedundantT0FissionUV(item.getRedundantT0FissionUV() + sumFission0);
             }
-            item.setRedundantFirstLayerUV(item.getRedundantFirstLayerUV() + sumFirstLevel);
-            item.setRedundantT0FissionUV(item.getRedundantT0FissionUV() + sumFission0);
             double averageMiniAppOpenRate = item.getAverageMiniAppOpenRate();
             if (item.getRedundantFirstLayerUV() > 0 && item.getRedundantViewCount() > 0) {
                 double miniAppOpenRate = item.getRedundantFirstLayerUV() / (double) item.getRedundantViewCount();

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

@@ -157,6 +157,24 @@ public final class DateUtils {
         }
     }
 
+    public static Date getStartDateOfDay(Long timestamp) {
+        try {
+            Calendar calendar = Calendar.getInstance();
+            // 设置时区为UTC(你可以根据需要更改时区)
+            calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+            // 将时间戳转换为毫秒并设置时间
+            calendar.setTimeInMillis(timestamp * 1000L);
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.SECOND, 0);
+            calendar.set(Calendar.MILLISECOND, 0);
+
+            return calendar.getTime();
+        } catch (Exception e) {
+            return new Date();
+        }
+    }
+
     // 获取每日最大秒数 (当天的23:59:59)
     public static Long getEndOfDay(String dateStr, String formatter) {
         try {