supeng há 1 semana atrás
pai
commit
245cb3ac9f

+ 41 - 0
core/src/main/java/com/tzld/supply/common/enums/ArticleAnalyseStrategyEnum.java

@@ -0,0 +1,41 @@
+package com.tzld.supply.common.enums;
+
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Getter
+public enum ArticleAnalyseStrategyEnum {
+    SUITABLE_OLDER(1,"适老分析");
+
+    private final Integer value;
+    private final String desc;
+
+    ArticleAnalyseStrategyEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public static ArticleAnalyseStrategyEnum getInstanceByValue(Integer value) {
+        for (ArticleAnalyseStrategyEnum strategyEnum : ArticleAnalyseStrategyEnum.values()) {
+            if (strategyEnum.getValue().equals(value)) {
+                return strategyEnum;
+            }
+        }
+        return null;
+    }
+
+    public static List<ArticleAnalyseStrategyEnum> getInstanceByValues(List<Integer> values) {
+        if (values == null || values.isEmpty()) {
+            return null;
+        }
+        List<ArticleAnalyseStrategyEnum> enumList = new ArrayList<>();
+        for (ArticleAnalyseStrategyEnum strategyEnum : ArticleAnalyseStrategyEnum.values()) {
+            if (values.contains(strategyEnum.getValue())) {
+                enumList.add(strategyEnum);
+            }
+        }
+        return enumList;
+    }
+}

+ 41 - 0
core/src/main/java/com/tzld/supply/common/enums/TitleAnalyseStrategyEnum.java

@@ -0,0 +1,41 @@
+package com.tzld.supply.common.enums;
+
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Getter
+public enum TitleAnalyseStrategyEnum {
+    SUITABLE_OLDER(1, "适老分析");
+
+    private final Integer value;
+    private final String desc;
+
+    TitleAnalyseStrategyEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public static TitleAnalyseStrategyEnum getInstanceByValue(Integer value) {
+        for (TitleAnalyseStrategyEnum strategyEnum : TitleAnalyseStrategyEnum.values()) {
+            if (strategyEnum.getValue().equals(value)) {
+                return strategyEnum;
+            }
+        }
+        return null;
+    }
+
+    public static List<TitleAnalyseStrategyEnum> getInstanceByValues(List<Integer> values) {
+        if (values == null || values.isEmpty()) {
+            return null;
+        }
+        List<TitleAnalyseStrategyEnum> enumList = new ArrayList<>();
+        for (TitleAnalyseStrategyEnum strategyEnum : TitleAnalyseStrategyEnum.values()) {
+            if (values.contains(strategyEnum.getValue())) {
+                enumList.add(strategyEnum);
+            }
+        }
+        return enumList;
+    }
+}

+ 170 - 0
core/src/main/java/com/tzld/supply/job/ContentScreenJob.java

@@ -1,28 +1,41 @@
 package com.tzld.supply.job;
 
 import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.google.common.collect.Lists;
 import com.tzld.supply.api.DeepSeekApiService;
+import com.tzld.supply.common.enums.ArticleAnalyseStrategyEnum;
 import com.tzld.supply.common.enums.SpiderContentScreenStatusEnum;
 import com.tzld.supply.common.enums.SpiderContentStatusEnum;
+import com.tzld.supply.common.enums.TitleAnalyseStrategyEnum;
 import com.tzld.supply.dao.mapper.supply.spider.SpiderContentMapper;
 import com.tzld.supply.dao.mapper.supply.spider.ext.SpiderMapperExt;
+import com.tzld.supply.model.dto.ArticleAnalyseConfigDTO;
+import com.tzld.supply.model.dto.TitleAnalyseConfigDTO;
 import com.tzld.supply.model.entity.DeepSeekResult;
 import com.tzld.supply.model.entity.PrecisionScreenEntity;
 import com.tzld.supply.model.entity.RoughScreenEntity;
 import com.tzld.supply.model.po.supply.spider.SpiderContent;
 import com.tzld.supply.model.po.supply.spider.SpiderContentExample;
+import com.tzld.supply.service.strategy.ArticleAnalyseStrategy;
+import com.tzld.supply.service.strategy.TitleAnalyseStrategy;
 import com.tzld.supply.util.DateUtils;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 @Slf4j
@@ -45,8 +58,20 @@ public class ContentScreenJob {
     @Value("${deepseek.pq-improve-narration-script-prompt}")
     private String pqNarrationScriptPrompt;
 
+    @ApolloJsonValue("${title.analyse.config:{}}")
+    private TitleAnalyseConfigDTO titleAnalyseConfigDTO;
+
+    @ApolloJsonValue("${article.analyse.config:{}}")
+    private ArticleAnalyseConfigDTO articleAnalyseConfigDTO;
+
+    @Autowired
+    private Map<TitleAnalyseStrategyEnum, TitleAnalyseStrategy> titleAnalyseStrategyMap;
+    @Autowired
+    private Map<ArticleAnalyseStrategyEnum, ArticleAnalyseStrategy> articleAnalyseStrategyMap;
+
     /**
      * 粗筛
+     *
      * @param param
      * @return
      */
@@ -106,6 +131,10 @@ public class ContentScreenJob {
         return SpiderContentScreenStatusEnum.PASSED.getCode();
     }
 
+    private Integer judgeRoughScreenStatus(Object object) {
+        return SpiderContentScreenStatusEnum.PASSED.getCode();
+    }
+
     private List<SpiderContent> getRoughScreenSpiderContent() {
         SpiderContentExample example = new SpiderContentExample();
         example.createCriteria().andStatusEqualTo(0).andAiRoughStatusEqualTo(0);
@@ -114,6 +143,7 @@ public class ContentScreenJob {
 
     /**
      * 精筛
+     *
      * @param param
      * @return
      */
@@ -179,8 +209,13 @@ public class ContentScreenJob {
         return SpiderContentScreenStatusEnum.PASSED.getCode();
     }
 
+    private Integer judgePrecisionScreenStatus(Object object) {
+        return SpiderContentScreenStatusEnum.PASSED.getCode();
+    }
+
     /**
      * 票圈标题改写生成
+     *
      * @param param
      * @return
      */
@@ -224,6 +259,7 @@ public class ContentScreenJob {
 
     /**
      * 口播生成
+     *
      * @param param
      * @return
      */
@@ -265,4 +301,138 @@ public class ContentScreenJob {
         return ReturnT.SUCCESS;
     }
 
+
+    /**
+     * 标题分析 任务
+     */
+    @XxlJob("titleAnalyseHandler")
+    public ReturnT<String> titleAnalyseHandler(String param) {
+        if (StringUtils.isNotBlank(param)) {
+            titleAnalyseConfigDTO = JSON.parseObject(param, TitleAnalyseConfigDTO.class);
+        }
+        if (Objects.isNull(titleAnalyseConfigDTO) || Objects.isNull(titleAnalyseConfigDTO.getStrategies())
+                || titleAnalyseConfigDTO.getStrategies().isEmpty()) {
+            XxlJobLogger.log("titleAnalyseConfigDTO config is null or empty");
+            return ReturnT.SUCCESS;
+        }
+        Integer lastDays = titleAnalyseConfigDTO.getLastDays();
+        Long lastTime = LocalDateTime.now().minusDays(lastDays).atZone(ZoneId.systemDefault())
+                .toInstant()
+                .toEpochMilli();
+        XxlJobLogger.log("titleAnalyseConfigDTO config is " + titleAnalyseConfigDTO);
+        List<TitleAnalyseStrategyEnum> titleAnalyseStrategyEnums = TitleAnalyseStrategyEnum.getInstanceByValues(titleAnalyseConfigDTO.getStrategies());
+        if (Objects.isNull(titleAnalyseStrategyEnums) || titleAnalyseStrategyEnums.isEmpty()) {
+            XxlJobLogger.log("titleAnalyseStrategyEnums is null or empty");
+            return ReturnT.SUCCESS;
+        }
+        List<SpiderContent> contentList = getRoughScreenSpiderContent();
+        if (contentList.isEmpty()) {
+            return ReturnT.SUCCESS;
+        }
+        for (SpiderContent content : contentList) {
+            if (content.getCreateTime() < lastTime) {
+                content.setStatus(SpiderContentStatusEnum.ABANDONED.getCode());
+                content.setAiRoughStatus(SpiderContentScreenStatusEnum.ABANDONED.getCode());
+                content.setAiRoughResult("长时间未完成,自动放弃");
+                content.setUpdateTime(System.currentTimeMillis());
+                spiderContentMapper.updateByPrimaryKeySelective(content);
+            }
+            //执行策略
+            JSONObject jsonObject = new JSONObject();
+            for (TitleAnalyseStrategyEnum strategy : titleAnalyseStrategyEnums) {
+                TitleAnalyseStrategy titleAnalyseStrategy = titleAnalyseStrategyMap.get(strategy);
+                String result = titleAnalyseStrategy.execute();
+                if (StringUtils.isNotBlank(result)) {
+                    jsonObject.put(strategy.name(), result);
+                }
+            }
+            if (jsonObject.isEmpty()) {
+                content.setStatus(SpiderContentStatusEnum.ABANDONED.getCode());
+                content.setAiRoughStatus(SpiderContentScreenStatusEnum.ABANDONED.getCode());
+                content.setUpdateTime(System.currentTimeMillis());
+                spiderContentMapper.updateByPrimaryKeySelective(content);
+            } else {
+                //TODO
+                Integer aiRoughStatus = judgeRoughScreenStatus(jsonObject);
+                content.setAiRoughStatus(aiRoughStatus);
+                content.setAiRoughResult(jsonObject.toJSONString());
+                if (aiRoughStatus == SpiderContentScreenStatusEnum.PASSED.getCode()) {
+                    content.setStatus(SpiderContentStatusEnum.FILTERING.getCode());
+                } else {
+                    content.setStatus(SpiderContentStatusEnum.ABANDONED.getCode());
+                }
+                content.setUpdateTime(System.currentTimeMillis());
+                spiderContentMapper.updateByPrimaryKeySelective(content);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    /**
+     * 文章分析 任务
+     */
+    @XxlJob("articleAnalyseHandler")
+    public ReturnT<String> articleAnalyseHandler(String param) {
+        if (StringUtils.isNotBlank(param)) {
+            articleAnalyseConfigDTO = JSON.parseObject(param, ArticleAnalyseConfigDTO.class);
+        }
+        if (Objects.isNull(articleAnalyseConfigDTO) || Objects.isNull(articleAnalyseConfigDTO.getStrategies())
+                || articleAnalyseConfigDTO.getStrategies().isEmpty()) {
+            XxlJobLogger.log("articleAnalyseConfigDTO config is null or empty");
+            return ReturnT.SUCCESS;
+        }
+        Integer lastDays = titleAnalyseConfigDTO.getLastDays();
+        Long lastTime = LocalDateTime.now().minusDays(lastDays).atZone(ZoneId.systemDefault())
+                .toInstant()
+                .toEpochMilli();
+        XxlJobLogger.log("articleAnalyseConfigDTO config is " + articleAnalyseConfigDTO);
+        List<ArticleAnalyseStrategyEnum> articleAnalyseStrategyEnums = ArticleAnalyseStrategyEnum.getInstanceByValues(articleAnalyseConfigDTO.getStrategies());
+        if (Objects.isNull(articleAnalyseStrategyEnums) || articleAnalyseStrategyEnums.isEmpty()) {
+            XxlJobLogger.log("articleAnalyseStrategyEnums is null or empty");
+            return ReturnT.SUCCESS;
+        }
+        List<SpiderContent> contentList = spiderMapperExt.getRoughScreenSpiderContentHasContent();
+        if (contentList.isEmpty()) {
+            return ReturnT.SUCCESS;
+        }
+        for (SpiderContent content : contentList) {
+            if (content.getCreateTime() < lastTime) {
+                content.setStatus(SpiderContentStatusEnum.ABANDONED.getCode());
+                content.setAiRoughStatus(SpiderContentScreenStatusEnum.ABANDONED.getCode());
+                content.setAiRoughResult("长时间未完成,自动放弃");
+                content.setUpdateTime(System.currentTimeMillis());
+                spiderContentMapper.updateByPrimaryKeySelective(content);
+            }
+            //执行策略
+            JSONObject jsonObject = new JSONObject();
+            for (ArticleAnalyseStrategyEnum strategy : articleAnalyseStrategyEnums) {
+                ArticleAnalyseStrategy articleAnalyseStrategy = articleAnalyseStrategyMap.get(strategy);
+                String result = articleAnalyseStrategy.execute();
+                if (StringUtils.isNotBlank(result)) {
+                    jsonObject.put(strategy.name(), result);
+                }
+            }
+
+            if (jsonObject.isEmpty()) {
+                content.setStatus(SpiderContentStatusEnum.ABANDONED.getCode());
+                content.setAiPrecisionStatus(SpiderContentScreenStatusEnum.ABANDONED.getCode());
+                content.setUpdateTime(System.currentTimeMillis());
+                spiderContentMapper.updateByPrimaryKeySelective(content);
+            } else {
+                //TODO
+                Integer aiPrecisionStatus = judgePrecisionScreenStatus(jsonObject);
+                content.setAiPrecisionStatus(aiPrecisionStatus);
+                content.setAiPrecisionResult(jsonObject.toJSONString());
+                if (aiPrecisionStatus == SpiderContentScreenStatusEnum.PASSED.getCode()) {
+                    content.setStatus(SpiderContentStatusEnum.PASSED.getCode());
+                } else {
+                    content.setStatus(SpiderContentStatusEnum.ABANDONED.getCode());
+                }
+                content.setUpdateTime(System.currentTimeMillis());
+                spiderContentMapper.updateByPrimaryKeySelective(content);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
 }

+ 9 - 0
core/src/main/java/com/tzld/supply/model/dto/AiPrecisionResultDTO.java

@@ -0,0 +1,9 @@
+package com.tzld.supply.model.dto;
+
+import lombok.Data;
+
+@Data
+public class AiPrecisionResultDTO {
+
+    private Double score;
+}

+ 9 - 0
core/src/main/java/com/tzld/supply/model/dto/AiRoughResultDTO.java

@@ -0,0 +1,9 @@
+package com.tzld.supply.model.dto;
+
+import lombok.Data;
+
+@Data
+public class AiRoughResultDTO {
+
+    private Double score;
+}

+ 12 - 0
core/src/main/java/com/tzld/supply/model/dto/ArticleAnalyseConfigDTO.java

@@ -0,0 +1,12 @@
+package com.tzld.supply.model.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ArticleAnalyseConfigDTO {
+    private String name;
+    private Integer lastDays = 2;
+    private List<Integer> strategies;
+}

+ 4 - 0
core/src/main/java/com/tzld/supply/model/dto/SuitableOlderTitleAnalyseConfigDTO.java

@@ -0,0 +1,4 @@
+package com.tzld.supply.model.dto;
+
+public class SuitableOlderTitleAnalyseConfigDTO {
+}

+ 12 - 0
core/src/main/java/com/tzld/supply/model/dto/TitleAnalyseConfigDTO.java

@@ -0,0 +1,12 @@
+package com.tzld.supply.model.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TitleAnalyseConfigDTO {
+    private String name;
+    private Integer lastDays = 2;
+    private List<Integer> strategies;
+}

+ 10 - 0
core/src/main/java/com/tzld/supply/service/strategy/ArticleAnalyseStrategy.java

@@ -0,0 +1,10 @@
+package com.tzld.supply.service.strategy;
+
+import com.tzld.supply.common.enums.ArticleAnalyseStrategyEnum;
+
+public interface ArticleAnalyseStrategy {
+
+    ArticleAnalyseStrategyEnum getStrategy();
+
+    String execute();
+}

+ 20 - 0
core/src/main/java/com/tzld/supply/service/strategy/SuitableOlderArticleAnalyseStrategy.java

@@ -0,0 +1,20 @@
+package com.tzld.supply.service.strategy;
+
+import com.tzld.supply.common.enums.ArticleAnalyseStrategyEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class SuitableOlderArticleAnalyseStrategy implements ArticleAnalyseStrategy {
+
+    @Override
+    public ArticleAnalyseStrategyEnum getStrategy() {
+        return ArticleAnalyseStrategyEnum.SUITABLE_OLDER;
+    }
+
+    @Override
+    public String execute() {
+        return "";
+    }
+}

+ 20 - 0
core/src/main/java/com/tzld/supply/service/strategy/SuitableOlderTitleAnalyseStrategy.java

@@ -0,0 +1,20 @@
+package com.tzld.supply.service.strategy;
+
+import com.tzld.supply.common.enums.TitleAnalyseStrategyEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class SuitableOlderTitleAnalyseStrategy implements TitleAnalyseStrategy {
+
+    @Override
+    public TitleAnalyseStrategyEnum getStrategy() {
+        return TitleAnalyseStrategyEnum.SUITABLE_OLDER;
+    }
+
+    @Override
+    public String execute() {
+        return "";
+    }
+}

+ 10 - 0
core/src/main/java/com/tzld/supply/service/strategy/TitleAnalyseStrategy.java

@@ -0,0 +1,10 @@
+package com.tzld.supply.service.strategy;
+
+import com.tzld.supply.common.enums.TitleAnalyseStrategyEnum;
+
+public interface TitleAnalyseStrategy {
+
+    TitleAnalyseStrategyEnum getStrategy();
+
+    String execute();
+}