Ver código fonte

Merge branch 'master' into wyp/0925-data-migration

# Conflicts:
#	long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/crawler/CrawlerBaseMapper.java
#	long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/longArticle/LongArticleBaseMapper.java
#	long-article-recommend-service/src/main/resources/mapper/longArticle/LongArticleBaseMapper.xml
#	long-article-recommend-service/src/test/java/com/tzld/longarticle/recommend/server/RecommendTest.java
wangyunpeng 7 meses atrás
pai
commit
62ad7984a5
100 arquivos alterados com 2838 adições e 101 exclusões
  1. 6 0
      long-article-recommend-service/pom.xml
  2. 1 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/Application.java
  3. 1 1
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/HttpPoolFactory.java
  4. 1 1
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/ThreadPoolFactory.java
  5. 1 1
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/constant/SceneConstants.java
  6. 14 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/constant/TimeConstant.java
  7. 36 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/GhTypeEnum.java
  8. 40 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/SecretEnum.java
  9. 28 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/StatusEnum.java
  10. 32 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/StrategyStatusEnum.java
  11. 47 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/aigc/CrawlerModeEnum.java
  12. 43 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/aigc/PublishContentTypeEnum.java
  13. 35 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/aigc/PushTypeEnum.java
  14. 15 13
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/cgi/ReplyStrategyServiceEnum.java
  15. 6 6
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/AccountBusinessTypeEnum.java
  16. 31 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ArticleCategoryStatusEnum.java
  17. 30 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ArticlePoolPromotionSourceStatusEnum.java
  18. 31 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ArticleTypeEnum.java
  19. 1 1
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ContentPoolEnum.java
  20. 31 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/FeishuRobotIdEnum.java
  21. 9 3
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/RankStrategyEnum.java
  22. 32 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ScoreStrategyEnum.java
  23. 75 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/config/MqConfig.java
  24. 19 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/config/db/GrowthDBConfig.java
  25. 38 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/config/mybatis/GrowthMybatisConfig.java
  26. 27 5
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/aigc/AigcBaseMapper.java
  27. 14 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/crawler/CrawlerBaseMapper.java
  28. 34 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/crawler/PushMessageCallbackMapper.java
  29. 3 1
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/AlgGhAutoreplyVideoRankDataMapper.java
  30. 1 1
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/CgiReplyBucketDataMapper.java
  31. 33 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/GhDetailMapper.java
  32. 35 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/NewPushMessageCallbackMapper.java
  33. 33 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/ReplyStaffMapper.java
  34. 21 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/longArticle/LongArticleBaseMapper.java
  35. 20 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/bo/MiniData.java
  36. 11 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/bo/ReplyInfo.java
  37. 4 46
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/BucketDataParam.java
  38. 14 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/AccountTypeFansDTO.java
  39. 3 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/Content.java
  40. 1 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/ContentHisPublishArticle.java
  41. 12 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/CrawlerContent.java
  42. 21 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/NotPublishPlan.java
  43. 15 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/ProduceContentDTO.java
  44. 17 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/PublishContentDTO.java
  45. 10 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/PublishPlanAccountNotifyDTO.java
  46. 39 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/kimi/KimiOfficialApiResponse.java
  47. 11 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/kimi/KimiResult.java
  48. 0 2
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/aigc/PublishContent.java
  49. 82 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/aigc/PublishContentOutput.java
  50. 12 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/crawler/Article.java
  51. 54 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/crawler/GetOffVideoCrawler.java
  52. 164 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/crawler/LongArticlesVideo.java
  53. 48 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/AccountCategory.java
  54. 56 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/ArticleCategory.java
  55. 34 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/ArticleCrawlerPlan.java
  56. 43 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/ArticlePoolPromotionSource.java
  57. 77 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/DatastatScore.java
  58. 14 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/DatastatSortStrategy.java
  59. 54 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/GetOffVideoArticle.java
  60. 104 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/LongArticlesMatchVideo.java
  61. 61 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/LongArticlesReadRate.java
  62. 50 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/LongArticlesRootSourceId.java
  63. 9 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/AccessTokenParam.java
  64. 10 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/ArticleFindSourceParam.java
  65. 21 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/CallbackParam.java
  66. 13 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/PushMessageParam.java
  67. 3 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/RecommendParam.java
  68. 1 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/RecommendRequest.java
  69. 11 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/WeComPushMessageParam.java
  70. 11 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/AccessTokenVo.java
  71. 2 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/ArticleSortResponseDataItem.java
  72. 34 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/FirstContentScoreExport.java
  73. 36 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/GhDetailVo.java
  74. 16 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/GhTypeVo.java
  75. 28 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/IdNameVO.java
  76. 7 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/NewSortStrategyExport.java
  77. 10 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/ProduceContentCrawlerVO.java
  78. 14 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/PushMessageVo.java
  79. 12 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/ReportUvVo.java
  80. 18 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/RootPublishContentVO.java
  81. 16 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/StrategyStatusVo.java
  82. 14 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/WeComPushMessageVo.java
  83. 52 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/WxContentDetailResponse.java
  84. 15 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/CommonListDataVO.java
  85. 1 1
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProduceAuditLayoutContentObjVO.java
  86. 69 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProduceContentListItemVO.java
  87. 30 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProducePlanDetailVO.java
  88. 13 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProducePlanInputSourceGroupOrderParam.java
  89. 25 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProducePlanInputSourceGroupParam.java
  90. 20 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProducePlanInputSourceParam.java
  91. 17 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/SaveFilterConditionParam.java
  92. 61 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mq/MessageCallbackCustomer.java
  93. 68 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mq/MessageCallbackProducer.java
  94. 5 5
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/ArticleListRemoteService.java
  95. 62 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/CrawlerContentByPlanService.java
  96. 89 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/KimiApiService.java
  97. 15 8
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/NLPRemoteService.java
  98. 5 6
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/WxFetchRemoteService.java
  99. 75 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/aigc/AIGCCrawlerPlanSaveService.java
  100. 95 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/aigc/AIGCProduceContentListService.java

+ 6 - 0
long-article-recommend-service/pom.xml

@@ -136,6 +136,12 @@
             <artifactId>poi-ooxml</artifactId>
             <version>5.2.3</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.aliyun.openservices</groupId>
+            <artifactId>ons-client</artifactId>
+            <version>1.8.4.Final</version>
+        </dependency>
     </dependencies>
 
 

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

@@ -24,6 +24,7 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy;
         "com.tzld.longarticle.recommend.server.web",
         "com.tzld.longarticle.recommend.server.util",
         "com.tzld.longarticle.recommend.server.repository",
+        "com.tzld.longarticle.recommend.server.mq"
 })
 @EnableAspectJAutoProxy
 @EnableApolloConfig

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

@@ -11,7 +11,7 @@ public final class HttpPoolFactory {
             HttpClientFactory.create(1000, 1000, 200, 200, 0, 1000);
 
     private static CloseableHttpClient AIGC =
-            HttpClientFactory.create(30000, 30000, 200, 200, 0, 30000);
+            HttpClientFactory.create(60000, 60000, 200, 200, 0, 60000);
 
     private static CloseableHttpClient NLP =
             HttpClientFactory.create(15000, 15000, 200, 200, 0, 15000);

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

@@ -43,7 +43,7 @@ public final class ThreadPoolFactory {
             128,
             128,
             0L, TimeUnit.SECONDS,
-            new LinkedBlockingQueue<>(10000),
+            new LinkedBlockingQueue<>(),
             new ThreadFactoryBuilder().setNameFormat("DeDuplicate-%d").build(),
             new ThreadPoolExecutor.AbortPolicy());
 

+ 1 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/SceneConstants.java → long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/constant/SceneConstants.java

@@ -1,4 +1,4 @@
-package com.tzld.longarticle.recommend.server.service;
+package com.tzld.longarticle.recommend.server.common.constant;
 
 /**
  * @author dyp

+ 14 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/constant/TimeConstant.java

@@ -0,0 +1,14 @@
+package com.tzld.longarticle.recommend.server.common.constant;
+
+public interface TimeConstant {
+
+    Integer MINUTE = 60;
+    Integer HOUR = 60 * 60;
+    Integer DAY = 60 * 60 * 24;
+
+    Long MILLISECOND_HOUR = (long) HOUR * 1000;
+
+    Long MILLISECOND_DAY = (long) DAY * 1000;
+
+
+}

+ 36 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/GhTypeEnum.java

@@ -0,0 +1,36 @@
+package com.tzld.longarticle.recommend.server.common.enums;
+
+import java.util.Objects;
+
+public enum GhTypeEnum {
+
+    GH(1, "内部公众号"),
+    THIRD_PARTY_GH(2, "外部公众号"),
+    WE_COM(3, "企业微信");
+
+    GhTypeEnum(Integer type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    public final Integer type;
+
+    public final String name;
+
+
+    public static String getTypeName(Integer type) {
+        if (type == null) {
+            return null;
+        }
+        for (GhTypeEnum ghTypeEnum : GhTypeEnum.values()) {
+            if (Objects.equals(ghTypeEnum.type, type)) {
+                return ghTypeEnum.name;
+            }
+        }
+        return null;
+    }
+
+
+
+
+}

+ 40 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/SecretEnum.java

@@ -0,0 +1,40 @@
+package com.tzld.longarticle.recommend.server.common.enums;
+
+
+import java.util.Objects;
+import java.util.UUID;
+
+public enum SecretEnum {
+
+    SECRET_ENUM_1("3b83574b477d4c5b8508a6e33f6e35ec", "魅力", "ml"),
+    SECRET_ENUM_2("70d342bf11a84ac7aca6b3e99541e085", "老来福", "llf"),
+    SECRET_ENUM_3("595db67618174499b2bed23d8be6a3c1", "微小盟", "wxm");
+
+    SecretEnum(String secret, String desc, String channel) {
+        this.secret = secret;
+        this.desc = desc;
+        this.channel = channel;
+    }
+
+    public final String secret;
+    public final String desc;
+    public final String channel;
+
+    public static boolean contains(String secret) {
+        for (SecretEnum secretEnum : SecretEnum.values()) {
+            if (Objects.equals(secretEnum.secret, secret)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static SecretEnum get(String secret) {
+        for (SecretEnum secretEnum : SecretEnum.values()) {
+            if (Objects.equals(secretEnum.secret, secret)) {
+                return secretEnum;
+            }
+        }
+        return null;
+    }
+}

+ 28 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/StatusEnum.java

@@ -0,0 +1,28 @@
+package com.tzld.longarticle.recommend.server.common.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum StatusEnum {
+
+    ZERO(0, "0"),
+    ONE(1, "1"),
+    ;
+
+    private int code;
+    private String msg;
+
+    StatusEnum(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public static StatusEnum getByCode(int code) {
+        for (StatusEnum statusEnum : StatusEnum.values()) {
+            if (statusEnum.getCode() == code) {
+                return statusEnum;
+            }
+        }
+        return null;
+    }
+}

+ 32 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/StrategyStatusEnum.java

@@ -0,0 +1,32 @@
+package com.tzld.longarticle.recommend.server.common.enums;
+
+import java.util.Objects;
+
+public enum StrategyStatusEnum {
+
+    DEFAULT(0, "保底视频"),
+    STRATEGY(1, "策略视频");
+
+    StrategyStatusEnum(Integer status, String name) {
+        this.status = status;
+        this.name = name;
+    }
+
+    public final Integer status;
+
+    public final String name;
+
+
+    public static String getStrategyStatusName(Integer status) {
+        if (status == null) {
+            return null;
+        }
+        for (StrategyStatusEnum strategyStatusEnum : StrategyStatusEnum.values()) {
+            if (Objects.equals(strategyStatusEnum.status, status)) {
+                return strategyStatusEnum.name;
+            }
+        }
+        return null;
+    }
+
+}

+ 47 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/aigc/CrawlerModeEnum.java

@@ -0,0 +1,47 @@
+package com.tzld.longarticle.recommend.server.common.enums.aigc;
+
+import lombok.Getter;
+
+/**
+ * @description:抓取模式
+ * @author: TanJingyu
+ * @create:2023-10-09 16:39:29
+ **/
+@Getter
+public enum CrawlerModeEnum {
+    DesignatedBlogger(1, "指定博主"),
+    CategoryBlogger(2, "分类博主"),
+    RecommendedBlogger(3, "推荐流博主"),
+    Account(4, "账号"),
+    ContentIDs(5, "内容IDs"),
+    KeywordSearch(6, "关键词搜索"),
+    HotList(7, "热榜"),
+    Recommended(8, "推荐"),
+    ImageSearch(9, "图片搜索"),
+    AlgorithmRecommended(10, "算法推荐"),
+    BloggerList(11, "博主榜单"),
+    RankList(12, "榜单"),
+    RelRecommended(13, "相关推荐"),
+
+    PublishContentIds(101, "Aigc发布内容Id"),
+
+    Other(999, "其他");
+
+    private final int val;
+    private final String description;
+
+    CrawlerModeEnum(int val, String description) {
+        this.val = val;
+        this.description = description;
+    }
+
+    public static CrawlerModeEnum from(int val) {
+        for (CrawlerModeEnum typeEnum : CrawlerModeEnum.values()) {
+            if (typeEnum.getVal() == val) {
+                return typeEnum;
+            }
+        }
+
+        return Other;
+    }
+}

+ 43 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/aigc/PublishContentTypeEnum.java

@@ -0,0 +1,43 @@
+package com.tzld.longarticle.recommend.server.common.enums.aigc;
+
+import lombok.Getter;
+
+import java.util.Objects;
+
+@Getter
+public enum PublishContentTypeEnum {
+    cover(1, "封面"),
+    image(2, "图片"),
+    title(3, "标题"),
+    bodyText(4, "正文"),
+    animation(5, "动效"),
+    video(6, "视频"),
+    textLetter(7, "文本私信"),
+    imageLetter(8, "图片私信"),
+    noteLetter(9, "笔记私信"),
+    textComment(10, "文本评论"),
+    imageComment(11, "图片评论"),
+    commentId(12, "动作对象为评论,被评论/被删除的/被点赞的评论ID"),
+    contentStageId(13, "动作对象为内容,被评论的/被隐藏的/被删除的/被修改的内容的三方平台ID"),
+    receiverUserPlatformId(14, "动作对象为用户,动作接收人三方平台用户ID"),
+    actionAccountId(15, "动作账号ID"),
+    other(999, "其他"),
+    ;
+
+    private final Integer val;
+    private final String description;
+
+    PublishContentTypeEnum(Integer val, String description) {
+        this.val = val;
+        this.description = description;
+    }
+
+    public static PublishContentTypeEnum from(Integer val) {
+        for (PublishContentTypeEnum statusEnum : PublishContentTypeEnum.values()) {
+            if (Objects.equals(statusEnum.val, val)) {
+                return statusEnum;
+            }
+        }
+        return other;
+    }
+}

+ 35 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/aigc/PushTypeEnum.java

@@ -0,0 +1,35 @@
+package com.tzld.longarticle.recommend.server.common.enums.aigc;
+
+import lombok.Getter;
+
+import java.util.Objects;
+
+@Getter
+public enum PushTypeEnum {
+    MANUAL_PUSH(1, "手动推送"),
+    AUTO_GROUP_PUBLISH(2, "自动群发"),
+    AUTO_PUBLISH(3, "自动发表"),
+    ROBOPOST(4, "自动发布"),
+    BATCH_GROUP_PUBLISH(5, "分组群发"),
+    TRIGGER_PUSH(6, "触发推送"),
+
+    other(999, "其他"),
+    ;
+
+    private final Integer val;
+    private final String description;
+
+    PushTypeEnum(Integer val, String description) {
+        this.val = val;
+        this.description = description;
+    }
+
+    public static PushTypeEnum from(Integer val) {
+        for (PushTypeEnum typeEnum : PushTypeEnum.values()) {
+            if (Objects.equals(typeEnum.val, val)) {
+                return typeEnum;
+            }
+        }
+        return other;
+    }
+}

+ 15 - 13
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/cgi/ReplyStrategyServiceEnum.java

@@ -2,23 +2,25 @@ package com.tzld.longarticle.recommend.server.common.enums.cgi;
 
 public enum ReplyStrategyServiceEnum {
 
-     BUCKET_STRATEGY_V1("BUCKET_STRATEGY_V1", "分桶策略v1"),
+    BUCKET_STRATEGY_V1("BUCKET_STRATEGY_V1", "分桶策略v1"),
 
-     ;
+    PUSH_MESSAGE_STRATEGY_V1("PUSH_MESSAGE_STRATEGY_V1", "第三方微信公众号推送策略V1"),
+    WE_COM_PUSH_MESSAGE_STRATEGY_V1("WE_COM_PUSH_MESSAGE_STRATEGY_V1", "企业微信推送策略V1"),
+    ;
 
-     private final String key;
-     private final String desc;
+    private final String key;
+    private final String desc;
 
     ReplyStrategyServiceEnum(String key, String desc) {
-         this.key = key;
-         this.desc = desc;
-     }
+        this.key = key;
+        this.desc = desc;
+    }
 
-     public String getKey() {
-         return key;
-     }
+    public String getKey() {
+        return key;
+    }
 
-     public String getDesc() {
-         return desc;
-     }
+    public String getDesc() {
+        return desc;
+    }
 }

+ 6 - 6
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/AccountBusinessTypeEnum.java → long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/AccountBusinessTypeEnum.java

@@ -1,4 +1,4 @@
-package com.tzld.longarticle.recommend.server.common.enums;
+package com.tzld.longarticle.recommend.server.common.enums.recommend;
 
 import lombok.Getter;
 
@@ -6,11 +6,11 @@ import java.util.Objects;
 
 @Getter
 public enum AccountBusinessTypeEnum {
-    changwen(1, "长文"),
-    touliu(2, "投流"),
-    qiwei(3, "企微"),
+    CHANGWEN(1, "长文"),
+    TOULIU(2, "投流"),
+    QIWEI(3, "企微"),
     
-    other(999, "其他"),
+    OTHER(999, "其他"),
 
     ;
 
@@ -28,6 +28,6 @@ public enum AccountBusinessTypeEnum {
                 return typeEnum;
             }
         }
-        return other;
+        return OTHER;
     }
 }

+ 31 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ArticleCategoryStatusEnum.java

@@ -0,0 +1,31 @@
+package com.tzld.longarticle.recommend.server.common.enums.recommend;
+
+import lombok.Getter;
+
+@Getter
+public enum ArticleCategoryStatusEnum {
+
+    WAITING(0, "待分类"),
+    PROCESS(1, "执行中"),
+    SUCCESS(2, "成功"),
+    FAIL(3, "失败"),
+    ;
+
+    //状态(0-待分类 1-执行中 2-成功 3-失败)
+    private int code;
+    private String msg;
+
+    ArticleCategoryStatusEnum(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public static ArticleCategoryStatusEnum getByCode(int code) {
+        for (ArticleCategoryStatusEnum statusEnum : ArticleCategoryStatusEnum.values()) {
+            if (statusEnum.getCode() == code) {
+                return statusEnum;
+            }
+        }
+        return null;
+    }
+}

+ 30 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ArticlePoolPromotionSourceStatusEnum.java

@@ -0,0 +1,30 @@
+package com.tzld.longarticle.recommend.server.common.enums.recommend;
+
+import lombok.Getter;
+
+@Getter
+public enum ArticlePoolPromotionSourceStatusEnum {
+
+    WAITING(0, "waiting"),
+    FINISH(1, "finish");
+
+    //0-待溯源处理 1-已完成
+
+    private Integer code;
+    private String desc;
+
+    ArticlePoolPromotionSourceStatusEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public static ArticlePoolPromotionSourceStatusEnum getByCode(Integer code) {
+        for (ArticlePoolPromotionSourceStatusEnum status : ArticlePoolPromotionSourceStatusEnum.values()) {
+            if (status.getCode().equals(code)) {
+                return status;
+            }
+        }
+        return null;
+    }
+
+}

+ 31 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ArticleTypeEnum.java

@@ -0,0 +1,31 @@
+package com.tzld.longarticle.recommend.server.common.enums.recommend;
+
+import lombok.Getter;
+
+import java.util.Objects;
+
+@Getter
+public enum ArticleTypeEnum {
+    QUNFA("9", "群发"),
+    WUXIANLIU("10002", "无限流"),
+
+    ;
+
+    private final String val;
+    private final String description;
+
+
+    ArticleTypeEnum(String val, String description) {
+        this.val = val;
+        this.description = description;
+    }
+
+    public static ArticleTypeEnum from(String val) {
+        for (ArticleTypeEnum articleTypeEnum : ArticleTypeEnum.values()) {
+            if (Objects.equals(articleTypeEnum.val, val)) {
+                return articleTypeEnum;
+            }
+        }
+        return QUNFA;
+    }
+}

+ 1 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/ContentPoolEnum.java → long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ContentPoolEnum.java

@@ -1,4 +1,4 @@
-package com.tzld.longarticle.recommend.server.common.enums;
+package com.tzld.longarticle.recommend.server.common.enums.recommend;
 
 import lombok.Getter;
 

+ 31 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/FeishuRobotIdEnum.java

@@ -0,0 +1,31 @@
+package com.tzld.longarticle.recommend.server.common.enums.recommend;
+
+import lombok.Getter;
+
+import java.util.Objects;
+
+@Getter
+public enum FeishuRobotIdEnum {
+    RECOMMEND("长文排序报警群", "07026a9f-43f5-448b-ba40-a8d71bd6e634"),
+    JOB("定时任务报警群", "186c9798-5b6a-4ff8-b7fc-4ce4b6ea5076"),
+
+    ;
+
+    private final String groupName;
+    private final String robotId;
+
+
+    FeishuRobotIdEnum(String groupName, String robotId) {
+        this.groupName = groupName;
+        this.robotId = robotId;
+    }
+
+    public static FeishuRobotIdEnum from(String groupName) {
+        for (FeishuRobotIdEnum robotEnum : FeishuRobotIdEnum.values()) {
+            if (Objects.equals(robotEnum.groupName, groupName)) {
+                return robotEnum;
+            }
+        }
+        return RECOMMEND;
+    }
+}

+ 9 - 3
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/RankStrategyEnum.java → long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/RankStrategyEnum.java

@@ -1,4 +1,4 @@
-package com.tzld.longarticle.recommend.server.common.enums;
+package com.tzld.longarticle.recommend.server.common.enums.recommend;
 
 import lombok.Getter;
 
@@ -17,8 +17,14 @@ public enum RankStrategyEnum {
     ArticleRankV10("ArticleRankV10", "ArticleRankV10", "rankV10Strategy"),
     ArticleRankV11("ArticleRankV11", "ArticleRankV11", "rankV11Strategy"),
     ArticleRankV12("ArticleRankV12", "ArticleRankV12", "rankV12Strategy"),
+    ArticleRankV13("ArticleRankV13", "ArticleRankV13", "rankV13Strategy"),
+    ArticleRankV14("ArticleRankV14", "ArticleRankV14", "rankV14Strategy"),
 
-    default_strategy("ArticleRankV1", "默认策略", "defaultRankStrategy"),
+    HIS_JUMP_STRATEGY("ArticleRankHisJump", "历史表现跳过相似度策略", "hisJumpRankStrategy"),
+    INFINITE_STRATEGY("ArticleRankInfinite", "无限发表", "infiniteRankStrategy"),
+    LATE_STRATEGY("ArticleRankLate", "晚间策略", "lateRankStrategy"),
+    RANDOM_STRATEGY("ArticleRankRandom", "随机策略", "randomRankStrategy"),
+    DEFAULT_STRATEGY("ArticleRankV1", "默认策略", "defaultRankStrategy"),
     ;
 
     private final String strategy;
@@ -37,6 +43,6 @@ public enum RankStrategyEnum {
                 return statusEnum;
             }
         }
-        return default_strategy;
+        return DEFAULT_STRATEGY;
     }
 }

+ 32 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/recommend/ScoreStrategyEnum.java

@@ -0,0 +1,32 @@
+package com.tzld.longarticle.recommend.server.common.enums.recommend;
+
+public enum ScoreStrategyEnum {
+    ACCOUNT_PRE_DISTRIBUTE("AccountPreDistributeStrategy"),
+    CATEGORY("CategoryStrategy"),
+    CONTENT_POOL("ContentPoolStrategy"),
+    FLOW_CTL_DECREASE("FlowCtlDecreaseStrategy"),
+    HIS_FISSION_AVG_READ_RATE_CORRELATION_RATE("HisFissionAvgReadRateCorrelationRateStrategy"),
+    HIS_FISSION_AVG_READ_RATE_RATE("HisFissionAvgReadRateRateStrategy"),
+    HIS_FISSION_AVG_READ_SUM_RATE("HisFissionAvgReadSumRateStrategy"),
+    HIS_FISSION_DE_WEIGHT_AVG_READ_SUM_RATE("HisFissionDeWeightAvgReadSumRateStrategy"),
+    HIS_FISSION_FANS_RATE_RATE("HisFissionFansRateRateStrategy"),
+    HIS_FISSION_FANS_SUM_RATE("HisFissionFansSumRateStrategy"),
+    PUBLISH_TIMES("PublishTimesStrategy"),
+    SIMILARITY("SimilarityStrategy"),
+    VIEW_COUNT_RATE_CORRELATION("ViewCountRateCorrelationStrategy"),
+    VIEW_COUNT_RATE("ViewCountRateStrategy"),
+    VIEW_COUNT("ViewCountStrategy"),
+    VIEW_MULTIPLIER("ViewMultiplierStrategy"),
+    CRAWLER_DAYS_DECREASE_STRATEGY("CrawlerDaysDecreaseStrategy"),
+    ;
+
+    private final String value;
+
+    ScoreStrategyEnum(String value) {
+        this.value = value;
+    }
+
+    public String value() {
+        return value;
+    }
+}

+ 75 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/config/MqConfig.java

@@ -0,0 +1,75 @@
+package com.tzld.longarticle.recommend.server.config;
+
+import com.aliyun.openservices.ons.api.MessageListener;
+import com.aliyun.openservices.ons.api.PropertyKeyConst;
+import com.aliyun.openservices.ons.api.bean.ConsumerBean;
+import com.aliyun.openservices.ons.api.bean.ProducerBean;
+import com.aliyun.openservices.ons.api.bean.Subscription;
+import com.tzld.longarticle.recommend.server.mq.MessageCallbackCustomer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.DependsOn;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+@Configuration
+public class MqConfig {
+
+    @Value("${rocketmq.accessKey}")
+    private String accessKey;
+    @Value("${rocketmq.secretKey}")
+    private String secretKey;
+    @Value("${rocketmq.nameSrvAddr}")
+    private String nameSrvAddr;
+    @Value("${pushMessage.callback.topic}")
+    private String callbackTopic;
+    @Value("${pushMessage.callback.tag}")
+    private String callbackTag;
+    @Value("${pushMessage.callback.groupId}")
+    private String callbackGroupId;
+
+    @Autowired
+    private MessageCallbackCustomer messageCallbackCustomer;
+
+    public Properties getMqProperties() {
+        Properties properties = new Properties();
+        properties.setProperty(PropertyKeyConst.AccessKey, this.accessKey);
+        properties.setProperty(PropertyKeyConst.SecretKey, this.secretKey);
+        properties.setProperty(PropertyKeyConst.NAMESRV_ADDR, this.nameSrvAddr);
+        return properties;
+    }
+
+    @Bean(initMethod = "start", destroyMethod = "shutdown")
+    public ProducerBean buildProducer() {
+        ProducerBean producer = new ProducerBean();
+        producer.setProperties(getMqProperties());
+        return producer;
+    }
+
+
+    @Bean(initMethod = "start", destroyMethod = "shutdown")
+    public ConsumerBean buildConsumer() {
+        ConsumerBean consumerBean = new ConsumerBean();
+        //配置文件
+        Properties properties = getMqProperties();
+        properties.setProperty(PropertyKeyConst.ConsumeThreadNums, "20");
+        properties.setProperty(PropertyKeyConst.GROUP_ID, callbackGroupId);
+        consumerBean.setProperties(properties);
+        //订阅关系
+        Map<Subscription, MessageListener> subscriptionTable = new HashMap<>();
+        Subscription subscription = new Subscription();
+        subscription.setTopic(callbackTopic);
+        subscription.setExpression(callbackTag);
+        subscriptionTable.put(subscription, messageCallbackCustomer);
+        //订阅多个topic如上面设置
+        consumerBean.setSubscriptionTable(subscriptionTable);
+        return consumerBean;
+    }
+
+
+}

+ 19 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/config/db/GrowthDBConfig.java

@@ -0,0 +1,19 @@
+package com.tzld.longarticle.recommend.server.config.db;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.jdbc.DataSourceBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+
+@Configuration
+public class GrowthDBConfig {
+
+    @Bean(name = "growthDataSource")
+    @ConfigurationProperties(prefix = "spring.datasource.growth")
+    public DataSource growthDataSource() {
+        return DataSourceBuilder.create().build();
+    }
+}
+

+ 38 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/config/mybatis/GrowthMybatisConfig.java

@@ -0,0 +1,38 @@
+package com.tzld.longarticle.recommend.server.config.mybatis;
+
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+
+import javax.sql.DataSource;
+
+@Configuration
+@MapperScan(basePackages = "com.tzld.longarticle.recommend.server.mapper.growth",
+        sqlSessionFactoryRef = "growthSqlSessionFactory")
+public class GrowthMybatisConfig {
+
+    @Primary
+    @Bean(name = "growthSqlSessionFactory")
+    public SqlSessionFactory crawlerSqlSessionFactory(@Qualifier("growthDataSource") DataSource dataSource) throws Exception {
+        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+        sessionFactory.setDataSource(dataSource);
+        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
+                .getResources("classpath*:mapper/**/*.xml"));
+        sessionFactory.setTypeAliasesPackage("com.tzld.longarticle.recommend.server");
+        sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
+        sessionFactory.getObject().getConfiguration().setUseGeneratedKeys(true);
+        return sessionFactory.getObject();
+    }
+
+    @Primary
+    @Bean(name = "growthSqlSessionTemplate")
+    public SqlSessionTemplate crawlerSqlSessionTemplate(@Qualifier("growthSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
+        return new SqlSessionTemplate(sqlSessionFactory);
+    }
+}

+ 27 - 5
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/aigc/AigcBaseMapper.java

@@ -1,9 +1,7 @@
 package com.tzld.longarticle.recommend.server.mapper.aigc;
 
-import com.tzld.longarticle.recommend.server.model.entity.aigc.CrawlerPlan;
-import com.tzld.longarticle.recommend.server.model.entity.aigc.CrawlerPlanResultRel;
-import com.tzld.longarticle.recommend.server.model.entity.aigc.PublishContent;
-import com.tzld.longarticle.recommend.server.model.entity.aigc.PublishPlanMiniprogramTask;
+import com.tzld.longarticle.recommend.server.model.dto.*;
+import com.tzld.longarticle.recommend.server.model.entity.aigc.*;
 import com.tzld.longarticle.recommend.server.model.param.MiniprogramTaskParam;
 import com.tzld.longarticle.recommend.server.model.param.PublishContentParam;
 import org.apache.ibatis.annotations.Mapper;
@@ -13,11 +11,35 @@ import java.util.List;
 @Mapper
 public interface AigcBaseMapper {
 
-    List<PublishContent> getPublishContentByTitle(List<PublishContentParam> list);
+    List<PublishContentDTO> getPublishContentByTitle(List<PublishContentParam> list);
 
     List<PublishPlanMiniprogramTask> getMiniProgramTask(List<MiniprogramTaskParam> miniprogramTaskParamList);
 
     List<CrawlerPlanResultRel> getCrawlerPlanRelByChannelContentIds(List<String> channelContentIds);
 
     List<CrawlerPlan> getCrawlerPlanByPlanIds(List<String> planIds);
+
+    List<NotPublishPlan> getNotPublishPlan(Long todayStart);
+
+    Integer getPublishPlanPushType(String planId);
+
+    List<PublishAccount> getPublishAccounts(String planId, Long todayStart);
+
+    List<ProduceContentDTO> getSourceProduceContentByTitles(List<String> titleList);
+
+    List<AccountTypeFansDTO> getAccountTypeFans();
+
+    List<PublishContentDTO> getHisPublishByTitles(List<String> titleList);
+
+    List<PublishContent> getNearestPublishContent(String publishAccountId, Long publishTimestamp, Integer size);
+
+    CrawlerContent getCrawlerContentByChannelContentId(String channelContentId);
+
+    List<CrawlerContent> getCrawlerContentByChannelContentIdIn(List<String> channelContentIds);
+
+    List<ProduceContentDTO> getProduceContentByPlanId(String planId);
+
+    List<ProducePlanExeRecord> getAllByProducePlanId(List<String> producePlanIds);
+
+    List<PublishPlanAccountNotifyDTO> checkPublishPlanAccount();
 }

+ 14 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/crawler/CrawlerBaseMapper.java

@@ -1,7 +1,9 @@
 package com.tzld.longarticle.recommend.server.mapper.crawler;
 
+import com.tzld.longarticle.recommend.server.model.entity.crawler.AccountAvgInfo;
 import com.tzld.longarticle.recommend.server.model.dto.*;
 import com.tzld.longarticle.recommend.server.model.entity.crawler.AccountCorrelation;
+import com.tzld.longarticle.recommend.server.model.entity.crawler.Article;
 
 import java.util.List;
 
@@ -9,6 +11,18 @@ public interface CrawlerBaseMapper {
 
     void batchInsertAccountCorrelation(List<AccountCorrelation> list);
 
+    void batchInsertAccountAvgInfo(List<AccountAvgInfo> list);
+
+    void deleteAccountAvgInfoByGhIdAndUpdateTime(String ghId, String date);
+
+    void updateAccountAvgInfoStatus(String ghId, String date);
+
+    void updateArticleAigcId(String wxsn, String publishContentId, String channelContentId);
+
+    void updateArticleSourceRootId(String wxsn, String sourcePublishContentId, String rootPublishContentId, String rootProduceContentId);
+
+    List<Article> getWaitingFindArticle(Long timestamp);
+
     Integer countGetOffVideos();
 
     List<GetOffVideos> pageGetOffVideos(int offset, int pageSize);

+ 34 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/crawler/PushMessageCallbackMapper.java

@@ -0,0 +1,34 @@
+package com.tzld.longarticle.recommend.server.mapper.crawler;
+
+import com.tzld.longarticle.recommend.server.repository.model.PushMessageCallback;
+import com.tzld.longarticle.recommend.server.repository.model.PushMessageCallbackExample;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+public interface PushMessageCallbackMapper {
+    long countByExample(PushMessageCallbackExample example);
+
+    int deleteByExample(PushMessageCallbackExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(PushMessageCallback row);
+
+    int insertSelective(PushMessageCallback row);
+
+    List<PushMessageCallback> selectByExample(PushMessageCallbackExample example);
+
+    PushMessageCallback selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("row") PushMessageCallback row, @Param("example") PushMessageCallbackExample example);
+
+    int updateByExample(@Param("row") PushMessageCallback row, @Param("example") PushMessageCallbackExample example);
+
+    int updateByPrimaryKeySelective(PushMessageCallback row);
+
+    int updateByPrimaryKey(PushMessageCallback row);
+
+    int insertList(@Param("list") List<PushMessageCallback> list);
+}

+ 3 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/crawler/AlgGhAutoreplyVideoRankDataMapper.java → long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/AlgGhAutoreplyVideoRankDataMapper.java

@@ -1,4 +1,4 @@
-package com.tzld.longarticle.recommend.server.mapper.crawler;
+package com.tzld.longarticle.recommend.server.mapper.growth;
 
 import com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankData;
 import com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankDataExample;
@@ -31,4 +31,6 @@ public interface AlgGhAutoreplyVideoRankDataMapper {
     int updateByPrimaryKey(AlgGhAutoreplyVideoRankData row);
 
     String selectLatestDtVersionByStrategyKey(String strategyKey);
+
+    String selectLatestDtVersionByStrategyKeyAndGhId(@Param("strategyKey")String strategyKey, @Param("ghId")String ghId);
 }

+ 1 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/crawler/CgiReplyBucketDataMapper.java → long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/CgiReplyBucketDataMapper.java

@@ -1,4 +1,4 @@
-package com.tzld.longarticle.recommend.server.mapper.crawler;
+package com.tzld.longarticle.recommend.server.mapper.growth;
 
 import com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketData;
 import com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketDataExample;

+ 33 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/GhDetailMapper.java

@@ -0,0 +1,33 @@
+package com.tzld.longarticle.recommend.server.mapper.growth;
+
+import com.tzld.longarticle.recommend.server.repository.model.GhDetail;
+import com.tzld.longarticle.recommend.server.repository.model.GhDetailExample;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface GhDetailMapper {
+    long countByExample(GhDetailExample example);
+
+    int deleteByExample(GhDetailExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(GhDetail row);
+
+    int insertSelective(GhDetail row);
+
+    List<GhDetail> selectByExample(GhDetailExample example);
+
+    GhDetail selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("row") GhDetail row, @Param("example") GhDetailExample example);
+
+    int updateByExample(@Param("row") GhDetail row, @Param("example") GhDetailExample example);
+
+    int updateByPrimaryKeySelective(GhDetail row);
+
+    int updateByPrimaryKey(GhDetail row);
+}

+ 35 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/NewPushMessageCallbackMapper.java

@@ -0,0 +1,35 @@
+package com.tzld.longarticle.recommend.server.mapper.growth;
+
+import com.tzld.longarticle.recommend.server.repository.model.PushMessageCallback;
+import com.tzld.longarticle.recommend.server.repository.model.PushMessageCallbackExample;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface NewPushMessageCallbackMapper {
+    long countByExample(PushMessageCallbackExample example);
+
+    int deleteByExample(PushMessageCallbackExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(PushMessageCallback row);
+
+    int insertSelective(PushMessageCallback row);
+
+    List<PushMessageCallback> selectByExample(PushMessageCallbackExample example);
+
+    PushMessageCallback selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("row") PushMessageCallback row, @Param("example") PushMessageCallbackExample example);
+
+    int updateByExample(@Param("row") PushMessageCallback row, @Param("example") PushMessageCallbackExample example);
+
+    int updateByPrimaryKeySelective(PushMessageCallback row);
+
+    int updateByPrimaryKey(PushMessageCallback row);
+
+    int insertList(@Param("list") List<PushMessageCallback> list);
+}

+ 33 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/growth/ReplyStaffMapper.java

@@ -0,0 +1,33 @@
+package com.tzld.longarticle.recommend.server.mapper.growth;
+
+import com.tzld.longarticle.recommend.server.repository.model.ReplyStaff;
+import com.tzld.longarticle.recommend.server.repository.model.ReplyStaffExample;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface ReplyStaffMapper {
+    long countByExample(ReplyStaffExample example);
+
+    int deleteByExample(ReplyStaffExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(ReplyStaff row);
+
+    int insertSelective(ReplyStaff row);
+
+    List<ReplyStaff> selectByExample(ReplyStaffExample example);
+
+    ReplyStaff selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("row") ReplyStaff row, @Param("example") ReplyStaffExample example);
+
+    int updateByExample(@Param("row") ReplyStaff row, @Param("example") ReplyStaffExample example);
+
+    int updateByPrimaryKeySelective(ReplyStaff row);
+
+    int updateByPrimaryKey(ReplyStaff row);
+}

+ 21 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/longArticle/LongArticleBaseMapper.java

@@ -1,5 +1,9 @@
 package com.tzld.longarticle.recommend.server.mapper.longArticle;
 
+import com.tzld.longarticle.recommend.server.model.entity.longArticle.LongArticlesRootSourceId;
+import com.tzld.longarticle.recommend.server.model.entity.longArticle.ArticleCategory;
+import com.tzld.longarticle.recommend.server.model.entity.longArticle.DatastatScore;
+import com.tzld.longarticle.recommend.server.model.entity.longArticle.ArticlePoolPromotionSource;
 import com.tzld.longarticle.recommend.server.model.dto.*;
 import com.tzld.longarticle.recommend.server.model.entity.longArticle.DatastatSortStrategy;
 import org.apache.ibatis.annotations.Mapper;
@@ -11,8 +15,25 @@ public interface LongArticleBaseMapper {
 
     void deleteByDateStrGreaterThanEqual(String dateStr);
 
+    void deleteByDateStrBetween(String dateStrBegin, String dateStrEnd, String type);
+
     void batchInsertDatastatSortStrategy(List<DatastatSortStrategy> list);
 
+    void batchInsertArticlePoolPromotionSource(List<ArticlePoolPromotionSource> list);
+
+    void updateRootProduceContentLevel(String rootProduceContentId, String level);
+
+    void deleteDatastatScoreByDtIn(List<String> dateStrList);
+
+    void batchInsertDatastatScore(List<DatastatScore> list);
+
+    void batchInsertArticleCategory(List<ArticleCategory> list);
+
+    List<DatastatSortStrategy> getArticlePromotion(Integer viewCount, Double viewCountRate,
+                                                   Integer fans, String dateStr, List<Integer> positions);
+
+    void batchInsertLongArticlesRootSourceId(List<LongArticlesRootSourceId> list);
+
     void batchInsertGetOffVideos(List<GetOffVideos> list);
 
     int batchInsertLongArticlesRootSourceId(List<LongArticlesRootSourceId> list);

+ 20 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/bo/MiniData.java

@@ -0,0 +1,20 @@
+package com.tzld.longarticle.recommend.server.model.bo;
+
+import lombok.Data;
+
+@Data
+public class MiniData {
+
+    private Integer msgType;
+
+    private String title;
+
+    private String coverUrl;
+
+    private String miniAppId;
+
+    private String miniPagePath;
+
+    private Long miniVideoId;
+
+}

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

@@ -0,0 +1,11 @@
+package com.tzld.longarticle.recommend.server.model.bo;
+
+import lombok.Data;
+
+@Data
+public class ReplyInfo {
+
+    private Integer msgType;
+
+    private Long miniVideoId;
+}

+ 4 - 46
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/BucketDataParam.java

@@ -1,7 +1,10 @@
 package com.tzld.longarticle.recommend.server.model.cgi;
 
+import lombok.Data;
+
 import java.util.List;
 
+@Data
 public class BucketDataParam {
 
     private String accountId;
@@ -16,51 +19,6 @@ public class BucketDataParam {
 
     private List<ArticleInfo> articleList;
 
-    public String getAccountId() {
-        return accountId;
-    }
-
-    public void setAccountId(String accountId) {
-        this.accountId = accountId;
-    }
-
-    public String getAccountName() {
-        return accountName;
-    }
-
-    public void setAccountName(String accountName) {
-        this.accountName = accountName;
-    }
-
-    public String getGhId() {
-        return ghId;
-    }
-
-    public void setGhId(String ghId) {
-        this.ghId = ghId;
-    }
-
-    public String getStrategy() {
-        return strategy;
-    }
-
-    public void setStrategy(String strategy) {
-        this.strategy = strategy;
-    }
-
-    public String getPlanId() {
-        return planId;
-    }
-
-    public void setPlanId(String planId) {
-        this.planId = planId;
-    }
-
-    public List<ArticleInfo> getArticleList() {
-        return articleList;
-    }
+    private String channel;
 
-    public void setArticleList(List<ArticleInfo> articleList) {
-        this.articleList = articleList;
-    }
 }

+ 14 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/AccountTypeFansDTO.java

@@ -0,0 +1,14 @@
+package com.tzld.longarticle.recommend.server.model.dto;
+
+import lombok.Data;
+
+@Data
+public class AccountTypeFansDTO {
+    private String name;
+    private String ghId;
+    private Integer followerCount;
+    private String accountSourceName;
+    private String modeType;
+    private String accountType;
+    private String status;
+}

+ 3 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/Content.java

@@ -18,6 +18,7 @@ import java.util.Map;
 @AllArgsConstructor
 public class Content {
     private String id;
+    private String sourceId;
     private String title;
     private Long createTimestamp;
     private String producePlanName;
@@ -28,6 +29,8 @@ public class Content {
     private String crawlerTitle;
     private String crawlerCoverUrl;
     private Integer crawlerViewCount;
+    private Long crawlerTimestamp;
+    private Long rootPublishTimestamp;
 //    private Integer crawlerLikeCount;
 //    private Long crawlerPublishTimestamp;
 //    private String crawlerAccountName;

+ 1 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/ContentHisPublishArticle.java

@@ -17,6 +17,7 @@ public class ContentHisPublishArticle {
     private Integer itemIndex;
     private Integer viewCount;
     private Long updateTime;
+    private Long publishTimestamp;
     private Integer avgViewCount;
     private Double viewCountRate;
     private Integer firstViewCount;

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

@@ -0,0 +1,12 @@
+package com.tzld.longarticle.recommend.server.model.dto;
+
+import lombok.Data;
+
+@Data
+public class CrawlerContent {
+    private String channelContentId;
+    private String crawlerPlanId;
+    private String ghId;
+    private String title;
+    private Long publishTimestamp;
+}

+ 21 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/NotPublishPlan.java

@@ -0,0 +1,21 @@
+package com.tzld.longarticle.recommend.server.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class NotPublishPlan {
+
+    private String planId;
+
+    private String planName;
+
+    private String errorMsg;
+
+    private Integer expectCount;
+
+    private Integer publishCount;
+
+    private String publishPushTime;
+}

+ 15 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/ProduceContentDTO.java

@@ -0,0 +1,15 @@
+package com.tzld.longarticle.recommend.server.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ProduceContentDTO {
+
+    private String contentId;
+    private String title;
+    private Long produceTimestamp;
+    private String producePlanId;
+
+}

+ 17 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/PublishContentDTO.java

@@ -0,0 +1,17 @@
+package com.tzld.longarticle.recommend.server.model.dto;
+
+import lombok.Data;
+
+@Data
+public class PublishContentDTO {
+
+    private String id;
+    private String planId;
+    private Integer sourceType;
+    private String sourceId;
+    private String crawlerChannelContentId;
+    private String publishAccountId;
+    private Long publishTimestamp;
+    private String title;
+}
+

+ 10 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/PublishPlanAccountNotifyDTO.java

@@ -0,0 +1,10 @@
+package com.tzld.longarticle.recommend.server.model.dto;
+
+import lombok.Data;
+
+@Data
+public class PublishPlanAccountNotifyDTO {
+    private String planId;
+    private String planName;
+    private String accountName;
+}

+ 39 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/kimi/KimiOfficialApiResponse.java

@@ -0,0 +1,39 @@
+package com.tzld.longarticle.recommend.server.model.dto.kimi;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class KimiOfficialApiResponse {
+
+    private String id;
+    private String object;
+    private long created;
+    private String model;
+    private List<Choice> choices;
+    private Usage usage;
+
+
+    @Data
+    public static class Choice {
+        private long index;
+        private Message message;
+        private String finishReason;
+    }
+
+
+    @Data
+    public static class Message {
+        private String role;
+        private String content;
+    }
+
+    @Data
+    public static class Usage {
+        private long promptTokens;
+        private long completionTokens;
+        private long totalTokens;
+    }
+
+}

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

@@ -0,0 +1,11 @@
+package com.tzld.longarticle.recommend.server.model.dto.kimi;
+
+import lombok.Data;
+
+@Data
+public class KimiResult {
+    private boolean success;
+    private KimiOfficialApiResponse response;
+    private String failReason;
+    private String responseStr;
+}

+ 0 - 2
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/aigc/PublishContent.java

@@ -179,7 +179,5 @@ public class PublishContent {
 
     @Column(name = "update_timestamp")
     private Long updateTimestamp;
-
-    private String title;
 }
 

+ 82 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/aigc/PublishContentOutput.java

@@ -0,0 +1,82 @@
+package com.tzld.longarticle.recommend.server.model.entity.aigc;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "publish_content_output")
+public class PublishContentOutput {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false)
+    private Long id;
+
+    @Column(name = "publish_content_id", length = 64)
+    private String publishContentId;
+
+    @Column(name = "content_type", nullable = false)
+    private Integer contentType;
+
+    @Column(name = "source_output_id", length = 64)
+    private String sourceOutputId;
+
+    @Column(name = "group_id", length = 64)
+    private String groupId;
+
+    @Column(name = "output_from", columnDefinition = "int default 1")
+    private Integer outputFrom = 1;
+
+    @Column(name = "output", columnDefinition = "mediumtext", nullable = false)
+    private String output;
+
+    @Column(name = "output_ref_data", columnDefinition = "mediumtext")
+    private String outputRefData;
+
+    @Column(name = "`index`")
+    private Integer index;
+
+    @Column(name = "select_status")
+    private Integer selectStatus;
+
+    @Column(name = "require_word_num")
+    private Integer requireWordNum;
+
+    @Column(name = "require_word_operator", length = 20)
+    private String requireWordOperator;
+
+    @Column(name = "word_num")
+    private Integer wordNum;
+
+    @Column(name = "require_similarity_ratio", precision = 5, scale = 2)
+    private BigDecimal requireSimilarityRatio;
+
+    @Column(name = "require_similarity_operator", length = 20)
+    private String requireSimilarityOperator;
+
+    @Column(name = "similarity_ratio", precision = 6, scale = 2)
+    private BigDecimal similarityRatio;
+
+    @Column(name = "edit_account", length = 255)
+    private String editAccount;
+
+    @Column(name = "edit_timestamp")
+    private Long editTimestamp;
+
+    @Column(name = "edit_param", length = 2048)
+    private String editParam;
+
+    @Column(name = "create_timestamp", nullable = false)
+    private Long createTimestamp;
+
+    @Column(name = "update_timestamp")
+    private Long updateTimestamp;
+
+}

+ 12 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/crawler/Article.java

@@ -72,5 +72,17 @@ public class Article implements Serializable {
     private String articleGroup;
     @Column(name = "status")
     private Integer status;
+    @Column(name = "publish_timestamp")
+    private Long publishTimestamp;
+    @Column(name = "publish_content_id")
+    private String publishContentId;
+    @Column(name = "channel_content_id")
+    private String channelContentId;
+    @Column(name = "source_publish_content_id")
+    private String sourcePublishContentId;
+    @Column(name = "root_publish_content_id")
+    private String rootPublishContentId;
+    @Column(name = "root_produce_content_id")
+    private String rootProduceContentId;
 }
 

+ 54 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/crawler/GetOffVideoCrawler.java

@@ -0,0 +1,54 @@
+package com.tzld.longarticle.recommend.server.model.entity.crawler;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Id;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "get_off_videos")
+public class GetOffVideoCrawler {
+    /**
+     * 视频id
+     */
+    @Id
+    @Column(name = "video_id", nullable = false, unique = true, columnDefinition = "bigint(16) COMMENT '视频id'")
+    private Long videoId;
+
+    /**
+     * 视频发布时间
+     */
+    @Column(name = "publish_time", columnDefinition = "bigint(16) COMMENT '视频发布时间'")
+    private Long publishTime;
+
+    /**
+     * 视频状态
+     */
+    @Column(name = "video_status", columnDefinition = "int(1) COMMENT '视频状态'")
+    private Integer videoStatus;
+
+    /**
+     * 最终id
+     */
+    @Column(name = "trace_id", nullable = false, length = 128, columnDefinition = "varchar(128) COMMENT '最终id'")
+    private String traceId;
+
+    /**
+     * 视频下架时间
+     */
+    @Column(name = "get_off_time", columnDefinition = "bigint(16) COMMENT '视频下架时间'")
+    private Long getOffTime;
+
+    /**
+     * 校验状态
+     */
+    @Column(name = "check_status", nullable = false, columnDefinition = "int(1) DEFAULT '0' COMMENT '校验状态'")
+    private Integer checkStatus = 0;
+}

+ 164 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/crawler/LongArticlesVideo.java

@@ -0,0 +1,164 @@
+package com.tzld.longarticle.recommend.server.model.entity.crawler;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "long_articles_video")
+@IdClass(com.tzld.longarticle.recommend.server.model.entity.crawler.LongArticlesVideo.PK.class)
+public class LongArticlesVideo implements Serializable {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Integer id;
+
+    /**
+     * 请求唯一最终 id
+     */
+    @Id
+    private String traceId;
+
+    /**
+     * 文章id
+     */
+    @Column(name = "content_id", length = 64, columnDefinition = "varchar(64) DEFAULT NULL COMMENT '文章id'")
+    private String contentId;
+
+    /**
+     * 公众号 id
+     */
+    @Column(name = "gh_id", length = 255, columnDefinition = "varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '公众号 id'")
+    private String ghId;
+
+    /**
+     * 公众号名称
+     */
+    @Column(name = "account_name", length = 255, columnDefinition = "varchar(255) DEFAULT NULL COMMENT '公众号名称'")
+    private String accountName;
+
+    /**
+     * 文章标题
+     */
+    @Column(name = "article_title", length = 255, columnDefinition = "varchar(255) DEFAULT NULL COMMENT '文章标题'")
+    private String articleTitle;
+
+    /**
+     * 文章正文
+     */
+    @Lob
+    @Column(name = "article_text", columnDefinition = "text COMMENT '文章正文'")
+    private String articleText;
+
+    /**
+     * 内容状态
+     * 0: 未处理
+     * 1: 处理中
+     * 2: 处理完成
+     */
+    @Column(name = "content_status", nullable = false, columnDefinition = "int(1) DEFAULT '0' COMMENT '0: 未处理, 1: 处理中, 2: 处理完成'")
+    private Integer contentStatus = 0;
+
+    /**
+     * kimi生成的符合小程序的标题
+     */
+    @Column(name = "kimi_title", length = 255, columnDefinition = "varchar(255) DEFAULT NULL COMMENT 'kimi生成的符合小程序的标题'")
+    private String kimiTitle;
+
+    /**
+     * kimi 通过文本生成的总结性文本
+     */
+    @Column(name = "kimi_summary", length = 255, columnDefinition = "varchar(255) DEFAULT NULL COMMENT 'kimi 通过文本生成的总结性文本'")
+    private String kimiSummary;
+
+    /**
+     * kimi 通过文本生成的总结性搜索关键词
+     */
+    @Column(name = "kimi_keys", length = 255, columnDefinition = "varchar(255) DEFAULT NULL COMMENT 'kimi 通过文本生成的总结性搜索关键词'")
+    private String kimiKeys;
+
+    /**
+     * 召回 id1
+     */
+    @Column(name = "recall_video_id1", columnDefinition = "int(11) DEFAULT NULL COMMENT '召回 id1'")
+    private Integer recallVideoId1;
+
+    /**
+     * 召回 id2
+     */
+    @Column(name = "recall_video_id2", columnDefinition = "int(11) DEFAULT NULL COMMENT '召回 id2'")
+    private Integer recallVideoId2;
+
+    /**
+     * 召回 id3
+     */
+    @Column(name = "recall_video_id3", columnDefinition = "int(11) DEFAULT NULL COMMENT '召回 id3'")
+    private Integer recallVideoId3;
+
+    /**
+     * 返回结果 1
+     */
+    @Lob
+    @Column(name = "result1", columnDefinition = "text COMMENT '返回结果 1'")
+    private String result1;
+
+    /**
+     * 返回结果 2
+     */
+    @Lob
+    @Column(name = "result2", columnDefinition = "text COMMENT '返回结果 2'")
+    private String result2;
+
+    /**
+     * 返回结果 3
+     */
+    @Lob
+    @Column(name = "result3", columnDefinition = "text COMMENT '返回结果 3'")
+    private String result3;
+
+    /**
+     * 是否成功, 1表示成功
+     */
+    @Column(name = "success", nullable = false, columnDefinition = "tinyint(1) DEFAULT '0' COMMENT '是否成功'")
+    private Boolean success = false;
+
+    /**
+     * 更新时间
+     */
+    @Column(name = "update_time", nullable = false, columnDefinition = "datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'")
+    private Date updateTime;
+
+    /**
+     * 请求时间戳
+     */
+    @Column(name = "request_time_stamp", columnDefinition = "int(16) DEFAULT NULL COMMENT '请求时间戳'")
+    private Long requestTimeStamp;
+
+    /**
+     * 执行次数
+     */
+    @Column(name = "process_times", nullable = false, columnDefinition = "int(1) DEFAULT '0' COMMENT '执行次数'")
+    private Integer processTimes = 0;
+
+
+    @Data
+    public static class PK implements Serializable {
+
+        @Column(name = "id")
+        private Integer id;
+        @Column(name = "trace_id")
+        private String traceId;
+
+        public PK() {
+        }
+
+
+    }
+}

+ 48 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/AccountCategory.java

@@ -0,0 +1,48 @@
+package com.tzld.longarticle.recommend.server.model.entity.longArticle;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "account_category")
+@IdClass(AccountCategory.PK.class)
+public class AccountCategory {
+
+    @Id
+    private String dt;
+    @Id
+    private String ghId;
+
+    @Column(name = "category_map")
+    private String categoryMap;
+
+    @Column(name = "status")
+    private Integer status;
+
+    @Column(name = "create_timestamp")
+    private Long createTimestamp;
+
+    @Column(name = "update_timestamp")
+    private Long updateTimestamp;
+
+
+    @Data
+    public static class PK implements Serializable {
+
+        @Column(name = "dt")
+        private String dt;
+        @Column(name = "gh_id")
+        private String ghId;
+
+        public PK() {
+        }
+
+    }
+}

+ 56 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/ArticleCategory.java

@@ -0,0 +1,56 @@
+package com.tzld.longarticle.recommend.server.model.entity.longArticle;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "article_category")
+public class ArticleCategory {
+
+    @Id
+    @Column(name = "produce_content_id")
+    private String produceContentId;
+
+    @Column(name = "channel_content_id")
+    private String channelContentId;
+
+    @Column(name = "crawler_plan_id")
+    private String crawlerPlanId;
+
+    @Column(name = "title")
+    private String title;
+
+    @Column(name = "title_md5")
+    private String titleMd5;
+
+    @Column(name = "category")
+    private String category;
+
+    @Column(name = "kimi_result")
+    private String kimiResult;
+
+    @Column(name = "status")
+    private Integer status;
+
+    @Column(name = "fail_reason")
+    private String failReason;
+
+    @Column(name = "retry_times")
+    private Integer retryTimes;
+
+    @Column(name = "create_timestamp")
+    private Long createTimestamp;
+
+    @Column(name = "update_timestamp")
+    private Long updateTimestamp;
+
+}

+ 34 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/ArticleCrawlerPlan.java

@@ -0,0 +1,34 @@
+package com.tzld.longarticle.recommend.server.model.entity.longArticle;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "article_crawler_plan")
+public class ArticleCrawlerPlan {
+
+    @Id
+    @Column(name = "crawler_plan_id")
+    private String crawlerPlanId;
+
+    @Column(name = "name")
+    private String name;
+
+    @Column(name = "status")
+    private Integer status;
+
+    @Column(name = "create_timestamp")
+    private Long createTimestamp;
+
+    @Column(name = "update_timestamp")
+    private Long updateTimestamp;
+}

+ 43 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/ArticlePoolPromotionSource.java

@@ -0,0 +1,43 @@
+package com.tzld.longarticle.recommend.server.model.entity.longArticle;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "article_pool_promotion_source")
+public class ArticlePoolPromotionSource implements Serializable {
+
+    @Id
+    @Column(name = "channel_content_id")
+    private String channelContentId;
+    @Column(name = "source_publish_content_id")
+    private String sourcePublishContentId;
+    @Column(name = "root_publish_content_id")
+    private String rootPublishContentId;
+    @Column(name = "root_produce_content_id")
+    private String rootProduceContentId;
+    @Column(name = "wx_sn")
+    private String wxSn;
+    @Column(name = "title")
+    private String title;
+    @Column(name = "title_md5")
+    private String titleMd5;
+    @Column(name = "level")
+    private String level;
+    @Column(name = "status")
+    private Integer status;
+    @Column(name = "deleted")
+    private Integer deleted;
+    @Column(name = "create_timestamp")
+    private Long createTimestamp;
+    @Column(name = "update_timestamp")
+    private Long updateTimestamp;
+
+}

+ 77 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/DatastatScore.java

@@ -0,0 +1,77 @@
+package com.tzld.longarticle.recommend.server.model.entity.longArticle;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "datastat_score")
+public class DatastatScore {
+
+    @Id
+    @Column(name = "id")
+    private Long id;
+
+    @Column(name = "dt")
+    private String dt;
+
+    @Column(name = "gh_id")
+    private String ghId;
+
+    @Column(name = "index")
+    private Integer index;
+
+    @Column(name = "account_name")
+    private String accountName;
+
+    @Column(name = "title")
+    private String title;
+
+    @Column(name = "category")
+    private String category;
+
+    @Column(name = "strategy")
+    private String strategy;
+
+    @Column(name = "score")
+    private Double score;
+
+    @Column(name = "similarity")
+    private Double similarity;
+
+    @Column(name = "category_score")
+    private Double categoryScore;
+
+    @Column(name = "view_count_rate")
+    private Double viewCountRate;
+
+    @Column(name = "his_fission_avg_read_rate_rate")
+    private Double hisFissionAvgReadRateRate;
+
+    @Column(name = "his_fission_avg_read_sum_rate")
+    private Double hisFissionAvgReadSumRate;
+
+    @Column(name = "his_fission_de_weight_avg_read_sum_rate")
+    private Double hisFissionDeWeightAvgReadSumRate;
+
+    @Column(name = "read_count")
+    private Integer readCount;
+
+    @Column(name = "read_avg")
+    private Double readAvg;
+
+    @Column(name = "read_avg_rate")
+    private Double readAvgRate;
+
+    @Column(name = "first_pub_interval")
+    private Integer firstPubInterval;
+
+}

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

@@ -24,6 +24,8 @@ public class DatastatSortStrategy implements Serializable {
     @Id
     private Integer position;
 
+    @Column(name = "type")
+    private String type;
     @Column(name = "account_mode")
     private String accountMode;
     @Column(name = "account_source")
@@ -82,14 +84,24 @@ public class DatastatSortStrategy implements Serializable {
     private Double fission1Fission0Rate;
     @Column(name = "fission0_read_avg_rate")
     private Double fission0ReadAvgRate;
+    @Column(name = "his_read_rate")
+    private Double hisReadRate;
+    @Column(name = "his_first_read_rate")
+    private Double hisFirstReadRate;
+    @Column(name = "his_fission0_first_rate")
+    private Double hisFission0FirstRate;
     @Column(name = "gh_id")
     private String ghId;
+    @Column(name = "account_create_timestamp")
+    private Long accountCreateTimestamp;
     @Column(name = "title")
     private String title;
     @Column(name = "link")
     private String link;
     @Column(name = "wx_sn")
     private String wxSn;
+    @Column(name = "publish_timestamp")
+    private Long publishTimestamp;
     @Column(name = "fission0_read_avg_100_rate")
     private Double fission0ReadAvg100Rate;
     @Column(name = "fission0_read_avg_500_rate")
@@ -112,6 +124,8 @@ public class DatastatSortStrategy implements Serializable {
     private String publishMiniProgramInsertUseType;
     @Column(name = "publish_mini_program_num")
     private Integer publishMiniProgramNum;
+    @Column(name = "source_produce_plan_name")
+    private String sourceProducePlanName;
 
 
     @Data

+ 54 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/GetOffVideoArticle.java

@@ -0,0 +1,54 @@
+package com.tzld.longarticle.recommend.server.model.entity.longArticle;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "get_off_videos")
+public class GetOffVideoArticle {
+    /**
+     * 视频id
+     */
+    @Id
+    @Column(name = "video_id", nullable = false, unique = true, columnDefinition = "bigint(16) COMMENT '视频id'")
+    private Long videoId;
+
+    /**
+     * 视频发布时间
+     */
+    @Column(name = "publish_time", columnDefinition = "bigint(16) COMMENT '视频发布时间'")
+    private Long publishTime;
+
+    /**
+     * 视频状态
+     */
+    @Column(name = "video_status", columnDefinition = "int(1) COMMENT '视频状态'")
+    private Integer videoStatus;
+
+    /**
+     * 最终id
+     */
+    @Column(name = "trace_id", nullable = false, length = 128, columnDefinition = "varchar(128) COMMENT '最终id'")
+    private String traceId;
+
+    /**
+     * 视频下架时间
+     */
+    @Column(name = "get_off_time", columnDefinition = "bigint(16) COMMENT '视频下架时间'")
+    private Long getOffTime;
+
+    /**
+     * 校验状态
+     */
+    @Column(name = "check_status", nullable = false, columnDefinition = "int(1) DEFAULT '0' COMMENT '校验状态'")
+    private Integer checkStatus = 0;
+}

+ 104 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/LongArticlesMatchVideo.java

@@ -0,0 +1,104 @@
+package com.tzld.longarticle.recommend.server.model.entity.longArticle;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "long_articles_match_videos")
+public class LongArticlesMatchVideo {
+
+    /**
+     * 自增 id
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "id", nullable = false, unique = true, columnDefinition = "int(16) COMMENT '自增 id'")
+    private Integer id;
+
+    /**
+     * 唯一追踪 id
+     */
+    @Column(name = "trace_id", nullable = false, length = 64, columnDefinition = "varchar(64) COMMENT '唯一追踪 id'")
+    private String traceId;
+
+    /**
+     * 文章 id
+     */
+    @Column(name = "content_id", length = 64, columnDefinition = "varchar(64) COMMENT '文章 id'")
+    private String contentId;
+
+    /**
+     * 流量池等级
+     */
+    @Column(name = "flow_pool_level", length = 32, columnDefinition = "varchar(32) COMMENT '流量池等级 '")
+    private String flowPoolLevel;
+
+    /**
+     * 公众号 Id
+     */
+    @Column(name = "gh_id", length = 32, columnDefinition = "varchar(32) COMMENT '公众号 Id'")
+    private String ghId;
+
+    /**
+     * 公众号名称
+     */
+    @Column(name = "account_name", length = 64, columnDefinition = "varchar(64) COMMENT '公众号名称'")
+    private String accountName;
+
+    /**
+     * 内容状态
+     * 0 - 还未匹配
+     * 1 - kimi 执行完成
+     * 2 - 爬虫执行完成
+     * 3 - etl 执行完成
+     * 4 - 发布完成已经获取 vid
+     * 101 - 有一个进程正在处理这条记录
+     * 99 - 处理失败
+     */
+    @Column(name = "content_status", nullable = false, columnDefinition = "int(8) DEFAULT '0' COMMENT '内容状态'")
+    private Integer contentStatus = 0;
+
+    /**
+     * 文章状态 id 的修改时间
+     */
+    @Column(name = "content_status_update_time", columnDefinition = "int(16) COMMENT '文章状态 id 的修改时间'")
+    private Long contentStatusUpdateTime;
+
+    /**
+     * 是否请求成功, 1表示成功
+     */
+    @Column(name = "success_status", nullable = false, columnDefinition = "int(1) DEFAULT '0' COMMENT '是否请求成功, 1表示成功'")
+    private Integer successStatus = 0;
+
+    /**
+     * 请求时间
+     */
+    @Column(name = "request_timestamp", nullable = false, columnDefinition = "int(16) COMMENT '请求时间'")
+    private Long requestTimestamp;
+
+    /**
+     * 更新时间
+     */
+    @Column(name = "update_time", nullable = false, columnDefinition = "datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'")
+    private Date updateTime;
+
+    /**
+     * 结果
+     */
+    @Lob
+    @Column(name = "response", columnDefinition = "text COMMENT '结果'")
+    private String response;
+
+    /**
+     * 处理次数
+     */
+    @Column(name = "process_times", nullable = false, columnDefinition = "int(1) NOT NULL DEFAULT '0' COMMENT '处理次数'")
+    private Integer processTimes = 0;
+}

+ 61 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/LongArticlesReadRate.java

@@ -0,0 +1,61 @@
+package com.tzld.longarticle.recommend.server.model.entity.longArticle;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "long_articles_read_rate")
+@IdClass(LongArticlesReadRate.PK.class)
+public class LongArticlesReadRate {
+    @Id
+    @Column(name = "gh_id")
+    private String ghId;
+
+    @Id
+    @Column(name = "position")
+    private int position;
+
+    @Column(name = "account_name")
+    private String accountName;
+
+    @Column(name = "fans")
+    private Integer fans;
+
+    @Column(name = "read_rate_avg")
+    private Double readRateAvg;
+
+    @Column(name = "remark")
+    private String remark;
+
+    @Column(name = "articles_count")
+    private Integer articlesCount;
+
+    @Column(name = "earliest_publish_time")
+    private Date earliestPublishTime;
+
+    @Column(name = "latest_publish_time")
+    private Date latestPublishTime;
+
+
+    @Data
+    public static class PK implements Serializable {
+
+        @Column(name = "gh_id", length = 32)
+        private String ghId;
+        @Column(name = "position")
+        private int position;
+
+        public PK() {
+        }
+
+
+    }
+}

+ 50 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/entity/longArticle/LongArticlesRootSourceId.java

@@ -0,0 +1,50 @@
+package com.tzld.longarticle.recommend.server.model.entity.longArticle;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "long_articles_root_source_id")
+public class LongArticlesRootSourceId {
+
+    @Id
+    @Column(name = "root_source_id")
+    private String rootSourceId;
+
+    @Column(name = "account_name")
+    private String accountName;
+
+    @Column(name = "gh_id")
+    private String ghId;
+
+    @Column(name = "article_title")
+    private String articleTitle;
+
+    @Column(name = "request_time")
+    private Long requestTime;
+
+    @Column(name = "trace_id")
+    private String traceId;
+
+    @Column(name = "push_type")
+    private Integer pushType;
+
+    @Column(name = "video_id")
+    private Long videoId;
+
+    @Column(name = "content_id")
+    private String contentId;
+
+    @Column(name = "oss_name")
+    private String ossName;
+
+}

+ 9 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/AccessTokenParam.java

@@ -0,0 +1,9 @@
+package com.tzld.longarticle.recommend.server.model.param;
+
+import lombok.Data;
+
+@Data
+public class AccessTokenParam {
+
+    private String secret;
+}

+ 10 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/ArticleFindSourceParam.java

@@ -0,0 +1,10 @@
+package com.tzld.longarticle.recommend.server.model.param;
+
+import lombok.Data;
+
+@Data
+public class ArticleFindSourceParam {
+
+    private String dateStr;
+    private String wxSn;
+}

+ 21 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/CallbackParam.java

@@ -0,0 +1,21 @@
+package com.tzld.longarticle.recommend.server.model.param;
+
+import com.tzld.longarticle.recommend.server.model.bo.ReplyInfo;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CallbackParam {
+
+    private String ghId;
+
+    private String accessToken;
+
+    private String openId;
+
+    private Long timestamp;
+
+    private List<ReplyInfo> replyInfo;
+
+}

+ 13 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/PushMessageParam.java

@@ -0,0 +1,13 @@
+package com.tzld.longarticle.recommend.server.model.param;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class PushMessageParam {
+
+    private String accessToken;
+
+    private String ghId;
+}

+ 3 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/RecommendParam.java

@@ -1,5 +1,6 @@
 package com.tzld.longarticle.recommend.server.model.param;
 
+import com.tzld.longarticle.recommend.server.common.enums.recommend.ArticleTypeEnum;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -20,6 +21,8 @@ public class RecommendParam {
     private String strategy;
     private Integer publishNum;
     private String planId;
+    // 默认为群发 ArticleTypeEnum.QUNFA.getVal()
+    private String type = ArticleTypeEnum.QUNFA.getVal();
     // true 不记录日志
     private boolean excludeLog = false;
     private String scene;

+ 1 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/param/RecommendRequest.java

@@ -18,6 +18,7 @@ public class RecommendRequest {
     private String strategy;
     private Integer publishNum;
     private String planId;
+    private Integer pushType;
     // true 不记录日志
     private boolean excludeLog = false;
     // true 强制走参数策略

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

@@ -0,0 +1,11 @@
+package com.tzld.longarticle.recommend.server.model.param;
+
+import lombok.Data;
+
+@Data
+public class WeComPushMessageParam {
+
+    private String corpId;
+
+    private String userId;
+}

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

@@ -0,0 +1,11 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Data;
+
+@Data
+public class AccessTokenVo {
+
+    private String accessToken;
+
+    private Long expires;
+}

+ 2 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/ArticleSortResponseDataItem.java

@@ -11,6 +11,8 @@ import java.util.Map;
 @Accessors(chain = true)
 public class ArticleSortResponseDataItem {
     private String id;
+    private String sourceId;
+    private String contentPoolType; // 内容池类别
     private String title;
     private String producePlanName;
     private String filterReason;

+ 34 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/FirstContentScoreExport.java

@@ -0,0 +1,34 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Data;
+
+@Data
+public class FirstContentScoreExport {
+
+    private String dateStr;
+    private String ghId;
+    private String accountName;
+    private Integer index;
+    private String title;
+    private String category;
+    private String strategy;
+
+    private Double score;
+    private Double hisFissionFansRateRateStrategy;
+    private Double hisFissionAvgReadRateRateStrategy;
+    private Double publishTimesStrategy;
+    private Double viewCountRateCorrelationStrategy;
+    private Double hisFissionAvgReadSumRateStrategy;
+    private Double hisFissionAvgReadRateCorrelationRateStrategy;
+    private Double hisFissionFansSumRateStrategy;
+    private Double similarityStrategy;
+    private Double categoryStrategy;
+    private Double viewCountStrategy;
+    private Double viewCountRateStrategy;
+    private Double hisFissionDeWeightAvgReadSumRateStrategy;
+    private Integer readCount;
+    private Double readAvg;
+    private Double readAvgRate;
+    // 距首次探索的间隔天数
+    private Integer firstExplorationIntervalAvg;
+}

+ 36 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/GhDetailVo.java

@@ -0,0 +1,36 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class GhDetailVo {
+
+    private Long id;
+
+    private String accountId;
+
+    private String accountName;
+
+    private Integer type;
+
+    private String typeName;
+
+    private String category1;
+
+    private String category2;
+
+    private String createTime;
+
+    private String updateTime;
+
+    private String channel;
+
+    private List<Long> videoIds;
+
+    private Integer strategyStatus;
+
+    private String strategyStatusName;
+}

+ 16 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/GhTypeVo.java

@@ -0,0 +1,16 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Data;
+
+@Data
+public class GhTypeVo {
+
+    private Integer type;
+
+    private String name;
+
+    public GhTypeVo(Integer type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+}

+ 28 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/IdNameVO.java

@@ -0,0 +1,28 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.util.Objects;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class IdNameVO<T> {
+    private T id;
+    private String name;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        IdNameVO<?> idNameVO = (IdNameVO<?>) o;
+        return Objects.equals(id, idNameVO.id);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id);
+    }
+}

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

@@ -40,6 +40,11 @@ public class NewSortStrategyExport {
     private Double fission0FirstRate = 0.0;
     private Double fission1Fission0Rate = 0.0;
     private Double fission0ReadAvgRate = 0.0;
+    //历史信息
+    private Double hisReadRate = 0.0;
+    private Double hisFirstReadRate = 0.0;
+    private Double hisFission0FirstRate = 0.0;
+
     private Integer position;
     private String ghId;
     private String title;
@@ -65,5 +70,7 @@ public class NewSortStrategyExport {
     private String publishMiniProgramInsertUseType;
     // 发布内容小程序数量
     private Integer publishMiniProgramNum;
+    // 源生成计划名称
+    private String sourceProducePlanName;
 
 }

+ 10 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/ProduceContentCrawlerVO.java

@@ -0,0 +1,10 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Data;
+
+@Data
+public class ProduceContentCrawlerVO {
+    private String produceContentId;
+    private String channelContentId;
+    private String title;
+}

+ 14 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/PushMessageVo.java

@@ -0,0 +1,14 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import com.tzld.longarticle.recommend.server.model.bo.MiniData;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PushMessageVo {
+
+    private Integer groupIdx;
+
+    private List<MiniData> components;
+}

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

@@ -0,0 +1,12 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Data;
+
+@Data
+public class ReportUvVo {
+
+    private String ghId;
+
+    private Long uv;
+
+}

+ 18 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/RootPublishContentVO.java

@@ -0,0 +1,18 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class RootPublishContentVO {
+
+    private String channelContentId;
+    private String sourcePublishContentId;
+    private String rootPublishContentId;
+    private String rootProduceContentId;
+
+    private List<String> midChannelContentIds = new ArrayList<>();
+
+}

+ 16 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/StrategyStatusVo.java

@@ -0,0 +1,16 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import lombok.Data;
+
+@Data
+public class StrategyStatusVo {
+
+    private Integer status;
+
+    private String name;
+
+    public StrategyStatusVo(Integer status, String name) {
+        this.status = status;
+        this.name = name;
+    }
+}

+ 14 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/WeComPushMessageVo.java

@@ -0,0 +1,14 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import com.tzld.longarticle.recommend.server.model.cgi.MsgData;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WeComPushMessageVo {
+
+    private Integer groupIndex;
+
+    private List<MsgData> msgDataList;
+}

+ 52 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/WxContentDetailResponse.java

@@ -0,0 +1,52 @@
+package com.tzld.longarticle.recommend.server.model.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Getter
+@Setter
+public class WxContentDetailResponse {
+    private String channelContentId;
+    private String title;
+    private String bodyText;
+    private Long publishTimestamp;
+    private List<MiniProgram> miniProgram;
+    private AdInfo adInfo;
+    private Integer viewCount;
+    private Integer likeCount;
+    private Integer shareCount;
+
+    public AdInfo getAdInfo() {
+        if (Objects.isNull(adInfo)) {
+            return new AdInfo();
+        }
+        return adInfo;
+    }
+
+    public List<MiniProgram> getMiniProgram() {
+        if (Objects.isNull(miniProgram)) {
+            return new ArrayList<>();
+        }
+        return miniProgram;
+    }
+
+    @Getter
+    @Setter
+    public static class AdInfo {
+        @JSONField(name = "文中")
+        private Integer middle;
+        @JSONField(name = "文末")
+        private Integer tail;
+    }
+
+    @Getter
+    @Setter
+    public static class MiniProgram {
+        private String path;
+    }
+}

+ 15 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/CommonListDataVO.java

@@ -0,0 +1,15 @@
+package com.tzld.longarticle.recommend.server.model.vo.aigc;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class CommonListDataVO<T> {
+    private Integer totalCount;
+    private List<T> data;
+}

+ 1 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/ProduceAuditLayoutContentObjVO.java → long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProduceAuditLayoutContentObjVO.java

@@ -1,4 +1,4 @@
-package com.tzld.longarticle.recommend.server.model.vo;
+package com.tzld.longarticle.recommend.server.model.vo.aigc;
 
 import lombok.Getter;
 import lombok.Setter;

+ 69 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProduceContentListItemVO.java

@@ -0,0 +1,69 @@
+package com.tzld.longarticle.recommend.server.model.vo.aigc;
+
+import com.tzld.longarticle.recommend.server.model.vo.IdNameVO;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class ProduceContentListItemVO {
+    private String id;
+    private String coverImageUrl;
+    private List<String> imageUrls;
+    private String title;
+    private String bodyText;
+    private List<String> animationUrls;
+    private String prePublishContentId;
+    private String prePublishContentIdLink;
+    private String actionAccountId;
+    private String commentDetail;
+    private String letterDetail;
+    private String receiveId;
+    private String receiveIdLink;
+    private String receiveContent;
+    private String sendAccountId;
+//    private PublishAccountSimpleVO sendAccountData;
+    private String replyCommentDetail;
+    private String replyLetterDetail;
+    private List<String> inputSrtTexts;
+    private List<String> inputImageUrls;
+    private Integer produceAgainFlag;
+    private Long produceAgainCount;
+    private Long produceAgainTimestamp;
+    private List<String> compositeVideoUrls;
+    private Integer compositeStatus;
+    private Integer compositeCount;
+    private Integer uploadVideoFlag;
+    private IdNameVO<String> sourceProducePlan;
+//    private List<ProducePlanQuoteVO<String>> quotePublishPlans;
+    private String referContentTitle;
+    private String referContentLink;
+    private String referContentAccountName;
+    private String referContentAccountLink;
+    private Integer referContentChannel;
+//    private List<ProduceReferContentVO> referContents;
+    private Long produceTimestamp;
+    private Integer auditStatus;
+    private String auditAccount;
+    private Long auditTimestamp;
+    private List<Integer> editModuleTypes;
+    private String editAccount;
+    private Long editTimestamp;
+    private Integer produceStatus;
+    private String errorMsg;
+//    private List<ProducePlanErrorDetailVO> errorDetails;
+    private String tagJson;
+//    private List<CrawlerContentMiniProgramVO> miniProgramList;
+//    private List<ListFieldValueVO> expressionValue;
+    private Integer reviewFlag;
+//    private List<ProduceContentReviewStatusVO> reviewStatusList;
+    private Integer reviewSetCount;
+    private Integer reviewFinishCount;
+    private List<String> reviewInfoList;
+    private Long lastReviewTimestamp;
+
+}

+ 30 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProducePlanDetailVO.java

@@ -0,0 +1,30 @@
+package com.tzld.longarticle.recommend.server.model.vo.aigc;
+
+import com.alibaba.fastjson.JSONArray;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class ProducePlanDetailVO {
+    private String id;
+    private String name;
+    private Integer produceModal;
+    private String planTag;
+    private Integer tagPenetrateFlag;
+    private Integer inputType;
+    private Integer inputModal;
+    private Integer inputChannel;
+    private Integer layoutType;
+    private Integer activeManualReview;
+    private Integer activeManualReviewCount;
+    private Integer autoComposite;
+    private Integer dailyProduceNum;
+    private Integer totalProduceNum;
+    private Integer maxConcurrentNum;
+    private List<ProducePlanInputSourceGroupParam> inputSourceGroups;
+    private JSONArray moduleGroups;
+    private JSONArray tasks;
+}

+ 13 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProducePlanInputSourceGroupOrderParam.java

@@ -0,0 +1,13 @@
+package com.tzld.longarticle.recommend.server.model.vo.aigc;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class ProducePlanInputSourceGroupOrderParam {
+    private Integer orderField;
+    private String orderType;
+}

+ 25 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProducePlanInputSourceGroupParam.java

@@ -0,0 +1,25 @@
+package com.tzld.longarticle.recommend.server.model.vo.aigc;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class ProducePlanInputSourceGroupParam {
+    private Integer inputType;
+    private String groupId;
+    private String exampleCaseId;
+    private String groupName;
+    private Integer groupIndex;
+    private Integer batchActive;
+    private List<ProducePlanInputSourceParam> inputSources;
+    private Integer filterMatchMode;
+    private List<SaveFilterConditionParam> contentFilters;
+    private List<ProducePlanInputSourceGroupOrderParam> contentOrders;
+    private Integer perInputCount;
+    private Integer samplingType;
+    private Integer randomMinCount;
+    private Integer inputMaxUseCount;
+}

+ 20 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/ProducePlanInputSourceParam.java

@@ -0,0 +1,20 @@
+package com.tzld.longarticle.recommend.server.model.vo.aigc;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class ProducePlanInputSourceParam {
+    private Integer contentType;
+    private Integer inputSourceType;
+    private Integer inputSourceSubType;
+    private String fieldName;
+    private String inputSourceValue;
+    private String inputSourceLabel;
+    private Integer inputSourceModal;
+    private Integer inputSourceChannel;
+
+}

+ 17 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/vo/aigc/SaveFilterConditionParam.java

@@ -0,0 +1,17 @@
+package com.tzld.longarticle.recommend.server.model.vo.aigc;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Getter
+@Setter
+@Accessors(chain = true)
+public class SaveFilterConditionParam {
+    private Integer conditionType;
+    private Integer operator;
+    private List<String> data;
+
+}

+ 61 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mq/MessageCallbackCustomer.java

@@ -0,0 +1,61 @@
+package com.tzld.longarticle.recommend.server.mq;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.openservices.ons.api.Action;
+import com.aliyun.openservices.ons.api.ConsumeContext;
+import com.aliyun.openservices.ons.api.Message;
+import com.aliyun.openservices.ons.api.MessageListener;
+import com.tzld.longarticle.recommend.server.mapper.crawler.PushMessageCallbackMapper;
+import com.tzld.longarticle.recommend.server.mapper.growth.NewPushMessageCallbackMapper;
+import com.tzld.longarticle.recommend.server.model.bo.ReplyInfo;
+import com.tzld.longarticle.recommend.server.model.param.CallbackParam;
+import com.tzld.longarticle.recommend.server.repository.model.PushMessageCallback;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@Component
+public class MessageCallbackCustomer implements MessageListener {
+
+
+    @Autowired
+    private PushMessageCallbackMapper pushMessageCallbackMapper;
+
+    @Autowired
+    private NewPushMessageCallbackMapper newPushMessageCallbackMapper;
+
+    @Override
+    public Action consume(Message message, ConsumeContext consumeContext) {
+        CallbackParam param = JSONObject.parseObject(new String(message.getBody()), CallbackParam.class);
+        log.info("param = {}", param);
+        if (CollectionUtils.isEmpty(param.getReplyInfo())) {
+            log.error("CallbackParam replyInfo is empty {}", param);
+        }
+        PushMessageCallback pushMessageCallback = new PushMessageCallback();
+        pushMessageCallback.setGhId(param.getGhId());
+        pushMessageCallback.setTimestamp(param.getTimestamp());
+        pushMessageCallback.setOpenId(param.getOpenId());
+        List<PushMessageCallback> insertList = new ArrayList<>();
+        for (ReplyInfo replyInfo : param.getReplyInfo()) {
+            PushMessageCallback insertPushMessageCallback = new PushMessageCallback();
+            BeanUtils.copyProperties(pushMessageCallback, insertPushMessageCallback);
+            insertPushMessageCallback.setMsgType(replyInfo.getMsgType());
+            insertPushMessageCallback.setVideoId(replyInfo.getMiniVideoId());
+            insertList.add(insertPushMessageCallback);
+        }
+        try {
+            newPushMessageCallbackMapper.insertList(insertList);
+        } catch (Exception e) {
+            log.error("PushMessageCallback newPushMessageCallbackMapper insert pushMessageCallback={}, error={}", pushMessageCallback, e.getMessage());
+            return Action.ReconsumeLater;
+        }
+        return Action.CommitMessage;
+    }
+}

+ 68 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mq/MessageCallbackProducer.java

@@ -0,0 +1,68 @@
+package com.tzld.longarticle.recommend.server.mq;
+
+import com.alibaba.fastjson.JSON;
+import com.aliyun.openservices.ons.api.Message;
+import com.aliyun.openservices.ons.api.SendResult;
+import com.aliyun.openservices.ons.api.bean.ProducerBean;
+import com.tzld.longarticle.recommend.server.common.response.CommonResponse;
+import com.tzld.longarticle.recommend.server.common.response.ExceptionCodeEnum;
+import com.tzld.longarticle.recommend.server.model.param.CallbackParam;
+import com.tzld.longarticle.recommend.server.service.exterior.AccessTokenService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+
+@Slf4j
+@Component
+public class MessageCallbackProducer {
+
+    @Value("${pushMessage.callback.topic}")
+    private String TOPIC;
+
+    @Value("${pushMessage.callback.tag}")
+    private String TAG;
+
+    @Autowired
+    private ProducerBean producer;
+
+    @Autowired
+    private AccessTokenService accessTokenService;
+
+    public CommonResponse<Void> sendMessage(CallbackParam param) {
+        if (param == null || param.getAccessToken() == null) {
+            return CommonResponse.create(ExceptionCodeEnum.PARAM_ERROR, "参数错误");
+        }
+        if (!accessTokenService.validateAccessToken(param.getAccessToken())) {
+            return CommonResponse.create(ExceptionCodeEnum.PARAM_ERROR, "accessToken错误或者已失效");
+        }
+        Message message = new Message();
+        message.setTopic(TOPIC);
+        message.setTag(TAG);
+        message.setBody(JSON.toJSONString(param).getBytes(StandardCharsets.UTF_8));
+        try {
+            log.info("sendMessage = {}", message);
+            producer.send(message);
+        } catch (Exception e) {
+            log.error("error send param = {}", param);
+            log.error("error", e);
+            //重试
+            retry(message);
+        }
+        return CommonResponse.success();
+    }
+
+    private void retry(Message message) {
+        for (int i = 0; i < 3; i++) {
+            try {
+                SendResult sendResult = producer.send(message);
+                log.info("sendResult = {}", sendResult);
+                return;
+            } catch (Exception e) {
+                log.error("retry send error {}", i, e);
+            }
+        }
+    }
+}

+ 5 - 5
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/ArticleListRemoteService.java

@@ -3,8 +3,8 @@ package com.tzld.longarticle.recommend.server.remote;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.tzld.longarticle.recommend.server.common.HttpPoolFactory;
-import com.tzld.longarticle.recommend.server.repository.crawler.ArticleRepository;
 import com.tzld.longarticle.recommend.server.model.entity.crawler.Article;
+import com.tzld.longarticle.recommend.server.repository.crawler.ArticleRepository;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.http.HttpEntity;
@@ -33,8 +33,8 @@ public class ArticleListRemoteService {
     private final CloseableHttpClient client = HttpPoolFactory.aigcPool();
     private static final String articleListUrl = "http://61.48.133.26:8179/artlce_list";
 
-    public List<Article> articleList(String accountName, List<Integer> indexList) {
-        return getArticleListByDB(accountName, indexList);
+    public List<Article> articleList(String ghId, List<Integer> indexList, String type) {
+        return getArticleListByDB(ghId, indexList, type);
     }
 
     private List<Article> getArticleListByApi(String accountName, List<Integer> indexList) {
@@ -91,8 +91,8 @@ public class ArticleListRemoteService {
     }
 
 
-    private List<Article> getArticleListByDB(String accountName, List<Integer> indexList) {
-        return articleRepository.getByAccountNameAndItemIndexInAndTypeEquals(accountName, indexList, "9");
+    private List<Article> getArticleListByDB(String ghId, List<Integer> indexList, String type) {
+        return articleRepository.getByGhIdAndItemIndexInAndTypeEquals(ghId, indexList, type);
     }
 
 }

+ 62 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/CrawlerContentByPlanService.java

@@ -0,0 +1,62 @@
+package com.tzld.longarticle.recommend.server.remote;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.longarticle.recommend.server.common.HttpPoolFactory;
+import com.tzld.longarticle.recommend.server.model.vo.ProduceContentCrawlerVO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.StatusLine;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.springframework.stereotype.Service;
+
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+@Slf4j
+public class CrawlerContentByPlanService {
+    private final CloseableHttpClient client = HttpPoolFactory.aigcPool();
+    private static final String url = "http://aigc-api.cybertogether.net/aigc/produce/content/getContentByCrawlerPlan";
+
+
+    public List<ProduceContentCrawlerVO> getCrawlerContentByPlan(String crawlerPlanId, List<String> producePlanIds) {
+        long start = System.currentTimeMillis();
+        List<ProduceContentCrawlerVO> result = new ArrayList<>();
+        JSONObject bodyParam = new JSONObject();
+        JSONObject bodyParamParams = new JSONObject();
+        bodyParamParams.put("crawlerPlanId", crawlerPlanId);
+        bodyParamParams.put("producePlanIds", producePlanIds);
+        bodyParam.put("params", bodyParamParams);
+        try {
+            HttpPost httpPost = new HttpPost(url);
+            StringEntity stringEntity = new StringEntity(bodyParam.toJSONString(), StandardCharsets.UTF_8);
+            httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
+            httpPost.setEntity(stringEntity);
+            CloseableHttpResponse response = client.execute(httpPost);
+            StatusLine statusLine = response.getStatusLine();
+            if (statusLine.getStatusCode() == 200) {
+                HttpEntity responseEntity = response.getEntity();
+                if (Objects.nonNull(responseEntity)) {
+                    String responseBody = EntityUtils.toString(responseEntity, "UTF-8");
+                    JSONObject jsonObject = JSONObject.parseObject(responseBody);
+                    if (jsonObject.getInteger("code") == 0) {
+                        JSONArray data = jsonObject.getJSONArray("data");
+                        result.addAll(JSONArray.parseArray(data.toJSONString(), ProduceContentCrawlerVO.class));
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("getCrawlerContentByPlan error", e);
+        }
+        log.info("getCrawlerContentByPlan耗时:{}", System.currentTimeMillis() - start);
+        return result;
+    }
+
+}

+ 89 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/KimiApiService.java

@@ -0,0 +1,89 @@
+package com.tzld.longarticle.recommend.server.remote;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.longarticle.recommend.server.model.dto.kimi.KimiOfficialApiResponse;
+import com.tzld.longarticle.recommend.server.model.dto.kimi.KimiResult;
+import com.tzld.longarticle.recommend.server.util.MapBuilder;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.apache.http.util.TextUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+
+@Service
+@Slf4j
+public class KimiApiService {
+
+    private OkHttpClient client;
+
+    @PostConstruct
+    public void init() {
+        client = new OkHttpClient().newBuilder()
+                .connectTimeout(15, TimeUnit.MINUTES)
+                .readTimeout(15, TimeUnit.MINUTES)
+                .writeTimeout(15, TimeUnit.MINUTES)
+                .build();
+
+    }
+
+
+    public KimiResult requestOfficialApi(String prompt, String model, Double temperature) {
+        KimiResult result = new KimiResult();
+        result.setSuccess(false);
+        if (TextUtils.isBlank(prompt) || TextUtils.isBlank(prompt.trim())) {
+            result.setFailReason("prompt is empty");
+            return result;
+        }
+
+        try {
+            JSONArray jsonArray = new JSONArray();
+            JSONObject message = new JSONObject();
+            message.put("role", "user");
+            message.put("content", prompt);
+            jsonArray.add(message);
+
+            Map<Object, Object> bodyParam = MapBuilder
+                    .builder()
+                    .put("model", Optional.ofNullable(model).orElse("moonshot-v1-auto"))
+                    .put("temperature", Optional.ofNullable(temperature).orElse(0.3))
+                    .put("messages", jsonArray)
+                    .build();
+
+            MediaType mediaType = MediaType.parse("application/json");
+            RequestBody body = RequestBody.create(mediaType, JSONObject.toJSONString(bodyParam));
+            Request request = new Request.Builder()
+                    .url("https://api.moonshot.cn/v1/chat/completions")
+                    .method("POST", body)
+                    .addHeader("Content-Type", "application/json")
+                    .addHeader("Authorization", "Bearer sk-5DqYCa88kche6nwIWjLE1p4oMm8nXrR9kQMKbBolNAWERu7q")
+                    .build();
+            Response response = client.newCall(request).execute();
+
+            String responseContent = response.body().string();
+            result.setResponseStr(responseContent);
+            log.info("kimi api responseContent = {}", responseContent);
+            if (response.isSuccessful()) {
+                KimiOfficialApiResponse obj = JSONObject.parseObject(responseContent, KimiOfficialApiResponse.class);
+                if (CollectionUtil.isNotEmpty(obj.getChoices())) {
+                    result.setSuccess(true);
+                    result.setResponse(obj);
+                } else {
+                    result.setFailReason("response empty");
+                }
+            } else {
+                JSONObject json = JSONObject.parseObject(responseContent);
+                result.setFailReason("request error code:" + response.code() + " message:" + json.getString("error"));
+            }
+        } catch (Exception e) {
+            log.error("kimi official api fail: " + e.getMessage());
+            result.setFailReason(e.getMessage());
+        }
+        return result;
+    }
+}

+ 15 - 8
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/NLPRemoteService.java

@@ -3,6 +3,7 @@ package com.tzld.longarticle.recommend.server.remote;
 import com.alibaba.fastjson.JSONObject;
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.longarticle.recommend.server.common.HttpPoolFactory;
+import com.tzld.longarticle.recommend.server.common.enums.recommend.FeishuRobotIdEnum;
 import com.tzld.longarticle.recommend.server.model.dto.Content;
 import com.tzld.longarticle.recommend.server.util.MapBuilder;
 import com.tzld.longarticle.recommend.server.util.feishu.FeishuMessageSender;
@@ -17,7 +18,6 @@ import org.apache.http.util.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
 
 import java.nio.charset.StandardCharsets;
 import java.util.*;
@@ -50,12 +50,13 @@ public class NLPRemoteService {
     private static final String scoreListUrl = "http://61.48.133.26:6060/score_list";
     private static final String backUrl = "http://47.98.136.48:6060/score_list";
 
-    public Map<String, Double> score(String accountName, List<Content> contentList) {
+    public Map<String, Double> score(String ghId, String accountName, List<Content> contentList) {
         long start = System.currentTimeMillis();
         Map<String, Double> result = new HashMap<>();
         List<String> titleList = contentList.stream().map(Content::getTitle).collect(Collectors.toList());
         String url = scoreListUrl;
         JSONObject bodyParam = new JSONObject();
+        bodyParam.put("gh_id_list", Collections.singletonList(ghId));
         bodyParam.put("account_nickname_list", Collections.singletonList(accountName));
         bodyParam.put("text_list", titleList);
         bodyParam.put("interest_type", accountScoreInterestTypeMap.getOrDefault(accountName, "avg"));
@@ -84,7 +85,14 @@ public class NLPRemoteService {
 //                        log.info("scoreList 返回的数据:{}", responseBody);
                         JSONObject scoreListResponse = JSONObject.parseObject(responseBody);
                         if (Objects.nonNull(scoreListResponse)) {
-                            JSONObject accountScoreList = scoreListResponse.getJSONObject(accountName);
+                            Set<String> keySet = scoreListResponse.keySet();
+                            JSONObject accountScoreList = null;
+                            for (String key : keySet) {
+                                if (key.equals(accountName) || key.equals(ghId)) {
+                                    accountScoreList = scoreListResponse.getJSONObject(key);
+                                    break;
+                                }
+                            }
                             if (Objects.nonNull(accountScoreList)) {
                                 List<Double> scoreList = accountScoreList.getJSONArray("score_list").toJavaList(Double.class);
                                 for (int i = 0; i < contentList.size(); i++) {
@@ -101,13 +109,12 @@ public class NLPRemoteService {
                                 .put("url", url)
                                 .put("账号名称", accountName)
                                 .build());
-                FeishuMessageSender.sendWebHookMessage("07026a9f-43f5-448b-ba40-a8d71bd6e634", "4090计算评分失败\n"
+                FeishuMessageSender.sendWebHookMessage(FeishuRobotIdEnum.RECOMMEND.getRobotId(),
+                        "4090计算评分失败\n"
                         + "url: " + url +"\n"
                         + "账号名称: " + accountName);
-                if (StringUtils.hasText(e.getMessage()) && e.getMessage().contains("Connection")) {
-                    url = backUrl;
-                    client = HttpPoolFactory.thirtySecondPool();
-                }
+                url = backUrl;
+                client = HttpPoolFactory.thirtySecondPool();
                 log.error("score error", e);
             }
         }

+ 5 - 6
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/WxFetchRemoteService.java

@@ -2,6 +2,7 @@ package com.tzld.longarticle.recommend.server.remote;
 
 import com.alibaba.fastjson.JSONObject;
 import com.tzld.longarticle.recommend.server.common.HttpPoolFactory;
+import com.tzld.longarticle.recommend.server.model.vo.WxContentDetailResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.HttpEntity;
 import org.apache.http.StatusLine;
@@ -13,7 +14,7 @@ import org.apache.http.util.EntityUtils;
 import org.springframework.stereotype.Service;
 
 import java.nio.charset.StandardCharsets;
-import java.util.*;
+import java.util.Objects;
 
 /**
  * @author dyp
@@ -25,8 +26,8 @@ public class WxFetchRemoteService {
     private static final String url = "http://8.217.190.241:8888/crawler/wei_xin/detail";
 
 
-    public Map<String, String> getContent(String contentUrl) {
-        Map<String, String> result = new HashMap<>();
+    public WxContentDetailResponse getContent(String contentUrl) {
+        WxContentDetailResponse result = new WxContentDetailResponse();
         JSONObject bodyParam = new JSONObject();
         bodyParam.put("content_link", contentUrl);
         bodyParam.put("is_count", true);
@@ -45,9 +46,7 @@ public class WxFetchRemoteService {
                     JSONObject jsonObject = JSONObject.parseObject(responseBody);
                     if (jsonObject.getInteger("code") == 0) {
                         JSONObject data = jsonObject.getJSONObject("data");
-                        data = data.getJSONObject("data");
-                        result.put("view_count", data.getString("view_count"));
-                        result.put("title", data.getString("title"));
+                        result = data.getObject("data", WxContentDetailResponse.class);
                     }
                 }
             }

+ 75 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/aigc/AIGCCrawlerPlanSaveService.java

@@ -0,0 +1,75 @@
+package com.tzld.longarticle.recommend.server.remote.aigc;
+
+import cn.hutool.core.io.resource.ResourceUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.longarticle.recommend.server.common.HttpPoolFactory;
+import com.tzld.longarticle.recommend.server.model.vo.IdNameVO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.StatusLine;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.springframework.stereotype.Service;
+
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Objects;
+
+@Service
+@Slf4j
+public class AIGCCrawlerPlanSaveService {
+
+    private final CloseableHttpClient client = HttpPoolFactory.aigcPool();
+
+    public IdNameVO<String> createArticleUrlPlan(String planName, List<String> contentList, String tag, Integer crawlerMode) {
+        IdNameVO<String> result = new IdNameVO<>();
+        if (contentList == null || contentList.isEmpty()) {
+            return null;
+        }
+        // 从配置中读取模板文件路径
+        String templateFile = ResourceUtil.readUtf8Str("file/长文_抓取计划_根据url列表抓取.json");
+        // 读取模板文件内容
+        JSONObject template = JSONObject.parseObject(templateFile);
+        String apiUrl = template.getString("api_url");
+        JSONObject data = template.getJSONObject("data");
+        // 设置请求参数
+        JSONObject params = data.getJSONObject("params");
+        params.put("name", planName);
+        params.put("crawlerMode", crawlerMode);
+        if (tag != null) {
+            params.put("planTag", tag);
+        }
+        params.put("inputModeValues", contentList);
+        // 将数据转为 JSON 格式
+        String requestData = data.toString();
+        try {
+            HttpPost httpPost = new HttpPost(apiUrl);
+            StringEntity stringEntity = new StringEntity(requestData, StandardCharsets.UTF_8);
+            httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
+            httpPost.setEntity(stringEntity);
+            CloseableHttpResponse response = client.execute(httpPost);
+            StatusLine statusLine = response.getStatusLine();
+            if (statusLine.getStatusCode() == 200) {
+                HttpEntity responseEntity = response.getEntity();
+                if (Objects.nonNull(responseEntity)) {
+                    String responseBody = EntityUtils.toString(responseEntity, "UTF-8");
+                    JSONObject jsonObject = JSONObject.parseObject(responseBody);
+                    if (jsonObject.getInteger("code") == 0) {
+                        JSONObject responseData = jsonObject.getJSONObject("data");
+                        String planId = responseData.getString("id");
+                        String returnedPlanName = responseData.getString("name");
+                        log.info("plan_name: {}, plan_id: {}", returnedPlanName, planId);
+                        result.setId(planId);
+                        result.setName(returnedPlanName);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("createArticleUrlPlan error", e);
+        }
+        return result;
+    }
+}

+ 95 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/aigc/AIGCProduceContentListService.java

@@ -0,0 +1,95 @@
+package com.tzld.longarticle.recommend.server.remote.aigc;
+
+import cn.hutool.core.io.resource.ResourceUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.longarticle.recommend.server.common.HttpPoolFactory;
+import com.tzld.longarticle.recommend.server.model.vo.aigc.CommonListDataVO;
+import com.tzld.longarticle.recommend.server.model.vo.aigc.ProduceContentListItemVO;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.StatusLine;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+
+@Service
+@Slf4j
+public class AIGCProduceContentListService {
+
+    private final CloseableHttpClient client = HttpPoolFactory.aigcPool();
+
+    public CommonListDataVO<ProduceContentListItemVO> list(List<String> planIdList, int pageNum, int pageSize, List<Integer> produceStatus) {
+        CommonListDataVO<ProduceContentListItemVO> result = new CommonListDataVO<ProduceContentListItemVO>();
+        result.setData(new ArrayList<>());
+        result.setTotalCount(0);
+        if (planIdList.isEmpty()) {
+            log.info("getProduceContentListByPlanIdListRaw: planIdList empty");
+            return result;
+        }
+
+        String templateFile = ResourceUtil.readUtf8Str("file/长文_生成结果库_根据计划id获取内容.json");
+        // 读取模板文件内容
+        JSONObject template = JSONObject.parseObject(templateFile);
+        String apiUrl = template.getString("api_url");
+        JSONObject data = template.getJSONObject("data");
+
+        data.getJSONObject("params").getJSONArray("filterItems").getJSONObject(0)
+                .put("selectValues", produceStatus);
+        data.getJSONObject("params").getJSONArray("filterItems").getJSONObject(1)
+                .put("selectValues", planIdList);
+        data.getJSONObject("params").put("pageNum", pageNum);
+        data.getJSONObject("params").put("pageSize", pageSize);
+
+        try {
+            HttpPost httpPost = new HttpPost(apiUrl);
+            StringEntity stringEntity = new StringEntity(data.toJSONString(), StandardCharsets.UTF_8);
+            httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
+            httpPost.setEntity(stringEntity);
+            CloseableHttpResponse response = client.execute(httpPost);
+            StatusLine statusLine = response.getStatusLine();
+            if (statusLine.getStatusCode() == 200) {
+                HttpEntity responseEntity = response.getEntity();
+                if (Objects.nonNull(responseEntity)) {
+                    String responseBody = EntityUtils.toString(responseEntity, "UTF-8");
+                    JSONObject jsonObject = JSONObject.parseObject(responseBody);
+                    if (jsonObject.getInteger("code") == 0) {
+                        JSONObject dataObj = jsonObject.getJSONObject("data");
+                        int totalCnt = dataObj.getInteger("totalCount");
+                        JSONArray dataArray = dataObj.getJSONArray("data");
+                        List<ProduceContentListItemVO> contentList = dataArray.toJavaList(ProduceContentListItemVO.class);
+                        result.setData(contentList);
+                        result.setTotalCount(totalCnt);
+                        return result;
+                    }
+                }
+            }
+        } catch (IOException e) {
+            log.error("articleGetProducePlanDetail error", e);
+        }
+        return result;
+    }
+
+    private JSONObject getBaseInfo() {
+        JSONObject baseInfo = new JSONObject();
+        baseInfo.put("token", "79dcb40af1de43b1bd9fe3a731dbaa15");
+        baseInfo.put("appType", 9);
+        baseInfo.put("platform", "pc");
+        baseInfo.put("appVersionCode", 1000);
+        baseInfo.put("clientTimestamp", 1);
+        baseInfo.put("fid", 1);
+        baseInfo.put("loginUid", 1);
+        baseInfo.put("pageSource", 1);
+        baseInfo.put("requestId", 1);
+        baseInfo.put("rid", 1);
+        baseInfo.put("uid", 1);
+        return baseInfo;
+    }
+}

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff