Преглед на файлове

Merge branch 'wyp/1219-videoPoolPromotion' of Server/long-article-recommend into master

wangyunpeng преди 6 месеца
родител
ревизия
d0953d8425

+ 14 - 2
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/PublishSingleVideoSource.java

@@ -36,7 +36,7 @@ public class PublishSingleVideoSource {
     private Integer likeCount;
 
     @Column(name = "article_index")
-    private Byte articleIndex;
+    private Integer articleIndex;
 
     @Column(name = "article_publish_type")
     private String articlePublishType;
@@ -54,7 +54,7 @@ public class PublishSingleVideoSource {
     private Integer flowPoolLevel;
 
     @Column(name = "bad_status")
-    private Byte badStatus;
+    private Integer badStatus;
 
     @Column(name = "publish_timestamp")
     private Long publishTimestamp;
@@ -68,6 +68,9 @@ public class PublishSingleVideoSource {
     @Column(name = "up_level_timestamp")
     private Long upLevelTimestamp;
 
+    @Column(name = "up_level_source")
+    private String upLevelSource;
+
     @Column(name = "exit_timestamp")
     private Long exitTimestamp;
 
@@ -76,4 +79,13 @@ public class PublishSingleVideoSource {
 
     @Column(name = "audit_status")
     private Integer auditStatus;
+
+    @Column(name = "audit_video_id")
+    private Long auditVideoId;
+
+    @Column(name = "audit_timestamp")
+    private Long auditTimestamp;
+
+    @Column(name = "mini_program_title")
+    private String miniProgramTitle;
 }

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

@@ -26,4 +26,6 @@ public interface PublishSortLogRepository extends JpaRepository<PublishSortLog,
     List<PublishSortLog> findByDateStrIn(List<String> dateStrList);
 
     List<PublishSortLog> findByDateStrAndGhId(String dateStr, String ghId);
+
+    List<PublishSortLog> getByGhIdInAndDateStrIn(List<String> ghIds, List<String> dateStr);
 }

+ 4 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/longArticle/PublishSingleVideoSourceRepository.java

@@ -9,4 +9,8 @@ import java.util.List;
 @Repository
 public interface PublishSingleVideoSourceRepository extends JpaRepository<PublishSingleVideoSource, Long> {
     List<PublishSingleVideoSource> getByContentTraceIdIn(List<String> contentTraceIds);
+
+    PublishSingleVideoSource getByContentTraceId(String sourceId);
+
+    PublishSingleVideoSource getByUpLevelSource(String sourceId);
 }

+ 12 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/XxlJobService.java

@@ -10,6 +10,7 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import com.tzld.longarticle.recommend.server.common.CommonThreadPoolExecutor;
 import com.tzld.longarticle.recommend.server.common.enums.aigc.ProduceContentAuditStatusEnum;
 import com.tzld.longarticle.recommend.server.common.enums.recommend.AccountBusinessTypeEnum;
+import com.tzld.longarticle.recommend.server.common.enums.recommend.ContentPoolEnum;
 import com.tzld.longarticle.recommend.server.common.enums.recommend.FeishuRobotIdEnum;
 import com.tzld.longarticle.recommend.server.mapper.aigc.AigcBaseMapper;
 import com.tzld.longarticle.recommend.server.mapper.crawler.CrawlerBaseMapper;
@@ -667,6 +668,17 @@ public class XxlJobService {
         return ReturnT.SUCCESS;
     }
 
+    @XxlJob("articleVideoPoolPromotion")
+    public ReturnT<String> articleVideoPoolPromotion(String param) {
+        articlePromotionService.articleVideoPoolPromotion(500, 1.1,
+                Lists.newArrayList(1), ContentPoolEnum.autoArticlePoolLevel1.getValue());
+        articlePromotionService.articleVideoPoolPromotion(250, 1.21,
+                Lists.newArrayList(2), ContentPoolEnum.autoArticlePoolLevel1.getValue());
+        articlePromotionService.articleVideoPoolPromotion(100, 1.33,
+                Lists.newArrayList(3, 4, 5, 6, 7, 8), ContentPoolEnum.autoArticlePoolLevel3.getValue());
+        return ReturnT.SUCCESS;
+    }
+
     @XxlJob("refreshArticleHisCache")
     public ReturnT<String> refreshArticleHisCache(String param) {
         // 刷新历史表现缓存

+ 79 - 4
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recommend/ArticlePromotionService.java

@@ -1,5 +1,6 @@
 package com.tzld.longarticle.recommend.server.service.recommend;
 
+import cn.hutool.core.lang.UUID;
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.longarticle.recommend.server.common.enums.StatusEnum;
 import com.tzld.longarticle.recommend.server.common.enums.aigc.CrawlerModeEnum;
@@ -8,8 +9,10 @@ import com.tzld.longarticle.recommend.server.common.enums.recommend.ArticlePoolP
 import com.tzld.longarticle.recommend.server.common.enums.recommend.FeishuRobotIdEnum;
 import com.tzld.longarticle.recommend.server.mapper.longArticle.LongArticleBaseMapper;
 import com.tzld.longarticle.recommend.server.model.entity.aigc.PublishAccount;
+import com.tzld.longarticle.recommend.server.model.entity.crawler.PublishSortLog;
 import com.tzld.longarticle.recommend.server.model.entity.longArticle.ArticlePoolPromotionSource;
 import com.tzld.longarticle.recommend.server.model.entity.longArticle.DatastatSortStrategy;
+import com.tzld.longarticle.recommend.server.model.entity.longArticle.PublishSingleVideoSource;
 import com.tzld.longarticle.recommend.server.model.vo.IdNameVO;
 import com.tzld.longarticle.recommend.server.model.vo.WxContentDetailResponse;
 import com.tzld.longarticle.recommend.server.model.vo.aigc.CommonListDataVO;
@@ -22,14 +25,17 @@ import com.tzld.longarticle.recommend.server.remote.aigc.AIGCProduceContentListS
 import com.tzld.longarticle.recommend.server.remote.aigc.AIGCProducePlanDetailService;
 import com.tzld.longarticle.recommend.server.remote.aigc.AIGCProducePlanSaveService;
 import com.tzld.longarticle.recommend.server.repository.aigc.PublishAccountRepository;
+import com.tzld.longarticle.recommend.server.repository.crawler.PublishSortLogRepository;
 import com.tzld.longarticle.recommend.server.repository.longArticle.ArticlePoolPromotionSourceRepository;
 import com.tzld.longarticle.recommend.server.repository.longArticle.DatastatSortStrategyRepository;
+import com.tzld.longarticle.recommend.server.repository.longArticle.PublishSingleVideoSourceRepository;
 import com.tzld.longarticle.recommend.server.util.DateUtils;
 import com.tzld.longarticle.recommend.server.util.Md5Util;
 import com.tzld.longarticle.recommend.server.util.TitleSimilarCheckUtil;
 import com.tzld.longarticle.recommend.server.util.feishu.FeishuMessageSender;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -62,6 +68,10 @@ public class ArticlePromotionService {
     PublishAccountRepository publishAccountRepository;
     @Autowired
     ArticleService articleService;
+    @Autowired
+    PublishSortLogRepository publishSortLogRepository;
+    @Autowired
+    PublishSingleVideoSourceRepository publishSingleVideoSourceRepository;
 
     @ApolloJsonValue("${articlePromotionProduceConfig:{}}")
     private Map<String, Map<String, Map<String, String>>> produceConfig;
@@ -75,7 +85,7 @@ public class ArticlePromotionService {
         // 获取内部表现
         List<DatastatSortStrategy> list = longArticleBaseMapper.getArticlePromotion(viewCountFilter, viewCountRateFilter,
                 10000, dateStrFilter, positionFilter);
-        list = filterEarlyContent(list);
+        list = filterEarlyContent(list, true);
         log.info("优质{}文章数量: {}", accountNickName, list.size());
         List<DatastatSortStrategy> distinct = filterSameTitle(list);
         distinct.sort(Comparator.comparing(DatastatSortStrategy::getDateStr, Comparator.reverseOrder()));
@@ -83,7 +93,7 @@ public class ArticlePromotionService {
         addUrlListToAccount(accountNickName, distinct, pos, way, today, tag);
     }
 
-    private List<DatastatSortStrategy> filterEarlyContent(List<DatastatSortStrategy> list) {
+    private List<DatastatSortStrategy> filterEarlyContent(List<DatastatSortStrategy> list, Boolean filterVideoPool) {
         List<String> ghIds = list.stream().map(DatastatSortStrategy::getGhId).distinct().collect(Collectors.toList());
         List<PublishAccount> publishAccountList = publishAccountRepository.getAllByGhIdIn(ghIds);
         Map<String, Long> publishAccountCreateTimeMap = publishAccountList.stream().collect(Collectors.toMap(
@@ -91,8 +101,13 @@ public class ArticlePromotionService {
         list = list.stream().filter(o -> {
             long publishTime = DateUtils.dateStrToTimestamp(o.getDateStr(), "yyyyMMdd");
             Long accountCreateTime = publishAccountCreateTimeMap.get(o.getGhId());
-            return publishTime * 1000 > accountCreateTime
-                    && !PublishPlanInputSourceTypesEnum.longArticleVideoPoolSource.getVal().equals(o.getSourceType());
+            if (filterVideoPool) {
+                return publishTime * 1000 > accountCreateTime
+                        && !PublishPlanInputSourceTypesEnum.longArticleVideoPoolSource.getVal().equals(o.getSourceType());
+            } else {
+                return publishTime * 1000 > accountCreateTime
+                        && PublishPlanInputSourceTypesEnum.longArticleVideoPoolSource.getVal().equals(o.getSourceType());
+            }
         }).collect(Collectors.toList());
         return list;
     }
@@ -356,4 +371,64 @@ public class ArticlePromotionService {
         }
     }
 
+    public void articleVideoPoolPromotion(Integer viewCountFilter, Double viewCountRateFilter,
+                                          List<Integer> positionFilter, Integer poolLevel) {
+        String dateStrFilter = DateUtils.getBeforeDaysDateStr("yyyyMMdd", 10);
+        // 获取内部表现
+        List<DatastatSortStrategy> list = longArticleBaseMapper.getArticlePromotion(viewCountFilter, viewCountRateFilter,
+                10000, dateStrFilter, positionFilter);
+        list = filterEarlyContent(list, false);
+        log.info("视频内容池优质文章数量: {}", list.size());
+        List<DatastatSortStrategy> distinct = filterSameTitle(list);
+        distinct.sort(Comparator.comparing(DatastatSortStrategy::getDateStr, Comparator.reverseOrder()));
+        log.info("视频内容池优质文章数量(去重后): {}", distinct.size());
+        saveArticleVideoPoolPromotion(distinct, poolLevel);
+    }
+
+    private void saveArticleVideoPoolPromotion(List<DatastatSortStrategy> promotionList, Integer poolLevel) {
+        if (CollectionUtils.isEmpty(promotionList)) {
+            return;
+        }
+        List<String> ghIds = promotionList.stream().map(DatastatSortStrategy::getGhId).distinct().collect(Collectors.toList());
+        List<String> dateStr = promotionList.stream().map(DatastatSortStrategy::getDateStr).distinct().collect(Collectors.toList());
+        List<PublishSortLog> sortLogList = publishSortLogRepository.getByGhIdInAndDateStrIn(ghIds, dateStr);
+        Map<String, Map<String, List<PublishSortLog>>> sortLogMap = sortLogList.stream()
+                .collect(Collectors.groupingBy(PublishSortLog::getGhId,
+                        Collectors.groupingBy(PublishSortLog::getDateStr)));
+        for (DatastatSortStrategy data : promotionList) {
+            List<PublishSortLog> logs = sortLogMap.get(data.getGhId()).get(data.getDateStr());
+            if (CollectionUtils.isEmpty(logs)) {
+                continue;
+            }
+            String sourceId = null;
+            for (PublishSortLog publishSortLog : logs) {
+                if (data.getTitle().equals(publishSortLog.getTitle())) {
+                    sourceId = publishSortLog.getSourceId();
+                    break;
+                }
+            }
+            if (!StringUtils.hasText(sourceId)) {
+                continue;
+            }
+            PublishSingleVideoSource singleVideoSource = publishSingleVideoSourceRepository.getByContentTraceId(sourceId);
+            if (Objects.isNull(singleVideoSource)) {
+                continue;
+            }
+            PublishSingleVideoSource exists = publishSingleVideoSourceRepository.getByUpLevelSource(sourceId);
+            if (Objects.nonNull(exists)) {
+                continue;
+            }
+            PublishSingleVideoSource upLevel = new PublishSingleVideoSource();
+            BeanUtils.copyProperties(singleVideoSource, upLevel);
+            singleVideoSource.setBadStatus(1);
+            singleVideoSource.setUpLevelTimestamp(System.currentTimeMillis() / 1000);
+            publishSingleVideoSourceRepository.save(singleVideoSource);
+            upLevel.setId(null);
+            upLevel.setUpLevelSource(singleVideoSource.getContentTraceId());
+            upLevel.setContentTraceId("video" + UUID.randomUUID().toString().replace("-", ""));
+            upLevel.setFlowPoolLevel(poolLevel);
+            publishSingleVideoSourceRepository.save(upLevel);
+        }
+    }
+
 }

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

@@ -69,6 +69,11 @@ public class XxlJobController {
         service.articlePromotion(null);
     }
 
+    @GetMapping("/articleVideoPoolPromotion")
+    public void articleVideoPoolPromotion() {
+        service.articleVideoPoolPromotion(null);
+    }
+
     @GetMapping("/articlePromotionTraceability")
     public void articlePromotionTraceability(String channelContentId) {
         service.articlePromotionTraceability(channelContentId);