Authored by 张帅

同步文章

Showing 36 changed files with 1742 additions and 10 deletions
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassArticleBlock;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface GrassArticleBlockRepository extends JpaRepository<GrassArticleBlock, Integer>{
List<GrassArticleBlock> findAllByArticleIdInAndStatusIs( List<Integer> articleId, Integer status);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassArticleLabel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface GrassArticleLabelRepository extends JpaRepository<GrassArticleLabel, Integer>{
List<GrassArticleLabel> findAllByArticleIdInAndAuthStatusIn(List<Integer> articleId, List<Integer> status);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassArticlePraise;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface GrassArticlePraiseRepository extends JpaRepository<GrassArticlePraise, Integer>{
GrassArticlePraise findByUid(Integer uid);
List<GrassArticlePraise> findAllByArticleIdIn(List<Integer> list);
int countByCreateTimeBetween(Integer startTime, Integer endTime);
List<GrassArticlePraise> findAllByCreateTimeBetween(Integer startTime, Integer endTime, Pageable pageable);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassArticleProduct;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface GrassArticleProductRepository extends JpaRepository<GrassArticleProduct, Integer>{
List<GrassArticleProduct> findAllByArticleIdInAndStatusIs(List<Integer> articleId, Integer status);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassArticle;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface GrassArticleRepository extends JpaRepository<GrassArticle, Integer>{
int countByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(long startTime, long endTime,List<Integer> list,List<Integer> statusList);
List<GrassArticle> findAllByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(long startTime, long endTime,List<Integer> list,List<Integer> statusList, Pageable pageable);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassLabel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface GrassLabelRepository extends JpaRepository<GrassLabel, Integer>{
List<GrassLabel> findAllByIdIn(List<Integer> labelIds);
}
... ...
... ... @@ -69,6 +69,8 @@ public class GrassArticle extends BaseEntity implements Serializable {
@Column(name = "author_type")
private Integer authorType;
@Column(name = "authorize_account")
private String authorizeAccount;
public Integer getAuthorUid() {
return authorUid;
... ... @@ -181,4 +183,12 @@ public class GrassArticle extends BaseEntity implements Serializable {
public void setFavoriteCount(Integer favoriteCount) {
this.favoriteCount = favoriteCount;
}
public String getAuthorizeAccount() {
return authorizeAccount;
}
public void setAuthorizeAccount(String authorizeAccount) {
this.authorizeAccount = authorizeAccount;
}
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "grass_article_block")
@EqualsAndHashCode(callSuper = true)
public class GrassArticleBlock extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3167294822745534819L;
@Column(name = "article_id")
private Integer articleId;
@Column(name = "content_data")
private String contentData;
private Integer status;
@Column(name = "template_key")
private String templateKey;
@Column(name = "create_time")
private Long createTime;
@Column(name = "update_time")
private Long updateTime;
@Column(name = "order_by")
private Integer orderBy;
public Integer getArticleId() {
return articleId;
}
public void setArticleId(Integer articleId) {
this.articleId = articleId;
}
public String getContentData() {
return contentData;
}
public void setContentData(String contentData) {
this.contentData = contentData;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getTemplateKey() {
return templateKey;
}
public void setTemplateKey(String templateKey) {
this.templateKey = templateKey;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public Integer getOrderBy() {
return orderBy;
}
public void setOrderBy(Integer orderBy) {
this.orderBy = orderBy;
}
}
\ No newline at end of file
... ...
package com.yoho.datasync.fullsync.dal.repository.grass.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "grass_article_label")
@EqualsAndHashCode(callSuper = true)
public class GrassArticleLabel extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3167294822745534819L;
@Column(name = "article_id")
private Integer articleId;
@Column(name = "label_id")
private Integer labelId;
@Column(name = "auth_status")
private Integer authStatus;
@Column(name = "create_time")
private Long createTime;
public Integer getArticleId() {
return articleId;
}
public void setArticleId(Integer articleId) {
this.articleId = articleId;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Integer getLabelId() {
return labelId;
}
public void setLabelId(Integer labelId) {
this.labelId = labelId;
}
public Integer getAuthStatus() {
return authStatus;
}
public void setAuthStatus(Integer authStatus) {
this.authStatus = authStatus;
}
}
\ No newline at end of file
... ...
... ... @@ -15,7 +15,7 @@ public class GrassArticlePraise extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2270181821264128734L;
@Column(name = "article_d")
@Column(name = "article_id")
private Integer articleId;
private Integer uid;
... ...
package com.yoho.datasync.fullsync.dal.repository.grass.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "grass_article_product")
@EqualsAndHashCode(callSuper = true)
public class GrassArticleProduct extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3167294822745534819L;
@Column(name = "article_id")
private Integer articleId;
@Column(name = "product_skn")
private Integer productSkn;
private Integer status;
@Column(name = "product_source")
private Integer productSource;
@Column(name = "create_time")
private Long createTime;
@Column(name = "update_time")
private Long updateTime;
@Column(name = "order_by")
private Integer orderBy;
public Integer getArticleId() {
return articleId;
}
public void setArticleId(Integer articleId) {
this.articleId = articleId;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public Integer getOrderBy() {
return orderBy;
}
public void setOrderBy(Integer orderBy) {
this.orderBy = orderBy;
}
public Integer getProductSkn() {
return productSkn;
}
public void setProductSkn(Integer productSkn) {
this.productSkn = productSkn;
}
public Integer getProductSource() {
return productSource;
}
public void setProductSource(Integer productSource) {
this.productSource = productSource;
}
}
\ No newline at end of file
... ...
package com.yoho.datasync.fullsync.dal.repository.grass.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "grass_label")
@EqualsAndHashCode(callSuper = true)
public class GrassLabel extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3167294822745534819L;
@Column(name = "label_name")
private String labelName;
@Column(name = "group_id")
private Integer groupId;
private Integer status;
@Column(name = "visible_status")
private Integer visibleStatus;
@Column(name = "create_time")
private Integer createTime;
@Column(name = "update_time")
private Integer updateTime;
public String getLabelName() {
return labelName;
}
public void setLabelName(String labelName) {
this.labelName = labelName;
}
public Integer getGroupId() {
return groupId;
}
public void setGroupId(Integer groupId) {
this.groupId = groupId;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getVisibleStatus() {
return visibleStatus;
}
public void setVisibleStatus(Integer visibleStatus) {
this.visibleStatus = visibleStatus;
}
public Integer getCreateTime() {
return createTime;
}
public void setCreateTime(Integer createTime) {
this.createTime = createTime;
}
public Integer getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Integer updateTime) {
this.updateTime = updateTime;
}
}
\ No newline at end of file
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicArticleAudit;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PublicArticleAuditRepository extends JpaRepository<PublicArticleAudit, Integer>{
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicArticleBlock;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PublicArticleBlockRepository extends JpaRepository<PublicArticleBlock, Integer> {
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicArticleLabel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PublicArticleLabelRepository extends JpaRepository<PublicArticleLabel, Integer>{
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicArticleBlock;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicArticleProduct;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PublicArticleProductRepository extends JpaRepository<PublicArticleProduct, Integer> {
}
... ...
... ... @@ -4,7 +4,10 @@ import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicArticle;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PublicArticleRepository extends JpaRepository<PublicArticle, Integer> {
List<PublicArticle> findAllByRelateIdInAndArticleTypeIn(List<Integer> relateIds, List<Integer> types);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicLabel;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PublicLabelRepository extends JpaRepository<PublicLabel, Integer>{
List<PublicLabel> findAllByLabelNameIn(List<String> labelNames);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicUserPraise;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PublicUserPraiseRepository extends JpaRepository<PublicUserPraise, Integer>{
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "public_article_audit")
@EqualsAndHashCode(callSuper = true)
public class PublicArticleAudit extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3167294822745534819L;
@Column(name = "article_id")
private Integer articleId;
@Column(name = "audit_status")
private Integer auditStatus;
@Column(name = "audit_account")
private String auditAccount;
@Column(name = "audit_time")
private Long auditTime;
public Integer getAuditStatus() {
return auditStatus;
}
public void setAuditStatus(Integer auditStatus) {
this.auditStatus = auditStatus;
}
public String getAuditAccount() {
return auditAccount;
}
public void setAuditAccount(String auditAccount) {
this.auditAccount = auditAccount;
}
public Long getAuditTime() {
return auditTime;
}
public void setAuditTime(Long auditTime) {
this.auditTime = auditTime;
}
public Integer getArticleId() {
return articleId;
}
public void setArticleId(Integer articleId) {
this.articleId = articleId;
}
}
\ No newline at end of file
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "public_article_block")
@EqualsAndHashCode(callSuper = true)
public class PublicArticleBlock extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3167294822745534819L;
@Column(name = "article_id")
private Integer articleId;
@Column(name = "content_data")
private String contentData;
@Column(name = "content_type")
private String contentType;
@Column(name = "create_time")
private Long createTime;
@Column(name = "update_time")
private Long updateTime;
@Column(name = "order_by")
private Integer orderBy;
public Integer getArticleId() {
return articleId;
}
public void setArticleId(Integer articleId) {
this.articleId = articleId;
}
public String getContentData() {
return contentData;
}
public void setContentData(String contentData) {
this.contentData = contentData;
}
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public Integer getOrderBy() {
return orderBy;
}
public void setOrderBy(Integer orderBy) {
this.orderBy = orderBy;
}
}
\ No newline at end of file
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "public_article_label")
@EqualsAndHashCode(callSuper = true)
public class PublicArticleLabel extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3167294822745534819L;
@Column(name = "article_id")
private Integer articleId;
@Column(name = "label_id")
private Integer labelId;
@Column(name = "src_channel")
private Integer srcChannel;
@Column(name = "create_time")
private Long createTime;
public Integer getArticleId() {
return articleId;
}
public void setArticleId(Integer articleId) {
this.articleId = articleId;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Integer getLabelId() {
return labelId;
}
public void setLabelId(Integer labelId) {
this.labelId = labelId;
}
public Integer getSrcChannel() {
return srcChannel;
}
public void setSrcChannel(Integer srcChannel) {
this.srcChannel = srcChannel;
}
}
\ No newline at end of file
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "public_article_product")
@EqualsAndHashCode(callSuper = true)
public class PublicArticleProduct extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3167294822745534819L;
@Column(name = "article_id")
private Integer articleId;
@Column(name = "product_skn")
private Integer productSkn;
@Column(name = "product_type")
private Integer productType;
@Column(name = "create_time")
private Long createTime;
@Column(name = "order_by")
private Integer orderBy;
@Column(name = "src_channel")
private Integer srcChannel;
public Integer getArticleId() {
return articleId;
}
public void setArticleId(Integer articleId) {
this.articleId = articleId;
}
public Integer getOrderBy() {
return orderBy;
}
public void setOrderBy(Integer orderBy) {
this.orderBy = orderBy;
}
public Integer getProductSkn() {
return productSkn;
}
public void setProductSkn(Integer productSkn) {
this.productSkn = productSkn;
}
public Integer getProductType() {
return productType;
}
public void setProductType(Integer productType) {
this.productType = productType;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Integer getSrcChannel() {
return srcChannel;
}
public void setSrcChannel(Integer srcChannel) {
this.srcChannel = srcChannel;
}
}
\ No newline at end of file
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "public_label")
@EqualsAndHashCode(callSuper = true)
public class PublicLabel extends BaseEntity implements Serializable {
private static final long serialVersionUID = 3167294822745534819L;
@Column(name = "label_name")
private String labelName;
@Column(name = "group_id")
private Integer groupId;
private Integer status;
@Column(name = "src_channel")
private Integer srcChannel;
@Column(name = "relate_id")
private Integer relateId;
@Column(name = "is_visible")
private Integer isVisible;
@Column(name = "create_time")
private Long createTime;
@Column(name = "update_time")
private Long updateTime;
public String getLabelName() {
return labelName;
}
public void setLabelName(String labelName) {
this.labelName = labelName;
}
public Integer getGroupId() {
return groupId;
}
public void setGroupId(Integer groupId) {
this.groupId = groupId;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getIsVisible() {
return isVisible;
}
public void setIsVisible(Integer isVisible) {
this.isVisible = isVisible;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public Integer getSrcChannel() {
return srcChannel;
}
public void setSrcChannel(Integer srcChannel) {
this.srcChannel = srcChannel;
}
public Integer getRelateId() {
return relateId;
}
public void setRelateId(Integer relateId) {
this.relateId = relateId;
}
}
\ No newline at end of file
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "public_user_praise")
@EqualsAndHashCode(callSuper = true)
public class PublicUserPraise extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2778511431046016623L;
//点赞对象id
@Column(name = "target_id")
private Integer targetId;
//点赞者uid
@Column(name = "uid")
private Integer uid;
//文章类型1、对文章点赞 2、对评论点赞
@Column(name = "praise_type")
private Integer praiseType;
//状态(1-已点赞,2-已取消)
private Integer status;
@Column(name = "src_channel")
private Integer srcChannel;
//点赞数
@Column(name = "create_time")
private Long createTime;
@Column(name = "update_time")
private Long updateTime;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Integer getPraiseType() {
return praiseType;
}
public void setPraiseType(Integer praiseType) {
this.praiseType = praiseType;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getSrcChannel() {
return srcChannel;
}
public void setSrcChannel(Integer srcChannel) {
this.srcChannel = srcChannel;
}
public Integer getTargetId() {
return targetId;
}
public void setTargetId(Integer targetId) {
this.targetId = targetId;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
}
... ...
... ... @@ -47,6 +47,21 @@
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.13.sec01</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
... ...
package com.yoho.datasync.fullsync.constant;
public class ArticleStatusConstant {
public interface GrassArticleAuthorStatus{
//未审核
int NOT_AUDIT = 0;
//已审核
int PASS_AUDIT = 1;
//审核未通过
int NOT_PASS_AUDIT = 2;
//已删除
int HAS_DELETE = 3;
//草稿
int DRAFT = 9;
}
public interface PublicArticleAuditStatus{
//未审核
int NOT_AUDIT = 1;
//已审核
int PASS_AUDIT = 2;
//审核未通过
int NOT_PASS_AUDIT = 3;
}
public interface PublicArticleStatus{
//已删除
int HAS_DELETE = 2;
//草稿
int DRAFT = 0;
//正常
int NORMAL = 1;
}
}
... ...
package com.yoho.datasync.fullsync.constant;
public class UserPraiseConstant {
public static final int ARTICLE_PRAISE = 1;
public static final int COMMENT_PRAISE = 2;
public static final int HAS_PRAISED = 1;
public static final int CANCEL_PRAISED = 2;
}
... ...
package com.yoho.datasync.fullsync.controller;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassArticle;
import com.yoho.datasync.fullsync.service.IGrassArticleSyncService;
import com.yoho.datasync.fullsync.service.IGrassInteractiveDataSyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
... ... @@ -13,9 +13,19 @@ public class GrassDataSyncController {
@Autowired
private IGrassArticleSyncService grassArticleSyncService;
@Autowired
private IGrassInteractiveDataSyncService grassInteractiveDataSyncService;
@RequestMapping("/syncArticle")
public String testDataSource(@RequestParam("startTime") Long startTime, @RequestParam("endTime") Long endTime){
public String syncArticle(@RequestParam("startTime") Long startTime, @RequestParam("endTime") Long endTime){
return grassArticleSyncService.syncArticle(startTime, endTime);
}
@RequestMapping("/syncInteractiveData")
public String syncInteractiveData(@RequestParam("startTime") Long startTime, @RequestParam("endTime") Long endTime,
@RequestParam("timeType") Integer timeType, @RequestParam("syncType") Integer syncType){
return "";
return grassInteractiveDataSyncService.syncInteractiveData(startTime, endTime, timeType, syncType);
}
}
... ...
package com.yoho.datasync.fullsync.service;
public interface IGrassInteractiveDataSyncService {
String syncInteractiveData(Long startTime, Long endTime,
Integer timeType, Integer syncType);
}
... ...
package com.yoho.datasync.fullsync.service.impl;
import com.yoho.datasync.fullsync.dal.repository.grass.GrassArticleRepository;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.yoho.datasync.fullsync.constant.ArticleStatusConstant;
import com.yoho.datasync.fullsync.dal.repository.grass.*;
import com.yoho.datasync.fullsync.dal.repository.grass.model.*;
import com.yoho.datasync.fullsync.dal.repository.pcms.*;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.*;
import com.yoho.datasync.fullsync.service.IGrassArticleSyncService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
@Service
public class GrassArticleSyncServiceImpl implements IGrassArticleSyncService {
private Logger logger = LoggerFactory.getLogger(GrassArticleSyncServiceImpl.class);
@Autowired
private GrassArticleRepository grassArticleRepository;
@Autowired
private PublicArticleRepository publicArticleRepository;
@Autowired
private GrassArticleBlockRepository grassArticleBlockRepository;
@Autowired
private PublicArticleBlockRepository publicArticleBlockRepository;
@Autowired
private GrassArticleProductRepository grassArticleProductRepository;
@Autowired
private PublicArticleProductRepository publicArticleProductRepository;
@Autowired
private GrassArticleLabelRepository grassArticleLabelRepository;
@Autowired
private PublicArticleLabelRepository publicArticleLabelRepository;
@Autowired
private GrassLabelRepository grassLabelRepository;
@Autowired
private PublicLabelRepository publicLabelRepository;
@Autowired
private PublicArticleAuditRepository publicArticleAuditRepository;
public static List<Integer> needSyncArticleType = new ArrayList<>();
public static List<Integer> needSyncArticleStatus = new ArrayList<>();
static {
needSyncArticleType.add(1);
needSyncArticleType.add(2);
needSyncArticleType.add(4);
needSyncArticleStatus.add(0);
needSyncArticleStatus.add(1);
needSyncArticleStatus.add(9);
}
@Override
public String syncArticle(Long startTime, Long endTime) {
return null;
logger.info("syncArticle begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int pageSize = 100;
int total = grassArticleRepository.countByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(startTime, endTime,needSyncArticleType,needSyncArticleStatus);
logger.info("syncArticle get grassArticle count is {}", total);
int totalPage = total % pageSize ==0 ? total / pageSize : (total / pageSize)+1;
try{
//每次查询100条,增加detail
for (int index=0; index < totalPage; index++) {
int indexPage = index;
es.execute(() -> {
syncArticle(startTime, endTime, indexPage, pageSize);
});
}
}finally {
es.shutdown();
}
return String.valueOf(total);
}
private void syncArticle(long startTime , long endTime, int indexPage, int pageSize){
//同步主表 拿到自增主键 同步文章审核信息
List<PublicArticle> publicArticleList = syncPublicArticle(startTime, endTime, indexPage, pageSize);
//同步block表
syncArticleBlock(publicArticleList);
//同步product表
syncArticleProduct(publicArticleList);
//同步label 和 article_label表
syncArticleLabel(publicArticleList);
}
//同步文章主表信息, 拿到主表生成的新的主键id
private List<PublicArticle> syncPublicArticle(long startTime, long endTime, int indexPage, int pageSize){
List<PublicArticle> savedList = new ArrayList<>();
Pageable pageReq = PageRequest.of(indexPage, pageSize);
List<GrassArticle> grassArticleList = grassArticleRepository.findAllByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(
startTime, endTime,needSyncArticleType,needSyncArticleStatus,pageReq);
try{
List<PublicArticle> publicArticleList = new ArrayList<>();
grassArticleList.forEach(grassArticle -> {
PublicArticle publicArticle = convertPublicArticle(grassArticle);
publicArticleList.add(publicArticle);
});
savedList = publicArticleRepository.saveAll(publicArticleList);
}catch (Exception e){
logger.warn(" syncPublicArticle error with exception e {}", e);
}
//同步文章审核信息
syncArticleAudit(grassArticleList, savedList);
return savedList;
}
//同步articleBlock表信息: 先根据article_id去grass库 查到grass_article_block表的数据,按照格式组装 并关联新的主表id 入库
private void syncArticleBlock(List<PublicArticle> publicArticleList){
if(CollectionUtils.isEmpty(publicArticleList)){
return;
}
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicArticleList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
List<Integer> grassArticleIds = publicArticleList.stream().map(PublicArticle::getRelateId).collect(Collectors.toList());
List<GrassArticleBlock> blockList = grassArticleBlockRepository.findAllByArticleIdInAndStatusIs(grassArticleIds, 1);
Map<Integer, List<GrassArticleBlock>> blocksMap = getBlocksMap(blockList);
List<PublicArticleBlock> needSyncBlocks = buildPublicBlocks(blocksMap, publicArticleIdAndGrassIdMap);
if(!CollectionUtils.isEmpty(needSyncBlocks)){
publicArticleBlockRepository.saveAll(needSyncBlocks);
}
logger.info("syncArticleBlock success , sync count is {}",needSyncBlocks.size());
}
private List<PublicArticleBlock> buildPublicBlocks(Map<Integer, List<GrassArticleBlock>> blocksMap, Map<Integer, Integer> publicArticleIdAndGrassIdMap){
List<PublicArticleBlock> publicArticleBlockList = new ArrayList<>();
publicArticleIdAndGrassIdMap.keySet().forEach(grassArticleId -> {
Integer publicArticleId = publicArticleIdAndGrassIdMap.get(grassArticleId);
List<GrassArticleBlock> grassArticleBlocks = blocksMap.get(grassArticleId);
List<PublicArticleBlock> singleArticleList = convertPublicArticleBlocks(grassArticleBlocks, publicArticleId);
publicArticleBlockList.addAll(singleArticleList);
});
return publicArticleBlockList;
}
private Map<Integer, List<GrassArticleBlock>> getBlocksMap(List<GrassArticleBlock> blocks){
Map<Integer, List<GrassArticleBlock>> resultMap = new HashMap<>();
blocks.forEach(grassArticleBlock -> {
List<GrassArticleBlock> blockList = resultMap.get(grassArticleBlock.getArticleId());
if(blockList == null){
blockList = new ArrayList<>();
}
blockList.add(grassArticleBlock);
resultMap.put(grassArticleBlock.getArticleId(), blockList);
});
return resultMap;
}
private PublicArticle convertPublicArticle(GrassArticle grassArticle){
PublicArticle publicArticle = new PublicArticle();
publicArticle.setAuthorUid(grassArticle.getAuthorUid());
publicArticle.setArticleType(grassArticle.getArticleType());
publicArticle.setRelateId(grassArticle.getId());
publicArticle.setCreateTime(grassArticle.getCreateTime());
publicArticle.setUpdateTime(grassArticle.getUpdateTime());
publicArticle.setAuthorType(grassArticle.getAuthorType());
publicArticle.setArticleTitle("");
publicArticle.setMinRelateId(grassArticle.getRelateId());
publicArticle.setPraiseNum(grassArticle.getPraiseCount());
publicArticle.setFavoriteNum(grassArticle.getFavoriteCount());
publicArticle.setAuditStatus(getArticleAuditStatus(grassArticle.getAuthStatus()));
publicArticle.setStatus(getArticleStatus(grassArticle.getAuthStatus()));
publicArticle.setPublishTime(grassArticle.getCreateTime());
return publicArticle;
}
//两张表审核状态转换
private int getArticleAuditStatus(int authStatus){
switch (authStatus){
case ArticleStatusConstant.GrassArticleAuthorStatus.NOT_AUDIT:
return ArticleStatusConstant.PublicArticleAuditStatus.NOT_AUDIT;
case ArticleStatusConstant.GrassArticleAuthorStatus.PASS_AUDIT:
return ArticleStatusConstant.PublicArticleAuditStatus.PASS_AUDIT;
case ArticleStatusConstant.GrassArticleAuthorStatus.NOT_PASS_AUDIT:
return ArticleStatusConstant.PublicArticleAuditStatus.NOT_PASS_AUDIT;
default:
return ArticleStatusConstant.PublicArticleAuditStatus.NOT_AUDIT;
}
}
// 草稿箱和删除状态转换
private int getArticleStatus(int authStatus){
switch (authStatus){
case ArticleStatusConstant.GrassArticleAuthorStatus.HAS_DELETE:
return ArticleStatusConstant.PublicArticleStatus.HAS_DELETE;
case ArticleStatusConstant.GrassArticleAuthorStatus.DRAFT:
return ArticleStatusConstant.PublicArticleStatus.DRAFT;
default:
return ArticleStatusConstant.PublicArticleStatus.NORMAL;
}
}
//组装每个新的articleID 对应的 blocklist
private List<PublicArticleBlock> convertPublicArticleBlocks(List<GrassArticleBlock> grassArticleBlocks,Integer publicArticleId){
if (CollectionUtils.isEmpty(grassArticleBlocks)){
return new ArrayList<>();
}
List<PublicArticleBlock> blocks = new ArrayList<>();
boolean hasCover =false;
grassArticleBlocks = grassArticleBlocks.stream().sorted((o1, o2) ->{
if(o1.getOrderBy()> o2.getOrderBy()){
return 1;
}else {
return -1;
}
}).collect(Collectors.toList());
for (GrassArticleBlock grassArticleBlock:grassArticleBlocks) {
boolean isCover = false;
//第一个image为默认封面图
if("image".equals(grassArticleBlock.getTemplateKey())){
if(!hasCover){
isCover =true;
hasCover=true;
}
}
PublicArticleBlock publicArticleBlock = new PublicArticleBlock();
publicArticleBlock.setArticleId(publicArticleId);
publicArticleBlock.setContentData(getBlock(grassArticleBlock.getTemplateKey(),grassArticleBlock.getContentData(),isCover));
publicArticleBlock.setContentType(grassArticleBlock.getTemplateKey());
publicArticleBlock.setCreateTime(grassArticleBlock.getCreateTime());
publicArticleBlock.setUpdateTime(grassArticleBlock.getUpdateTime());
publicArticleBlock.setOrderBy(grassArticleBlock.getOrderBy());
blocks.add(publicArticleBlock);
}
return blocks;
}
//组装block的content_data 字段,
private String getBlock(String templatName, String data, boolean isCover){
JSONObject dataObject = new JSONObject();
String dataString = JSONObject.parseObject(data).getString("data");
JSONObject block = JSONObject.parseObject(dataString);
switch (templatName){
case "image":
dataObject.put("url",block.getString("src"));
dataObject.put("type","image");
dataObject.put("width",block.getString("width"));
dataObject.put("height",block.getString("height"));
dataObject.put("actionUrl","");
if(isCover){
dataObject.put("isCoverImg","Y");
}else{
dataObject.put("isCoverImg","N");
}
break;
case "text":
dataObject.put("type","text");
dataObject.put("content",block.getString("text"));
break;
default:break;
}
return dataObject.toJSONString();
}
//同步文章关联商品表
private void syncArticleProduct(List<PublicArticle> publicArticleList){
if(CollectionUtils.isEmpty(publicArticleList)){
return;
}
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicArticleList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
List<Integer> grassArticleIds = publicArticleList.stream().map(PublicArticle::getRelateId).collect(Collectors.toList());
List<GrassArticleProduct> productList = grassArticleProductRepository.findAllByArticleIdInAndStatusIs(grassArticleIds, 1);
Map<Integer, List<GrassArticleProduct>> productMap = getProductMap(productList);
List<PublicArticleProduct> needSyncProducts = buildPublicProduct(productMap, publicArticleIdAndGrassIdMap);
if(!CollectionUtils.isEmpty(needSyncProducts)){
publicArticleProductRepository.saveAll(needSyncProducts);
}
logger.info("syncArticleProduct success , sync count is {}",needSyncProducts.size());
}
private Map<Integer, List<GrassArticleProduct>> getProductMap(List<GrassArticleProduct> productList){
Map<Integer, List<GrassArticleProduct>> resultMap = new HashMap<>();
productList.forEach(grassArticleProduct -> {
List<GrassArticleProduct> products = resultMap.get(grassArticleProduct.getArticleId());
if(products == null){
products = new ArrayList<>();
}
products.add(grassArticleProduct);
resultMap.put(grassArticleProduct.getArticleId(), products);
});
return resultMap;
}
private List<PublicArticleProduct> buildPublicProduct(Map<Integer, List<GrassArticleProduct>> productMap, Map<Integer, Integer> publicArticleIdAndGrassIdMap){
List<PublicArticleProduct> publicArticleProductList = new ArrayList<>();
publicArticleIdAndGrassIdMap.keySet().forEach(grassArticleId -> {
Integer publicArticleId = publicArticleIdAndGrassIdMap.get(grassArticleId);
List<GrassArticleProduct> grassArticleBlocks = productMap.get(grassArticleId);
List<PublicArticleProduct> singleArticleList = convertPublicArticleProducts(grassArticleBlocks, publicArticleId);
publicArticleProductList.addAll(singleArticleList);
});
return publicArticleProductList;
}
private List<PublicArticleProduct> convertPublicArticleProducts(List<GrassArticleProduct> grassArticleProduct, Integer publicArticleId){
if (CollectionUtils.isEmpty(grassArticleProduct)){
return new ArrayList<>();
}
List<PublicArticleProduct> products = new ArrayList<>();
grassArticleProduct.forEach(product -> {
PublicArticleProduct publicArticleProduct = new PublicArticleProduct();
publicArticleProduct.setArticleId(publicArticleId);
publicArticleProduct.setOrderBy(product.getOrderBy());
publicArticleProduct.setProductSkn(product.getProductSkn());
publicArticleProduct.setProductType(product.getProductSource());
publicArticleProduct.setCreateTime(product.getCreateTime());
publicArticleProduct.setSrcChannel(1);
products.add(publicArticleProduct);
});
return products;
}
//同步文章和标签的关联关系: 1、先同步文章关联的标签 2、再同步文章和标签的关联关系
private void syncArticleLabel(List<PublicArticle> publicArticleList){
if(CollectionUtils.isEmpty(publicArticleList)){
return;
}
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicArticleList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
List<Integer> grassArticleIds = publicArticleList.stream().map(PublicArticle::getRelateId).collect(Collectors.toList());
List<Integer> needSyncStatus = Lists.newArrayList(0,1);
List<GrassArticleLabel> grassArticleLabels = grassArticleLabelRepository.findAllByArticleIdInAndAuthStatusIn(grassArticleIds, needSyncStatus);
//这批文章没有标签关联关系需要同步
if(CollectionUtils.isEmpty(grassArticleLabels)){
return;
}
List<Integer> grassLabelIds = grassArticleLabels.stream().map(GrassArticleLabel::getLabelId).distinct().collect(Collectors.toList());
List<GrassLabel> grassLabelList = grassLabelRepository.findAllByIdIn(grassLabelIds);
List<PublicLabel> publicLabelList = getPublicbLabels(grassLabelList);
Map<String, Integer> labelNameAndPublicLabelIdMap = getLabelNameAndPublicLabelId(publicLabelList);
Map<Integer, String> grassLabelIdAndLabelNameMap = getLabelNameAndGrassId(grassLabelList);
List<PublicArticleLabel> publicArticleLabelList = buildPublicArticleLabel(publicArticleIdAndGrassIdMap,labelNameAndPublicLabelIdMap,
grassLabelIdAndLabelNameMap,grassArticleLabels );
if(!CollectionUtils.isEmpty(publicArticleLabelList)){
publicArticleLabelRepository.saveAll(publicArticleLabelList);
}
}
private List<PublicLabel> buildPublicLabels(List<GrassLabel> grassLabelList, List<String> existNames){
List<PublicLabel> resultList = Lists.newArrayList();
if(CollectionUtils.isEmpty(grassLabelList)){
return resultList;
}
grassLabelList.forEach(grassLabel -> {
if(existNames.contains(grassLabel.getLabelName())){
return;
}
PublicLabel publicLabel = new PublicLabel();
publicLabel.setLabelName(grassLabel.getLabelName());
publicLabel.setGroupId(grassLabel.getGroupId());
publicLabel.setStatus(grassLabel.getStatus());
publicLabel.setIsVisible(grassLabel.getVisibleStatus() == 1 ? 1 : 2);
publicLabel.setCreateTime((long) (grassLabel.getCreateTime()) * 1000);
publicLabel.setUpdateTime((long) (Optional.ofNullable(grassLabel.getUpdateTime()).orElse(0)) * 1000);
publicLabel.setSrcChannel(1);
publicLabel.setRelateId(grassLabel.getId());
resultList.add(publicLabel);
});
return resultList;
}
private Map<String, Integer> getLabelNameAndPublicLabelId(List<PublicLabel> publicLabelList){
Map<String, Integer> labelNameAndPublicLabelIdMap = Maps.newHashMap();
publicLabelList.forEach(publicLabel -> {
labelNameAndPublicLabelIdMap.put(publicLabel.getLabelName(),publicLabel.getId());
});
return labelNameAndPublicLabelIdMap;
}
private Map<Integer, String> getLabelNameAndGrassId(List<GrassLabel> grassLabelList){
Map<Integer, String> GrassLabelIdAndlabelNameMap = Maps.newHashMap();
grassLabelList.forEach(grassLabel -> {
GrassLabelIdAndlabelNameMap.put(grassLabel.getId(),grassLabel.getLabelName());
});
return GrassLabelIdAndlabelNameMap;
}
private List<PublicArticleLabel> buildPublicArticleLabel(Map<Integer, Integer> publicArticleIdAndGrassIdMap,Map<String, Integer> labelNameAndPublicLabelIdMap,
Map<Integer, String> grassLabelIdAndlabelNameMap, List<GrassArticleLabel> grassArticleLabels){
List<PublicArticleLabel> resultList = Lists.newArrayList();
grassArticleLabels.forEach(grassArticleLabel -> {
String labelName = grassLabelIdAndlabelNameMap.get(grassArticleLabel.getLabelId());
PublicArticleLabel publicArticleLabel = new PublicArticleLabel();
publicArticleLabel.setArticleId(publicArticleIdAndGrassIdMap.get(grassArticleLabel.getArticleId()));
publicArticleLabel.setCreateTime(grassArticleLabel.getCreateTime());
publicArticleLabel.setLabelId(labelNameAndPublicLabelIdMap.get(labelName));
publicArticleLabel.setSrcChannel(1);
resultList.add(publicArticleLabel);
});
return resultList;
}
private List<PublicLabel> getPublicbLabels(List<GrassLabel> grassLabelList){
List<PublicLabel> result = Lists.newArrayList();
if(CollectionUtils.isEmpty(grassLabelList)){
return result;
}
//剔除已经存在的标签
List<String> allLabelNames = grassLabelList.stream().map(GrassLabel::getLabelName).collect(Collectors.toList());
List<PublicLabel> existPublicLabels = publicLabelRepository.findAllByLabelNameIn(allLabelNames);
List<String> existLabelName = existPublicLabels.stream().map(PublicLabel::getLabelName).collect(Collectors.toList());
List<PublicLabel> newpublicLabelList = buildPublicLabels(grassLabelList,existLabelName);
newpublicLabelList = publicLabelRepository.saveAll(newpublicLabelList);
result.addAll(existPublicLabels);
result.addAll(newpublicLabelList);
return result;
}
private void syncArticleAudit(List<GrassArticle> grassArticleList,List<PublicArticle> publicArticleList){
if(CollectionUtils.isEmpty(publicArticleList) || CollectionUtils.isEmpty(grassArticleList) ){
return;
}
List<PublicArticleAudit> publicArticleAuditList = Lists.newArrayList();
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicArticleList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
grassArticleList.forEach(grassArticle -> {
if(StringUtils.isEmpty(grassArticle.getAuthorizeAccount())){
return;
}
PublicArticleAudit publicArticleAudit = new PublicArticleAudit();
publicArticleAudit.setAuditStatus(grassArticle.getAuthStatus());
publicArticleAudit.setAuditAccount(grassArticle.getAuthorizeAccount());
publicArticleAudit.setAuditTime(grassArticle.getAuthTime());
publicArticleAudit.setArticleId(publicArticleIdAndGrassIdMap.get(grassArticle.getId()));
publicArticleAuditList.add(publicArticleAudit);
});
if(!CollectionUtils.isEmpty(publicArticleAuditList)){
publicArticleAuditRepository.saveAll(publicArticleAuditList);
}
logger.info("syncArticleAudit success, total is {}",publicArticleAuditList.size());
}
}
... ...
package com.yoho.datasync.fullsync.service.impl;
import com.google.common.collect.Lists;
import com.yoho.datasync.fullsync.constant.UserPraiseConstant;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import com.yoho.datasync.fullsync.dal.repository.grass.GrassArticlePraiseRepository;
import com.yoho.datasync.fullsync.dal.repository.grass.GrassArticleRepository;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassArticle;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassArticlePraise;
import com.yoho.datasync.fullsync.dal.repository.pcms.PublicArticleRepository;
import com.yoho.datasync.fullsync.dal.repository.pcms.PublicUserPraiseRepository;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicArticle;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicUserPraise;
import com.yoho.datasync.fullsync.service.IGrassInteractiveDataSyncService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import static com.yoho.datasync.fullsync.service.impl.GrassArticleSyncServiceImpl.needSyncArticleStatus;
import static com.yoho.datasync.fullsync.service.impl.GrassArticleSyncServiceImpl.needSyncArticleType;
@Service
public class GrassInteractiveDataSyncServiceImpl implements IGrassInteractiveDataSyncService {
private Logger logger = LoggerFactory.getLogger(GrassInteractiveDataSyncServiceImpl.class);
@Autowired
private GrassArticleRepository grassArticleRepository;
@Autowired
private GrassArticlePraiseRepository grassArticlePraiseRepository;
@Autowired
private PublicUserPraiseRepository publicUserPraiseRepository;
@Autowired
private PublicArticleRepository publicArticleRepository;
private static final int PRAISE = 1;
private static final int COMMENT = 2;
private static final int FAVORITE = 3;
private static final int ATTENTION = 4;
private static final int MASTER = 1;
private static final int SLAVE = 2;
@Override
public String syncInteractiveData(Long startTime, Long endTime, Integer timeType, Integer syncType) {
// syncType : 1、同步点赞 2、 同步评论 3、 同步收藏 4、 同步关注
switch (syncType){
case PRAISE:
syncPraise(startTime, endTime, timeType);
break;
default:
break;
}
return "success";
}
private void syncPraise(Long startTime, Long endTime, Integer timeType){
switch (timeType){
case MASTER:
syncPraiseByArticle(startTime,endTime);
break;
case SLAVE:
syncPraiseBySelf(startTime,endTime);
break;
}
}
private void syncPraiseByArticle(Long startTime, Long endTime){
logger.info("syncPraiseByArticle begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int pageSize = 100;
int total = grassArticleRepository.countByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(startTime, endTime,needSyncArticleType,needSyncArticleStatus);
logger.info("syncPraiseByArticle get grassArticle count is {}", total);
int totalPage = total % pageSize ==0 ? total / pageSize : (total / pageSize)+1;
try{
//每次查询100条,增加detail
for (int index=0; index < totalPage; index++) {
int indexPage = index;
es.execute(() -> {
syncPraiseByArticlePage(startTime, endTime, indexPage, pageSize);
});
}
}finally {
es.shutdown();
}
}
private void syncPraiseByArticlePage(Long startTime, Long endTime, int indexPage, int pageSize){
Pageable pageReq = PageRequest.of(indexPage, pageSize);
List<GrassArticle> grassArticleList = grassArticleRepository.findAllByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(
startTime, endTime,needSyncArticleType,needSyncArticleStatus,pageReq);
List<Integer> grassArticleIds = grassArticleList.stream().map(BaseEntity::getId).collect(Collectors.toList());
List<PublicArticle> publicUserPraiseList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassArticleIds, needSyncArticleType);
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicUserPraiseList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
List<GrassArticlePraise> grassArticlePraiseList = grassArticlePraiseRepository.findAllByArticleIdIn(grassArticleIds);
logger.info("syncPraiseByArticlePage find grassArticlePraise num is {}", grassArticlePraiseList.size());
List<PublicUserPraise> needSyncData = buildPublicUserPraise(publicArticleIdAndGrassIdMap, grassArticlePraiseList);
publicUserPraiseRepository.saveAll(needSyncData);
}
private List<PublicUserPraise> buildPublicUserPraise( Map<Integer, Integer> publicArticleIdAndGrassIdMap, List<GrassArticlePraise> grassArticlePraiseList){
List<PublicUserPraise> resultList = Lists.newArrayList();
if(CollectionUtils.isEmpty(grassArticlePraiseList)){
return resultList;
}
grassArticlePraiseList.forEach(grassArticlePraise -> {
PublicUserPraise publicUserPraise = new PublicUserPraise();
publicUserPraise.setTargetId(publicArticleIdAndGrassIdMap.get(grassArticlePraise.getArticleId()));
publicUserPraise.setUid(grassArticlePraise.getUid());
publicUserPraise.setPraiseType(UserPraiseConstant.ARTICLE_PRAISE);
publicUserPraise.setStatus(convertPraiseStatus(grassArticlePraise.getStatus()));
publicUserPraise.setSrcChannel(1);
publicUserPraise.setCreateTime((long)(grassArticlePraise.getCreateTime()) *1000);
publicUserPraise.setUpdateTime((long)(Optional.ofNullable(grassArticlePraise.getUpdateTime()).orElse(0)) *1000);
resultList.add(publicUserPraise);
});
return resultList;
}
private int convertPraiseStatus(int grassPraiseStatus){
switch (grassPraiseStatus){
case 0:
return UserPraiseConstant.HAS_PRAISED;
case 1:
return UserPraiseConstant.CANCEL_PRAISED;
default:
return UserPraiseConstant.CANCEL_PRAISED;
}
}
private void syncPraiseBySelf(Long startTime, Long endTime){
logger.info("syncPraiseBySelf begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int pageSize = 100;
Integer startTimeInt = startTime.intValue();
Integer endTimeInt = endTime.intValue();
int total = grassArticlePraiseRepository.countByCreateTimeBetween(startTimeInt, endTimeInt);
logger.info("syncPraiseBySelf get grassArticlePraise count is {}", total);
int totalPage = total % pageSize ==0 ? total / pageSize : (total / pageSize)+1;
try{
//每次查询100条,增加detail
for (int index=0; index < totalPage; index++) {
int indexPage = index;
es.execute(() -> {
syncPraiseBySelfPage(startTimeInt, endTimeInt, indexPage, pageSize);
});
}
}finally {
es.shutdown();
}
}
private void syncPraiseBySelfPage(int startTime, int endTime, int indexPage, int pageSize){
Pageable pageReq = PageRequest.of(indexPage, pageSize);
List<GrassArticlePraise> grassArticleList = grassArticlePraiseRepository.findAllByCreateTimeBetween(
startTime, endTime,pageReq);
List<Integer> grassArticleIds = grassArticleList.stream().map(BaseEntity::getId).collect(Collectors.toList());
List<PublicArticle> publicUserPraiseList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassArticleIds, needSyncArticleType);
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicUserPraiseList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
List<PublicUserPraise> needSyncData = buildPublicUserPraise(publicArticleIdAndGrassIdMap, grassArticleList);
publicUserPraiseRepository.saveAll(needSyncData);
}
}
... ...
... ... @@ -7,7 +7,10 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
... ... @@ -15,8 +18,10 @@ import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactoryPrimary",
transactionManagerRef="transactionManagerPrimary",
basePackages = {"com.yoho.datasync.fullsync.dal.repository.grass"})
public class PrimaryDataSourceConfig {
... ... @@ -48,6 +53,10 @@ public class PrimaryDataSourceConfig {
}
@Primary
@Bean(name = "transactionManagerPrimary")
PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) throws Exception {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
}
... ...
... ... @@ -6,7 +6,10 @@ import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
... ... @@ -14,8 +17,10 @@ import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactorySecondary",
transactionManagerRef="transactionManagerSecondary",
basePackages = "com.yoho.datasync.fullsync.dal.repository.pcms")
public class SecondaryDataSourceConfig {
... ... @@ -42,4 +47,9 @@ public class SecondaryDataSourceConfig {
return entityManagerFactory;
}
@Bean(name = "transactionManagerSecondary")
PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) throws Exception {
return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
}
}
... ...
spring:
profiles:
active: dev
jpa:
show-sql: true
properties:
hibernate:
enable_lazy_load_no_trans: true
server:
servlet:
context-path:
/fullsync
... ...
... ... @@ -9,13 +9,13 @@ rabbitmq:
spring:
datasource:
primary:
url: jdbc:mysql://192.168.102.219:3306/yh_pcms?useUnicode=true&amp;characterEncoding=UTF-8
url: jdbc:mysql://192.168.102.219:3306/yh_grass?useUnicode=true&amp;characterEncoding=UTF-8
username: yh_test
password: 9nm0icOwt6bMHjMusIfMLw==
driver-class-name: com.mysql.jdbc.Driver
secondary:
url: jdbc:mysql://192.168.102.219:3306/yh_grass?useUnicode=true&amp;characterEncoding=UTF-8
url: jdbc:mysql://192.168.102.219:3306/yh_pcms?useUnicode=true&amp;characterEncoding=UTF-8
username: yh_test
password: 9nm0icOwt6bMHjMusIfMLw==
driver-class-name: com.mysql.jdbc.Driver
... ...