瀏覽代碼

Merge branch 'dev-xym-add-group' of Server/long-article-manage into master

xueyiming 1 月之前
父節點
當前提交
0ceac8eb4b
共有 25 個文件被更改,包括 2967 次插入24 次删除
  1. 47 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/config/CrawlerDataSourceConfig.java
  2. 31 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/dao/generator/CrawlerMybatisGeneratorMain.java
  3. 32 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/dao/mapper/crawler/ArticleUseGroupMapper.java
  4. 36 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/dao/mapper/longarticle/GroupSendResultMapper.java
  5. 68 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/crawler/ArticleUseGroup.java
  6. 531 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/crawler/ArticleUseGroupExample.java
  7. 158 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/GroupSendResult.java
  8. 992 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/GroupSendResultExample.java
  9. 22 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/PublishContent.java
  10. 120 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/PublishContentExample.java
  11. 18 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/vo/CreateBatchGroupItemParam.java
  12. 22 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/vo/CreateBatchGroupPushTaskParam.java
  13. 1 1
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/local/impl/AccountServiceImpl.java
  14. 122 11
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/local/impl/CoreServiceImpl.java
  15. 9 3
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/local/impl/PublicContentServiceImpl.java
  16. 3 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/remote/AigcService.java
  17. 16 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/remote/impl/AigcServiceImpl.java
  18. 4 0
      long-article-server/src/main/resources/application-prod.properties
  19. 5 0
      long-article-server/src/main/resources/application-test.properties
  20. 11 1
      long-article-server/src/main/resources/application.properties
  21. 60 0
      long-article-server/src/main/resources/crawler-mybatis-generator-config.xml
  22. 219 0
      long-article-server/src/main/resources/mapper/crawler/ArticleUseGroupMapper.xml
  23. 400 0
      long-article-server/src/main/resources/mapper/longarticle/GroupSendResultMapper.xml
  24. 37 5
      long-article-server/src/main/resources/mapper/longarticle/PublishContentMapper.xml
  25. 3 3
      long-article-server/src/main/resources/mybatis-generator-config.xml

+ 47 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/config/CrawlerDataSourceConfig.java

@@ -0,0 +1,47 @@
+package com.tzld.piaoquan.longarticle.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.PlatformTransactionManager;
+
+import javax.sql.DataSource;
+
+@MapperScan(basePackages = CrawlerDataSourceConfig.CRAWLER_PACKAGE_MASTER, sqlSessionFactoryRef = "crawlerSqlSessionFactory")
+@Configuration
+public class CrawlerDataSourceConfig {
+
+
+
+    // 数据源
+    static final String CRAWLER_PACKAGE_MASTER = "com.tzld.piaoquan.longarticle.dao.mapper.crawler";
+    static final String CRAWLER_MAPPER_LOCATION_MASTER = "classpath:mapper/crawler/*.xml";
+
+    @Bean(name = "crawlerDataSource")
+    @ConfigurationProperties("crawler.datasource")
+    public DataSource getCrawlerDataSource(){
+        return new DruidDataSource();
+    }
+
+    @Bean(name = "crawlerTransactionManager")
+    public PlatformTransactionManager aigcTransactionManager(@Qualifier("crawlerDataSource") DataSource dataSource) {
+        return new DataSourceTransactionManager(dataSource);
+    }
+
+    @Bean(name = "crawlerSqlSessionFactory")
+    public SqlSessionFactory crawlerSqlSessionFactory(@Qualifier("crawlerDataSource") DataSource dataSource) throws Exception {
+        final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+        sessionFactoryBean.setDataSource(dataSource);
+        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(CrawlerDataSourceConfig.CRAWLER_MAPPER_LOCATION_MASTER));
+        return sessionFactoryBean.getObject();
+    }
+
+
+}

+ 31 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/dao/generator/CrawlerMybatisGeneratorMain.java

@@ -0,0 +1,31 @@
+package com.tzld.piaoquan.longarticle.dao.generator;
+
+import org.mybatis.generator.api.MyBatisGenerator;
+import org.mybatis.generator.config.Configuration;
+import org.mybatis.generator.config.xml.ConfigurationParser;
+import org.mybatis.generator.exception.InvalidConfigurationException;
+import org.mybatis.generator.exception.XMLParserException;
+import org.mybatis.generator.internal.DefaultShellCallback;
+
+import java.io.File;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class CrawlerMybatisGeneratorMain {
+
+    public static void main(String[] args)
+            throws SQLException, IOException, InterruptedException, InvalidConfigurationException, XMLParserException {
+        List<String> warnings = new ArrayList<>();
+
+        File configFile = new File(CrawlerMybatisGeneratorMain.class.getResource("/crawler-mybatis-generator-config.xml").getFile());
+        ConfigurationParser cp = new ConfigurationParser(warnings);
+        Configuration config = cp.parseConfiguration(configFile);
+        DefaultShellCallback callback = new DefaultShellCallback(true);
+        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
+        myBatisGenerator.generate(null);
+        System.out.println("genreate finish");
+    }
+}

+ 32 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/dao/mapper/crawler/ArticleUseGroupMapper.java

@@ -0,0 +1,32 @@
+package com.tzld.piaoquan.longarticle.dao.mapper.crawler;
+
+import com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroup;
+import com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroupExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface ArticleUseGroupMapper {
+    long countByExample(ArticleUseGroupExample example);
+
+    int deleteByExample(ArticleUseGroupExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(ArticleUseGroup record);
+
+    int insertSelective(ArticleUseGroup record);
+
+    List<ArticleUseGroup> selectByExample(ArticleUseGroupExample example);
+
+    ArticleUseGroup selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") ArticleUseGroup record, @Param("example") ArticleUseGroupExample example);
+
+    int updateByExample(@Param("record") ArticleUseGroup record, @Param("example") ArticleUseGroupExample example);
+
+    int updateByPrimaryKeySelective(ArticleUseGroup record);
+
+    int updateByPrimaryKey(ArticleUseGroup record);
+
+    List<Integer> selectUserGroupId(String ghId);
+}

+ 36 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/dao/mapper/longarticle/GroupSendResultMapper.java

@@ -0,0 +1,36 @@
+package com.tzld.piaoquan.longarticle.dao.mapper.longarticle;
+
+import com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult;
+import com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResultExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface GroupSendResultMapper {
+    long countByExample(GroupSendResultExample example);
+
+    int deleteByExample(GroupSendResultExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(GroupSendResult record);
+
+    int insertSelective(GroupSendResult record);
+
+    List<GroupSendResult> selectByExampleWithBLOBs(GroupSendResultExample example);
+
+    List<GroupSendResult> selectByExample(GroupSendResultExample example);
+
+    GroupSendResult selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") GroupSendResult record, @Param("example") GroupSendResultExample example);
+
+    int updateByExampleWithBLOBs(@Param("record") GroupSendResult record, @Param("example") GroupSendResultExample example);
+
+    int updateByExample(@Param("record") GroupSendResult record, @Param("example") GroupSendResultExample example);
+
+    int updateByPrimaryKeySelective(GroupSendResult record);
+
+    int updateByPrimaryKeyWithBLOBs(GroupSendResult record);
+
+    int updateByPrimaryKey(GroupSendResult record);
+}

+ 68 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/crawler/ArticleUseGroup.java

@@ -0,0 +1,68 @@
+package com.tzld.piaoquan.longarticle.model.po.crawler;
+
+public class ArticleUseGroup {
+    private Long id;
+
+    private String gzhId;
+
+    private Integer userGroupId;
+
+    private String openId;
+
+    private Integer isDelete;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getGzhId() {
+        return gzhId;
+    }
+
+    public void setGzhId(String gzhId) {
+        this.gzhId = gzhId;
+    }
+
+    public Integer getUserGroupId() {
+        return userGroupId;
+    }
+
+    public void setUserGroupId(Integer userGroupId) {
+        this.userGroupId = userGroupId;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", gzhId=").append(gzhId);
+        sb.append(", userGroupId=").append(userGroupId);
+        sb.append(", openId=").append(openId);
+        sb.append(", isDelete=").append(isDelete);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 531 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/crawler/ArticleUseGroupExample.java

@@ -0,0 +1,531 @@
+package com.tzld.piaoquan.longarticle.model.po.crawler;
+
+import com.tzld.piaoquan.longarticle.utils.page.Page;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ArticleUseGroupExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public ArticleUseGroupExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    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;
+    }
+
+    public void setPage(Page page) {
+        this.page=page;
+    }
+
+    public Page getPage() {
+        return page;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        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 andGzhIdIsNull() {
+            addCriterion("gzh_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdIsNotNull() {
+            addCriterion("gzh_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdEqualTo(String value) {
+            addCriterion("gzh_id =", value, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdNotEqualTo(String value) {
+            addCriterion("gzh_id <>", value, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdGreaterThan(String value) {
+            addCriterion("gzh_id >", value, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdGreaterThanOrEqualTo(String value) {
+            addCriterion("gzh_id >=", value, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdLessThan(String value) {
+            addCriterion("gzh_id <", value, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdLessThanOrEqualTo(String value) {
+            addCriterion("gzh_id <=", value, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdLike(String value) {
+            addCriterion("gzh_id like", value, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdNotLike(String value) {
+            addCriterion("gzh_id not like", value, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdIn(List<String> values) {
+            addCriterion("gzh_id in", values, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdNotIn(List<String> values) {
+            addCriterion("gzh_id not in", values, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdBetween(String value1, String value2) {
+            addCriterion("gzh_id between", value1, value2, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGzhIdNotBetween(String value1, String value2) {
+            addCriterion("gzh_id not between", value1, value2, "gzhId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdIsNull() {
+            addCriterion("user_group_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdIsNotNull() {
+            addCriterion("user_group_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdEqualTo(Integer value) {
+            addCriterion("user_group_id =", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdNotEqualTo(Integer value) {
+            addCriterion("user_group_id <>", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdGreaterThan(Integer value) {
+            addCriterion("user_group_id >", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("user_group_id >=", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdLessThan(Integer value) {
+            addCriterion("user_group_id <", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdLessThanOrEqualTo(Integer value) {
+            addCriterion("user_group_id <=", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdIn(List<Integer> values) {
+            addCriterion("user_group_id in", values, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdNotIn(List<Integer> values) {
+            addCriterion("user_group_id not in", values, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdBetween(Integer value1, Integer value2) {
+            addCriterion("user_group_id between", value1, value2, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("user_group_id not between", value1, value2, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdIsNull() {
+            addCriterion("open_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdIsNotNull() {
+            addCriterion("open_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdEqualTo(String value) {
+            addCriterion("open_id =", value, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdNotEqualTo(String value) {
+            addCriterion("open_id <>", value, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdGreaterThan(String value) {
+            addCriterion("open_id >", value, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdGreaterThanOrEqualTo(String value) {
+            addCriterion("open_id >=", value, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdLessThan(String value) {
+            addCriterion("open_id <", value, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdLessThanOrEqualTo(String value) {
+            addCriterion("open_id <=", value, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdLike(String value) {
+            addCriterion("open_id like", value, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdNotLike(String value) {
+            addCriterion("open_id not like", value, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdIn(List<String> values) {
+            addCriterion("open_id in", values, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdNotIn(List<String> values) {
+            addCriterion("open_id not in", values, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdBetween(String value1, String value2) {
+            addCriterion("open_id between", value1, value2, "openId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpenIdNotBetween(String value1, String value2) {
+            addCriterion("open_id not between", value1, value2, "openId");
+            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 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);
+        }
+    }
+}

+ 158 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/GroupSendResult.java

@@ -0,0 +1,158 @@
+package com.tzld.piaoquan.longarticle.model.po.longarticle;
+
+import java.util.Date;
+
+public class GroupSendResult {
+    private Long id;
+
+    private String accountName;
+
+    private String ghId;
+
+    private String publishDate;
+
+    private Integer userGroupId;
+
+    private String contentId;
+
+    private String pushId;
+
+    private Integer status;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    private Integer recycleStatus;
+
+    private String traceId;
+
+    private String url;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    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 getPublishDate() {
+        return publishDate;
+    }
+
+    public void setPublishDate(String publishDate) {
+        this.publishDate = publishDate;
+    }
+
+    public Integer getUserGroupId() {
+        return userGroupId;
+    }
+
+    public void setUserGroupId(Integer userGroupId) {
+        this.userGroupId = userGroupId;
+    }
+
+    public String getContentId() {
+        return contentId;
+    }
+
+    public void setContentId(String contentId) {
+        this.contentId = contentId;
+    }
+
+    public String getPushId() {
+        return pushId;
+    }
+
+    public void setPushId(String pushId) {
+        this.pushId = pushId;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    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;
+    }
+
+    public Integer getRecycleStatus() {
+        return recycleStatus;
+    }
+
+    public void setRecycleStatus(Integer recycleStatus) {
+        this.recycleStatus = recycleStatus;
+    }
+
+    public String getTraceId() {
+        return traceId;
+    }
+
+    public void setTraceId(String traceId) {
+        this.traceId = traceId;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", accountName=").append(accountName);
+        sb.append(", ghId=").append(ghId);
+        sb.append(", publishDate=").append(publishDate);
+        sb.append(", userGroupId=").append(userGroupId);
+        sb.append(", contentId=").append(contentId);
+        sb.append(", pushId=").append(pushId);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append(", recycleStatus=").append(recycleStatus);
+        sb.append(", traceId=").append(traceId);
+        sb.append(", url=").append(url);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 992 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/GroupSendResultExample.java

@@ -0,0 +1,992 @@
+package com.tzld.piaoquan.longarticle.model.po.longarticle;
+
+import com.tzld.piaoquan.longarticle.utils.page.Page;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class GroupSendResultExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public GroupSendResultExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    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;
+    }
+
+    public void setPage(Page page) {
+        this.page=page;
+    }
+
+    public Page getPage() {
+        return page;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        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 andAccountNameIsNull() {
+            addCriterion("account_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameIsNotNull() {
+            addCriterion("account_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameEqualTo(String value) {
+            addCriterion("account_name =", value, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameNotEqualTo(String value) {
+            addCriterion("account_name <>", value, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameGreaterThan(String value) {
+            addCriterion("account_name >", value, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameGreaterThanOrEqualTo(String value) {
+            addCriterion("account_name >=", value, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameLessThan(String value) {
+            addCriterion("account_name <", value, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameLessThanOrEqualTo(String value) {
+            addCriterion("account_name <=", value, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameLike(String value) {
+            addCriterion("account_name like", value, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameNotLike(String value) {
+            addCriterion("account_name not like", value, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameIn(List<String> values) {
+            addCriterion("account_name in", values, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameNotIn(List<String> values) {
+            addCriterion("account_name not in", values, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameBetween(String value1, String value2) {
+            addCriterion("account_name between", value1, value2, "accountName");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNameNotBetween(String value1, String value2) {
+            addCriterion("account_name not between", value1, value2, "accountName");
+            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 andPublishDateIsNull() {
+            addCriterion("publish_date is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateIsNotNull() {
+            addCriterion("publish_date is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateEqualTo(String value) {
+            addCriterion("publish_date =", value, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateNotEqualTo(String value) {
+            addCriterion("publish_date <>", value, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateGreaterThan(String value) {
+            addCriterion("publish_date >", value, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateGreaterThanOrEqualTo(String value) {
+            addCriterion("publish_date >=", value, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateLessThan(String value) {
+            addCriterion("publish_date <", value, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateLessThanOrEqualTo(String value) {
+            addCriterion("publish_date <=", value, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateLike(String value) {
+            addCriterion("publish_date like", value, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateNotLike(String value) {
+            addCriterion("publish_date not like", value, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateIn(List<String> values) {
+            addCriterion("publish_date in", values, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateNotIn(List<String> values) {
+            addCriterion("publish_date not in", values, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateBetween(String value1, String value2) {
+            addCriterion("publish_date between", value1, value2, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishDateNotBetween(String value1, String value2) {
+            addCriterion("publish_date not between", value1, value2, "publishDate");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdIsNull() {
+            addCriterion("user_group_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdIsNotNull() {
+            addCriterion("user_group_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdEqualTo(Integer value) {
+            addCriterion("user_group_id =", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdNotEqualTo(Integer value) {
+            addCriterion("user_group_id <>", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdGreaterThan(Integer value) {
+            addCriterion("user_group_id >", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("user_group_id >=", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdLessThan(Integer value) {
+            addCriterion("user_group_id <", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdLessThanOrEqualTo(Integer value) {
+            addCriterion("user_group_id <=", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdIn(List<Integer> values) {
+            addCriterion("user_group_id in", values, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdNotIn(List<Integer> values) {
+            addCriterion("user_group_id not in", values, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdBetween(Integer value1, Integer value2) {
+            addCriterion("user_group_id between", value1, value2, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("user_group_id not between", value1, value2, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdIsNull() {
+            addCriterion("content_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdIsNotNull() {
+            addCriterion("content_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdEqualTo(String value) {
+            addCriterion("content_id =", value, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdNotEqualTo(String value) {
+            addCriterion("content_id <>", value, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdGreaterThan(String value) {
+            addCriterion("content_id >", value, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdGreaterThanOrEqualTo(String value) {
+            addCriterion("content_id >=", value, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdLessThan(String value) {
+            addCriterion("content_id <", value, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdLessThanOrEqualTo(String value) {
+            addCriterion("content_id <=", value, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdLike(String value) {
+            addCriterion("content_id like", value, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdNotLike(String value) {
+            addCriterion("content_id not like", value, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdIn(List<String> values) {
+            addCriterion("content_id in", values, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdNotIn(List<String> values) {
+            addCriterion("content_id not in", values, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdBetween(String value1, String value2) {
+            addCriterion("content_id between", value1, value2, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andContentIdNotBetween(String value1, String value2) {
+            addCriterion("content_id not between", value1, value2, "contentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdIsNull() {
+            addCriterion("push_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdIsNotNull() {
+            addCriterion("push_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdEqualTo(String value) {
+            addCriterion("push_id =", value, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdNotEqualTo(String value) {
+            addCriterion("push_id <>", value, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdGreaterThan(String value) {
+            addCriterion("push_id >", value, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdGreaterThanOrEqualTo(String value) {
+            addCriterion("push_id >=", value, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdLessThan(String value) {
+            addCriterion("push_id <", value, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdLessThanOrEqualTo(String value) {
+            addCriterion("push_id <=", value, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdLike(String value) {
+            addCriterion("push_id like", value, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdNotLike(String value) {
+            addCriterion("push_id not like", value, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdIn(List<String> values) {
+            addCriterion("push_id in", values, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdNotIn(List<String> values) {
+            addCriterion("push_id not in", values, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdBetween(String value1, String value2) {
+            addCriterion("push_id between", value1, value2, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andPushIdNotBetween(String value1, String value2) {
+            addCriterion("push_id not between", value1, value2, "pushId");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("`status` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("`status` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(Integer value) {
+            addCriterion("`status` =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(Integer value) {
+            addCriterion("`status` <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(Integer value) {
+            addCriterion("`status` >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("`status` >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(Integer value) {
+            addCriterion("`status` <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("`status` <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<Integer> values) {
+            addCriterion("`status` in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<Integer> values) {
+            addCriterion("`status` not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(Integer value1, Integer value2) {
+            addCriterion("`status` between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("`status` not between", value1, value2, "status");
+            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 Criteria andRecycleStatusIsNull() {
+            addCriterion("recycle_status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusIsNotNull() {
+            addCriterion("recycle_status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusEqualTo(Integer value) {
+            addCriterion("recycle_status =", value, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusNotEqualTo(Integer value) {
+            addCriterion("recycle_status <>", value, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusGreaterThan(Integer value) {
+            addCriterion("recycle_status >", value, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("recycle_status >=", value, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusLessThan(Integer value) {
+            addCriterion("recycle_status <", value, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("recycle_status <=", value, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusIn(List<Integer> values) {
+            addCriterion("recycle_status in", values, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusNotIn(List<Integer> values) {
+            addCriterion("recycle_status not in", values, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusBetween(Integer value1, Integer value2) {
+            addCriterion("recycle_status between", value1, value2, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andRecycleStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("recycle_status not between", value1, value2, "recycleStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdIsNull() {
+            addCriterion("trace_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdIsNotNull() {
+            addCriterion("trace_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdEqualTo(String value) {
+            addCriterion("trace_id =", value, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdNotEqualTo(String value) {
+            addCriterion("trace_id <>", value, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdGreaterThan(String value) {
+            addCriterion("trace_id >", value, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdGreaterThanOrEqualTo(String value) {
+            addCriterion("trace_id >=", value, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdLessThan(String value) {
+            addCriterion("trace_id <", value, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdLessThanOrEqualTo(String value) {
+            addCriterion("trace_id <=", value, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdLike(String value) {
+            addCriterion("trace_id like", value, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdNotLike(String value) {
+            addCriterion("trace_id not like", value, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdIn(List<String> values) {
+            addCriterion("trace_id in", values, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdNotIn(List<String> values) {
+            addCriterion("trace_id not in", values, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdBetween(String value1, String value2) {
+            addCriterion("trace_id between", value1, value2, "traceId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTraceIdNotBetween(String value1, String value2) {
+            addCriterion("trace_id not between", value1, value2, "traceId");
+            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);
+        }
+    }
+}

+ 22 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/PublishContent.java

@@ -25,6 +25,10 @@ public class PublishContent {
 
     private String traceId;
 
+    private Long rootId;
+
+    private Integer userGroupId;
+
     private Date createTime;
 
     private Date updateTime;
@@ -117,6 +121,22 @@ public class PublishContent {
         this.traceId = traceId;
     }
 
+    public Long getRootId() {
+        return rootId;
+    }
+
+    public void setRootId(Long rootId) {
+        this.rootId = rootId;
+    }
+
+    public Integer getUserGroupId() {
+        return userGroupId;
+    }
+
+    public void setUserGroupId(Integer userGroupId) {
+        this.userGroupId = userGroupId;
+    }
+
     public Date getCreateTime() {
         return createTime;
     }
@@ -150,6 +170,8 @@ public class PublishContent {
         sb.append(", pushId=").append(pushId);
         sb.append(", reason=").append(reason);
         sb.append(", traceId=").append(traceId);
+        sb.append(", rootId=").append(rootId);
+        sb.append(", userGroupId=").append(userGroupId);
         sb.append(", createTime=").append(createTime);
         sb.append(", updateTime=").append(updateTime);
         sb.append("]");

+ 120 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/PublishContentExample.java

@@ -836,6 +836,126 @@ public class PublishContentExample {
             return (Criteria) this;
         }
 
+        public Criteria andRootIdIsNull() {
+            addCriterion("root_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdIsNotNull() {
+            addCriterion("root_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdEqualTo(Long value) {
+            addCriterion("root_id =", value, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdNotEqualTo(Long value) {
+            addCriterion("root_id <>", value, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdGreaterThan(Long value) {
+            addCriterion("root_id >", value, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("root_id >=", value, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdLessThan(Long value) {
+            addCriterion("root_id <", value, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdLessThanOrEqualTo(Long value) {
+            addCriterion("root_id <=", value, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdIn(List<Long> values) {
+            addCriterion("root_id in", values, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdNotIn(List<Long> values) {
+            addCriterion("root_id not in", values, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdBetween(Long value1, Long value2) {
+            addCriterion("root_id between", value1, value2, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andRootIdNotBetween(Long value1, Long value2) {
+            addCriterion("root_id not between", value1, value2, "rootId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdIsNull() {
+            addCriterion("user_group_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdIsNotNull() {
+            addCriterion("user_group_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdEqualTo(Integer value) {
+            addCriterion("user_group_id =", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdNotEqualTo(Integer value) {
+            addCriterion("user_group_id <>", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdGreaterThan(Integer value) {
+            addCriterion("user_group_id >", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("user_group_id >=", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdLessThan(Integer value) {
+            addCriterion("user_group_id <", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdLessThanOrEqualTo(Integer value) {
+            addCriterion("user_group_id <=", value, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdIn(List<Integer> values) {
+            addCriterion("user_group_id in", values, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdNotIn(List<Integer> values) {
+            addCriterion("user_group_id not in", values, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdBetween(Integer value1, Integer value2) {
+            addCriterion("user_group_id between", value1, value2, "userGroupId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserGroupIdNotBetween(Integer value1, Integer value2) {
+            addCriterion("user_group_id not between", value1, value2, "userGroupId");
+            return (Criteria) this;
+        }
+
         public Criteria andCreateTimeIsNull() {
             addCriterion("create_time is null");
             return (Criteria) this;

+ 18 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/vo/CreateBatchGroupItemParam.java

@@ -0,0 +1,18 @@
+package com.tzld.piaoquan.longarticle.model.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.util.List;
+
+@Data
+@ToString
+public class CreateBatchGroupItemParam {
+
+
+    private String userGroupId;
+
+    private List<PushContentParam> pushContentList;
+
+    private List<String> openIds;
+}

+ 22 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/vo/CreateBatchGroupPushTaskParam.java

@@ -0,0 +1,22 @@
+package com.tzld.piaoquan.longarticle.model.vo;
+
+import lombok.Data;
+import lombok.ToString;
+
+import java.util.List;
+
+@Data
+@ToString
+public class CreateBatchGroupPushTaskParam {
+
+
+    private String planId;
+
+    private String accountId;
+
+    private Integer pushType;
+
+    private Long pushScheduleTimestamp;
+
+    private List<CreateBatchGroupItemParam> batchGroupItems;
+}

+ 1 - 1
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/local/impl/AccountServiceImpl.java

@@ -37,7 +37,7 @@ public class AccountServiceImpl implements AccountService {
     public void saveOrUpdateAccountSpecialSettings(AccountSpecialSettings accountSpecialSettings) {
         AccountSpecialSettingsExample example = new AccountSpecialSettingsExample();
         example.createCriteria().andAccountIdEqualTo(accountSpecialSettings.getAccountId())
-                .andEffectiveDateEqualTo(accountSpecialSettings.getEffectiveDate());
+                .andSpecialSettingIdEqualTo(accountSpecialSettings.getSpecialSettingId());
         List<AccountSpecialSettings> accountSpecialSettingsList = accountSpecialSettingsMapper.selectByExample(example);
         if (CollectionUtils.isEmpty(accountSpecialSettingsList)) {
             accountSpecialSettingsMapper.insertSelective(accountSpecialSettings);

+ 122 - 11
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/local/impl/CoreServiceImpl.java

@@ -2,8 +2,11 @@ package com.tzld.piaoquan.longarticle.service.local.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.longarticle.common.constants.TimeConstant;
 import com.tzld.piaoquan.longarticle.common.enums.*;
+import com.tzld.piaoquan.longarticle.dao.mapper.crawler.ArticleUseGroupMapper;
+import com.tzld.piaoquan.longarticle.dao.mapper.longarticle.GroupSendResultMapper;
 import com.tzld.piaoquan.longarticle.dao.mapper.longarticle.PlanAccountMapper;
 import com.tzld.piaoquan.longarticle.dao.mapper.longarticle.PublishContentMapper;
 import com.tzld.piaoquan.longarticle.dao.mapper.longarticle.PublishMiniprogramMapper;
@@ -11,6 +14,8 @@ import com.tzld.piaoquan.longarticle.model.bo.MatchContent;
 import com.tzld.piaoquan.longarticle.model.bo.VideoDetail;
 import com.tzld.piaoquan.longarticle.model.dto.MiniprogramCardRequest;
 import com.tzld.piaoquan.longarticle.model.dto.PublishArticleData;
+import com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroup;
+import com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroupExample;
 import com.tzld.piaoquan.longarticle.model.po.longarticle.*;
 import com.tzld.piaoquan.longarticle.model.vo.*;
 import com.tzld.piaoquan.longarticle.service.local.AccountService;
@@ -25,11 +30,13 @@ import com.tzld.piaoquan.longarticle.utils.LarkRobotUtil;
 import com.tzld.piaoquan.longarticle.utils.TimeZoneUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalTime;
 import java.util.*;
 import java.util.concurrent.*;
@@ -76,6 +83,15 @@ public class CoreServiceImpl implements CoreService {
     @Autowired
     private AccountService accountService;
 
+    @Autowired
+    private ArticleUseGroupMapper articleUseGroupMapper;
+
+    @Autowired
+    private GroupSendResultMapper groupSendResultMapper;
+
+    @ApolloJsonValue("${fwhGhIdList:[]}")
+    private List<String> fwhGhIdList;
+
     public void initAccountSpecialSettings() {
         List<SpecialSettingVO> specialSettings = aigcService.getSpecialSetting();
         if (CollectionUtils.isEmpty(specialSettings)) {
@@ -669,16 +685,22 @@ public class CoreServiceImpl implements CoreService {
             contentParam.setPublishContentId(publishContent.getPublishContentId());
             pushContentList.add(contentParam);
         }
-        CreatePushTaskParam gzhPushParam = getCreatePushTaskParam(planAccount, pushContentList);
-        if (gzhPushParam == null) {
-            return;
-        }
-        log.info("gzhPushParam={}", gzhPushParam);
-        String pushId = aigcService.createPushTask(gzhPushParam);
-        log.info("pushId = {}", pushId);
-        if (StringUtils.isNotEmpty(pushId)) {
-            publicContentService.updatePublishContentPushId(sendIds, pushId);
+
+        if (fwhGhIdList != null && fwhGhIdList.contains(planAccount.getGhId())) {
+            pushBatchGroupPushTask(planAccount, pushContentList, sendIds);
+        } else {
+            CreatePushTaskParam gzhPushParam = getCreatePushTaskParam(planAccount, pushContentList);
+            if (gzhPushParam == null) {
+                return;
+            }
+            log.info("gzhPushParam={}", gzhPushParam);
+            String pushId = aigcService.createPushTask(gzhPushParam);
+            log.info("pushId = {}", pushId);
+            if (StringUtils.isNotEmpty(pushId)) {
+                publicContentService.updatePublishContentPushId(sendIds, pushId);
+            }
         }
+
     }
 
     private List<PublishMiniprogram> getPublishMiniprogramList(List<VideoDetail> videoDetails, PlanAccount planAccount,
@@ -731,6 +753,86 @@ public class CoreServiceImpl implements CoreService {
         return gzhPushParam;
     }
 
+    private void pushBatchGroupPushTask(PlanAccount planAccount, List<PushContentParam> pushContentList, List<Long> sendIds) {
+        CreateBatchGroupPushTaskParam gzhPushParam = new CreateBatchGroupPushTaskParam();
+        gzhPushParam.setPlanId(planAccount.getPlanId());
+        gzhPushParam.setAccountId(planAccount.getAccountId());
+        gzhPushParam.setPushType(PublishGzhPushTypeEnum.batch_group_publish.getVal());
+        gzhPushParam.setPushScheduleTimestamp(System.currentTimeMillis());
+        if (planAccount.getIsSpecialSetting() != 1 && StringUtils.isNotEmpty(planAccount.getPublishPushTime())) {
+            String dateTimeStr = TimeZoneUtil.todayYMD(TimeZoneUtil.Timezone.china) + " " + planAccount.getPublishPushTime();
+            gzhPushParam.setPushScheduleTimestamp(TimeZoneUtil.getDateStrTimestamp(dateTimeStr, "yyyy-MM-dd HH:mm:ss", TimeZoneUtil.Timezone.china));
+        } else {
+            gzhPushParam.setPushScheduleTimestamp(System.currentTimeMillis());
+        }
+        //文章列表为空直接返回
+        if (CollectionUtils.isEmpty(pushContentList)) {
+            return;
+        }
+        //自动群发少于最少数量不发送  例外设置数量少于最少发送数量不发送
+        if (Objects.equals(planAccount.getPushType(), PublishGzhPushTypeEnum.auto_group_publish.getVal())
+                || planAccount.getIsSpecialSetting() == 1) {
+            if (pushContentList.size() < planAccount.getPublishPreMinNum()) {
+                return;
+            }
+        }
+        List<Integer> userGroupIds = articleUseGroupMapper.selectUserGroupId(planAccount.getGhId());
+        LocalDate today = LocalDate.now(); // 获取当前日期
+        int dayOfYear = today.getDayOfYear();
+        int tailNum = dayOfYear % 8;
+        List<Integer> needPushUserGroupIds = new ArrayList<>();
+        for (int userGroupId : userGroupIds) {
+            if (userGroupId % 8 == tailNum) {
+                needPushUserGroupIds.add(userGroupId);
+            }
+        }
+        ArticleUseGroupExample articleUseGroupExample = new ArticleUseGroupExample();
+        articleUseGroupExample.createCriteria().andGzhIdEqualTo(planAccount.getGhId()).andUserGroupIdIn(needPushUserGroupIds);
+        List<ArticleUseGroup> articleUseGroups = articleUseGroupMapper.selectByExample(articleUseGroupExample);
+        Map<Integer, List<String>> groupMap = articleUseGroups.stream()
+                .collect(Collectors.groupingBy(
+                        ArticleUseGroup::getUserGroupId,
+                        Collectors.mapping(
+                                ArticleUseGroup::getOpenId,
+                                Collectors.toList()
+                        )
+                ));
+        List<PublishContent> publishContentList = publicContentService.getPublishContentById(sendIds);
+        for (Map.Entry<Integer, List<String>> entry : groupMap.entrySet()) {
+            List<CreateBatchGroupItemParam> createBatchGroupItemParams = new ArrayList<>();
+            CreateBatchGroupItemParam createBatchGroupItemParam = new CreateBatchGroupItemParam();
+            createBatchGroupItemParam.setPushContentList(pushContentList);
+            createBatchGroupItemParam.setUserGroupId(String.valueOf(entry.getKey()));
+            createBatchGroupItemParam.setOpenIds(entry.getValue());
+            createBatchGroupItemParams.add(createBatchGroupItemParam);
+            gzhPushParam.setBatchGroupItems(createBatchGroupItemParams);
+            log.info("gzhPushParam={}", gzhPushParam);
+            String pushId = aigcService.createBatchGroupPushTask(gzhPushParam);
+            log.info("pushId = {}", pushId);
+            for (PublishContent publishContent : publishContentList) {
+                PublishContent publishContent1 = new PublishContent();
+                BeanUtils.copyProperties(publishContent, publishContent1);
+                publishContent1.setId(null);
+                publishContent1.setPushId(pushId);
+                publishContent1.setUserGroupId(entry.getKey());
+                publishContent1.setRootId(publishContent.getId());
+                publishContent1.setCreateTime(null);
+                publishContent1.setUpdateTime(null);
+                publishContentMapper.insertSelective(publishContent1);
+                GroupSendResult groupSendResult = new GroupSendResult();
+                groupSendResult.setAccountName(planAccount.getAccountName());
+                groupSendResult.setGhId(planAccount.getGhId());
+                groupSendResult.setUserGroupId(entry.getKey());
+                groupSendResult.setContentId(publishContent.getSourceId());
+                groupSendResult.setPushId(pushId);
+                groupSendResult.setTraceId(publishContent.getTraceId());
+                groupSendResult.setPublishDate(DateUtil.getThatDayDateString());
+                groupSendResultMapper.insertSelective(groupSendResult);
+            }
+
+        }
+    }
+
     private List<PublishMiniprogramParam> getPublishCardList(List<PublishMiniprogram> publishMiniprogramList) {
         List<PublishMiniprogramParam> publishCardList = new ArrayList<>();
         for (PublishMiniprogram publishMiniprogram : publishMiniprogramList) {
@@ -813,7 +915,7 @@ public class CoreServiceImpl implements CoreService {
             PlanAccount planAccount = planAccountService.getPlanAccountById(planAccountId);
             if (updateStatus == 2) {
                 for (PublishContent publishContent : entry.getValue()) {
-                    publicContentService.updatePublishContentStatus(updateStatus, publishContent.getId(), pushStatusVO.getErrorMsg());
+                    publicContentService.updatePublishContentStatus(updateStatus, publishContent.getId(), pushStatusVO.getErrorMsg(), pushId);
                     if (Objects.equals(publishContent.getSourceType(), SourceTypesEnum.longArticleVideoPoolSource.getVal())) {
                         List<PublishMiniprogram> publishMiniprogramList = publicContentService.getPublishMiniprograms(publishContent);
                         if (CollectionUtils.isEmpty(publishMiniprogramList)) {
@@ -827,9 +929,18 @@ public class CoreServiceImpl implements CoreService {
                 if (planAccount == null) {
                     continue;
                 }
-                if (Objects.equals(planAccount.getPushType(), PublishGzhPushTypeEnum.auto_group_publish.getVal())) {
+                if (Objects.equals(planAccount.getPushType(), PublishGzhPushTypeEnum.auto_group_publish.getVal()) ||
+                        Objects.equals(planAccount.getPushType(), PublishGzhPushTypeEnum.batch_group_publish.getVal())) {
                     planAccountService.updateStatus(2, planAccountId);
                 }
+                GroupSendResultExample groupSendResultExample = new GroupSendResultExample();
+                groupSendResultExample.createCriteria().andPushIdEqualTo(pushId);
+                List<GroupSendResult> groupSendResults = groupSendResultMapper.selectByExample(groupSendResultExample);
+                if (!CollectionUtils.isEmpty(groupSendResults)) {
+                    GroupSendResult updateGroupSendResult = new GroupSendResult();
+                    updateGroupSendResult.setStatus(updateStatus);
+                    groupSendResultMapper.updateByExampleSelective(updateGroupSendResult, groupSendResultExample);
+                }
             }
             if (updateStatus == 3) {
                 PublishContentExample publishContentExample = new PublishContentExample();

+ 9 - 3
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/local/impl/PublicContentServiceImpl.java

@@ -1,5 +1,6 @@
 package com.tzld.piaoquan.longarticle.service.local.impl;
 
+import com.tzld.piaoquan.longarticle.dao.mapper.longarticle.GroupSendResultMapper;
 import com.tzld.piaoquan.longarticle.dao.mapper.longarticle.PublishContentMapper;
 import com.tzld.piaoquan.longarticle.dao.mapper.longarticle.PublishMiniprogramMapper;
 import com.tzld.piaoquan.longarticle.model.dto.PublishArticleData;
@@ -27,8 +28,6 @@ public class PublicContentServiceImpl {
     @Autowired
     private PublishMiniprogramMapper publishMiniprogramMapper;
 
-    @Autowired
-    private AigcService aigcService;
 
     public int getSendCount(Long planAccountId) {
         PublishContentExample example = new PublishContentExample();
@@ -47,6 +46,7 @@ public class PublicContentServiceImpl {
         PublishContentExample example = new PublishContentExample();
         example.createCriteria().andPublishContentIdEqualTo(publishContentId)
                 .andCreateTimeGreaterThan(DateUtil.getThatDayDate());
+        example.setOrderByClause("create_time asc");
         List<PublishContent> publishContents = publishContentMapper.selectByExample(example);
         if (!CollectionUtils.isEmpty(publishContents)) {
             PublishContent publishContent = publishContents.get(0);
@@ -97,7 +97,7 @@ public class PublicContentServiceImpl {
         publishContentMapper.updateByPrimaryKeySelective(publishContent);
     }
 
-    public void updatePublishContentStatus(Integer status, Long publishContentId, String reason) {
+    public void updatePublishContentStatus(Integer status, Long publishContentId, String reason, String pushId) {
         PublishContent publishContent = new PublishContent();
         publishContent.setStatus(status);
         publishContent.setId(publishContentId);
@@ -119,4 +119,10 @@ public class PublicContentServiceImpl {
         }
     }
 
+    public List<PublishContent> getPublishContentById(List<Long> ids) {
+        PublishContentExample example = new PublishContentExample();
+        example.createCriteria().andIdIn(ids);
+        return publishContentMapper.selectByExample(example);
+    }
+
 }

+ 3 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/remote/AigcService.java

@@ -16,6 +16,9 @@ public interface AigcService {
 
     String createPushTask(CreatePushTaskParam param);
 
+    String createBatchGroupPushTask(CreateBatchGroupPushTaskParam param);
+
+
     boolean updateMatchMiniprogramStatus(MatchMiniprogramStatusParam param);
 
     boolean filterSortContents(FilterSortParam param);

+ 16 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/remote/impl/AigcServiceImpl.java

@@ -114,6 +114,22 @@ public class AigcServiceImpl implements AigcService {
         return "";
     }
 
+    @Override
+    public String createBatchGroupPushTask(CreateBatchGroupPushTaskParam param) {
+        String apiUrl = "http://aigc-api.cybertogether.net/aigc/publish/LongArticleSystem/createBatchGroupPushTask";
+        try {
+            String res = HTTP_POOL_CLIENT_UTIL_DEFAULT.post(apiUrl, JSON.toJSONString(param));
+            JSONObject jsonObject = JSON.parseObject(res);
+            Integer code = jsonObject.getInteger("code");
+            if (code == 0) {
+                return jsonObject.getJSONObject("data").getString("pushId");
+            }
+        } catch (Exception e) {
+            log.error("createBatchGroupPushTask error", e);
+        }
+        return "";
+    }
+
     @Override
     //更新匹配小程序状态
     public boolean updateMatchMiniprogramStatus(MatchMiniprogramStatusParam param) {

+ 4 - 0
long-article-server/src/main/resources/application-prod.properties

@@ -8,6 +8,10 @@ aigc.datasource.username=crawler_admin
 aigc.datasource.password=cyber#crawler_2023
 aigc.datasource.url=jdbc:mysql://rm-t4na9qj85v7790tf84o.mysql.singapore.rds.aliyuncs.com:3306/aigc-admin-prod?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
 
+crawler.datasource.username=crawler
+crawler.datasource.password=crawler123456@
+crawler.datasource.url=jdbc:mysql://rm-bp1159bu17li9hi94.mysql.rds.aliyuncs.com:3306/piaoquan-crawler?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
+
 spring.redis.database=2
 spring.redis.host=r-bp154bpw97gptefiqkpd.redis.rds.aliyuncs.com
 spring.redis.port=6379

+ 5 - 0
long-article-server/src/main/resources/application-test.properties

@@ -8,6 +8,11 @@ aigc.datasource.username=crawler_admin
 aigc.datasource.password=cyber#crawler_2023
 aigc.datasource.url=jdbc:mysql://rm-t4na9qj85v7790tf84o.mysql.singapore.rds.aliyuncs.com:3306/aigc-admin-prod?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
 
+crawler.datasource.username=crawler
+crawler.datasource.password=crawler123456@
+crawler.datasource.url=jdbc:mysql://rm-bp1159bu17li9hi94.mysql.rds.aliyuncs.com:3306/piaoquan-crawler?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true
+
+
 spring.redis.database=2
 spring.redis.host=r-bp154bpw97gptefiqkpd.redis.rds.aliyuncs.com
 spring.redis.port=6379

+ 11 - 1
long-article-server/src/main/resources/application.properties

@@ -22,11 +22,21 @@ aigc.datasource.testWhileIdle=true
 aigc.datasource.testOnBorrow=false
 aigc.datasource.testOnReturn=false
 aigc.datasource.poolPreparedStatements=true
+crawler.datasource.initialSize=5
+crawler.datasource.maxActive=20
+crawler.datasource.maxWait=60000
+crawler.datasource.timeBetweenEvictionRunsMillis=60000
+crawler.datasource.minEvictableIdleTimeMillis=300000
+crawler.datasource.validationQuery=SELECT 1 FROM DUAL
+crawler.datasource.testWhileIdle=true
+crawler.datasource.testOnBorrow=false
+crawler.datasource.testOnReturn=false
+crawler.datasource.poolPreparedStatements=true
 spring.redis.lettuce.pool.max-active=8
 spring.redis.lettuce.pool.max-wait=-1
 spring.redis.lettuce.pool.max-idle=8
 spring.redis.lettuce.pool.min-idle=0
-app.id=LongArticlesMatchServer
+app.id=long-article-server
 apollo.bootstrap.enabled=true
 apollo.bootstrap.namespaces=application
 apollo.cacheDir=/datalog/apollo-cache-dir

+ 60 - 0
long-article-server/src/main/resources/crawler-mybatis-generator-config.xml

@@ -0,0 +1,60 @@
+<?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="mysql" defaultModelType="flat">
+        <property name="autoDelimitKeywords" value="true"/>
+        <!-- 生成的Java文件的编码 -->
+        <property name="javaFileEncoding" value="UTF-8"/>
+        <!-- 格式化java代码 -->
+        <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
+        <!-- 格式化XML代码 -->
+        <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
+        <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
+        <property name="beginningDelimiter" value="`"/>
+        <property name="endingDelimiter" value="`"/>
+
+        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
+        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>
+        <plugin type="com.tzld.piaoquan.longarticle.dao.generator.PaginationPlugin"/>
+
+        <commentGenerator>
+            <!--            <property name="addRemarkComments" value="true"/>-->
+            <property name="suppressDate" value="true"/>
+            <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 type="org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl">
+            <property name="forceBigDecimals" value="false"/>
+        </javaTypeResolver>
+
+        <javaModelGenerator targetPackage="com.tzld.piaoquan.longarticle.model.po.crawler"
+                            targetProject="/Users/shimeng/Desktop/project/long-article-manage/long-article-server/src/main/java">
+            <property name="constructorBased" value="false"/>
+            <property name="enableSubPackages" value="true"/>
+            <property name="immutable" value="false"/>
+        </javaModelGenerator>
+
+        <sqlMapGenerator targetPackage="mapper/crawler"
+                         targetProject="/Users/shimeng/Desktop/project/long-article-manage/long-article-server/src/main/resources">
+            <property name="enableSubPackages" value="true"/>
+        </sqlMapGenerator>
+
+        <javaClientGenerator targetPackage="com.tzld.piaoquan.longarticle.dao.mapper.crawler" type="XMLMAPPER"
+                             targetProject="/Users/shimeng/Desktop/project/long-article-manage/long-article-server/src/main/java">
+            <property name="enableSubPackages" value="true"/>
+        </javaClientGenerator>
+
+        <table tableName="article_user_group" domainObjectName="ArticleUseGroup" alias=""/>
+
+
+    </context>
+
+</generatorConfiguration>

+ 219 - 0
long-article-server/src/main/resources/mapper/crawler/ArticleUseGroupMapper.xml

@@ -0,0 +1,219 @@
+<?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.piaoquan.longarticle.dao.mapper.crawler.ArticleUseGroupMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroup">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="gzh_id" jdbcType="VARCHAR" property="gzhId" />
+    <result column="user_group_id" jdbcType="INTEGER" property="userGroupId" />
+    <result column="open_id" jdbcType="VARCHAR" property="openId" />
+    <result column="is_delete" jdbcType="INTEGER" property="isDelete" />
+  </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, gzh_id, user_group_id, open_id, is_delete
+  </sql>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroupExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from article_user_group
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from article_user_group
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from article_user_group
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroupExample">
+    delete from article_user_group
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroup">
+    insert into article_user_group (id, gzh_id, user_group_id, 
+      open_id, is_delete)
+    values (#{id,jdbcType=BIGINT}, #{gzhId,jdbcType=VARCHAR}, #{userGroupId,jdbcType=INTEGER}, 
+      #{openId,jdbcType=VARCHAR}, #{isDelete,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroup">
+    insert into article_user_group
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="gzhId != null">
+        gzh_id,
+      </if>
+      <if test="userGroupId != null">
+        user_group_id,
+      </if>
+      <if test="openId != null">
+        open_id,
+      </if>
+      <if test="isDelete != null">
+        is_delete,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="gzhId != null">
+        #{gzhId,jdbcType=VARCHAR},
+      </if>
+      <if test="userGroupId != null">
+        #{userGroupId,jdbcType=INTEGER},
+      </if>
+      <if test="openId != null">
+        #{openId,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null">
+        #{isDelete,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroupExample" resultType="java.lang.Long">
+    select count(*) from article_user_group
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update article_user_group
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=BIGINT},
+      </if>
+      <if test="record.gzhId != null">
+        gzh_id = #{record.gzhId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.userGroupId != null">
+        user_group_id = #{record.userGroupId,jdbcType=INTEGER},
+      </if>
+      <if test="record.openId != null">
+        open_id = #{record.openId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.isDelete != null">
+        is_delete = #{record.isDelete,jdbcType=INTEGER},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update article_user_group
+    set id = #{record.id,jdbcType=BIGINT},
+      gzh_id = #{record.gzhId,jdbcType=VARCHAR},
+      user_group_id = #{record.userGroupId,jdbcType=INTEGER},
+      open_id = #{record.openId,jdbcType=VARCHAR},
+      is_delete = #{record.isDelete,jdbcType=INTEGER}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroup">
+    update article_user_group
+    <set>
+      <if test="gzhId != null">
+        gzh_id = #{gzhId,jdbcType=VARCHAR},
+      </if>
+      <if test="userGroupId != null">
+        user_group_id = #{userGroupId,jdbcType=INTEGER},
+      </if>
+      <if test="openId != null">
+        open_id = #{openId,jdbcType=VARCHAR},
+      </if>
+      <if test="isDelete != null">
+        is_delete = #{isDelete,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroup">
+    update article_user_group
+    set gzh_id = #{gzhId,jdbcType=VARCHAR},
+      user_group_id = #{userGroupId,jdbcType=INTEGER},
+      open_id = #{openId,jdbcType=VARCHAR},
+      is_delete = #{isDelete,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <select id="selectUserGroupId" parameterType="java.lang.String" resultType="java.lang.Integer">
+    select user_group_id from article_user_group
+    where gzh_id = #{ghId,jdbcType=VARCHAR}
+    group by user_group_id order by user_group_id
+  </select>
+</mapper>

+ 400 - 0
long-article-server/src/main/resources/mapper/longarticle/GroupSendResultMapper.xml

@@ -0,0 +1,400 @@
+<?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.piaoquan.longarticle.dao.mapper.longarticle.GroupSendResultMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="account_name" jdbcType="VARCHAR" property="accountName" />
+    <result column="gh_id" jdbcType="VARCHAR" property="ghId" />
+    <result column="publish_date" jdbcType="VARCHAR" property="publishDate" />
+    <result column="user_group_id" jdbcType="INTEGER" property="userGroupId" />
+    <result column="content_id" jdbcType="VARCHAR" property="contentId" />
+    <result column="push_id" jdbcType="VARCHAR" property="pushId" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="recycle_status" jdbcType="INTEGER" property="recycleStatus" />
+    <result column="trace_id" jdbcType="VARCHAR" property="traceId" />
+  </resultMap>
+  <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult">
+    <result column="url" jdbcType="LONGVARCHAR" property="url" />
+  </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, account_name, gh_id, publish_date, user_group_id, content_id, push_id, `status`, 
+    create_time, update_time, recycle_status, trace_id
+  </sql>
+  <sql id="Blob_Column_List">
+    url
+  </sql>
+  <select id="selectByExampleWithBLOBs" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResultExample" resultMap="ResultMapWithBLOBs">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from long_articles_group_send_result
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResultExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from long_articles_group_send_result
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+    <if test="page != null">
+      limit #{page.offset} , #{page.pageSize}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="ResultMapWithBLOBs">
+    select 
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from long_articles_group_send_result
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from long_articles_group_send_result
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResultExample">
+    delete from long_articles_group_send_result
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult">
+    insert into long_articles_group_send_result (id, account_name, gh_id, 
+      publish_date, user_group_id, content_id, 
+      push_id, `status`, create_time, 
+      update_time, recycle_status, trace_id, 
+      url)
+    values (#{id,jdbcType=BIGINT}, #{accountName,jdbcType=VARCHAR}, #{ghId,jdbcType=VARCHAR}, 
+      #{publishDate,jdbcType=VARCHAR}, #{userGroupId,jdbcType=INTEGER}, #{contentId,jdbcType=VARCHAR}, 
+      #{pushId,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{updateTime,jdbcType=TIMESTAMP}, #{recycleStatus,jdbcType=INTEGER}, #{traceId,jdbcType=VARCHAR}, 
+      #{url,jdbcType=LONGVARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult">
+    insert into long_articles_group_send_result
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="accountName != null">
+        account_name,
+      </if>
+      <if test="ghId != null">
+        gh_id,
+      </if>
+      <if test="publishDate != null">
+        publish_date,
+      </if>
+      <if test="userGroupId != null">
+        user_group_id,
+      </if>
+      <if test="contentId != null">
+        content_id,
+      </if>
+      <if test="pushId != null">
+        push_id,
+      </if>
+      <if test="status != null">
+        `status`,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+      <if test="recycleStatus != null">
+        recycle_status,
+      </if>
+      <if test="traceId != null">
+        trace_id,
+      </if>
+      <if test="url != null">
+        url,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="accountName != null">
+        #{accountName,jdbcType=VARCHAR},
+      </if>
+      <if test="ghId != null">
+        #{ghId,jdbcType=VARCHAR},
+      </if>
+      <if test="publishDate != null">
+        #{publishDate,jdbcType=VARCHAR},
+      </if>
+      <if test="userGroupId != null">
+        #{userGroupId,jdbcType=INTEGER},
+      </if>
+      <if test="contentId != null">
+        #{contentId,jdbcType=VARCHAR},
+      </if>
+      <if test="pushId != null">
+        #{pushId,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null">
+        #{status,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="recycleStatus != null">
+        #{recycleStatus,jdbcType=INTEGER},
+      </if>
+      <if test="traceId != null">
+        #{traceId,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null">
+        #{url,jdbcType=LONGVARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResultExample" resultType="java.lang.Long">
+    select count(*) from long_articles_group_send_result
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update long_articles_group_send_result
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=BIGINT},
+      </if>
+      <if test="record.accountName != null">
+        account_name = #{record.accountName,jdbcType=VARCHAR},
+      </if>
+      <if test="record.ghId != null">
+        gh_id = #{record.ghId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.publishDate != null">
+        publish_date = #{record.publishDate,jdbcType=VARCHAR},
+      </if>
+      <if test="record.userGroupId != null">
+        user_group_id = #{record.userGroupId,jdbcType=INTEGER},
+      </if>
+      <if test="record.contentId != null">
+        content_id = #{record.contentId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.pushId != null">
+        push_id = #{record.pushId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.status != null">
+        `status` = #{record.status,jdbcType=INTEGER},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.updateTime != null">
+        update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="record.recycleStatus != null">
+        recycle_status = #{record.recycleStatus,jdbcType=INTEGER},
+      </if>
+      <if test="record.traceId != null">
+        trace_id = #{record.traceId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.url != null">
+        url = #{record.url,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExampleWithBLOBs" parameterType="map">
+    update long_articles_group_send_result
+    set id = #{record.id,jdbcType=BIGINT},
+      account_name = #{record.accountName,jdbcType=VARCHAR},
+      gh_id = #{record.ghId,jdbcType=VARCHAR},
+      publish_date = #{record.publishDate,jdbcType=VARCHAR},
+      user_group_id = #{record.userGroupId,jdbcType=INTEGER},
+      content_id = #{record.contentId,jdbcType=VARCHAR},
+      push_id = #{record.pushId,jdbcType=VARCHAR},
+      `status` = #{record.status,jdbcType=INTEGER},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      recycle_status = #{record.recycleStatus,jdbcType=INTEGER},
+      trace_id = #{record.traceId,jdbcType=VARCHAR},
+      url = #{record.url,jdbcType=LONGVARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update long_articles_group_send_result
+    set id = #{record.id,jdbcType=BIGINT},
+      account_name = #{record.accountName,jdbcType=VARCHAR},
+      gh_id = #{record.ghId,jdbcType=VARCHAR},
+      publish_date = #{record.publishDate,jdbcType=VARCHAR},
+      user_group_id = #{record.userGroupId,jdbcType=INTEGER},
+      content_id = #{record.contentId,jdbcType=VARCHAR},
+      push_id = #{record.pushId,jdbcType=VARCHAR},
+      `status` = #{record.status,jdbcType=INTEGER},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      recycle_status = #{record.recycleStatus,jdbcType=INTEGER},
+      trace_id = #{record.traceId,jdbcType=VARCHAR}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult">
+    update long_articles_group_send_result
+    <set>
+      <if test="accountName != null">
+        account_name = #{accountName,jdbcType=VARCHAR},
+      </if>
+      <if test="ghId != null">
+        gh_id = #{ghId,jdbcType=VARCHAR},
+      </if>
+      <if test="publishDate != null">
+        publish_date = #{publishDate,jdbcType=VARCHAR},
+      </if>
+      <if test="userGroupId != null">
+        user_group_id = #{userGroupId,jdbcType=INTEGER},
+      </if>
+      <if test="contentId != null">
+        content_id = #{contentId,jdbcType=VARCHAR},
+      </if>
+      <if test="pushId != null">
+        push_id = #{pushId,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null">
+        `status` = #{status,jdbcType=INTEGER},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="recycleStatus != null">
+        recycle_status = #{recycleStatus,jdbcType=INTEGER},
+      </if>
+      <if test="traceId != null">
+        trace_id = #{traceId,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null">
+        url = #{url,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult">
+    update long_articles_group_send_result
+    set account_name = #{accountName,jdbcType=VARCHAR},
+      gh_id = #{ghId,jdbcType=VARCHAR},
+      publish_date = #{publishDate,jdbcType=VARCHAR},
+      user_group_id = #{userGroupId,jdbcType=INTEGER},
+      content_id = #{contentId,jdbcType=VARCHAR},
+      push_id = #{pushId,jdbcType=VARCHAR},
+      `status` = #{status,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP},
+      recycle_status = #{recycleStatus,jdbcType=INTEGER},
+      trace_id = #{traceId,jdbcType=VARCHAR},
+      url = #{url,jdbcType=LONGVARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult">
+    update long_articles_group_send_result
+    set account_name = #{accountName,jdbcType=VARCHAR},
+      gh_id = #{ghId,jdbcType=VARCHAR},
+      publish_date = #{publishDate,jdbcType=VARCHAR},
+      user_group_id = #{userGroupId,jdbcType=INTEGER},
+      content_id = #{contentId,jdbcType=VARCHAR},
+      push_id = #{pushId,jdbcType=VARCHAR},
+      `status` = #{status,jdbcType=INTEGER},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP},
+      recycle_status = #{recycleStatus,jdbcType=INTEGER},
+      trace_id = #{traceId,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>

+ 37 - 5
long-article-server/src/main/resources/mapper/longarticle/PublishContentMapper.xml

@@ -13,6 +13,8 @@
     <result column="push_id" jdbcType="VARCHAR" property="pushId" />
     <result column="reason" jdbcType="VARCHAR" property="reason" />
     <result column="trace_id" jdbcType="VARCHAR" property="traceId" />
+    <result column="root_id" jdbcType="BIGINT" property="rootId" />
+    <result column="user_group_id" jdbcType="INTEGER" property="userGroupId" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
   </resultMap>
@@ -76,7 +78,7 @@
   </sql>
   <sql id="Base_Column_List">
     id, plan_account_id, publish_content_id, source_id, score, content_pool_type, source_type, 
-    `status`, push_id, reason, trace_id, create_time, update_time
+    `status`, push_id, reason, trace_id, root_id, user_group_id, create_time, update_time
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.PublishContentExample" resultMap="BaseResultMap">
     select
@@ -115,13 +117,15 @@
     insert into long_articles_publish_content (id, plan_account_id, publish_content_id, 
       source_id, score, content_pool_type, 
       source_type, `status`, push_id, 
-      reason, trace_id, create_time, 
-      update_time)
+      reason, trace_id, root_id, 
+      user_group_id, create_time, update_time
+      )
     values (#{id,jdbcType=BIGINT}, #{planAccountId,jdbcType=BIGINT}, #{publishContentId,jdbcType=VARCHAR}, 
       #{sourceId,jdbcType=VARCHAR}, #{score,jdbcType=DOUBLE}, #{contentPoolType,jdbcType=VARCHAR}, 
       #{sourceType,jdbcType=INTEGER}, #{status,jdbcType=INTEGER}, #{pushId,jdbcType=VARCHAR}, 
-      #{reason,jdbcType=VARCHAR}, #{traceId,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
-      #{updateTime,jdbcType=TIMESTAMP})
+      #{reason,jdbcType=VARCHAR}, #{traceId,jdbcType=VARCHAR}, #{rootId,jdbcType=BIGINT}, 
+      #{userGroupId,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}
+      )
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.PublishContent" useGeneratedKeys="true" keyProperty="id">
     insert into long_articles_publish_content
@@ -159,6 +163,12 @@
       <if test="traceId != null">
         trace_id,
       </if>
+      <if test="rootId != null">
+        root_id,
+      </if>
+      <if test="userGroupId != null">
+        user_group_id,
+      </if>
       <if test="createTime != null">
         create_time,
       </if>
@@ -200,6 +210,12 @@
       <if test="traceId != null">
         #{traceId,jdbcType=VARCHAR},
       </if>
+      <if test="rootId != null">
+        #{rootId,jdbcType=BIGINT},
+      </if>
+      <if test="userGroupId != null">
+        #{userGroupId,jdbcType=INTEGER},
+      </if>
       <if test="createTime != null">
         #{createTime,jdbcType=TIMESTAMP},
       </if>
@@ -253,6 +269,12 @@
       <if test="record.traceId != null">
         trace_id = #{record.traceId,jdbcType=VARCHAR},
       </if>
+      <if test="record.rootId != null">
+        root_id = #{record.rootId,jdbcType=BIGINT},
+      </if>
+      <if test="record.userGroupId != null">
+        user_group_id = #{record.userGroupId,jdbcType=INTEGER},
+      </if>
       <if test="record.createTime != null">
         create_time = #{record.createTime,jdbcType=TIMESTAMP},
       </if>
@@ -277,6 +299,8 @@
       push_id = #{record.pushId,jdbcType=VARCHAR},
       reason = #{record.reason,jdbcType=VARCHAR},
       trace_id = #{record.traceId,jdbcType=VARCHAR},
+      root_id = #{record.rootId,jdbcType=BIGINT},
+      user_group_id = #{record.userGroupId,jdbcType=INTEGER},
       create_time = #{record.createTime,jdbcType=TIMESTAMP},
       update_time = #{record.updateTime,jdbcType=TIMESTAMP}
     <if test="_parameter != null">
@@ -316,6 +340,12 @@
       <if test="traceId != null">
         trace_id = #{traceId,jdbcType=VARCHAR},
       </if>
+      <if test="rootId != null">
+        root_id = #{rootId,jdbcType=BIGINT},
+      </if>
+      <if test="userGroupId != null">
+        user_group_id = #{userGroupId,jdbcType=INTEGER},
+      </if>
       <if test="createTime != null">
         create_time = #{createTime,jdbcType=TIMESTAMP},
       </if>
@@ -337,6 +367,8 @@
       push_id = #{pushId,jdbcType=VARCHAR},
       reason = #{reason,jdbcType=VARCHAR},
       trace_id = #{traceId,jdbcType=VARCHAR},
+      root_id = #{rootId,jdbcType=BIGINT},
+      user_group_id = #{userGroupId,jdbcType=INTEGER},
       create_time = #{createTime,jdbcType=TIMESTAMP},
       update_time = #{updateTime,jdbcType=TIMESTAMP}
     where id = #{id,jdbcType=BIGINT}

+ 3 - 3
long-article-server/src/main/resources/mybatis-generator-config.xml

@@ -57,7 +57,7 @@
 <!--            <columnOverride column="article_text" javaType="java.lang.String" jdbcType="LONGVARCHAR" />-->
 <!--        </table>-->
 <!--        <table tableName="long_articles_account_special_settings" domainObjectName="AccountSpecialSettings" alias=""/>-->
-        <table tableName="ai_video_ab_test" domainObjectName="AIVideoAbTest" alias=""/>
+<!--        <table tableName="ai_video_ab_test" domainObjectName="AIVideoAbTest" alias=""/>-->
 
         <!--            <columnOverride column="video_url" javaType="java.lang.String" jdbcType="LONGVARCHAR" />-->
 <!--            <columnOverride column="cover_url" javaType="java.lang.String" jdbcType="LONGVARCHAR" />-->
@@ -65,8 +65,8 @@
 <!--        <table tableName="long_articles_root_source_id" domainObjectName="RootSource" alias=""/>-->
 <!--        <table tableName="long_articles_plan_account" domainObjectName="PlanAccount" alias=""/>-->
         <!--            <table tableName="long_articles_plan" domainObjectName="Plan" alias=""/>-->
-
-<!--                <table tableName="long_articles_publish_content" domainObjectName="PublishContent" alias=""/>-->
+<!--        <table tableName="long_articles_publish_content" domainObjectName="PublishContent" alias=""/>-->
+        <table tableName="long_articles_group_send_result" domainObjectName="GroupSendResult" alias=""/>
 <!--                <table tableName="long_articles_publish_miniprogram" domainObjectName="PublishMiniprogram" alias=""/>-->
 <!--        <table tableName="get_off_videos" domainObjectName="OffVideo" alias=""/>-->