5 Commits 945b3f77aa ... 23f581f4cc

Tác giả SHA1 Thông báo Ngày
  Joe 23f581f4cc Merge branch 'feature_20230906_qjl_cgiReply' 10 tháng trước cách đây
  Joe 19096dc11f 自动回复策略实验 10 tháng trước cách đây
  Joe e60428baa8 Merge branch 'master' into feature_20230906_qjl_cgiReply 10 tháng trước cách đây
  Joe 65bad24502 init 自动回复 10 tháng trước cách đây
  Joe 2e6a040804 init 自动回复 10 tháng trước cách đây
30 tập tin đã thay đổi với 4556 bổ sung3 xóa
  1. 4 1
      long-article-recommend-service/pom.xml
  2. 1 1
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/MBG.java
  3. 24 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/cgi/ReplyStrategyServiceEnum.java
  4. 114 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/response/CommonResponse.java
  5. 33 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/response/Constant.java
  6. 6 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/response/ErrcodeNamespace.java
  7. 153 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/response/ExceptionCodeEnum.java
  8. 156 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/ArticleInfo.java
  9. 66 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/BucketDataParam.java
  10. 24 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/FilterData.java
  11. 27 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/GroupData.java
  12. 104 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/MsgData.java
  13. 28 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/ReplyBucketData.java
  14. 74 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/SmallPageUrlDetail.java
  15. 34 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/mapper/crawler/AlgGhAutoreplyVideoRankDataMapper.java
  16. 32 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/mapper/crawler/CgiReplyBucketDataMapper.java
  17. 115 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/model/AlgGhAutoreplyVideoRankData.java
  18. 910 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/model/AlgGhAutoreplyVideoRankDataExample.java
  19. 175 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/model/CgiReplyBucketData.java
  20. 1310 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/model/CgiReplyBucketDataExample.java
  21. 8 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/cgi/CgiReplyService.java
  22. 77 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/cgi/TouLiuHttpClientService.java
  23. 46 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/cgi/impl/CgiReplyServiceImpl.java
  24. 13 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/strategy/reply/ReplyStrategyService.java
  25. 232 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/strategy/reply/impl/BuckStrategyV1.java
  26. 28 0
      long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/web/CgiReplyController.java
  27. 5 1
      long-article-recommend-service/src/main/resources/application-dev.yml
  28. 41 0
      long-article-recommend-service/src/main/resources/generatorCgiConfig.xml
  29. 315 0
      long-article-recommend-service/src/main/resources/mapper/crawler/AlgGhAutoreplyVideoRankDataMapper.xml
  30. 401 0
      long-article-recommend-service/src/main/resources/mapper/crawler/CgiReplyBucketDataMapper.xml

+ 4 - 1
long-article-recommend-service/pom.xml

@@ -122,7 +122,10 @@
             <version>1.4.2</version>
         </dependency>
 
-
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-webflux</artifactId>
+        </dependency>
     </dependencies>
 
 

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

@@ -17,7 +17,7 @@ public class MBG {
         List<String> warnings = new ArrayList<String>();
         boolean overwrite = true;
         ConfigurationParser cp = new ConfigurationParser(warnings);
-        Configuration config = cp.parseConfiguration(new File("/Users/dingyunpeng/Desktop/code/changwen/long-article-recommend/long-article-recommend-service/src/main/resources/generatorConfig.xml"));
+        Configuration config = cp.parseConfiguration(new File("D:\\taizi\\code\\long-article-recommend\\long-article-recommend-service\\src\\main\\resources\\generatorCgiConfig.xml"));
         DefaultShellCallback callback = new DefaultShellCallback(overwrite);
         MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
         myBatisGenerator.generate(null);

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

@@ -0,0 +1,24 @@
+package com.tzld.longarticle.recommend.server.common.enums.cgi;
+
+public enum ReplyStrategyServiceEnum {
+
+     BUCKET_STRATEGY_V1("BUCKET_STRATEGY_V1", "分桶策略v1"),
+
+     ;
+
+     private final String key;
+     private final String desc;
+
+    ReplyStrategyServiceEnum(String key, String desc) {
+         this.key = key;
+         this.desc = desc;
+     }
+
+     public String getKey() {
+         return key;
+     }
+
+     public String getDesc() {
+         return desc;
+     }
+}

+ 114 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/response/CommonResponse.java

@@ -0,0 +1,114 @@
+package com.tzld.longarticle.recommend.server.common.response;
+
+import static com.tzld.longarticle.recommend.server.common.response.Constant.SUCCESS_CODE;
+import static com.tzld.longarticle.recommend.server.common.response.Constant.SUCCESS_MSG;
+
+/**
+ * Common Response
+ *
+ * @author ehlxr
+ */
+public class CommonResponse<T> {
+    /**
+     * 返回状态码,0 表示业务成功
+     */
+    private int code = 0;
+    /**
+     * 返回消息
+     */
+    private String msg = "success";
+    /**
+     * 业务成功时返回数据
+     */
+    private T data;
+    /**
+     * 重定向
+     */
+    private String redirect;
+
+    public static <T> CommonResponse<T> success() {
+        CommonResponse<T> commonResponse = new CommonResponse<>();
+        commonResponse.setCode(SUCCESS_CODE);
+        commonResponse.setMsg(SUCCESS_MSG);
+        return commonResponse;
+    }
+
+    public static <T> CommonResponse<T> success(T data) {
+        CommonResponse<T> commonResponse = new CommonResponse<>();
+        commonResponse.setCode(SUCCESS_CODE);
+        commonResponse.setMsg(SUCCESS_MSG);
+        commonResponse.setData(data);
+        return commonResponse;
+    }
+
+    public static <T> CommonResponse<T> create() {
+        return create(SUCCESS_CODE, SUCCESS_MSG, null);
+    }
+
+    public static <T> CommonResponse<T> create(T data) {
+        return create(SUCCESS_CODE, SUCCESS_MSG, data);
+    }
+    public static <T> CommonResponse<T> create(ExceptionCodeEnum exceptionCodeEnum) {
+        return create(exceptionCodeEnum.getCode(), exceptionCodeEnum.getMsg(), null);
+    }
+    public static <T> CommonResponse<T> create(ExceptionCodeEnum exceptionCodeEnum, String msg) {
+        return create(exceptionCodeEnum.getCode(), msg, null);
+    }
+    public static <T> CommonResponse<T> create(int code, String msg) {
+        return create(code, msg, null);
+    }
+
+    public static <T> CommonResponse<T> create(int code, String msg, T data) {
+        CommonResponse<T> commonResponse = new CommonResponse<>();
+        commonResponse.setCode(code);
+        commonResponse.setMsg(msg);
+        commonResponse.setData(data);
+        return commonResponse;
+    }
+
+    public boolean isSuccess() {
+        return this.code == SUCCESS_CODE;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public String getRedirect() {
+        return redirect;
+    }
+
+    public void setRedirect(String redirect) {
+        this.redirect = redirect;
+    }
+
+    @Override
+    public String toString() {
+        return "CommonResponse{" +
+                "code=" + code +
+                ", msg='" + msg + '\'' +
+                ", data=" + data +
+                ", redirect='" + redirect + '\'' +
+                '}';
+    }
+}

+ 33 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/response/Constant.java

@@ -0,0 +1,33 @@
+package com.tzld.longarticle.recommend.server.common.response;
+
+/**
+ * 常量
+ *
+ * @author ehlxr
+ */
+public interface Constant {
+    /**
+     * traceID
+     */
+    String LOG_TRACE_ID = "logTraceId";
+
+    /**
+     * 接口请求开始时间戳
+     */
+    String REQUEST_START_TIME = "request_start_time";
+
+    int SUCCESS_CODE = 0;
+
+    String SUCCESS_MSG = "success";
+
+    // Integer INTEGER_TRUE = 1;
+    // Integer INTEGER_FALSE = 0;
+
+    // long DAYS_1 = 24 * 60 * 60 * 1000L;
+
+    int TEN = 10;
+
+    // int HUNDRED = 100;
+
+    String MID_PREFIX = "weixin_openid_";
+}

+ 6 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/response/ErrcodeNamespace.java

@@ -0,0 +1,6 @@
+package com.tzld.longarticle.recommend.server.common.response;
+
+public interface ErrcodeNamespace {
+
+  public final static String NS_GENERAL = "manager";
+}

+ 153 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/response/ExceptionCodeEnum.java

@@ -0,0 +1,153 @@
+package com.tzld.longarticle.recommend.server.common.response;
+
+
+import static com.tzld.longarticle.recommend.server.common.response.ErrcodeNamespace.NS_GENERAL;
+
+public enum ExceptionCodeEnum {
+
+  LOGIN_ERROR(NS_GENERAL, -999, "用户未登录"),
+  ACCOUNT_FREEZE(NS_GENERAL, -888, "账户被锁定"),
+  SYS_ERROR(NS_GENERAL, -111, "系统异常"),
+  PARAM_ERROR(NS_GENERAL, -990, "参数错误"),
+  WX_GET_ACCESS_TOKEN(NS_GENERAL, -995, "获取线上的微信accessToken失败"),
+  WX_GET_OPENID_ERROR(NS_GENERAL,-992,"微信用户获取OPENID出错"),
+
+  VIDEO_NOTEXIST(NS_GENERAL, 1, "视频不存在"),
+  DATA_ERROR(NS_GENERAL, 2, "数据不匹配"),
+  USER_NOTEXIST(NS_GENERAL, 3, "用户不存在"),
+  PAPAM_ERROR(NS_GENERAL, 4, "参数不对"),
+  ACCOUNT_EXIST(NS_GENERAL, 5, "账号已被占用"),
+  PASSWORD_ERROR(NS_GENERAL, 6, "密码不准确"),
+  DATA_NOTEXIST(NS_GENERAL, 7, "数据不匹配"),
+  MENU_EXIST(NS_GENERAL, 8, "菜单标示已存在"),
+  MENU_NOTEXIST(NS_GENERAL, 9, "菜单不存在"),
+  NOT_lOGIN(NS_GENERAL, 10, "未登录"),
+  KAIYAN_VIDEO_SEND(NS_GENERAL, 11, "开眼视频已经发过"),
+
+  MONITORING_ALARM_CONFIG_NOT_EXIST(NS_GENERAL, 12, "数据库容量告警手机号码未配置"),
+
+  OPERAATION_FAIL(NS_GENERAL, 13, "操作失败"),
+
+  PUSH_MSG_CANNT_UPDATE(NS_GENERAL,14,"立即推送的信息不能修改"),
+  PUSH_MSG_CANNT_DELETE(NS_GENERAL,15,"立即推送的信息不能撤销"),
+  SEND_PUSH_MSG_CANNT_UPDATE(NS_GENERAL,16,"已推送的信息不能修改"),
+  PUSH_TARGET_NOTEXIST(NS_GENERAL,17,"没有找到推送目标的绑定设备"),
+  PUSH_PLATFORM_ERROR(NS_GENERAL,18,"推送平台错误"),
+  PUSH_SCHEDULE_ERROR(NS_GENERAL,19,"定时推送时间必须大于当前时间"),
+
+  DATA_REPORT_TYPE_NOT_EXISTS(NS_GENERAL,20,"对应的报表不存在"),
+  DATA_REPORT_PARAM_NOT_EXISTS(NS_GENERAL,21,"报表扩展参数有缺失"),
+  NOTEXAMINEVIDEO_CONFIG_NOT_EXIST(NS_GENERAL, 23, "未审核的视频数手机号码未配置"),
+  SENSITIVE_WORD_EXISTS(NS_GENERAL,22,"该词已存在"),
+  USERPROHIBITION_NOTEXIST(NS_GENERAL, 24, "封禁类型或者标示不存在"),
+
+  VERSION_CONTROLLER_DEFAULT_CONFIG(NS_GENERAL, 25, "没有默认配置,请联系管理员直接添加。"),
+  CONFIG_EXIST(NS_GENERAL, 26, "该版本配置已存在,不能重复添加。"),
+
+  BARRAGE_UP_VSIBILITY(NS_GENERAL, 27, "不能操作弹幕UP主删除"),
+  BARRAGE_TIME_ERROR(NS_GENERAL, 28, "视频时间不能为0"),
+  VIDEO_AUDITTRANSCATIONID_NOT_NEW(NS_GENERAL, 29, "视频审核ID不是最新"),
+  VIDEO_IS_DELETE(NS_GENERAL, 30, "视频已被用户删除"),
+  VIDEO_NOT_NOAML(NS_GENERAL, 29, "视频不是正常可见的"),
+  VIDEO_SHOULD_UNFREEZE(NS_GENERAL, 31, "请先解冻视频"),
+
+  AD_ALGO_THRESHOLD_PUSH_UPDATE_ERROR(NS_GENERAL, 32, "更新远程广告算法阈值失败"),
+
+
+  VIDEO_CONTENT_SENSITIVE_MATCH(NS_GENERAL,1015,"输入内容包含违禁词汇,请修改"),
+  VIDEO_TITLE_SENSITIVE_MATCH(NS_GENERAL,1016,"输入标题包含违禁词汇,请修改"),
+  VIDEO_RECOMMEND_TITLE_SENSITIVE_MATCH(NS_GENERAL,1017,"输入分发标题包含违禁词汇,请修改"),
+
+  CANNOT_GET_LOCK(NS_GENERAL, 3001,"已有相同操作在进行"),
+  COMMENT_NOT_EXIST(NS_GENERAL, 3002,"评论不存在"),
+  COMMENT_IS_DELETE(NS_GENERAL, 3003,"评论已经删除存在"),
+
+  VIDEO_MEASURE_PROCEEDING(NS_GENERAL, 4000,"此视频正在曝光池中"),
+  VIDEO_NOT_TAG(NS_GENERAL, 4001, "视频没有标签"),
+  RECOMMENT_PARAM_INDEX_ERROR(NS_GENERAL, 4002, "推荐配置的限制个数和位置个数对应不上"),
+  RECOMMENT_PARAM_SCORE_ERROR(NS_GENERAL, 4003, "分数设置不对"),
+  VIDEO_UNRECOMMEND(NS_GENERAL, 4002, "待推荐视频不能加入曝光池"),
+
+  TAG_NAME_IS_UNUSED(NS_GENERAL, 5001,"同名视频标签%s不存在"),
+  MAJIAHAO_IS_ALL_USED(NS_GENERAL, 5001,"马甲号已全部用完"),
+
+  SECOND_CATEGORY_IS_NULL(NS_GENERAL, 6002,"二级分类不能为空"),
+  PARENT_CATEGORY_IS_NULL(NS_GENERAL, 6001,"一级分类不能为空"),
+
+  CANNOT_REVOCER_UNDELETED_VIDEO(NS_GENERAL, 7001, "不能恢复未删除的视频"),
+  CANNOT_REVOCER_DELETED_FILENOTFIND_VIDEO(NS_GENERAL, 7002, "视频文件已经被迁移,请先恢复文件后再恢复视频"),
+
+  VIDEO_AUDIT_PERMISSION_DENIED(NS_GENERAL, 8001, "你没有修改视频审核状态的权限"),
+  CAN_NOT_FETCHTASK_FOR_NOT_ONDUTY(NS_GENERAL, 8002, "你已经下班了,无法分配审核任务"),
+
+  DELOGO_VIDEO_NOT_EXISTS(NS_GENERAL, 8003, "去视频视频不存在"),
+  DELOGO_VIDEO_AUDIT_ERROR(NS_GENERAL, 8004, "已转码成功的视频不能改成审核不通过"),
+  DELOGO_VIDEO_AUDIT_WRONG(NS_GENERAL, 8004, "已审核通过且已发起转码的视频不能改成审核不通过"),
+  VIDEO_NOT_SLICE(NS_GENERAL, 8005, "不可搜视频不能分剪"),
+  VIDEO_SLICE_EXISTS(NS_GENERAL, 8006, "视频分剪已存在"),
+  MUSIC_NOT_EXISTS(NS_GENERAL, 8007, "音乐素材不存在"),
+  MUSIC_CATE_EXISTS(NS_GENERAL, 8008, "音乐素材分类已存在"),
+  MUSIC_CRAWER_NOT_EDIT(NS_GENERAL, 8009, "音乐爬取素材不能编辑"),
+  MUSIC_HOT_NOT_DELETE(NS_GENERAL, 8010, "热门音乐不能被删除"),
+
+  VIDEO_CROP_PROCESSING(NS_GENERAL, 9001, "该视频有正在处理中的剪切任务"),
+
+
+  AD_POSITION_FLOW_CONTROL_OVERFLOW(NS_GENERAL, 1001, "该广告位下流量控制不能大于 100%"),
+  INVOKE_VIDEO_API_WEAPP_URLLINK_ERROR(NS_GENERAL, 1002, "调用 video api 获取小程序 URL Link 失败"),
+  INVOKE_INCENTIVE_API_ERROR(NS_GENERAL, 1003, "调用激励服务失败"),
+  ADCAMPAIGN_REPEAT_ERROR(NS_GENERAL, -1, "名称重复,请修改"),
+  ADCAMPAIGN_RUNNING_DELETE_ERROR(NS_GENERAL, -1, "计划启用中,不能删除"),
+  ADAD_RUNNING_DELETE_ERROR(NS_GENERAL, -1, "广告启用中,不能删除"),
+  ADAD_HAS_CREATIVE_DELETE_ERROR(NS_GENERAL, -1, "广告下存在绑定创意,请删除对应创意后操作删除广告"),
+  ADCREATIVE_RUNNING_DELETE_ERROR(NS_GENERAL, -1, "创意启用中,不能删除"),
+  GET_AGENT_ERROR(NS_GENERAL, -1, "获取agent错误"),
+  DELETE_ADVERTISER_ERROR(NS_GENERAL, -1, "该广告主下绑定有计划,不能删除"),
+  OPERATE_ADVERTISER_ERROR(NS_GENERAL, -1, "该代理商下没有该广告主,不能操作"),
+  DELETE_CAMPAIGN_ERROR(NS_GENERAL, -1, "该计划下绑定广告投放中,不能删除"),
+  ADCAMPAIGN_HAS_AD_DELETE_ERROR(NS_GENERAL, -1, "该计划下存在绑定广告,请删除对应广告后操作删除计划"),
+  PHONE_EXIST(NS_GENERAL, 10001, "手机号已存在"),
+
+  NO_AD(NS_GENERAL, 11001, "无分发激励广告")
+  ;
+
+
+  ExceptionCodeEnum(String namespace, int code, String msg) {
+    this.code = code;
+    this.msg = msg;
+    this.namespace = namespace;
+  }
+  private int code;
+  private String msg;
+  private String namespace;
+
+  public int getCode() {
+    return code;
+  }
+
+  public void setCode(int code) {
+    this.code = code;
+  }
+
+  public String getMsg() {
+    return msg;
+  }
+
+  public void setMsg(String msg) {
+    this.msg = msg;
+  }
+
+  public String getNamespace() {
+    return namespace;
+  }
+
+  public void setNamespace(String namespace) {
+    this.namespace = namespace;
+  }
+
+  @Override
+  public String toString() {
+    return String.format("[code=%s, msg=%s]", this.code, this.msg);
+  }
+
+}

+ 156 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/ArticleInfo.java

@@ -0,0 +1,156 @@
+package com.tzld.longarticle.recommend.server.model.cgi;
+
+import java.util.List;
+
+public class ArticleInfo {
+
+    private String publishContentId;
+
+    private String title;
+
+    private String content;
+
+    private String coverUrl;
+
+    private List<String> imageUrls;
+
+    private Long createTimestamp;
+
+    private String producePlanName;
+
+    private String crawlerChannelContentId;
+
+    private String crawlerLink;
+
+    private String crawlerTitle;
+
+    private String crawlerCoverUrl;
+
+    private Integer crawlerViewCount;
+
+    private Integer crawlerLikeCount;
+
+    private Long crawlerPublishTimestamp;
+
+    private String crawlerAccountName;
+
+    public String getPublishContentId() {
+        return publishContentId;
+    }
+
+    public void setPublishContentId(String publishContentId) {
+        this.publishContentId = publishContentId;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getCoverUrl() {
+        return coverUrl;
+    }
+
+    public void setCoverUrl(String coverUrl) {
+        this.coverUrl = coverUrl;
+    }
+
+    public List<String> getImageUrls() {
+        return imageUrls;
+    }
+
+    public void setImageUrls(List<String> imageUrls) {
+        this.imageUrls = imageUrls;
+    }
+
+    public Long getCreateTimestamp() {
+        return createTimestamp;
+    }
+
+    public void setCreateTimestamp(Long createTimestamp) {
+        this.createTimestamp = createTimestamp;
+    }
+
+    public String getProducePlanName() {
+        return producePlanName;
+    }
+
+    public void setProducePlanName(String producePlanName) {
+        this.producePlanName = producePlanName;
+    }
+
+    public String getCrawlerChannelContentId() {
+        return crawlerChannelContentId;
+    }
+
+    public void setCrawlerChannelContentId(String crawlerChannelContentId) {
+        this.crawlerChannelContentId = crawlerChannelContentId;
+    }
+
+    public String getCrawlerLink() {
+        return crawlerLink;
+    }
+
+    public void setCrawlerLink(String crawlerLink) {
+        this.crawlerLink = crawlerLink;
+    }
+
+    public String getCrawlerTitle() {
+        return crawlerTitle;
+    }
+
+    public void setCrawlerTitle(String crawlerTitle) {
+        this.crawlerTitle = crawlerTitle;
+    }
+
+    public String getCrawlerCoverUrl() {
+        return crawlerCoverUrl;
+    }
+
+    public void setCrawlerCoverUrl(String crawlerCoverUrl) {
+        this.crawlerCoverUrl = crawlerCoverUrl;
+    }
+
+    public Integer getCrawlerViewCount() {
+        return crawlerViewCount;
+    }
+
+    public void setCrawlerViewCount(Integer crawlerViewCount) {
+        this.crawlerViewCount = crawlerViewCount;
+    }
+
+    public Integer getCrawlerLikeCount() {
+        return crawlerLikeCount;
+    }
+
+    public void setCrawlerLikeCount(Integer crawlerLikeCount) {
+        this.crawlerLikeCount = crawlerLikeCount;
+    }
+
+    public Long getCrawlerPublishTimestamp() {
+        return crawlerPublishTimestamp;
+    }
+
+    public void setCrawlerPublishTimestamp(Long crawlerPublishTimestamp) {
+        this.crawlerPublishTimestamp = crawlerPublishTimestamp;
+    }
+
+    public String getCrawlerAccountName() {
+        return crawlerAccountName;
+    }
+
+    public void setCrawlerAccountName(String crawlerAccountName) {
+        this.crawlerAccountName = crawlerAccountName;
+    }
+}

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

@@ -0,0 +1,66 @@
+package com.tzld.longarticle.recommend.server.model.cgi;
+
+import java.util.List;
+
+public class BucketDataParam {
+
+    private Long accountId;
+
+    private String accountName;
+
+    private String ghId;
+
+    private String strategy;
+
+    private String planId;
+
+    private List<ArticleInfo> articleList;
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
+    public void setAccountId(Long 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;
+    }
+
+    public void setArticleList(List<ArticleInfo> articleList) {
+        this.articleList = articleList;
+    }
+}

+ 24 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/FilterData.java

@@ -0,0 +1,24 @@
+package com.tzld.longarticle.recommend.server.model.cgi;
+
+public class FilterData {
+
+    private String publishContentId;
+
+    private String filterReason;
+
+    public String getPublishContentId() {
+        return publishContentId;
+    }
+
+    public void setPublishContentId(String publishContentId) {
+        this.publishContentId = publishContentId;
+    }
+
+    public String getFilterReason() {
+        return filterReason;
+    }
+
+    public void setFilterReason(String filterReason) {
+        this.filterReason = filterReason;
+    }
+}

+ 27 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/GroupData.java

@@ -0,0 +1,27 @@
+package com.tzld.longarticle.recommend.server.model.cgi;
+
+import java.util.List;
+
+public class GroupData {
+
+    private Integer groupIndex;
+
+    private List<MsgData> msgDataList;
+
+
+    public Integer getGroupIndex() {
+        return groupIndex;
+    }
+
+    public void setGroupIndex(Integer groupIndex) {
+        this.groupIndex = groupIndex;
+    }
+
+    public List<MsgData> getMsgDataList() {
+        return msgDataList;
+    }
+
+    public void setMsgDataList(List<MsgData> msgDataList) {
+        this.msgDataList = msgDataList;
+    }
+}

+ 104 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/MsgData.java

@@ -0,0 +1,104 @@
+package com.tzld.longarticle.recommend.server.model.cgi;
+
+public class MsgData {
+
+    private Integer msgType;
+
+    private String title;
+
+    private String coverUrl;
+
+    private String miniAppId;
+
+    private String miniPagePath;
+
+    private Long miniVideoId;
+
+    private String newsPublishContentId;
+
+    private String newsUrl;
+
+    private String newsDescription;
+
+//    private Integer sort;
+
+    public Integer getMsgType() {
+        return msgType;
+    }
+
+    public void setMsgType(Integer msgType) {
+        this.msgType = msgType;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getCoverUrl() {
+        return coverUrl;
+    }
+
+    public void setCoverUrl(String coverUrl) {
+        this.coverUrl = coverUrl;
+    }
+
+    public String getMiniAppId() {
+        return miniAppId;
+    }
+
+    public void setMiniAppId(String miniAppId) {
+        this.miniAppId = miniAppId;
+    }
+
+    public String getMiniPagePath() {
+        return miniPagePath;
+    }
+
+    public void setMiniPagePath(String miniPagePath) {
+        this.miniPagePath = miniPagePath;
+    }
+
+    public Long getMiniVideoId() {
+        return miniVideoId;
+    }
+
+    public void setMiniVideoId(Long miniVideoId) {
+        this.miniVideoId = miniVideoId;
+    }
+
+    public String getNewsPublishContentId() {
+        return newsPublishContentId;
+    }
+
+    public void setNewsPublishContentId(String newsPublishContentId) {
+        this.newsPublishContentId = newsPublishContentId;
+    }
+
+    public String getNewsUrl() {
+        return newsUrl;
+    }
+
+    public void setNewsUrl(String newsUrl) {
+        this.newsUrl = newsUrl;
+    }
+
+    public String getNewsDescription() {
+        return newsDescription;
+    }
+
+    public void setNewsDescription(String newsDescription) {
+        this.newsDescription = newsDescription;
+    }
+
+//    public Integer getSort() {
+//        return sort;
+//    }
+//
+//    public void setSort(Integer sort) {
+//        this.sort = sort;
+//    }
+}

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

@@ -0,0 +1,28 @@
+package com.tzld.longarticle.recommend.server.model.cgi;
+
+import java.util.List;
+
+public class ReplyBucketData {
+
+    private List<FilterData> filterList;
+
+    private List<GroupData> groupList;
+
+    public List<FilterData> getFilterList() {
+        return filterList;
+    }
+
+    public void setFilterList(List<FilterData> filterList) {
+        this.filterList = filterList;
+    }
+
+    public List<GroupData> getGroupList() {
+        return groupList;
+    }
+
+    public void setGroupList(List<GroupData> groupList) {
+        this.groupList = groupList;
+    }
+}
+
+

+ 74 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/cgi/SmallPageUrlDetail.java

@@ -0,0 +1,74 @@
+package com.tzld.longarticle.recommend.server.model.cgi;
+
+public class SmallPageUrlDetail {
+
+    private Long id;
+
+    private Long videoId;
+
+    private String putScene;
+
+    private String channel;
+
+    private String remark;
+
+    private String url;
+
+    private String rootSourceId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getVideoId() {
+        return videoId;
+    }
+
+    public void setVideoId(Long videoId) {
+        this.videoId = videoId;
+    }
+
+    public String getPutScene() {
+        return putScene;
+    }
+
+    public void setPutScene(String putScene) {
+        this.putScene = putScene;
+    }
+
+    public String getChannel() {
+        return channel;
+    }
+
+    public void setChannel(String channel) {
+        this.channel = channel;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getRootSourceId() {
+        return rootSourceId;
+    }
+
+    public void setRootSourceId(String rootSourceId) {
+        this.rootSourceId = rootSourceId;
+    }
+}

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

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

+ 32 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/mapper/crawler/CgiReplyBucketDataMapper.java

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

+ 115 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/model/AlgGhAutoreplyVideoRankData.java

@@ -0,0 +1,115 @@
+package com.tzld.longarticle.recommend.server.repository.model;
+
+import java.util.Date;
+
+public class AlgGhAutoreplyVideoRankData {
+    private Long id;
+
+    private String strategyKey;
+
+    private String dtVersion;
+
+    private String ghId;
+
+    private Integer sort;
+
+    private Long videoId;
+
+    private String title;
+
+    private String coverUrl;
+
+    private Integer isDelete;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getStrategyKey() {
+        return strategyKey;
+    }
+
+    public void setStrategyKey(String strategyKey) {
+        this.strategyKey = strategyKey == null ? null : strategyKey.trim();
+    }
+
+    public String getDtVersion() {
+        return dtVersion;
+    }
+
+    public void setDtVersion(String dtVersion) {
+        this.dtVersion = dtVersion == null ? null : dtVersion.trim();
+    }
+
+    public String getGhId() {
+        return ghId;
+    }
+
+    public void setGhId(String ghId) {
+        this.ghId = ghId == null ? null : ghId.trim();
+    }
+
+    public Integer getSort() {
+        return sort;
+    }
+
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+
+    public Long getVideoId() {
+        return videoId;
+    }
+
+    public void setVideoId(Long videoId) {
+        this.videoId = videoId;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title == null ? null : title.trim();
+    }
+
+    public String getCoverUrl() {
+        return coverUrl;
+    }
+
+    public void setCoverUrl(String coverUrl) {
+        this.coverUrl = coverUrl == null ? null : coverUrl.trim();
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}

+ 910 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/model/AlgGhAutoreplyVideoRankDataExample.java

@@ -0,0 +1,910 @@
+package com.tzld.longarticle.recommend.server.repository.model;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class AlgGhAutoreplyVideoRankDataExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public AlgGhAutoreplyVideoRankDataExample() {
+        oredCriteria = new ArrayList<>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyIsNull() {
+            addCriterion("strategy_key is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyIsNotNull() {
+            addCriterion("strategy_key is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyEqualTo(String value) {
+            addCriterion("strategy_key =", value, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyNotEqualTo(String value) {
+            addCriterion("strategy_key <>", value, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyGreaterThan(String value) {
+            addCriterion("strategy_key >", value, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyGreaterThanOrEqualTo(String value) {
+            addCriterion("strategy_key >=", value, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyLessThan(String value) {
+            addCriterion("strategy_key <", value, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyLessThanOrEqualTo(String value) {
+            addCriterion("strategy_key <=", value, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyLike(String value) {
+            addCriterion("strategy_key like", value, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyNotLike(String value) {
+            addCriterion("strategy_key not like", value, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyIn(List<String> values) {
+            addCriterion("strategy_key in", values, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyNotIn(List<String> values) {
+            addCriterion("strategy_key not in", values, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyBetween(String value1, String value2) {
+            addCriterion("strategy_key between", value1, value2, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyKeyNotBetween(String value1, String value2) {
+            addCriterion("strategy_key not between", value1, value2, "strategyKey");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionIsNull() {
+            addCriterion("dt_version is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionIsNotNull() {
+            addCriterion("dt_version is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionEqualTo(String value) {
+            addCriterion("dt_version =", value, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionNotEqualTo(String value) {
+            addCriterion("dt_version <>", value, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionGreaterThan(String value) {
+            addCriterion("dt_version >", value, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionGreaterThanOrEqualTo(String value) {
+            addCriterion("dt_version >=", value, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionLessThan(String value) {
+            addCriterion("dt_version <", value, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionLessThanOrEqualTo(String value) {
+            addCriterion("dt_version <=", value, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionLike(String value) {
+            addCriterion("dt_version like", value, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionNotLike(String value) {
+            addCriterion("dt_version not like", value, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionIn(List<String> values) {
+            addCriterion("dt_version in", values, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionNotIn(List<String> values) {
+            addCriterion("dt_version not in", values, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionBetween(String value1, String value2) {
+            addCriterion("dt_version between", value1, value2, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andDtVersionNotBetween(String value1, String value2) {
+            addCriterion("dt_version not between", value1, value2, "dtVersion");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdIsNull() {
+            addCriterion("gh_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdIsNotNull() {
+            addCriterion("gh_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdEqualTo(String value) {
+            addCriterion("gh_id =", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdNotEqualTo(String value) {
+            addCriterion("gh_id <>", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdGreaterThan(String value) {
+            addCriterion("gh_id >", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdGreaterThanOrEqualTo(String value) {
+            addCriterion("gh_id >=", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdLessThan(String value) {
+            addCriterion("gh_id <", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdLessThanOrEqualTo(String value) {
+            addCriterion("gh_id <=", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdLike(String value) {
+            addCriterion("gh_id like", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdNotLike(String value) {
+            addCriterion("gh_id not like", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdIn(List<String> values) {
+            addCriterion("gh_id in", values, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdNotIn(List<String> values) {
+            addCriterion("gh_id not in", values, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdBetween(String value1, String value2) {
+            addCriterion("gh_id between", value1, value2, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdNotBetween(String value1, String value2) {
+            addCriterion("gh_id not between", value1, value2, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortIsNull() {
+            addCriterion("sort is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortIsNotNull() {
+            addCriterion("sort is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortEqualTo(Integer value) {
+            addCriterion("sort =", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortNotEqualTo(Integer value) {
+            addCriterion("sort <>", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortGreaterThan(Integer value) {
+            addCriterion("sort >", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sort >=", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortLessThan(Integer value) {
+            addCriterion("sort <", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortLessThanOrEqualTo(Integer value) {
+            addCriterion("sort <=", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortIn(List<Integer> values) {
+            addCriterion("sort in", values, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortNotIn(List<Integer> values) {
+            addCriterion("sort not in", values, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortBetween(Integer value1, Integer value2) {
+            addCriterion("sort between", value1, value2, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortNotBetween(Integer value1, Integer value2) {
+            addCriterion("sort not between", value1, value2, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdIsNull() {
+            addCriterion("video_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdIsNotNull() {
+            addCriterion("video_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdEqualTo(Long value) {
+            addCriterion("video_id =", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdNotEqualTo(Long value) {
+            addCriterion("video_id <>", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdGreaterThan(Long value) {
+            addCriterion("video_id >", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("video_id >=", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdLessThan(Long value) {
+            addCriterion("video_id <", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdLessThanOrEqualTo(Long value) {
+            addCriterion("video_id <=", value, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdIn(List<Long> values) {
+            addCriterion("video_id in", values, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdNotIn(List<Long> values) {
+            addCriterion("video_id not in", values, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdBetween(Long value1, Long value2) {
+            addCriterion("video_id between", value1, value2, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andVideoIdNotBetween(Long value1, Long value2) {
+            addCriterion("video_id not between", value1, value2, "videoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIsNull() {
+            addCriterion("title is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIsNotNull() {
+            addCriterion("title is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleEqualTo(String value) {
+            addCriterion("title =", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotEqualTo(String value) {
+            addCriterion("title <>", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThan(String value) {
+            addCriterion("title >", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThanOrEqualTo(String value) {
+            addCriterion("title >=", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThan(String value) {
+            addCriterion("title <", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThanOrEqualTo(String value) {
+            addCriterion("title <=", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLike(String value) {
+            addCriterion("title like", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotLike(String value) {
+            addCriterion("title not like", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIn(List<String> values) {
+            addCriterion("title in", values, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotIn(List<String> values) {
+            addCriterion("title not in", values, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleBetween(String value1, String value2) {
+            addCriterion("title between", value1, value2, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotBetween(String value1, String value2) {
+            addCriterion("title not between", value1, value2, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlIsNull() {
+            addCriterion("cover_url is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlIsNotNull() {
+            addCriterion("cover_url is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlEqualTo(String value) {
+            addCriterion("cover_url =", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlNotEqualTo(String value) {
+            addCriterion("cover_url <>", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlGreaterThan(String value) {
+            addCriterion("cover_url >", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlGreaterThanOrEqualTo(String value) {
+            addCriterion("cover_url >=", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlLessThan(String value) {
+            addCriterion("cover_url <", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlLessThanOrEqualTo(String value) {
+            addCriterion("cover_url <=", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlLike(String value) {
+            addCriterion("cover_url like", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlNotLike(String value) {
+            addCriterion("cover_url not like", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlIn(List<String> values) {
+            addCriterion("cover_url in", values, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlNotIn(List<String> values) {
+            addCriterion("cover_url not in", values, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlBetween(String value1, String value2) {
+            addCriterion("cover_url between", value1, value2, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlNotBetween(String value1, String value2) {
+            addCriterion("cover_url not between", value1, value2, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNull() {
+            addCriterion("is_delete is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNotNull() {
+            addCriterion("is_delete is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteEqualTo(Integer value) {
+            addCriterion("is_delete =", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotEqualTo(Integer value) {
+            addCriterion("is_delete <>", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThan(Integer value) {
+            addCriterion("is_delete >", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThanOrEqualTo(Integer value) {
+            addCriterion("is_delete >=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThan(Integer value) {
+            addCriterion("is_delete <", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThanOrEqualTo(Integer value) {
+            addCriterion("is_delete <=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIn(List<Integer> values) {
+            addCriterion("is_delete in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotIn(List<Integer> values) {
+            addCriterion("is_delete not in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete not between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 175 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/model/CgiReplyBucketData.java

@@ -0,0 +1,175 @@
+package com.tzld.longarticle.recommend.server.repository.model;
+
+import java.util.Date;
+
+public class CgiReplyBucketData {
+    private Long id;
+
+    private String strategy;
+
+    private Integer sort;
+
+    private String strategyDt;
+
+    private String ghId;
+
+    private Integer msgType;
+
+    private String title;
+
+    private String coverUrl;
+
+    private String miniAppId;
+
+    private String miniPagePath;
+
+    private Long miniVideoId;
+
+    private Long pagePathUrlId;
+
+    private String newsPublishContentId;
+
+    private String planId;
+
+    private Integer isDelete;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getStrategy() {
+        return strategy;
+    }
+
+    public void setStrategy(String strategy) {
+        this.strategy = strategy == null ? null : strategy.trim();
+    }
+
+    public Integer getSort() {
+        return sort;
+    }
+
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+
+    public String getStrategyDt() {
+        return strategyDt;
+    }
+
+    public void setStrategyDt(String strategyDt) {
+        this.strategyDt = strategyDt == null ? null : strategyDt.trim();
+    }
+
+    public String getGhId() {
+        return ghId;
+    }
+
+    public void setGhId(String ghId) {
+        this.ghId = ghId == null ? null : ghId.trim();
+    }
+
+    public Integer getMsgType() {
+        return msgType;
+    }
+
+    public void setMsgType(Integer msgType) {
+        this.msgType = msgType;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title == null ? null : title.trim();
+    }
+
+    public String getCoverUrl() {
+        return coverUrl;
+    }
+
+    public void setCoverUrl(String coverUrl) {
+        this.coverUrl = coverUrl == null ? null : coverUrl.trim();
+    }
+
+    public String getMiniAppId() {
+        return miniAppId;
+    }
+
+    public void setMiniAppId(String miniAppId) {
+        this.miniAppId = miniAppId == null ? null : miniAppId.trim();
+    }
+
+    public String getMiniPagePath() {
+        return miniPagePath;
+    }
+
+    public void setMiniPagePath(String miniPagePath) {
+        this.miniPagePath = miniPagePath == null ? null : miniPagePath.trim();
+    }
+
+    public Long getMiniVideoId() {
+        return miniVideoId;
+    }
+
+    public void setMiniVideoId(Long miniVideoId) {
+        this.miniVideoId = miniVideoId;
+    }
+
+    public Long getPagePathUrlId() {
+        return pagePathUrlId;
+    }
+
+    public void setPagePathUrlId(Long pagePathUrlId) {
+        this.pagePathUrlId = pagePathUrlId;
+    }
+
+    public String getNewsPublishContentId() {
+        return newsPublishContentId;
+    }
+
+    public void setNewsPublishContentId(String newsPublishContentId) {
+        this.newsPublishContentId = newsPublishContentId == null ? null : newsPublishContentId.trim();
+    }
+
+    public String getPlanId() {
+        return planId;
+    }
+
+    public void setPlanId(String planId) {
+        this.planId = planId == null ? null : planId.trim();
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}

+ 1310 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/repository/model/CgiReplyBucketDataExample.java

@@ -0,0 +1,1310 @@
+package com.tzld.longarticle.recommend.server.repository.model;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class CgiReplyBucketDataExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    public CgiReplyBucketDataExample() {
+        oredCriteria = new ArrayList<>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyIsNull() {
+            addCriterion("strategy is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyIsNotNull() {
+            addCriterion("strategy is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyEqualTo(String value) {
+            addCriterion("strategy =", value, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyNotEqualTo(String value) {
+            addCriterion("strategy <>", value, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyGreaterThan(String value) {
+            addCriterion("strategy >", value, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyGreaterThanOrEqualTo(String value) {
+            addCriterion("strategy >=", value, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyLessThan(String value) {
+            addCriterion("strategy <", value, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyLessThanOrEqualTo(String value) {
+            addCriterion("strategy <=", value, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyLike(String value) {
+            addCriterion("strategy like", value, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyNotLike(String value) {
+            addCriterion("strategy not like", value, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyIn(List<String> values) {
+            addCriterion("strategy in", values, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyNotIn(List<String> values) {
+            addCriterion("strategy not in", values, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyBetween(String value1, String value2) {
+            addCriterion("strategy between", value1, value2, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyNotBetween(String value1, String value2) {
+            addCriterion("strategy not between", value1, value2, "strategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortIsNull() {
+            addCriterion("sort is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortIsNotNull() {
+            addCriterion("sort is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortEqualTo(Integer value) {
+            addCriterion("sort =", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortNotEqualTo(Integer value) {
+            addCriterion("sort <>", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortGreaterThan(Integer value) {
+            addCriterion("sort >", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sort >=", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortLessThan(Integer value) {
+            addCriterion("sort <", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortLessThanOrEqualTo(Integer value) {
+            addCriterion("sort <=", value, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortIn(List<Integer> values) {
+            addCriterion("sort in", values, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortNotIn(List<Integer> values) {
+            addCriterion("sort not in", values, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortBetween(Integer value1, Integer value2) {
+            addCriterion("sort between", value1, value2, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andSortNotBetween(Integer value1, Integer value2) {
+            addCriterion("sort not between", value1, value2, "sort");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtIsNull() {
+            addCriterion("strategy_dt is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtIsNotNull() {
+            addCriterion("strategy_dt is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtEqualTo(String value) {
+            addCriterion("strategy_dt =", value, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtNotEqualTo(String value) {
+            addCriterion("strategy_dt <>", value, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtGreaterThan(String value) {
+            addCriterion("strategy_dt >", value, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtGreaterThanOrEqualTo(String value) {
+            addCriterion("strategy_dt >=", value, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtLessThan(String value) {
+            addCriterion("strategy_dt <", value, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtLessThanOrEqualTo(String value) {
+            addCriterion("strategy_dt <=", value, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtLike(String value) {
+            addCriterion("strategy_dt like", value, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtNotLike(String value) {
+            addCriterion("strategy_dt not like", value, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtIn(List<String> values) {
+            addCriterion("strategy_dt in", values, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtNotIn(List<String> values) {
+            addCriterion("strategy_dt not in", values, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtBetween(String value1, String value2) {
+            addCriterion("strategy_dt between", value1, value2, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andStrategyDtNotBetween(String value1, String value2) {
+            addCriterion("strategy_dt not between", value1, value2, "strategyDt");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdIsNull() {
+            addCriterion("gh_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdIsNotNull() {
+            addCriterion("gh_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdEqualTo(String value) {
+            addCriterion("gh_id =", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdNotEqualTo(String value) {
+            addCriterion("gh_id <>", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdGreaterThan(String value) {
+            addCriterion("gh_id >", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdGreaterThanOrEqualTo(String value) {
+            addCriterion("gh_id >=", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdLessThan(String value) {
+            addCriterion("gh_id <", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdLessThanOrEqualTo(String value) {
+            addCriterion("gh_id <=", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdLike(String value) {
+            addCriterion("gh_id like", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdNotLike(String value) {
+            addCriterion("gh_id not like", value, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdIn(List<String> values) {
+            addCriterion("gh_id in", values, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdNotIn(List<String> values) {
+            addCriterion("gh_id not in", values, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdBetween(String value1, String value2) {
+            addCriterion("gh_id between", value1, value2, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGhIdNotBetween(String value1, String value2) {
+            addCriterion("gh_id not between", value1, value2, "ghId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeIsNull() {
+            addCriterion("msg_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeIsNotNull() {
+            addCriterion("msg_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeEqualTo(Integer value) {
+            addCriterion("msg_type =", value, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeNotEqualTo(Integer value) {
+            addCriterion("msg_type <>", value, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeGreaterThan(Integer value) {
+            addCriterion("msg_type >", value, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeGreaterThanOrEqualTo(Integer value) {
+            addCriterion("msg_type >=", value, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeLessThan(Integer value) {
+            addCriterion("msg_type <", value, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeLessThanOrEqualTo(Integer value) {
+            addCriterion("msg_type <=", value, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeIn(List<Integer> values) {
+            addCriterion("msg_type in", values, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeNotIn(List<Integer> values) {
+            addCriterion("msg_type not in", values, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeBetween(Integer value1, Integer value2) {
+            addCriterion("msg_type between", value1, value2, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andMsgTypeNotBetween(Integer value1, Integer value2) {
+            addCriterion("msg_type not between", value1, value2, "msgType");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIsNull() {
+            addCriterion("title is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIsNotNull() {
+            addCriterion("title is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleEqualTo(String value) {
+            addCriterion("title =", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotEqualTo(String value) {
+            addCriterion("title <>", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThan(String value) {
+            addCriterion("title >", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleGreaterThanOrEqualTo(String value) {
+            addCriterion("title >=", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThan(String value) {
+            addCriterion("title <", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLessThanOrEqualTo(String value) {
+            addCriterion("title <=", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleLike(String value) {
+            addCriterion("title like", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotLike(String value) {
+            addCriterion("title not like", value, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleIn(List<String> values) {
+            addCriterion("title in", values, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotIn(List<String> values) {
+            addCriterion("title not in", values, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleBetween(String value1, String value2) {
+            addCriterion("title between", value1, value2, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andTitleNotBetween(String value1, String value2) {
+            addCriterion("title not between", value1, value2, "title");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlIsNull() {
+            addCriterion("cover_url is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlIsNotNull() {
+            addCriterion("cover_url is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlEqualTo(String value) {
+            addCriterion("cover_url =", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlNotEqualTo(String value) {
+            addCriterion("cover_url <>", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlGreaterThan(String value) {
+            addCriterion("cover_url >", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlGreaterThanOrEqualTo(String value) {
+            addCriterion("cover_url >=", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlLessThan(String value) {
+            addCriterion("cover_url <", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlLessThanOrEqualTo(String value) {
+            addCriterion("cover_url <=", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlLike(String value) {
+            addCriterion("cover_url like", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlNotLike(String value) {
+            addCriterion("cover_url not like", value, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlIn(List<String> values) {
+            addCriterion("cover_url in", values, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlNotIn(List<String> values) {
+            addCriterion("cover_url not in", values, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlBetween(String value1, String value2) {
+            addCriterion("cover_url between", value1, value2, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andCoverUrlNotBetween(String value1, String value2) {
+            addCriterion("cover_url not between", value1, value2, "coverUrl");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdIsNull() {
+            addCriterion("mini_app_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdIsNotNull() {
+            addCriterion("mini_app_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdEqualTo(String value) {
+            addCriterion("mini_app_id =", value, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdNotEqualTo(String value) {
+            addCriterion("mini_app_id <>", value, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdGreaterThan(String value) {
+            addCriterion("mini_app_id >", value, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdGreaterThanOrEqualTo(String value) {
+            addCriterion("mini_app_id >=", value, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdLessThan(String value) {
+            addCriterion("mini_app_id <", value, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdLessThanOrEqualTo(String value) {
+            addCriterion("mini_app_id <=", value, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdLike(String value) {
+            addCriterion("mini_app_id like", value, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdNotLike(String value) {
+            addCriterion("mini_app_id not like", value, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdIn(List<String> values) {
+            addCriterion("mini_app_id in", values, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdNotIn(List<String> values) {
+            addCriterion("mini_app_id not in", values, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdBetween(String value1, String value2) {
+            addCriterion("mini_app_id between", value1, value2, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniAppIdNotBetween(String value1, String value2) {
+            addCriterion("mini_app_id not between", value1, value2, "miniAppId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathIsNull() {
+            addCriterion("mini_page_path is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathIsNotNull() {
+            addCriterion("mini_page_path is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathEqualTo(String value) {
+            addCriterion("mini_page_path =", value, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathNotEqualTo(String value) {
+            addCriterion("mini_page_path <>", value, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathGreaterThan(String value) {
+            addCriterion("mini_page_path >", value, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathGreaterThanOrEqualTo(String value) {
+            addCriterion("mini_page_path >=", value, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathLessThan(String value) {
+            addCriterion("mini_page_path <", value, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathLessThanOrEqualTo(String value) {
+            addCriterion("mini_page_path <=", value, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathLike(String value) {
+            addCriterion("mini_page_path like", value, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathNotLike(String value) {
+            addCriterion("mini_page_path not like", value, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathIn(List<String> values) {
+            addCriterion("mini_page_path in", values, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathNotIn(List<String> values) {
+            addCriterion("mini_page_path not in", values, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathBetween(String value1, String value2) {
+            addCriterion("mini_page_path between", value1, value2, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniPagePathNotBetween(String value1, String value2) {
+            addCriterion("mini_page_path not between", value1, value2, "miniPagePath");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdIsNull() {
+            addCriterion("mini_video_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdIsNotNull() {
+            addCriterion("mini_video_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdEqualTo(Long value) {
+            addCriterion("mini_video_id =", value, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdNotEqualTo(Long value) {
+            addCriterion("mini_video_id <>", value, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdGreaterThan(Long value) {
+            addCriterion("mini_video_id >", value, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("mini_video_id >=", value, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdLessThan(Long value) {
+            addCriterion("mini_video_id <", value, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdLessThanOrEqualTo(Long value) {
+            addCriterion("mini_video_id <=", value, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdIn(List<Long> values) {
+            addCriterion("mini_video_id in", values, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdNotIn(List<Long> values) {
+            addCriterion("mini_video_id not in", values, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdBetween(Long value1, Long value2) {
+            addCriterion("mini_video_id between", value1, value2, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMiniVideoIdNotBetween(Long value1, Long value2) {
+            addCriterion("mini_video_id not between", value1, value2, "miniVideoId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdIsNull() {
+            addCriterion("page_path_url_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdIsNotNull() {
+            addCriterion("page_path_url_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdEqualTo(Long value) {
+            addCriterion("page_path_url_id =", value, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdNotEqualTo(Long value) {
+            addCriterion("page_path_url_id <>", value, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdGreaterThan(Long value) {
+            addCriterion("page_path_url_id >", value, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("page_path_url_id >=", value, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdLessThan(Long value) {
+            addCriterion("page_path_url_id <", value, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdLessThanOrEqualTo(Long value) {
+            addCriterion("page_path_url_id <=", value, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdIn(List<Long> values) {
+            addCriterion("page_path_url_id in", values, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdNotIn(List<Long> values) {
+            addCriterion("page_path_url_id not in", values, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdBetween(Long value1, Long value2) {
+            addCriterion("page_path_url_id between", value1, value2, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPagePathUrlIdNotBetween(Long value1, Long value2) {
+            addCriterion("page_path_url_id not between", value1, value2, "pagePathUrlId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdIsNull() {
+            addCriterion("news_publish_content_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdIsNotNull() {
+            addCriterion("news_publish_content_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdEqualTo(String value) {
+            addCriterion("news_publish_content_id =", value, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdNotEqualTo(String value) {
+            addCriterion("news_publish_content_id <>", value, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdGreaterThan(String value) {
+            addCriterion("news_publish_content_id >", value, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdGreaterThanOrEqualTo(String value) {
+            addCriterion("news_publish_content_id >=", value, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdLessThan(String value) {
+            addCriterion("news_publish_content_id <", value, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdLessThanOrEqualTo(String value) {
+            addCriterion("news_publish_content_id <=", value, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdLike(String value) {
+            addCriterion("news_publish_content_id like", value, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdNotLike(String value) {
+            addCriterion("news_publish_content_id not like", value, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdIn(List<String> values) {
+            addCriterion("news_publish_content_id in", values, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdNotIn(List<String> values) {
+            addCriterion("news_publish_content_id not in", values, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdBetween(String value1, String value2) {
+            addCriterion("news_publish_content_id between", value1, value2, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNewsPublishContentIdNotBetween(String value1, String value2) {
+            addCriterion("news_publish_content_id not between", value1, value2, "newsPublishContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdIsNull() {
+            addCriterion("plan_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdIsNotNull() {
+            addCriterion("plan_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdEqualTo(String value) {
+            addCriterion("plan_id =", value, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdNotEqualTo(String value) {
+            addCriterion("plan_id <>", value, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdGreaterThan(String value) {
+            addCriterion("plan_id >", value, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdGreaterThanOrEqualTo(String value) {
+            addCriterion("plan_id >=", value, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdLessThan(String value) {
+            addCriterion("plan_id <", value, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdLessThanOrEqualTo(String value) {
+            addCriterion("plan_id <=", value, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdLike(String value) {
+            addCriterion("plan_id like", value, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdNotLike(String value) {
+            addCriterion("plan_id not like", value, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdIn(List<String> values) {
+            addCriterion("plan_id in", values, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdNotIn(List<String> values) {
+            addCriterion("plan_id not in", values, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdBetween(String value1, String value2) {
+            addCriterion("plan_id between", value1, value2, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPlanIdNotBetween(String value1, String value2) {
+            addCriterion("plan_id not between", value1, value2, "planId");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNull() {
+            addCriterion("is_delete is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIsNotNull() {
+            addCriterion("is_delete is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteEqualTo(Integer value) {
+            addCriterion("is_delete =", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotEqualTo(Integer value) {
+            addCriterion("is_delete <>", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThan(Integer value) {
+            addCriterion("is_delete >", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteGreaterThanOrEqualTo(Integer value) {
+            addCriterion("is_delete >=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThan(Integer value) {
+            addCriterion("is_delete <", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteLessThanOrEqualTo(Integer value) {
+            addCriterion("is_delete <=", value, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteIn(List<Integer> values) {
+            addCriterion("is_delete in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotIn(List<Integer> values) {
+            addCriterion("is_delete not in", values, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andIsDeleteNotBetween(Integer value1, Integer value2) {
+            addCriterion("is_delete not between", value1, value2, "isDelete");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+    }
+
+    public static class Criteria extends GeneratedCriteria {
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}

+ 8 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/cgi/CgiReplyService.java

@@ -0,0 +1,8 @@
+package com.tzld.longarticle.recommend.server.service.cgi;
+
+import com.tzld.longarticle.recommend.server.model.cgi.BucketDataParam;
+import com.tzld.longarticle.recommend.server.model.cgi.ReplyBucketData;
+
+public interface CgiReplyService {
+    ReplyBucketData getRgiReplyData(BucketDataParam bucketDataParam);
+}

+ 77 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/cgi/TouLiuHttpClientService.java

@@ -0,0 +1,77 @@
+package com.tzld.longarticle.recommend.server.service.cgi;
+
+import com.alibaba.fastjson.JSON;
+import com.tzld.longarticle.recommend.server.model.cgi.GroupData;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Service;
+import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+import java.util.UUID;
+
+@Service
+public class TouLiuHttpClientService {
+
+//    private final WebClient webClient;
+//
+//    public HttpClientService(String baseUrl) {
+//        this.webClient = WebClient.builder()
+//                .baseUrl(baseUrl)
+//                .build();
+//    }
+
+    public String sendAdFlowAddRequest(String baseUrl, String videoId, String putTypeOne,
+                                       String putTypeTwo, String putTypeThree, String putCarrierId) {
+        WebClient webClient = WebClient.builder()
+                .baseUrl(baseUrl)
+                .build();
+        UUID uuid = UUID.randomUUID();
+        // 构建请求体  
+        String jsonBody = "{" +
+                "\"videoId\":\"" + videoId + "\"," +
+                "\"putScene\":\"" + "touliu" + "\"," +
+                "\"channel\":\"" + "tencent" + "\"," +
+                "\"remark\":\"" + "自动" + "\"," +
+                "\"putTypeOne\":\"" + putTypeOne + "\"," +
+                "\"putTypeTwo\":\"" + putTypeTwo + "\"," +
+                "\"putTypeThree\":\"" + putTypeThree + "\"," +
+                "\"putCarrierId\":\"" + putCarrierId + "\"," +
+                "\"path\":\"" + "pages/category" + "\"," +
+                "\"requestParam\":{" +
+                "\"jumpPage\":\"" + "pages/user-videos?id=" + videoId + "&fromGzh=1&rootShareId=" + uuid + "&shareId=" + uuid + "&rootSourceId=[rootSourceId]" + "\"" +
+                "}" +
+                "}";
+
+        // 发送POST请求  
+        Mono<String> result = webClient.post()
+                .uri("/ad/put/flow/add/tencent")
+                .contentType(MediaType.APPLICATION_JSON)
+                .body(BodyInserters.fromValue(jsonBody))
+                .retrieve()
+                .bodyToMono(String.class);
+        return result.block();
+    }
+
+    public List<GroupData> sendPenGongBaseRequest(String ghId) {
+        WebClient webClient = WebClient.builder()
+                .baseUrl("http://47.99.132.47:8813")
+                .build();
+        // 构建请求体
+        String jsonBody = "{\"ghId\": \"" + ghId + "\"}";
+
+        // 发送POST请求
+        Mono<String> result = webClient.post()
+                .uri("/VideoRank")
+                .contentType(MediaType.APPLICATION_JSON)
+                .body(BodyInserters.fromValue(jsonBody))
+                .retrieve()
+                .bodyToMono(String.class);
+        String block = result.block();
+        return JSON.parseArray(block, GroupData.class);
+    }
+
+    // 注意:在实际使用时,你还需要导入相关类和处理异常,以及添加@Service注解到你的服务类上  
+    // 另外,请确保MediaType已正确导入,它来自org.springframework.http包  
+}

+ 46 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/cgi/impl/CgiReplyServiceImpl.java

@@ -0,0 +1,46 @@
+package com.tzld.longarticle.recommend.server.service.cgi.impl;
+
+import com.tzld.longarticle.recommend.server.common.enums.cgi.ReplyStrategyServiceEnum;
+import com.tzld.longarticle.recommend.server.model.cgi.BucketDataParam;
+import com.tzld.longarticle.recommend.server.model.cgi.ReplyBucketData;
+import com.tzld.longarticle.recommend.server.service.cgi.CgiReplyService;
+import com.tzld.longarticle.recommend.server.service.strategy.reply.ReplyStrategyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.Map;
+
+@Service
+public class CgiReplyServiceImpl implements CgiReplyService {
+
+    @Autowired
+    private ApplicationContext applicationContext;
+
+    private Map<String, ReplyStrategyService> strategyServiceMap;
+
+    @PostConstruct
+    public void init() {
+        strategyServiceMap = applicationContext.getBeansOfType(ReplyStrategyService.class);
+    }
+
+    /**
+     * 当前使用策略
+     */
+    private final ReplyStrategyServiceEnum useStrategy = ReplyStrategyServiceEnum.BUCKET_STRATEGY_V1;
+
+
+    @Override
+    public ReplyBucketData getRgiReplyData(BucketDataParam bucketDataParam) {
+        for (Map.Entry<String, ReplyStrategyService> stringReplyStrategyServiceEntry : strategyServiceMap.entrySet()) {
+            ReplyStrategyService replyStrategyService = stringReplyStrategyServiceEntry.getValue();
+            // 使用策略层
+            if (replyStrategyService.support(useStrategy)) {
+                return replyStrategyService.getResult(bucketDataParam);
+            }
+        }
+        // 无执行策略 不会走到这里
+        return null;
+    }
+}

+ 13 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/strategy/reply/ReplyStrategyService.java

@@ -0,0 +1,13 @@
+package com.tzld.longarticle.recommend.server.service.strategy.reply;
+
+import com.tzld.longarticle.recommend.server.common.enums.cgi.ReplyStrategyServiceEnum;
+import com.tzld.longarticle.recommend.server.model.cgi.BucketDataParam;
+import com.tzld.longarticle.recommend.server.model.cgi.ReplyBucketData;
+
+public interface ReplyStrategyService {
+
+    ReplyBucketData getResult(BucketDataParam bucketDataParam);
+
+    Boolean support(ReplyStrategyServiceEnum key);
+
+}

+ 232 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/strategy/reply/impl/BuckStrategyV1.java

@@ -0,0 +1,232 @@
+package com.tzld.longarticle.recommend.server.service.strategy.reply.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.longarticle.recommend.server.common.enums.cgi.ReplyStrategyServiceEnum;
+import com.tzld.longarticle.recommend.server.model.cgi.*;
+import com.tzld.longarticle.recommend.server.repository.mapper.crawler.AlgGhAutoreplyVideoRankDataMapper;
+import com.tzld.longarticle.recommend.server.repository.mapper.crawler.CgiReplyBucketDataMapper;
+import com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankData;
+import com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankDataExample;
+import com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketData;
+import com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketDataExample;
+import com.tzld.longarticle.recommend.server.service.cgi.TouLiuHttpClientService;
+import com.tzld.longarticle.recommend.server.service.strategy.reply.ReplyStrategyService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class BuckStrategyV1 implements ReplyStrategyService {
+
+    /**
+     * 实验分桶数量
+     */
+//    private static final Integer bucketNum = 10;
+
+    /**
+     * 分桶实验策略,key为策略,arr为对应桶
+     * {"base":[0,1,2,3],"stg0909-base":[4,5],"stg0909-explore1":[6,7,8],"stg0909-explore2":[9]}
+     * {"stg0909-base":[5,6],"stg0909-explore1":[7,8],"stg0909-explore2":[9]}
+     */
+    private static final String bucketStrategyConfig = "{\"stg0909-base\":[5,6],\"stg0909-explore1\":[7,8],\"stg0909-explore2\":[9]}";
+
+    /**
+     * 自动回复使用小程序Id
+     */
+    private static final String SMALL_APP_Id = "wxbdd2a2e93d9a6e25";
+
+    private static final String CDN_URL = "https://rescdn.piaoquantv.com/";
+
+    private static final String GET_SMALL_PAGE_URL = "https://testapi.piaoquantv.com";
+
+    @Autowired
+    private AlgGhAutoreplyVideoRankDataMapper algGhAutoreplyVideoRankDataMapper;
+    @Autowired
+    private CgiReplyBucketDataMapper cgiReplyBucketDataMapper;
+    @Autowired
+    private TouLiuHttpClientService httpClientService;
+
+    @Override
+    public ReplyBucketData getResult(BucketDataParam bucketDataParam) {
+        // 0 获取策略key
+        JSONObject bucketStrategyConfigJsonObject = JSON.parseObject(bucketStrategyConfig);
+        Set<String> keyedSet = bucketStrategyConfigJsonObject.keySet();
+        // 1 处理文章--算法引擎--排序文章数据
+//        getWenzhangData();
+        // 2 处理小程序--读取离线数据表--获取策略排序小程序数据
+        List<CgiReplyBucketData> smallDataCgiReplyList = readStrategyOrderSmallData(keyedSet);
+        // 2.1 获取小程序落地页地址 http调用
+        smallDataCgiReplyList = setSmallPageUrl(smallDataCgiReplyList);
+        log.info(JSON.toJSONString(smallDataCgiReplyList));
+        // 3 入库读表
+        insertSmallData(smallDataCgiReplyList, keyedSet);
+        // 4 组装分桶数据
+        return getReplyBucketData(bucketStrategyConfigJsonObject, keyedSet, bucketDataParam.getGhId());
+    }
+
+    private ReplyBucketData getReplyBucketData(JSONObject bucketStrategyConfigJsonObject, Set<String> keyedSet, String ghId) {
+        // 策略小程序数据
+        ReplyBucketData replyBucketData = new ReplyBucketData();
+        List<GroupData> groupDataList = new ArrayList<>();
+        for (String key : keyedSet) {
+            CgiReplyBucketDataExample cgiReplyBucketDataExample = new CgiReplyBucketDataExample();
+            cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0).andStrategyEqualTo(key).andGhIdEqualTo(ghId);
+            cgiReplyBucketDataExample.setOrderByClause("sort");
+            List<CgiReplyBucketData> cgiReplyBucketData = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
+            if (CollectionUtils.isEmpty(cgiReplyBucketData)) {
+                CgiReplyBucketDataExample cgiReplyBucketDataExampleNull = new CgiReplyBucketDataExample();
+                cgiReplyBucketDataExampleNull.createCriteria().andIsDeleteEqualTo(0).andStrategyEqualTo(key).andGhIdEqualTo("default");
+                cgiReplyBucketDataExampleNull.setOrderByClause("sort");
+                cgiReplyBucketData = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExampleNull);
+            }
+            if (CollectionUtils.isEmpty(cgiReplyBucketData)) {
+                log.error("getReplyBucketData get data is null,key:" + key);
+                return null;
+            }
+
+            List<Integer> groupList = bucketStrategyConfigJsonObject.getJSONArray(key).toJavaList(Integer.class);
+            for (Integer group : groupList) {
+                GroupData groupData = new GroupData();
+                groupData.setGroupIndex(group);
+                List<MsgData> msgDataList = new ArrayList<>();
+                for (CgiReplyBucketData cgiReplyBucketDatum : cgiReplyBucketData) {
+                    MsgData msgData = new MsgData();
+                    BeanUtils.copyProperties(cgiReplyBucketDatum, msgData);
+                    if (cgiReplyBucketDatum.getMsgType().equals(1)) {
+                        msgData.setMiniAppId(SMALL_APP_Id);
+                    }
+                    msgDataList.add(msgData);
+                }
+                groupData.setMsgDataList(msgDataList);
+                groupDataList.add(groupData);
+            }
+        }
+        // 获取人工实验数据
+        List<GroupData> groupDataBaseList = httpClientService.sendPenGongBaseRequest(ghId);
+        if (!CollectionUtils.isEmpty(groupDataBaseList)) {
+            GroupData groupData = groupDataBaseList.get(0);
+            List<MsgData> msgDataList = groupData.getMsgDataList();
+            List<MsgData> changwenBase = msgDataList.stream().filter(x -> x.getMsgType().equals(2)).collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(changwenBase)) {
+                log.error("get base changwenBase is null,data:" + JSON.toJSONString(msgDataList));
+            } else {
+                // 策略拼接base数据
+                for (GroupData data : groupDataList) {
+                    List<MsgData> msgDataList1 = data.getMsgDataList();
+                    MsgData msgData = changwenBase.get(0);
+//                    msgData.setSort(3);
+                    msgDataList1.add(msgData);
+                }
+            }
+            // 补充人工数据
+            groupDataList.addAll(groupDataBaseList);
+        } else {
+            log.error("get base data is null,ghId:" + ghId);
+        }
+        // groupDataList排序
+        replyBucketData.setGroupList(groupDataList.stream().sorted(Comparator.comparingInt(GroupData::getGroupIndex)).collect(Collectors.toList()));
+        return replyBucketData;
+    }
+
+
+    private void insertSmallData(List<CgiReplyBucketData> smallDataCgiReplyList, Set<String> keyedSet) {
+        if (CollectionUtils.isEmpty(smallDataCgiReplyList)) {
+            return;
+        }
+        for (String key : keyedSet) {
+            if ("base".equals(key)) {
+                continue;
+            }
+            List<CgiReplyBucketData> collect = smallDataCgiReplyList.stream().filter(x -> x.getStrategy().equals(key)).collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(collect)) {
+                log.error("insertSmallData 算法排序数据异常,data:" + JSON.toJSONString(smallDataCgiReplyList));
+                continue;
+            }
+            // 清上个版本的策略数据
+            CgiReplyBucketDataExample cgiReplyBucketDataExample = new CgiReplyBucketDataExample();
+            cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0).andMsgTypeEqualTo(1).andStrategyEqualTo(key);
+            List<CgiReplyBucketData> cgiReplyBucketData1 = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
+            for (CgiReplyBucketData cgiReplyBucketData : cgiReplyBucketData1) {
+                cgiReplyBucketData.setIsDelete(1);
+                cgiReplyBucketDataMapper.updateByPrimaryKeySelective(cgiReplyBucketData);
+            }
+            // 入库
+            for (CgiReplyBucketData cgiReplyBucketData : collect) {
+                cgiReplyBucketDataMapper.insertSelective(cgiReplyBucketData);
+            }
+        }
+    }
+
+    private List<CgiReplyBucketData> setSmallPageUrl(List<CgiReplyBucketData> smallDataCgiReplyList) {
+        if (CollectionUtils.isEmpty(smallDataCgiReplyList)) {
+            return smallDataCgiReplyList;
+        }
+        for (CgiReplyBucketData cgiReplyBucketData : smallDataCgiReplyList) {
+            String response = httpClientService.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, cgiReplyBucketData.getMiniVideoId() + "", "公众号", "自动回复小程序", "位置" + cgiReplyBucketData.getSort(), SMALL_APP_Id);
+            JSONObject jsonObject = JSON.parseObject(response);
+            if (jsonObject.getInteger("code").equals(0)) {
+                SmallPageUrlDetail smallPageUrlDetail = jsonObject.getObject("data", SmallPageUrlDetail.class);
+                cgiReplyBucketData.setPagePathUrlId(smallPageUrlDetail.getId());
+                cgiReplyBucketData.setMiniPagePath(smallPageUrlDetail.getUrl());
+            } else {
+                return null;
+            }
+        }
+        return smallDataCgiReplyList;
+    }
+
+    private List<CgiReplyBucketData> readStrategyOrderSmallData(Set<String> keyedSet) {
+        List<CgiReplyBucketData> result = new ArrayList<>();
+        for (String key : keyedSet) {
+            if ("base".equals(key)) {
+                // base作为人工控制
+                continue;
+            }
+            // 获取最新dt的策略
+            String dtVersion = algGhAutoreplyVideoRankDataMapper.selectLatestDtVersionByStrategyKey(key);
+            // 判断当前的dtVersion是否已经处理过了
+            CgiReplyBucketDataExample cgiReplyBucketDataExample = new CgiReplyBucketDataExample();
+            cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0).andStrategyDtEqualTo(dtVersion).andStrategyEqualTo(key);
+            long count = cgiReplyBucketDataMapper.countByExample(cgiReplyBucketDataExample);
+            if (count != 0) {
+                // 说明已处理过该dtVersion数据
+                continue;
+            }
+            // 获取最新dt数据
+            List<AlgGhAutoreplyVideoRankData> dtVserSionStrategyData = getDtVersionStrategyData(key, dtVersion);
+            result.addAll(dtVserSionStrategyData.stream().map(x -> {
+                CgiReplyBucketData cgiReplyBucketData = new CgiReplyBucketData();
+                cgiReplyBucketData.setStrategy(key);
+                cgiReplyBucketData.setSort(x.getSort());
+                cgiReplyBucketData.setStrategyDt(x.getDtVersion());
+                cgiReplyBucketData.setGhId(x.getGhId());
+                cgiReplyBucketData.setMsgType(1);
+                cgiReplyBucketData.setTitle(x.getTitle());
+                cgiReplyBucketData.setCoverUrl(CDN_URL + x.getCoverUrl());
+                cgiReplyBucketData.setMiniAppId(SMALL_APP_Id);
+                cgiReplyBucketData.setMiniVideoId(x.getVideoId());
+                return cgiReplyBucketData;
+            }).collect(Collectors.toList()));
+        }
+        // 获取最新数据版本
+        return CollectionUtils.isEmpty(result) ? null : result;
+    }
+
+    private List<AlgGhAutoreplyVideoRankData> getDtVersionStrategyData(String key, String dtVersion) {
+        AlgGhAutoreplyVideoRankDataExample algGhAutoreplyVideoRankDataExample = new AlgGhAutoreplyVideoRankDataExample();
+        algGhAutoreplyVideoRankDataExample.createCriteria().andIsDeleteEqualTo(0).andDtVersionEqualTo(dtVersion).andStrategyKeyEqualTo(key);
+        return algGhAutoreplyVideoRankDataMapper.selectByExample(algGhAutoreplyVideoRankDataExample);
+    }
+
+    @Override
+    public Boolean support(ReplyStrategyServiceEnum key) {
+        return ReplyStrategyServiceEnum.BUCKET_STRATEGY_V1.equals(key);
+    }
+}

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

@@ -0,0 +1,28 @@
+package com.tzld.longarticle.recommend.server.web;
+
+import com.tzld.longarticle.recommend.server.common.response.CommonResponse;
+import com.tzld.longarticle.recommend.server.model.cgi.BucketDataParam;
+import com.tzld.longarticle.recommend.server.model.cgi.ReplyBucketData;
+import com.tzld.longarticle.recommend.server.service.cgi.CgiReplyService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/cgi/reply")
+@Slf4j
+public class CgiReplyController {
+
+    @Autowired
+    private CgiReplyService cgiReplyService;
+
+    @PostMapping("/bucketData")
+    public CommonResponse<ReplyBucketData> getBucketData(@RequestBody BucketDataParam bucketDataParam) {
+        ReplyBucketData replyBucketData = cgiReplyService.getRgiReplyData(bucketDataParam);
+        return CommonResponse.success(replyBucketData);
+    }
+
+}

+ 5 - 1
long-article-recommend-service/src/main/resources/application-dev.yml

@@ -15,7 +15,11 @@ spring:
 #        min-idle: 0
   datasource:
     crawler:
-      jdbc-url: jdbc:mysql://rm-bp1159bu17li9hi94.mysql.rds.aliyuncs.com:3306/piaoquan-crawler?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
+#      jdbc-url: jdbc:mysql://rm-bp1159bu17li9hi94.mysql.rds.aliyuncs.com:3306/piaoquan-crawler?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
+#      username: crawler
+#      password: crawler123456@
+      # 测试库
+      jdbc-url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/piaoquan-crawler?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false
       username: crawler
       password: crawler123456@
       driver-class-name: com.mysql.jdbc.Driver

+ 41 - 0
long-article-recommend-service/src/main/resources/generatorCgiConfig.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration
+        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
+        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+
+<generatorConfiguration>
+    <context id="simple" targetRuntime="MyBatis3">
+        <commentGenerator>
+            <property name="suppressAllComments" value="true"/>
+        </commentGenerator>
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
+                        connectionURL="jdbc:mysql://rm-bp1159bu17li9hi94.mysql.rds.aliyuncs.com:3306/piaoquan-crawler?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false"
+                        userId="crawler"
+                        password="crawler123456@">
+        </jdbcConnection>
+
+        <javaTypeResolver >
+            <property name="forceBigDecimals" value="false" />
+        </javaTypeResolver>
+
+        <javaModelGenerator targetPackage="com.tzld.longarticle.recommend.server.repository.model" targetProject="D:\taizi\code\long-article-recommend\long-article-recommend-service\src\main\java">
+            <property name="enableSubPackages" value="true" />
+            <property name="trimStrings" value="true" />
+        </javaModelGenerator>
+
+        <sqlMapGenerator targetPackage="crawler"  targetProject="D:\taizi\code\long-article-recommend\long-article-recommend-service\src\main\resources\mapper">
+            <property name="enableSubPackages" value="true" />
+        </sqlMapGenerator>
+
+        <javaClientGenerator type="XMLMAPPER"
+                             targetPackage="com.tzld.longarticle.recommend.server.repository.mapper.crawler"
+                             targetProject="D:\taizi\code\long-article-recommend\long-article-recommend-service\src\main\java">
+            <property name="enableSubPackages" value="true" />
+        </javaClientGenerator>
+
+        <table schema="mybatis" tableName="alg_gh_autoreply_video_rank_data" >
+            <generatedKey column="id" sqlStatement="mysql" identity="true" />
+        </table>
+
+    </context>
+</generatorConfiguration>

+ 315 - 0
long-article-recommend-service/src/main/resources/mapper/crawler/AlgGhAutoreplyVideoRankDataMapper.xml

@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzld.longarticle.recommend.server.repository.mapper.crawler.AlgGhAutoreplyVideoRankDataMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankData">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="strategy_key" jdbcType="VARCHAR" property="strategyKey" />
+    <result column="dt_version" jdbcType="VARCHAR" property="dtVersion" />
+    <result column="gh_id" jdbcType="VARCHAR" property="ghId" />
+    <result column="sort" jdbcType="INTEGER" property="sort" />
+    <result column="video_id" jdbcType="BIGINT" property="videoId" />
+    <result column="title" jdbcType="VARCHAR" property="title" />
+    <result column="cover_url" jdbcType="VARCHAR" property="coverUrl" />
+    <result column="is_delete" jdbcType="INTEGER" property="isDelete" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, strategy_key, dt_version, gh_id, sort, video_id, title, cover_url, is_delete, 
+    create_time, update_time
+  </sql>
+  <select id="selectByExample" parameterType="com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankDataExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from alg_gh_autoreply_video_rank_data
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from alg_gh_autoreply_video_rank_data
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from alg_gh_autoreply_video_rank_data
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankDataExample">
+    delete from alg_gh_autoreply_video_rank_data
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankData">
+    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
+      SELECT LAST_INSERT_ID()
+    </selectKey>
+    insert into alg_gh_autoreply_video_rank_data (strategy_key, dt_version, gh_id, 
+      sort, video_id, title, 
+      cover_url, is_delete, create_time, 
+      update_time)
+    values (#{strategyKey,jdbcType=VARCHAR}, #{dtVersion,jdbcType=VARCHAR}, #{ghId,jdbcType=VARCHAR}, 
+      #{sort,jdbcType=INTEGER}, #{videoId,jdbcType=BIGINT}, #{title,jdbcType=VARCHAR}, 
+      #{coverUrl,jdbcType=VARCHAR}, #{isDelete,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{updateTime,jdbcType=TIMESTAMP})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankData">
+    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
+      SELECT LAST_INSERT_ID()
+    </selectKey>
+    insert into alg_gh_autoreply_video_rank_data
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="strategyKey != null">
+        strategy_key,
+      </if>
+      <if test="dtVersion != null">
+        dt_version,
+      </if>
+      <if test="ghId != null">
+        gh_id,
+      </if>
+      <if test="sort != null">
+        sort,
+      </if>
+      <if test="videoId != null">
+        video_id,
+      </if>
+      <if test="title != null">
+        title,
+      </if>
+      <if test="coverUrl != null">
+        cover_url,
+      </if>
+      <if test="isDelete != null">
+        is_delete,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="strategyKey != null">
+        #{strategyKey,jdbcType=VARCHAR},
+      </if>
+      <if test="dtVersion != null">
+        #{dtVersion,jdbcType=VARCHAR},
+      </if>
+      <if test="ghId != null">
+        #{ghId,jdbcType=VARCHAR},
+      </if>
+      <if test="sort != null">
+        #{sort,jdbcType=INTEGER},
+      </if>
+      <if test="videoId != null">
+        #{videoId,jdbcType=BIGINT},
+      </if>
+      <if test="title != null">
+        #{title,jdbcType=VARCHAR},
+      </if>
+      <if test="coverUrl != null">
+        #{coverUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null">
+        #{isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankDataExample" resultType="java.lang.Long">
+    select count(*) from alg_gh_autoreply_video_rank_data
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update alg_gh_autoreply_video_rank_data
+    <set>
+      <if test="row.id != null">
+        id = #{row.id,jdbcType=BIGINT},
+      </if>
+      <if test="row.strategyKey != null">
+        strategy_key = #{row.strategyKey,jdbcType=VARCHAR},
+      </if>
+      <if test="row.dtVersion != null">
+        dt_version = #{row.dtVersion,jdbcType=VARCHAR},
+      </if>
+      <if test="row.ghId != null">
+        gh_id = #{row.ghId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.sort != null">
+        sort = #{row.sort,jdbcType=INTEGER},
+      </if>
+      <if test="row.videoId != null">
+        video_id = #{row.videoId,jdbcType=BIGINT},
+      </if>
+      <if test="row.title != null">
+        title = #{row.title,jdbcType=VARCHAR},
+      </if>
+      <if test="row.coverUrl != null">
+        cover_url = #{row.coverUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="row.isDelete != null">
+        is_delete = #{row.isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="row.createTime != null">
+        create_time = #{row.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="row.updateTime != null">
+        update_time = #{row.updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update alg_gh_autoreply_video_rank_data
+    set id = #{row.id,jdbcType=BIGINT},
+      strategy_key = #{row.strategyKey,jdbcType=VARCHAR},
+      dt_version = #{row.dtVersion,jdbcType=VARCHAR},
+      gh_id = #{row.ghId,jdbcType=VARCHAR},
+      sort = #{row.sort,jdbcType=INTEGER},
+      video_id = #{row.videoId,jdbcType=BIGINT},
+      title = #{row.title,jdbcType=VARCHAR},
+      cover_url = #{row.coverUrl,jdbcType=VARCHAR},
+      is_delete = #{row.isDelete,jdbcType=INTEGER},
+      create_time = #{row.createTime,jdbcType=TIMESTAMP},
+      update_time = #{row.updateTime,jdbcType=TIMESTAMP}
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankData">
+    update alg_gh_autoreply_video_rank_data
+    <set>
+      <if test="strategyKey != null">
+        strategy_key = #{strategyKey,jdbcType=VARCHAR},
+      </if>
+      <if test="dtVersion != null">
+        dt_version = #{dtVersion,jdbcType=VARCHAR},
+      </if>
+      <if test="ghId != null">
+        gh_id = #{ghId,jdbcType=VARCHAR},
+      </if>
+      <if test="sort != null">
+        sort = #{sort,jdbcType=INTEGER},
+      </if>
+      <if test="videoId != null">
+        video_id = #{videoId,jdbcType=BIGINT},
+      </if>
+      <if test="title != null">
+        title = #{title,jdbcType=VARCHAR},
+      </if>
+      <if test="coverUrl != null">
+        cover_url = #{coverUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null">
+        is_delete = #{isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.longarticle.recommend.server.repository.model.AlgGhAutoreplyVideoRankData">
+    update alg_gh_autoreply_video_rank_data
+    set strategy_key = #{strategyKey,jdbcType=VARCHAR},
+      dt_version = #{dtVersion,jdbcType=VARCHAR},
+      gh_id = #{ghId,jdbcType=VARCHAR},
+      sort = #{sort,jdbcType=INTEGER},
+      video_id = #{videoId,jdbcType=BIGINT},
+      title = #{title,jdbcType=VARCHAR},
+      cover_url = #{coverUrl,jdbcType=VARCHAR},
+      is_delete = #{isDelete,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <select id="selectLatestDtVersionByStrategyKey" resultType="string" parameterType="string">
+    SELECT dt_version
+    FROM alg_gh_autoreply_video_rank_data
+    WHERE strategy_key = #{strategyKey}
+    GROUP BY dt_version
+    ORDER BY dt_version DESC
+      LIMIT 1
+  </select>
+</mapper>

+ 401 - 0
long-article-recommend-service/src/main/resources/mapper/crawler/CgiReplyBucketDataMapper.xml

@@ -0,0 +1,401 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tzld.longarticle.recommend.server.repository.mapper.crawler.CgiReplyBucketDataMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketData">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="strategy" jdbcType="VARCHAR" property="strategy" />
+    <result column="sort" jdbcType="INTEGER" property="sort" />
+    <result column="strategy_dt" jdbcType="VARCHAR" property="strategyDt" />
+    <result column="gh_id" jdbcType="VARCHAR" property="ghId" />
+    <result column="msg_type" jdbcType="INTEGER" property="msgType" />
+    <result column="title" jdbcType="VARCHAR" property="title" />
+    <result column="cover_url" jdbcType="VARCHAR" property="coverUrl" />
+    <result column="mini_app_id" jdbcType="VARCHAR" property="miniAppId" />
+    <result column="mini_page_path" jdbcType="VARCHAR" property="miniPagePath" />
+    <result column="mini_video_id" jdbcType="BIGINT" property="miniVideoId" />
+    <result column="page_path_url_id" jdbcType="BIGINT" property="pagePathUrlId" />
+    <result column="news_publish_content_id" jdbcType="VARCHAR" property="newsPublishContentId" />
+    <result column="plan_id" jdbcType="VARCHAR" property="planId" />
+    <result column="is_delete" jdbcType="INTEGER" property="isDelete" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    id, strategy, sort, strategy_dt, gh_id, msg_type, title, cover_url, mini_app_id,
+    mini_page_path, mini_video_id, page_path_url_id, news_publish_content_id, plan_id,
+    is_delete, create_time, update_time
+  </sql>
+  <select id="selectByExample" parameterType="com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketDataExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from cgi_reply_bucket_data
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List" />
+    from cgi_reply_bucket_data
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from cgi_reply_bucket_data
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketDataExample">
+    delete from cgi_reply_bucket_data
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketData">
+    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
+      SELECT LAST_INSERT_ID()
+    </selectKey>
+    insert into cgi_reply_bucket_data (strategy, sort, strategy_dt,
+      gh_id, msg_type, title,
+      cover_url, mini_app_id, mini_page_path,
+      mini_video_id, page_path_url_id, news_publish_content_id,
+      plan_id, is_delete, create_time,
+      update_time)
+    values (#{strategy,jdbcType=VARCHAR}, #{sort,jdbcType=INTEGER}, #{strategyDt,jdbcType=VARCHAR},
+      #{ghId,jdbcType=VARCHAR}, #{msgType,jdbcType=INTEGER}, #{title,jdbcType=VARCHAR},
+      #{coverUrl,jdbcType=VARCHAR}, #{miniAppId,jdbcType=VARCHAR}, #{miniPagePath,jdbcType=VARCHAR},
+      #{miniVideoId,jdbcType=BIGINT}, #{pagePathUrlId,jdbcType=BIGINT}, #{newsPublishContentId,jdbcType=VARCHAR},
+      #{planId,jdbcType=VARCHAR}, #{isDelete,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP},
+      #{updateTime,jdbcType=TIMESTAMP})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketData">
+    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
+      SELECT LAST_INSERT_ID()
+    </selectKey>
+    insert into cgi_reply_bucket_data
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="strategy != null">
+        strategy,
+      </if>
+      <if test="sort != null">
+        sort,
+      </if>
+      <if test="strategyDt != null">
+        strategy_dt,
+      </if>
+      <if test="ghId != null">
+        gh_id,
+      </if>
+      <if test="msgType != null">
+        msg_type,
+      </if>
+      <if test="title != null">
+        title,
+      </if>
+      <if test="coverUrl != null">
+        cover_url,
+      </if>
+      <if test="miniAppId != null">
+        mini_app_id,
+      </if>
+      <if test="miniPagePath != null">
+        mini_page_path,
+      </if>
+      <if test="miniVideoId != null">
+        mini_video_id,
+      </if>
+      <if test="pagePathUrlId != null">
+        page_path_url_id,
+      </if>
+      <if test="newsPublishContentId != null">
+        news_publish_content_id,
+      </if>
+      <if test="planId != null">
+        plan_id,
+      </if>
+      <if test="isDelete != null">
+        is_delete,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="strategy != null">
+        #{strategy,jdbcType=VARCHAR},
+      </if>
+      <if test="sort != null">
+        #{sort,jdbcType=INTEGER},
+      </if>
+      <if test="strategyDt != null">
+        #{strategyDt,jdbcType=VARCHAR},
+      </if>
+      <if test="ghId != null">
+        #{ghId,jdbcType=VARCHAR},
+      </if>
+      <if test="msgType != null">
+        #{msgType,jdbcType=INTEGER},
+      </if>
+      <if test="title != null">
+        #{title,jdbcType=VARCHAR},
+      </if>
+      <if test="coverUrl != null">
+        #{coverUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="miniAppId != null">
+        #{miniAppId,jdbcType=VARCHAR},
+      </if>
+      <if test="miniPagePath != null">
+        #{miniPagePath,jdbcType=VARCHAR},
+      </if>
+      <if test="miniVideoId != null">
+        #{miniVideoId,jdbcType=BIGINT},
+      </if>
+      <if test="pagePathUrlId != null">
+        #{pagePathUrlId,jdbcType=BIGINT},
+      </if>
+      <if test="newsPublishContentId != null">
+        #{newsPublishContentId,jdbcType=VARCHAR},
+      </if>
+      <if test="planId != null">
+        #{planId,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null">
+        #{isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketDataExample" resultType="java.lang.Long">
+    select count(*) from cgi_reply_bucket_data
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update cgi_reply_bucket_data
+    <set>
+      <if test="row.id != null">
+        id = #{row.id,jdbcType=BIGINT},
+      </if>
+      <if test="row.strategy != null">
+        strategy = #{row.strategy,jdbcType=VARCHAR},
+      </if>
+      <if test="row.sort != null">
+        sort = #{row.sort,jdbcType=INTEGER},
+      </if>
+      <if test="row.strategyDt != null">
+        strategy_dt = #{row.strategyDt,jdbcType=VARCHAR},
+      </if>
+      <if test="row.ghId != null">
+        gh_id = #{row.ghId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.msgType != null">
+        msg_type = #{row.msgType,jdbcType=INTEGER},
+      </if>
+      <if test="row.title != null">
+        title = #{row.title,jdbcType=VARCHAR},
+      </if>
+      <if test="row.coverUrl != null">
+        cover_url = #{row.coverUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="row.miniAppId != null">
+        mini_app_id = #{row.miniAppId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.miniPagePath != null">
+        mini_page_path = #{row.miniPagePath,jdbcType=VARCHAR},
+      </if>
+      <if test="row.miniVideoId != null">
+        mini_video_id = #{row.miniVideoId,jdbcType=BIGINT},
+      </if>
+      <if test="row.pagePathUrlId != null">
+        page_path_url_id = #{row.pagePathUrlId,jdbcType=BIGINT},
+      </if>
+      <if test="row.newsPublishContentId != null">
+        news_publish_content_id = #{row.newsPublishContentId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.planId != null">
+        plan_id = #{row.planId,jdbcType=VARCHAR},
+      </if>
+      <if test="row.isDelete != null">
+        is_delete = #{row.isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="row.createTime != null">
+        create_time = #{row.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="row.updateTime != null">
+        update_time = #{row.updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update cgi_reply_bucket_data
+    set id = #{row.id,jdbcType=BIGINT},
+      strategy = #{row.strategy,jdbcType=VARCHAR},
+      sort = #{row.sort,jdbcType=INTEGER},
+      strategy_dt = #{row.strategyDt,jdbcType=VARCHAR},
+      gh_id = #{row.ghId,jdbcType=VARCHAR},
+      msg_type = #{row.msgType,jdbcType=INTEGER},
+      title = #{row.title,jdbcType=VARCHAR},
+      cover_url = #{row.coverUrl,jdbcType=VARCHAR},
+      mini_app_id = #{row.miniAppId,jdbcType=VARCHAR},
+      mini_page_path = #{row.miniPagePath,jdbcType=VARCHAR},
+      mini_video_id = #{row.miniVideoId,jdbcType=BIGINT},
+      page_path_url_id = #{row.pagePathUrlId,jdbcType=BIGINT},
+      news_publish_content_id = #{row.newsPublishContentId,jdbcType=VARCHAR},
+      plan_id = #{row.planId,jdbcType=VARCHAR},
+      is_delete = #{row.isDelete,jdbcType=INTEGER},
+      create_time = #{row.createTime,jdbcType=TIMESTAMP},
+      update_time = #{row.updateTime,jdbcType=TIMESTAMP}
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketData">
+    update cgi_reply_bucket_data
+    <set>
+      <if test="strategy != null">
+        strategy = #{strategy,jdbcType=VARCHAR},
+      </if>
+      <if test="sort != null">
+        sort = #{sort,jdbcType=INTEGER},
+      </if>
+      <if test="strategyDt != null">
+        strategy_dt = #{strategyDt,jdbcType=VARCHAR},
+      </if>
+      <if test="ghId != null">
+        gh_id = #{ghId,jdbcType=VARCHAR},
+      </if>
+      <if test="msgType != null">
+        msg_type = #{msgType,jdbcType=INTEGER},
+      </if>
+      <if test="title != null">
+        title = #{title,jdbcType=VARCHAR},
+      </if>
+      <if test="coverUrl != null">
+        cover_url = #{coverUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="miniAppId != null">
+        mini_app_id = #{miniAppId,jdbcType=VARCHAR},
+      </if>
+      <if test="miniPagePath != null">
+        mini_page_path = #{miniPagePath,jdbcType=VARCHAR},
+      </if>
+      <if test="miniVideoId != null">
+        mini_video_id = #{miniVideoId,jdbcType=BIGINT},
+      </if>
+      <if test="pagePathUrlId != null">
+        page_path_url_id = #{pagePathUrlId,jdbcType=BIGINT},
+      </if>
+      <if test="newsPublishContentId != null">
+        news_publish_content_id = #{newsPublishContentId,jdbcType=VARCHAR},
+      </if>
+      <if test="planId != null">
+        plan_id = #{planId,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null">
+        is_delete = #{isDelete,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.longarticle.recommend.server.repository.model.CgiReplyBucketData">
+    update cgi_reply_bucket_data
+    set strategy = #{strategy,jdbcType=VARCHAR},
+      sort = #{sort,jdbcType=INTEGER},
+      strategy_dt = #{strategyDt,jdbcType=VARCHAR},
+      gh_id = #{ghId,jdbcType=VARCHAR},
+      msg_type = #{msgType,jdbcType=INTEGER},
+      title = #{title,jdbcType=VARCHAR},
+      cover_url = #{coverUrl,jdbcType=VARCHAR},
+      mini_app_id = #{miniAppId,jdbcType=VARCHAR},
+      mini_page_path = #{miniPagePath,jdbcType=VARCHAR},
+      mini_video_id = #{miniVideoId,jdbcType=BIGINT},
+      page_path_url_id = #{pagePathUrlId,jdbcType=BIGINT},
+      news_publish_content_id = #{newsPublishContentId,jdbcType=VARCHAR},
+      plan_id = #{planId,jdbcType=VARCHAR},
+      is_delete = #{isDelete,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>