Parcourir la source

Merge branch 'wyp/1022-dataDashboard' of Server/long-article-recommend into master

wangyunpeng il y a 8 mois
Parent
commit
a33d595273

+ 155 - 211
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;
-            }
+            setObjArticleDetailInfo(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,8 @@ 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);
+            setObjHisRateInfo(article, obj, hisArticleMap, accountAvgInfoIndexMap, hisArticleDetailInfoMap);
             result.add(obj);
             // aigc 数据
             PublishAccount publishAccount = publishAccountMap.get(article.getGhId());
@@ -459,45 +376,6 @@ public class DataDashboardService {
             if (Objects.nonNull(sourceProducePlan)) {
                 obj.setSourceProducePlanName(sourceProducePlan.getName());
             }
-            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());
-            Integer readCount = 0;
-            Double readAvgCount = 0.0;
-            int firstCount = 0;
-            int fission0Count = 0;
-            for (Article hisArticle : hisArticles) {
-                readCount += hisArticle.getShowViewCount();
-                AccountAvgInfo accountAvgInfo = getAccountAvgInfo(accountAvgInfoIndexMap, hisArticle.getGhId(),
-                        hisArticle.getUpdateTime(), hisArticle.getItemIndex());
-                if (Objects.nonNull(accountAvgInfo)) {
-                    readAvgCount += accountAvgInfo.getReadAvg();
-                }
-                List<ArticleDetailInfo> hisADIList = hisArticleDetailInfoMap.get(hisArticle.getWxSn());
-                if (CollectionUtil.isNotEmpty(hisADIList)) {
-                    Date hisMinDate = hisADIList.stream().map(ArticleDetailInfo::getRecallDt).min(Date::compareTo).orElse(new Date());
-                    for (ArticleDetailInfo articleDetailInfo : hisADIList) {
-                        if (articleDetailInfo.getRecallDt().equals(hisMinDate)) {
-                            if (Objects.nonNull(articleDetailInfo.getFirstLevel())) {
-                                firstCount += articleDetailInfo.getFirstLevel();
-                            }
-                            if (Objects.nonNull(articleDetailInfo.getFission0())) {
-                                fission0Count += articleDetailInfo.getFission0();
-                            }
-                        }
-                    }
-                }
-            }
-            if (readAvgCount > 0) {
-                obj.setHisReadRate(readCount / readAvgCount);
-            }
-            if (readCount > 0) {
-                obj.setHisFirstReadRate(firstCount / (double) readCount);
-            }
-            if (firstCount > 0) {
-                obj.setHisFission0FirstRate(fission0Count / (double) firstCount);
-            }
         }
         result.sort(Comparator.comparing(NewSortStrategyExport::getDateStr).reversed()
                 .thenComparing(NewSortStrategyExport::getGhId).thenComparing(NewSortStrategyExport::getPosition));
@@ -516,6 +394,151 @@ public class DataDashboardService {
         return result;
     }
 
+    private void setObjHisRateInfo(Article article, NewSortStrategyExport obj,
+                                   Map<String, List<Article>> hisArticleMap,
+                                   Map<String, Map<String, Map<String, AccountAvgInfo>>> accountAvgInfoIndexMap,
+                                   Map<String, List<ArticleDetailInfo>> hisArticleDetailInfoMap) {
+        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());
+        Integer readCount = 0;
+        Double readAvgCount = 0.0;
+        int firstCount = 0;
+        int fission0Count = 0;
+        for (Article hisArticle : hisArticles) {
+            readCount += hisArticle.getShowViewCount();
+            AccountAvgInfo accountAvgInfo = getAccountAvgInfo(accountAvgInfoIndexMap, hisArticle.getGhId(),
+                    hisArticle.getUpdateTime(), hisArticle.getItemIndex());
+            if (Objects.nonNull(accountAvgInfo)) {
+                readAvgCount += accountAvgInfo.getReadAvg();
+            }
+            List<ArticleDetailInfo> hisADIList = hisArticleDetailInfoMap.get(hisArticle.getWxSn());
+            if (CollectionUtil.isNotEmpty(hisADIList)) {
+                Date hisMinDate = hisADIList.stream().map(ArticleDetailInfo::getRecallDt).min(Date::compareTo).orElse(new Date());
+                for (ArticleDetailInfo articleDetailInfo : hisADIList) {
+                    if (articleDetailInfo.getRecallDt().equals(hisMinDate)) {
+                        if (Objects.nonNull(articleDetailInfo.getFirstLevel())) {
+                            firstCount += articleDetailInfo.getFirstLevel();
+                        }
+                        if (Objects.nonNull(articleDetailInfo.getFission0())) {
+                            fission0Count += articleDetailInfo.getFission0();
+                        }
+                    }
+                }
+            }
+        }
+        if (readAvgCount > 0) {
+            obj.setHisReadRate(readCount / readAvgCount);
+        }
+        if (readCount > 0) {
+            obj.setHisFirstReadRate(firstCount / (double) readCount);
+        }
+        if (firstCount > 0) {
+            obj.setHisFission0FirstRate(fission0Count / (double) firstCount);
+        }
+    }
+
+    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 setObjArticleDetailInfo(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());
+                if (Objects.nonNull(obj.getFission0())) {
+                    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 (Objects.nonNull(obj.getFirstLevel()) && obj.getFirstLevel() > 0 && Objects.nonNull(obj.getFission0())) {
+            obj.setFission0FirstRate((obj.getFission0() * 1.0) / obj.getFirstLevel());
+        }
+        if (article.getShowViewCount() > 0 && Objects.nonNull(obj.getFirstLevel())) {
+            obj.setFirstReadRate((obj.getFirstLevel() * 1.0) / article.getShowViewCount());
+        }
+        if (Objects.nonNull(obj.getFission0()) && obj.getFission0() > 0 && Objects.nonNull(obj.getFission1())) {
+            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 +1006,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);
-                }
-            }
+            setObjArticleDetailInfo(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,6 +1058,7 @@ public class DataDashboardService {
                 item.setAverageViewToBaseRatio(item.getRedundantViewCount() / (double) item.getRedundantViewBase());
             }
             List<ArticleDetailInfo> articleDetailInfos = articleDetailInfoMap.get(publish.getWxSn());
+
             if (CollectionUtils.isEmpty(articleDetailInfos)) {
                 continue;
             }

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

@@ -275,7 +275,9 @@ public class RecommendService {
             sortLog.setTitle(content.getTitle());
             sortLog.setIndex(i);
             sortLog.setIndexAvgCount(accountIndexAvgViewCountService.getAvgReadCountByDB(avgInfoList, param.getGhId(), i));
-            sortLog.setCategory(JSONObject.toJSONString(content.getCategory()));
+            if (CollectionUtils.isNotEmpty(content.getCategory())) {
+                sortLog.setCategory(JSONObject.toJSONString(content.getCategory()));
+            }
             sortLog.setStrategy(param.getStrategy());
             sortLog.setScore(String.valueOf(content.getScore()));
             sortLog.setScoreMap(JSONObject.toJSONString(content.getScoreMap()));

+ 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 {