소스 검색

Merge branch 'dev-xym-update-fwh' of Server/long-article-manage into master

xueyiming 1 주 전
부모
커밋
5de426918d
19개의 변경된 파일2333개의 추가작업 그리고 59개의 파일을 삭제
  1. 10 1
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/dao/mapper/crawler/ArticleUseGroupMapper.java
  2. 30 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/dao/mapper/crawler/FwhDailyPublishDetailMapper.java
  3. 32 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/dao/mapper/longarticle/GroupSendOpenIdMapper.java
  4. 11 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/crawler/ArticleUseGroup.java
  5. 60 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/crawler/ArticleUseGroupExample.java
  6. 79 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/crawler/FwhDailyPublishDetail.java
  7. 601 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/crawler/FwhDailyPublishDetailExample.java
  8. 81 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/GroupSendOpenId.java
  9. 602 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/GroupSendOpenIdExample.java
  10. 22 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/GroupSendResult.java
  11. 120 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/model/po/longarticle/GroupSendResultExample.java
  12. 108 41
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/service/local/impl/CoreServiceImpl.java
  13. 8 0
      long-article-server/src/main/java/com/tzld/piaoquan/longarticle/utils/DateUtil.java
  14. 1 1
      long-article-server/src/main/resources/crawler-mybatis-generator-config.xml
  15. 52 9
      long-article-server/src/main/resources/mapper/crawler/ArticleUseGroupMapper.xml
  16. 231 0
      long-article-server/src/main/resources/mapper/crawler/FwhDailyPublishDetailMapper.xml
  17. 239 0
      long-article-server/src/main/resources/mapper/longarticle/GroupSendOpenIdMapper.xml
  18. 42 5
      long-article-server/src/main/resources/mapper/longarticle/GroupSendResultMapper.xml
  19. 4 2
      long-article-server/src/main/resources/mybatis-generator-config.xml

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

@@ -2,7 +2,9 @@ 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 {
@@ -28,5 +30,12 @@ public interface ArticleUseGroupMapper {
 
     int updateByPrimaryKey(ArticleUseGroup record);
 
-    List<Integer> selectUserGroupId(String ghId);
+    Integer selectRemainingCountByGzhId(@Param("ghId") String ghId, @Param("excludeRemainingCount") Integer excludeRemainingCount);
+
+    List<String> selectOpenIds(@Param("ghId") String ghId, @Param("count") Integer count);
+
+    List<String> selectOpenIdsByRemainingCount(@Param("ghId") String ghId, @Param("remainingCount") Integer remainingCount);
+
+    Integer selectFansBeforePublishCount(@Param("ghId") String ghId);
+
 }

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

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

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

@@ -0,0 +1,32 @@
+package com.tzld.piaoquan.longarticle.dao.mapper.longarticle;
+
+import com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenId;
+import com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenIdExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface GroupSendOpenIdMapper {
+    long countByExample(GroupSendOpenIdExample example);
+
+    int deleteByExample(GroupSendOpenIdExample example);
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(GroupSendOpenId record);
+
+    int insertSelective(GroupSendOpenId record);
+
+    List<GroupSendOpenId> selectByExample(GroupSendOpenIdExample example);
+
+    GroupSendOpenId selectByPrimaryKey(Long id);
+
+    int updateByExampleSelective(@Param("record") GroupSendOpenId record, @Param("example") GroupSendOpenIdExample example);
+
+    int updateByExample(@Param("record") GroupSendOpenId record, @Param("example") GroupSendOpenIdExample example);
+
+    int updateByPrimaryKeySelective(GroupSendOpenId record);
+
+    int updateByPrimaryKey(GroupSendOpenId record);
+
+    void batchInsert(List<GroupSendOpenId> openIdList);
+}

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

@@ -11,6 +11,8 @@ public class ArticleUseGroup {
 
     private Integer isDelete;
 
+    private Integer remainingCount;
+
     public Long getId() {
         return id;
     }
@@ -51,6 +53,14 @@ public class ArticleUseGroup {
         this.isDelete = isDelete;
     }
 
+    public Integer getRemainingCount() {
+        return remainingCount;
+    }
+
+    public void setRemainingCount(Integer remainingCount) {
+        this.remainingCount = remainingCount;
+    }
+
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
@@ -62,6 +72,7 @@ public class ArticleUseGroup {
         sb.append(", userGroupId=").append(userGroupId);
         sb.append(", openId=").append(openId);
         sb.append(", isDelete=").append(isDelete);
+        sb.append(", remainingCount=").append(remainingCount);
         sb.append("]");
         return sb.toString();
     }

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

@@ -434,6 +434,66 @@ public class ArticleUseGroupExample {
             addCriterion("is_delete not between", value1, value2, "isDelete");
             return (Criteria) this;
         }
+
+        public Criteria andRemainingCountIsNull() {
+            addCriterion("remaining_count is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountIsNotNull() {
+            addCriterion("remaining_count is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountEqualTo(Integer value) {
+            addCriterion("remaining_count =", value, "remainingCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountNotEqualTo(Integer value) {
+            addCriterion("remaining_count <>", value, "remainingCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountGreaterThan(Integer value) {
+            addCriterion("remaining_count >", value, "remainingCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountGreaterThanOrEqualTo(Integer value) {
+            addCriterion("remaining_count >=", value, "remainingCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountLessThan(Integer value) {
+            addCriterion("remaining_count <", value, "remainingCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountLessThanOrEqualTo(Integer value) {
+            addCriterion("remaining_count <=", value, "remainingCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountIn(List<Integer> values) {
+            addCriterion("remaining_count in", values, "remainingCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountNotIn(List<Integer> values) {
+            addCriterion("remaining_count not in", values, "remainingCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountBetween(Integer value1, Integer value2) {
+            addCriterion("remaining_count between", value1, value2, "remainingCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andRemainingCountNotBetween(Integer value1, Integer value2) {
+            addCriterion("remaining_count not between", value1, value2, "remainingCount");
+            return (Criteria) this;
+        }
     }
 
     public static class Criteria extends GeneratedCriteria {

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

@@ -0,0 +1,79 @@
+package com.tzld.piaoquan.longarticle.model.po.crawler;
+
+public class FwhDailyPublishDetail {
+    private Integer id;
+
+    private String accountName;
+
+    private String ghId;
+
+    private String publishDate;
+
+    private Integer fansBeforePublish;
+
+    private Integer publishFansBeforePublish;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer 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 getFansBeforePublish() {
+        return fansBeforePublish;
+    }
+
+    public void setFansBeforePublish(Integer fansBeforePublish) {
+        this.fansBeforePublish = fansBeforePublish;
+    }
+
+    public Integer getPublishFansBeforePublish() {
+        return publishFansBeforePublish;
+    }
+
+    public void setPublishFansBeforePublish(Integer publishFansBeforePublish) {
+        this.publishFansBeforePublish = publishFansBeforePublish;
+    }
+
+    @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(", fansBeforePublish=").append(fansBeforePublish);
+        sb.append(", publishFansBeforePublish=").append(publishFansBeforePublish);
+        sb.append("]");
+        return sb.toString();
+    }
+}

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

@@ -0,0 +1,601 @@
+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 FwhDailyPublishDetailExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public FwhDailyPublishDetailExample() {
+        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(Integer value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Integer value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Integer value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Integer value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Integer value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Integer value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Integer> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Integer> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Integer value1, Integer value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Integer value1, Integer 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 andFansBeforePublishIsNull() {
+            addCriterion("fans_before_publish is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishIsNotNull() {
+            addCriterion("fans_before_publish is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishEqualTo(Integer value) {
+            addCriterion("fans_before_publish =", value, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishNotEqualTo(Integer value) {
+            addCriterion("fans_before_publish <>", value, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishGreaterThan(Integer value) {
+            addCriterion("fans_before_publish >", value, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishGreaterThanOrEqualTo(Integer value) {
+            addCriterion("fans_before_publish >=", value, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishLessThan(Integer value) {
+            addCriterion("fans_before_publish <", value, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishLessThanOrEqualTo(Integer value) {
+            addCriterion("fans_before_publish <=", value, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishIn(List<Integer> values) {
+            addCriterion("fans_before_publish in", values, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishNotIn(List<Integer> values) {
+            addCriterion("fans_before_publish not in", values, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishBetween(Integer value1, Integer value2) {
+            addCriterion("fans_before_publish between", value1, value2, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andFansBeforePublishNotBetween(Integer value1, Integer value2) {
+            addCriterion("fans_before_publish not between", value1, value2, "fansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishIsNull() {
+            addCriterion("publish_fans_before_publish is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishIsNotNull() {
+            addCriterion("publish_fans_before_publish is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishEqualTo(Integer value) {
+            addCriterion("publish_fans_before_publish =", value, "publishFansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishNotEqualTo(Integer value) {
+            addCriterion("publish_fans_before_publish <>", value, "publishFansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishGreaterThan(Integer value) {
+            addCriterion("publish_fans_before_publish >", value, "publishFansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishGreaterThanOrEqualTo(Integer value) {
+            addCriterion("publish_fans_before_publish >=", value, "publishFansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishLessThan(Integer value) {
+            addCriterion("publish_fans_before_publish <", value, "publishFansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishLessThanOrEqualTo(Integer value) {
+            addCriterion("publish_fans_before_publish <=", value, "publishFansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishIn(List<Integer> values) {
+            addCriterion("publish_fans_before_publish in", values, "publishFansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishNotIn(List<Integer> values) {
+            addCriterion("publish_fans_before_publish not in", values, "publishFansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishBetween(Integer value1, Integer value2) {
+            addCriterion("publish_fans_before_publish between", value1, value2, "publishFansBeforePublish");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishFansBeforePublishNotBetween(Integer value1, Integer value2) {
+            addCriterion("publish_fans_before_publish not between", value1, value2, "publishFansBeforePublish");
+            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);
+        }
+    }
+}

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

@@ -0,0 +1,81 @@
+package com.tzld.piaoquan.longarticle.model.po.longarticle;
+
+import java.util.Date;
+
+public class GroupSendOpenId {
+    private Long id;
+
+    private String ghId;
+
+    private String publishDate;
+
+    private Integer userGroupId;
+
+    private String openId;
+
+    private Date createTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    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 getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @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(", ghId=").append(ghId);
+        sb.append(", publishDate=").append(publishDate);
+        sb.append(", userGroupId=").append(userGroupId);
+        sb.append(", openId=").append(openId);
+        sb.append(", createTime=").append(createTime);
+        sb.append("]");
+        return sb.toString();
+    }
+}

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

@@ -0,0 +1,602 @@
+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 GroupSendOpenIdExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    protected Page page;
+
+    public GroupSendOpenIdExample() {
+        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 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 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 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 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/GroupSendResult.java

@@ -29,6 +29,10 @@ public class GroupSendResult {
 
     private String traceId;
 
+    private Long publishTimestamp;
+
+    private Integer sentCount;
+
     private String url;
 
     public Long getId() {
@@ -135,6 +139,22 @@ public class GroupSendResult {
         this.traceId = traceId;
     }
 
+    public Long getPublishTimestamp() {
+        return publishTimestamp;
+    }
+
+    public void setPublishTimestamp(Long publishTimestamp) {
+        this.publishTimestamp = publishTimestamp;
+    }
+
+    public Integer getSentCount() {
+        return sentCount;
+    }
+
+    public void setSentCount(Integer sentCount) {
+        this.sentCount = sentCount;
+    }
+
     public String getUrl() {
         return url;
     }
@@ -162,6 +182,8 @@ public class GroupSendResult {
         sb.append(", updateTime=").append(updateTime);
         sb.append(", recycleStatus=").append(recycleStatus);
         sb.append(", traceId=").append(traceId);
+        sb.append(", publishTimestamp=").append(publishTimestamp);
+        sb.append(", sentCount=").append(sentCount);
         sb.append(", url=").append(url);
         sb.append("]");
         return sb.toString();

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

@@ -965,6 +965,126 @@ public class GroupSendResultExample {
             addCriterion("trace_id not between", value1, value2, "traceId");
             return (Criteria) this;
         }
+
+        public Criteria andPublishTimestampIsNull() {
+            addCriterion("publish_timestamp is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampIsNotNull() {
+            addCriterion("publish_timestamp is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampEqualTo(Long value) {
+            addCriterion("publish_timestamp =", value, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampNotEqualTo(Long value) {
+            addCriterion("publish_timestamp <>", value, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampGreaterThan(Long value) {
+            addCriterion("publish_timestamp >", value, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampGreaterThanOrEqualTo(Long value) {
+            addCriterion("publish_timestamp >=", value, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampLessThan(Long value) {
+            addCriterion("publish_timestamp <", value, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampLessThanOrEqualTo(Long value) {
+            addCriterion("publish_timestamp <=", value, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampIn(List<Long> values) {
+            addCriterion("publish_timestamp in", values, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampNotIn(List<Long> values) {
+            addCriterion("publish_timestamp not in", values, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampBetween(Long value1, Long value2) {
+            addCriterion("publish_timestamp between", value1, value2, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andPublishTimestampNotBetween(Long value1, Long value2) {
+            addCriterion("publish_timestamp not between", value1, value2, "publishTimestamp");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountIsNull() {
+            addCriterion("sent_count is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountIsNotNull() {
+            addCriterion("sent_count is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountEqualTo(Integer value) {
+            addCriterion("sent_count =", value, "sentCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountNotEqualTo(Integer value) {
+            addCriterion("sent_count <>", value, "sentCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountGreaterThan(Integer value) {
+            addCriterion("sent_count >", value, "sentCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountGreaterThanOrEqualTo(Integer value) {
+            addCriterion("sent_count >=", value, "sentCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountLessThan(Integer value) {
+            addCriterion("sent_count <", value, "sentCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountLessThanOrEqualTo(Integer value) {
+            addCriterion("sent_count <=", value, "sentCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountIn(List<Integer> values) {
+            addCriterion("sent_count in", values, "sentCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountNotIn(List<Integer> values) {
+            addCriterion("sent_count not in", values, "sentCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountBetween(Integer value1, Integer value2) {
+            addCriterion("sent_count between", value1, value2, "sentCount");
+            return (Criteria) this;
+        }
+
+        public Criteria andSentCountNotBetween(Integer value1, Integer value2) {
+            addCriterion("sent_count not between", value1, value2, "sentCount");
+            return (Criteria) this;
+        }
     }
 
     public static class Criteria extends GeneratedCriteria {

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

@@ -6,16 +6,15 @@ 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;
+import com.tzld.piaoquan.longarticle.dao.mapper.crawler.FwhDailyPublishDetailMapper;
+import com.tzld.piaoquan.longarticle.dao.mapper.longarticle.*;
 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.crawler.FwhDailyPublishDetail;
 import com.tzld.piaoquan.longarticle.model.po.longarticle.*;
 import com.tzld.piaoquan.longarticle.model.vo.*;
 import com.tzld.piaoquan.longarticle.service.local.AccountService;
@@ -89,9 +88,15 @@ public class CoreServiceImpl implements CoreService {
     @Autowired
     private GroupSendResultMapper groupSendResultMapper;
 
+    @Autowired
+    private GroupSendOpenIdMapper groupSendOpenIdMapper;
+
     @Autowired
     private MatchVideoServiceImpl matchVideoService;
 
+    @Autowired
+    private FwhDailyPublishDetailMapper fwhDailyPublishDetailMapper;
+
     @ApolloJsonValue("${fwhGhIdList:[]}")
     private List<String> fwhGhIdList;
 
@@ -808,37 +813,65 @@ public class CoreServiceImpl implements CoreService {
                 return;
             }
         }
-        //分组数量
-        int groupNum = 7;
-        List<Integer> userGroupIds = articleUseGroupMapper.selectUserGroupId(planAccount.getGhId());
-        LocalDate today = LocalDate.now(); // 获取当前日期
-        int dayOfMonth = today.getDayOfMonth();
-        int tailNum = dayOfMonth % groupNum;
-        List<Integer> needPushUserGroupIds = new ArrayList<>();
-        for (int userGroupId : userGroupIds) {
-            if (userGroupId % groupNum == tailNum) {
-                needPushUserGroupIds.add(userGroupId);
-            }
-        }
-        ArticleUseGroupExample articleUseGroupExample = new ArticleUseGroupExample();
-        articleUseGroupExample.createCriteria().andGzhIdEqualTo(planAccount.getGhId())
-                .andUserGroupIdIn(needPushUserGroupIds).andIsDeleteEqualTo(0);
-        List<ArticleUseGroup> articleUseGroups = articleUseGroupMapper.selectByExample(articleUseGroupExample);
-        Map<Integer, List<String>> groupMap = articleUseGroups.stream()
-                .collect(Collectors.groupingBy(
-                        ArticleUseGroup::getUserGroupId,
-                        Collectors.mapping(
-                                ArticleUseGroup::getOpenId,
-                                Collectors.toList()
-                        )
-                ));
+        int remainingDaysInCurrentMonth = DateUtil.getRemainingDaysInCurrentMonth();
+        Integer remainingCount;
+        List<String> sendOpenIds = new ArrayList<>();
+        if (remainingDaysInCurrentMonth <= 4) {
+            remainingCount = articleUseGroupMapper.selectRemainingCountByGzhId(planAccount.getGhId(), remainingDaysInCurrentMonth);
+            List<String> remainingCountOpenIds = articleUseGroupMapper.selectOpenIdsByRemainingCount(planAccount.getGhId(), remainingDaysInCurrentMonth);
+            sendOpenIds.addAll(remainingCountOpenIds);
+        } else {
+            remainingCount = articleUseGroupMapper.selectRemainingCountByGzhId(planAccount.getGhId(), null);
+        }
+        if (remainingDaysInCurrentMonth > 0 && remainingCount != null && remainingCount / remainingDaysInCurrentMonth > 0) {
+            Integer count = articleUseGroupMapper.selectFansBeforePublishCount(planAccount.getGhId());
+            FwhDailyPublishDetail fwhDailyPublishDetail = new FwhDailyPublishDetail();
+            fwhDailyPublishDetail.setAccountName(planAccount.getAccountName());
+            fwhDailyPublishDetail.setGhId(planAccount.getGhId());
+            fwhDailyPublishDetail.setPublishDate(DateUtil.getThatDayDateString());
+            fwhDailyPublishDetail.setFansBeforePublish(count);
+            fwhDailyPublishDetail.setPublishFansBeforePublish(remainingCount);
+            fwhDailyPublishDetailMapper.insertSelective(fwhDailyPublishDetail);
+            List<String> needSendOpenIds = articleUseGroupMapper.selectOpenIds(planAccount.getGhId(), remainingCount / remainingDaysInCurrentMonth);
+            sendOpenIds.addAll(needSendOpenIds);
+        }
+        if (CollectionUtils.isEmpty(sendOpenIds)) {
+            return;
+        }
+        int batchSize = 10000; // 每组大小
+        int totalSize = sendOpenIds.size();
         List<PublishContent> publishContentList = publicContentService.getPublishContentById(sendIds);
-        for (Map.Entry<Integer, List<String>> entry : groupMap.entrySet()) {
+        int group = 1;
+        for (int i = 0; i < totalSize; i += batchSize) {
+            int toIndex = Math.min(i + batchSize, totalSize);
+            // 获取当前批次的数据
+            int batchInsertSize = 1000;
+            List<GroupSendOpenId> batchInsertList = new ArrayList<>(batchInsertSize);
+            List<String> batch = sendOpenIds.subList(i, toIndex);
+            for (String openId : batch) {
+                GroupSendOpenId groupSendOpenId = new GroupSendOpenId();
+                groupSendOpenId.setGhId(planAccount.getGhId());
+                groupSendOpenId.setPublishDate(DateUtil.getThatDayDateString());
+                groupSendOpenId.setUserGroupId(group);
+                groupSendOpenId.setOpenId(openId);
+                batchInsertList.add(groupSendOpenId);
+                // 当批次大小达到1000时执行插入,并清空列表
+                if (batchInsertList.size() >= batchInsertSize) {
+                    groupSendOpenIdMapper.batchInsert(batchInsertList);
+                    batchInsertList.clear();
+                }
+            }
+            // 处理剩余的记录(如果有)
+            if (!batchInsertList.isEmpty()) {
+                groupSendOpenIdMapper.batchInsert(batchInsertList);
+            }
+
+
             List<CreateBatchGroupItemParam> createBatchGroupItemParams = new ArrayList<>();
             CreateBatchGroupItemParam createBatchGroupItemParam = new CreateBatchGroupItemParam();
             createBatchGroupItemParam.setPushContentList(pushContentList);
-            createBatchGroupItemParam.setUserGroupId(String.valueOf(entry.getKey()));
-            createBatchGroupItemParam.setOpenIds(entry.getValue());
+            createBatchGroupItemParam.setUserGroupId(String.valueOf(group));
+            createBatchGroupItemParam.setOpenIds(batch);
             createBatchGroupItemParams.add(createBatchGroupItemParam);
             gzhPushParam.setBatchGroupItems(createBatchGroupItemParams);
             log.info("gzhPushParam={}", gzhPushParam);
@@ -850,7 +883,7 @@ public class CoreServiceImpl implements CoreService {
                 publishContent1.setId(null);
                 publishContent1.setPushId(pushId);
                 publishContent1.setStatus(1);
-                publishContent1.setUserGroupId(entry.getKey());
+                publishContent1.setUserGroupId(group);
                 publishContent1.setRootId(publishContent.getId());
                 publishContent1.setCreateTime(null);
                 publishContent1.setUpdateTime(null);
@@ -858,15 +891,16 @@ public class CoreServiceImpl implements CoreService {
                 GroupSendResult groupSendResult = new GroupSendResult();
                 groupSendResult.setAccountName(planAccount.getAccountName());
                 groupSendResult.setGhId(planAccount.getGhId());
-                groupSendResult.setUserGroupId(entry.getKey());
+                groupSendResult.setUserGroupId(group);
                 groupSendResult.setContentId(publishContent.getSourceId());
                 groupSendResult.setPushId(pushId);
                 groupSendResult.setTraceId(publishContent.getTraceId());
                 groupSendResult.setPublishContentId(publishContent.getPublishContentId());
                 groupSendResult.setPublishDate(DateUtil.getThatDayDateString());
+                groupSendResult.setSentCount(batch.size());
                 groupSendResultMapper.insertSelective(groupSendResult);
             }
-
+            group++;
         }
     }
 
@@ -970,13 +1004,46 @@ public class CoreServiceImpl implements CoreService {
                         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 (fwhGhIdList != null && fwhGhIdList.contains(planAccount.getGhId())) {
+                    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);
+                        Set<String> groupKeys = groupSendResults.stream()
+                                .map(e -> e.getGhId() + "&&" + e.getPublishDate() + "&&" + e.getUserGroupId())
+                                .collect(Collectors.toSet());
+                        for (String groupKey : groupKeys) {
+                            String[] groupArray = groupKey.split("&&");
+                            String ghId = groupArray[0];
+                            String publishDate = groupArray[1];
+                            String userGroupId = groupArray[2];
+                            GroupSendOpenIdExample groupSendOpenIdExample = new GroupSendOpenIdExample();
+                            groupSendOpenIdExample.createCriteria().andGhIdEqualTo(ghId)
+                                    .andPublishDateEqualTo(publishDate)
+                                    .andUserGroupIdEqualTo(Integer.parseInt(userGroupId));
+                            List<GroupSendOpenId> groupSendOpenIds = groupSendOpenIdMapper.selectByExample(groupSendOpenIdExample);
+                            if (!CollectionUtils.isEmpty(groupSendOpenIds)) {
+                                for (GroupSendOpenId groupSendOpenId : groupSendOpenIds) {
+                                    ArticleUseGroupExample articleUseGroupExample = new ArticleUseGroupExample();
+                                    articleUseGroupExample.createCriteria().andGzhIdEqualTo(groupSendOpenId.getGhId())
+                                            .andOpenIdEqualTo(groupSendOpenId.getOpenId());
+                                    List<ArticleUseGroup> articleUseGroups = articleUseGroupMapper.selectByExample(articleUseGroupExample);
+                                    if (!CollectionUtils.isEmpty(articleUseGroups)) {
+                                        for (ArticleUseGroup articleUseGroup : articleUseGroups) {
+                                            ArticleUseGroup updateArticleUseGroup = new ArticleUseGroup();
+                                            updateArticleUseGroup.setId(articleUseGroup.getId());
+                                            updateArticleUseGroup.setRemainingCount(articleUseGroup.getRemainingCount() - 1);
+                                            articleUseGroupMapper.updateByPrimaryKeySelective(updateArticleUseGroup);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                    }
                 }
             }
             if (updateStatus == 3) {

+ 8 - 0
long-article-server/src/main/java/com/tzld/piaoquan/longarticle/utils/DateUtil.java

@@ -5,6 +5,7 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.Calendar;
 import java.util.Date;
 
@@ -53,5 +54,12 @@ public class DateUtil {
         return dateFormat.format(yesterday);
     }
 
+    public static int getRemainingDaysInCurrentMonth() {
+        LocalDate today = LocalDate.now();
+        LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth());
+        return (int) (ChronoUnit.DAYS.between(today, lastDayOfMonth) + 1);
+    }
+
+
 
 }

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

@@ -52,7 +52,7 @@
             <property name="enableSubPackages" value="true"/>
         </javaClientGenerator>
 
-        <table tableName="article_user_group" domainObjectName="ArticleUseGroup" alias=""/>
+        <table tableName="fwh_daily_publish_detail" domainObjectName="FwhDailyPublishDetail" alias=""/>
 
 
     </context>

+ 52 - 9
long-article-server/src/main/resources/mapper/crawler/ArticleUseGroupMapper.xml

@@ -7,6 +7,7 @@
     <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" />
+    <result column="remaining_count" jdbcType="INTEGER" property="remainingCount" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <where>
@@ -67,7 +68,7 @@
     </where>
   </sql>
   <sql id="Base_Column_List">
-    id, gzh_id, user_group_id, open_id, is_delete
+    id, gzh_id, user_group_id, open_id, is_delete, remaining_count
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroupExample" resultMap="BaseResultMap">
     select
@@ -104,9 +105,11 @@
   </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)
+      open_id, is_delete, remaining_count
+      )
     values (#{id,jdbcType=BIGINT}, #{gzhId,jdbcType=VARCHAR}, #{userGroupId,jdbcType=INTEGER}, 
-      #{openId,jdbcType=VARCHAR}, #{isDelete,jdbcType=INTEGER})
+      #{openId,jdbcType=VARCHAR}, #{isDelete,jdbcType=INTEGER}, #{remainingCount,jdbcType=INTEGER}
+      )
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroup">
     insert into article_user_group
@@ -126,6 +129,9 @@
       <if test="isDelete != null">
         is_delete,
       </if>
+      <if test="remainingCount != null">
+        remaining_count,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
@@ -143,6 +149,9 @@
       <if test="isDelete != null">
         #{isDelete,jdbcType=INTEGER},
       </if>
+      <if test="remainingCount != null">
+        #{remainingCount,jdbcType=INTEGER},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.ArticleUseGroupExample" resultType="java.lang.Long">
@@ -169,6 +178,9 @@
       <if test="record.isDelete != null">
         is_delete = #{record.isDelete,jdbcType=INTEGER},
       </if>
+      <if test="record.remainingCount != null">
+        remaining_count = #{record.remainingCount,jdbcType=INTEGER},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -180,7 +192,8 @@
       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}
+      is_delete = #{record.isDelete,jdbcType=INTEGER},
+      remaining_count = #{record.remainingCount,jdbcType=INTEGER}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -200,6 +213,9 @@
       <if test="isDelete != null">
         is_delete = #{isDelete,jdbcType=INTEGER},
       </if>
+      <if test="remainingCount != null">
+        remaining_count = #{remainingCount,jdbcType=INTEGER},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -208,12 +224,39 @@
     set gzh_id = #{gzhId,jdbcType=VARCHAR},
       user_group_id = #{userGroupId,jdbcType=INTEGER},
       open_id = #{openId,jdbcType=VARCHAR},
-      is_delete = #{isDelete,jdbcType=INTEGER}
+      is_delete = #{isDelete,jdbcType=INTEGER},
+      remaining_count = #{remainingCount,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 id="selectRemainingCountByGzhId" resultType="java.lang.Integer">
+      select sum(remaining_count)
+      from article_user_group
+      where is_delete = 0 and gzh_id = #{ghId,jdbcType=VARCHAR}
+      <if test="excludeRemainingCount != null">
+          and remaining_count &lt; #{excludeRemainingCount,jdbcType=INTEGER}
+      </if>
+  </select>
+
+  <select id="selectOpenIds" resultType="java.lang.String">
+    select open_id
+    from article_user_group
+    where is_delete = 0 and gzh_id = #{ghId,jdbcType=VARCHAR}
+    order by remaining_count desc, id asc
+    limit #{count,jdbcType=INTEGER}
+  </select>
+
+  <select id="selectOpenIdsByRemainingCount" resultType="java.lang.String">
+    select open_id
+    from article_user_group
+    where is_delete = 0 and gzh_id = #{ghId,jdbcType=VARCHAR}
+    and remaining_count >= #{remainingCount,jdbcType=INTEGER}
+  </select>
+
+  <select id="selectFansBeforePublishCount" resultType="java.lang.Integer">
+    select count(*)
+    from article_user_group
+    where is_delete = 0 and gzh_id = #{ghId,jdbcType=VARCHAR}
+      and remaining_count > 0
   </select>
 </mapper>

+ 231 - 0
long-article-server/src/main/resources/mapper/crawler/FwhDailyPublishDetailMapper.xml

@@ -0,0 +1,231 @@
+<?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.FwhDailyPublishDetailMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.longarticle.model.po.crawler.FwhDailyPublishDetail">
+    <id column="id" jdbcType="INTEGER" 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="fans_before_publish" jdbcType="INTEGER" property="fansBeforePublish" />
+    <result column="publish_fans_before_publish" jdbcType="INTEGER" property="publishFansBeforePublish" />
+  </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, fans_before_publish, publish_fans_before_publish
+  </sql>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.FwhDailyPublishDetailExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from fwh_daily_publish_detail
+    <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.Integer" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from fwh_daily_publish_detail
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from fwh_daily_publish_detail
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.FwhDailyPublishDetailExample">
+    delete from fwh_daily_publish_detail
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.FwhDailyPublishDetail">
+    insert into fwh_daily_publish_detail (id, account_name, gh_id, 
+      publish_date, fans_before_publish, publish_fans_before_publish
+      )
+    values (#{id,jdbcType=INTEGER}, #{accountName,jdbcType=VARCHAR}, #{ghId,jdbcType=VARCHAR}, 
+      #{publishDate,jdbcType=VARCHAR}, #{fansBeforePublish,jdbcType=INTEGER}, #{publishFansBeforePublish,jdbcType=INTEGER}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.FwhDailyPublishDetail">
+    insert into fwh_daily_publish_detail
+    <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="fansBeforePublish != null">
+        fans_before_publish,
+      </if>
+      <if test="publishFansBeforePublish != null">
+        publish_fans_before_publish,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=INTEGER},
+      </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="fansBeforePublish != null">
+        #{fansBeforePublish,jdbcType=INTEGER},
+      </if>
+      <if test="publishFansBeforePublish != null">
+        #{publishFansBeforePublish,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.FwhDailyPublishDetailExample" resultType="java.lang.Long">
+    select count(*) from fwh_daily_publish_detail
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update fwh_daily_publish_detail
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=INTEGER},
+      </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.fansBeforePublish != null">
+        fans_before_publish = #{record.fansBeforePublish,jdbcType=INTEGER},
+      </if>
+      <if test="record.publishFansBeforePublish != null">
+        publish_fans_before_publish = #{record.publishFansBeforePublish,jdbcType=INTEGER},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update fwh_daily_publish_detail
+    set id = #{record.id,jdbcType=INTEGER},
+      account_name = #{record.accountName,jdbcType=VARCHAR},
+      gh_id = #{record.ghId,jdbcType=VARCHAR},
+      publish_date = #{record.publishDate,jdbcType=VARCHAR},
+      fans_before_publish = #{record.fansBeforePublish,jdbcType=INTEGER},
+      publish_fans_before_publish = #{record.publishFansBeforePublish,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.FwhDailyPublishDetail">
+    update fwh_daily_publish_detail
+    <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="fansBeforePublish != null">
+        fans_before_publish = #{fansBeforePublish,jdbcType=INTEGER},
+      </if>
+      <if test="publishFansBeforePublish != null">
+        publish_fans_before_publish = #{publishFansBeforePublish,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.longarticle.model.po.crawler.FwhDailyPublishDetail">
+    update fwh_daily_publish_detail
+    set account_name = #{accountName,jdbcType=VARCHAR},
+      gh_id = #{ghId,jdbcType=VARCHAR},
+      publish_date = #{publishDate,jdbcType=VARCHAR},
+      fans_before_publish = #{fansBeforePublish,jdbcType=INTEGER},
+      publish_fans_before_publish = #{publishFansBeforePublish,jdbcType=INTEGER}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+</mapper>

+ 239 - 0
long-article-server/src/main/resources/mapper/longarticle/GroupSendOpenIdMapper.xml

@@ -0,0 +1,239 @@
+<?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.GroupSendOpenIdMapper">
+  <resultMap id="BaseResultMap" type="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenId">
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <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="open_id" jdbcType="VARCHAR" property="openId" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+  </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, gh_id, publish_date, user_group_id, open_id, create_time
+  </sql>
+  <select id="selectByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenIdExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from long_articles_group_send_open_id
+    <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 long_articles_group_send_open_id
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    delete from long_articles_group_send_open_id
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenIdExample">
+    delete from long_articles_group_send_open_id
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenId">
+    insert into long_articles_group_send_open_id (id, gh_id, publish_date, 
+      user_group_id, open_id, create_time
+      )
+    values (#{id,jdbcType=BIGINT}, #{ghId,jdbcType=VARCHAR}, #{publishDate,jdbcType=VARCHAR}, 
+      #{userGroupId,jdbcType=INTEGER}, #{openId,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}
+      )
+  </insert>
+  <insert id="batchInsert" parameterType="java.util.List">
+    INSERT INTO long_articles_group_send_open_id (gh_id, publish_date, user_group_id, open_id)
+    VALUES
+    <foreach collection="list" item="item" separator=",">
+      (#{item.ghId,jdbcType=VARCHAR}, #{item.publishDate,jdbcType=VARCHAR},
+      #{item.userGroupId,jdbcType=INTEGER}, #{item.openId,jdbcType=VARCHAR})
+    </foreach>
+  </insert>
+  <insert id="insertSelective" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenId">
+    insert into long_articles_group_send_open_id
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </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="openId != null">
+        open_id,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </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="openId != null">
+        #{openId,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenIdExample" resultType="java.lang.Long">
+    select count(*) from long_articles_group_send_open_id
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update long_articles_group_send_open_id
+    <set>
+      <if test="record.id != null">
+        id = #{record.id,jdbcType=BIGINT},
+      </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.openId != null">
+        open_id = #{record.openId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.createTime != null">
+        create_time = #{record.createTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update long_articles_group_send_open_id
+    set id = #{record.id,jdbcType=BIGINT},
+      gh_id = #{record.ghId,jdbcType=VARCHAR},
+      publish_date = #{record.publishDate,jdbcType=VARCHAR},
+      user_group_id = #{record.userGroupId,jdbcType=INTEGER},
+      open_id = #{record.openId,jdbcType=VARCHAR},
+      create_time = #{record.createTime,jdbcType=TIMESTAMP}
+    <if test="_parameter != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenId">
+    update long_articles_group_send_open_id
+    <set>
+      <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="openId != null">
+        open_id = #{openId,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendOpenId">
+    update long_articles_group_send_open_id
+    set gh_id = #{ghId,jdbcType=VARCHAR},
+      publish_date = #{publishDate,jdbcType=VARCHAR},
+      user_group_id = #{userGroupId,jdbcType=INTEGER},
+      open_id = #{openId,jdbcType=VARCHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>

+ 42 - 5
long-article-server/src/main/resources/mapper/longarticle/GroupSendResultMapper.xml

@@ -15,6 +15,8 @@
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
     <result column="recycle_status" jdbcType="INTEGER" property="recycleStatus" />
     <result column="trace_id" jdbcType="VARCHAR" property="traceId" />
+    <result column="publish_timestamp" jdbcType="BIGINT" property="publishTimestamp" />
+    <result column="sent_count" jdbcType="INTEGER" property="sentCount" />
   </resultMap>
   <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult">
     <result column="url" jdbcType="LONGVARCHAR" property="url" />
@@ -79,7 +81,8 @@
   </sql>
   <sql id="Base_Column_List">
     id, account_name, gh_id, publish_date, user_group_id, content_id, publish_content_id, 
-    push_id, `status`, create_time, update_time, recycle_status, trace_id
+    push_id, `status`, create_time, update_time, recycle_status, trace_id, publish_timestamp, 
+    sent_count
   </sql>
   <sql id="Blob_Column_List">
     url
@@ -143,12 +146,14 @@
       publish_date, user_group_id, content_id, 
       publish_content_id, push_id, `status`, 
       create_time, update_time, recycle_status, 
-      trace_id, url)
+      trace_id, publish_timestamp, sent_count, 
+      url)
     values (#{id,jdbcType=BIGINT}, #{accountName,jdbcType=VARCHAR}, #{ghId,jdbcType=VARCHAR}, 
       #{publishDate,jdbcType=VARCHAR}, #{userGroupId,jdbcType=INTEGER}, #{contentId,jdbcType=VARCHAR}, 
       #{publishContentId,jdbcType=VARCHAR}, #{pushId,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, 
       #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, #{recycleStatus,jdbcType=INTEGER}, 
-      #{traceId,jdbcType=VARCHAR}, #{url,jdbcType=LONGVARCHAR})
+      #{traceId,jdbcType=VARCHAR}, #{publishTimestamp,jdbcType=BIGINT}, #{sentCount,jdbcType=INTEGER}, 
+      #{url,jdbcType=LONGVARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.longarticle.model.po.longarticle.GroupSendResult">
     insert into long_articles_group_send_result
@@ -192,6 +197,12 @@
       <if test="traceId != null">
         trace_id,
       </if>
+      <if test="publishTimestamp != null">
+        publish_timestamp,
+      </if>
+      <if test="sentCount != null">
+        sent_count,
+      </if>
       <if test="url != null">
         url,
       </if>
@@ -236,6 +247,12 @@
       <if test="traceId != null">
         #{traceId,jdbcType=VARCHAR},
       </if>
+      <if test="publishTimestamp != null">
+        #{publishTimestamp,jdbcType=BIGINT},
+      </if>
+      <if test="sentCount != null">
+        #{sentCount,jdbcType=INTEGER},
+      </if>
       <if test="url != null">
         #{url,jdbcType=LONGVARCHAR},
       </if>
@@ -289,6 +306,12 @@
       <if test="record.traceId != null">
         trace_id = #{record.traceId,jdbcType=VARCHAR},
       </if>
+      <if test="record.publishTimestamp != null">
+        publish_timestamp = #{record.publishTimestamp,jdbcType=BIGINT},
+      </if>
+      <if test="record.sentCount != null">
+        sent_count = #{record.sentCount,jdbcType=INTEGER},
+      </if>
       <if test="record.url != null">
         url = #{record.url,jdbcType=LONGVARCHAR},
       </if>
@@ -312,6 +335,8 @@
       update_time = #{record.updateTime,jdbcType=TIMESTAMP},
       recycle_status = #{record.recycleStatus,jdbcType=INTEGER},
       trace_id = #{record.traceId,jdbcType=VARCHAR},
+      publish_timestamp = #{record.publishTimestamp,jdbcType=BIGINT},
+      sent_count = #{record.sentCount,jdbcType=INTEGER},
       url = #{record.url,jdbcType=LONGVARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -331,7 +356,9 @@
       create_time = #{record.createTime,jdbcType=TIMESTAMP},
       update_time = #{record.updateTime,jdbcType=TIMESTAMP},
       recycle_status = #{record.recycleStatus,jdbcType=INTEGER},
-      trace_id = #{record.traceId,jdbcType=VARCHAR}
+      trace_id = #{record.traceId,jdbcType=VARCHAR},
+      publish_timestamp = #{record.publishTimestamp,jdbcType=BIGINT},
+      sent_count = #{record.sentCount,jdbcType=INTEGER}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -375,6 +402,12 @@
       <if test="traceId != null">
         trace_id = #{traceId,jdbcType=VARCHAR},
       </if>
+      <if test="publishTimestamp != null">
+        publish_timestamp = #{publishTimestamp,jdbcType=BIGINT},
+      </if>
+      <if test="sentCount != null">
+        sent_count = #{sentCount,jdbcType=INTEGER},
+      </if>
       <if test="url != null">
         url = #{url,jdbcType=LONGVARCHAR},
       </if>
@@ -395,6 +428,8 @@
       update_time = #{updateTime,jdbcType=TIMESTAMP},
       recycle_status = #{recycleStatus,jdbcType=INTEGER},
       trace_id = #{traceId,jdbcType=VARCHAR},
+      publish_timestamp = #{publishTimestamp,jdbcType=BIGINT},
+      sent_count = #{sentCount,jdbcType=INTEGER},
       url = #{url,jdbcType=LONGVARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -411,7 +446,9 @@
       create_time = #{createTime,jdbcType=TIMESTAMP},
       update_time = #{updateTime,jdbcType=TIMESTAMP},
       recycle_status = #{recycleStatus,jdbcType=INTEGER},
-      trace_id = #{traceId,jdbcType=VARCHAR}
+      trace_id = #{traceId,jdbcType=VARCHAR},
+      publish_timestamp = #{publishTimestamp,jdbcType=BIGINT},
+      sent_count = #{sentCount,jdbcType=INTEGER}
     where id = #{id,jdbcType=BIGINT}
   </update>
 </mapper>

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

@@ -66,8 +66,10 @@
 <!--        <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_group_send_result" domainObjectName="GroupSendResult" alias=""/>-->
-        <table tableName="video_keywords_map" domainObjectName="VideoKeywordsMap" alias=""/>
+        <table tableName="long_articles_group_send_result" domainObjectName="GroupSendResult" alias=""/>
+        <table tableName="long_articles_group_send_open_id" domainObjectName="GroupSendOpenId" alias=""/>
+
+<!--        <table tableName="video_keywords_map" domainObjectName="VideoKeywordsMap" alias=""/>-->
 
         <!--                <table tableName="long_articles_publish_miniprogram" domainObjectName="PublishMiniprogram" alias=""/>-->
 <!--        <table tableName="get_off_videos" domainObjectName="OffVideo" alias=""/>-->