Authored by chaogeng

Merge branch 'test6.8.9'

Showing 60 changed files with 3944 additions and 58 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.GrassArticleComment;
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 GrassArticleCommentRepository extends JpaRepository<GrassArticleComment, Integer>{
int countByCreateTimeBetween(Integer startTime, Integer endTime);
List<GrassArticleComment> findAllByCreateTimeBetween(Integer startTime, Integer endTime, Pageable pageable);
List<GrassArticleComment> findAllByDestIdInAndArticleTypeInAndStatusIsNotAndParentIdIsNull(List<Integer> articleIds, List<Integer> articleTypes,Integer status);
List<GrassArticleComment> findAllByDestIdInAndArticleTypeInAndStatusIsNotAndParentIdIsNotNull(List<Integer> articleIds, List<Integer> articleTypes,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);
List<GrassArticle> findAllByIdIn(List<Integer> articleIds);
}
... ...
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);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassUserAchieve;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassUserAttention;
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 GrassUserAchieveRepository extends JpaRepository<GrassUserAchieve, Integer>{
int countByCreateTimeBetween(Integer startTime, Integer endTime);
List<GrassUserAchieve> findAllByCreateTimeBetween(Integer startTime, Integer endTime, Pageable pageable);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassUserAttention;
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 GrassUserAttentionRepository extends JpaRepository<GrassUserAttention, Integer>{
int countByCreateTimeBetween(Integer startTime, Integer endTime);
List<GrassUserAttention> findAllByCreateTimeBetween(Integer startTime, Integer endTime, Pageable pageable);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassUserAchieve;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassVirtualUser;
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 GrassVirtualUserRepository extends JpaRepository<GrassVirtualUser, Integer>{
int countByCreateTimeBetween(Integer startTime, Integer endTime);
List<GrassVirtualUser> findAllByCreateTimeBetween(Integer startTime, Integer endTime, Pageable pageable);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass;
import com.yoho.datasync.fullsync.dal.repository.grass.model.UserFavoriteArticle;
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 UserFavoriteArticleRepository extends JpaRepository<UserFavoriteArticle, Integer>{
List<UserFavoriteArticle> findAllByArticleIdIn(List<Integer> list);
int countByCreateTimeBetween(Integer startTime, Integer endTime);
List<UserFavoriteArticle> findAllByCreateTimeBetween(Integer startTime, Integer endTime, Pageable pageable);
}
... ...
... ... @@ -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 javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "grass_article_comment")
public class GrassArticleComment extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2270181821264128734L;
@Column(name = "dest_id")
private Integer destId;
//1、用户发布 2、guang文章同步 3、mars文章同步 4、晒单文章同步
@Column(name = "article_type")
private Integer articleType;
//根评论id
@Column(name = "root_id")
private Integer rootId;
//评论父id
@Column(name = "parent_id")
private Integer parentId;
//同步评论id
@Column(name = "relate_id")
private Integer relateId;
//同步父评论id
@Column(name = "relate_parent_id")
private Integer relateParentId;
//点赞总数
@Column(name = "praise_total")
private Integer praiseTotal;
//审核状态(0 待审核,1通过,2未通过)
private Integer status;
//评论内容
private String content;
private Integer uid;
@Column(name = "create_time")
private Integer createTime;
@Column(name = "update_time")
private Integer updateTime;
//审核人
private String reviewer;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Integer getCreateTime() {
return createTime;
}
public void setCreateTime(Integer createTime) {
this.createTime = createTime;
}
public Integer getDestId() {
return destId;
}
public void setDestId(Integer destId) {
this.destId = destId;
}
public Integer getArticleType() {
return articleType;
}
public void setArticleType(Integer articleType) {
this.articleType = articleType;
}
public Integer getRootId() {
return rootId;
}
public void setRootId(Integer rootId) {
this.rootId = rootId;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public Integer getRelateId() {
return relateId;
}
public void setRelateId(Integer relateId) {
this.relateId = relateId;
}
public Integer getRelateParentId() {
return relateParentId;
}
public void setRelateParentId(Integer relateParentId) {
this.relateParentId = relateParentId;
}
public Integer getPraiseTotal() {
return praiseTotal;
}
public void setPraiseTotal(Integer praiseTotal) {
this.praiseTotal = praiseTotal;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Integer getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Integer updateTime) {
this.updateTime = updateTime;
}
public String getReviewer() {
return reviewer;
}
public void setReviewer(String reviewer) {
this.reviewer = reviewer;
}
}
... ...
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.grass.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "grass_user_achieve")
public class GrassUserAchieve extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2270181821264128734L;
private Integer uid;
//粉丝数
@Column(name = "fans_count")
private Integer fansCount;
//关注数
@Column(name = "att_count")
private Integer attCount;
//获赞数
@Column(name = "praise_amount")
private Integer praiseAmount;
//收藏数
@Column(name = "favorite_amount")
private Integer favoriteAmount;
//个性签名
@Column(name = "signature")
private String signature;
//用户类型,1 普通用户、2平台小编
@Column(name = "user_type")
private Integer userType;
//用户类型,1 未被禁言、2被禁言
@Column(name = "is_forbidden")
private Integer isForbidden;
//0:正常用户 1:逛小编初始化的uid
@Column(name = "init_flag")
private Integer initFlag;
//逛小编初始化uid时对应的authorid
@Column(name = "author_id")
private Integer authorId;
@Column(name = "update_time")
private Integer updateTime;
@Column(name = "create_time")
private Integer createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
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;
}
public Integer getFansCount() {
return fansCount;
}
public void setFansCount(Integer fansCount) {
this.fansCount = fansCount;
}
public Integer getAttCount() {
return attCount;
}
public void setAttCount(Integer attCount) {
this.attCount = attCount;
}
public Integer getPraiseAmount() {
return praiseAmount;
}
public void setPraiseAmount(Integer praiseAmount) {
this.praiseAmount = praiseAmount;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
public Integer getUserType() {
return userType;
}
public void setUserType(Integer userType) {
this.userType = userType;
}
public Integer getIsForbidden() {
return isForbidden;
}
public void setIsForbidden(Integer isForbidden) {
this.isForbidden = isForbidden;
}
public Integer getInitFlag() {
return initFlag;
}
public void setInitFlag(Integer initFlag) {
this.initFlag = initFlag;
}
public Integer getAuthorId() {
return authorId;
}
public void setAuthorId(Integer authorId) {
this.authorId = authorId;
}
public Integer getFavoriteAmount() {
return favoriteAmount;
}
public void setFavoriteAmount(Integer favoriteAmount) {
this.favoriteAmount = favoriteAmount;
}
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "grass_user_attention")
public class GrassUserAttention extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2270181821264128734L;
private Integer uid;
//被关注人uid
@Column(name = "follow_uid")
private Integer followUid;
//0:已关注 1:已取消关注
private Integer status;
//0:关注话题(目前没还有关注话题) 1:关注用户
@Column(name = "attention_type")
private Integer attentionType;
@Column(name = "update_time")
private Integer updateTime;
//作者uid类型 1:有货uid 2:逛小编authorId
@Column(name = "author_type")
private Integer authorType;
@Column(name = "create_time")
private Integer createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Integer getCreateTime() {
return createTime;
}
public void setCreateTime(Integer createTime) {
this.createTime = createTime;
}
public Integer getFollowUid() {
return followUid;
}
public void setFollowUid(Integer followUid) {
this.followUid = followUid;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getAttentionType() {
return attentionType;
}
public void setAttentionType(Integer attentionType) {
this.attentionType = attentionType;
}
public Integer getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Integer updateTime) {
this.updateTime = updateTime;
}
public Integer getAuthorType() {
return authorType;
}
public void setAuthorType(Integer authorType) {
this.authorType = authorType;
}
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "grass_virtual_user")
public class GrassVirtualUser extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2270181821264128734L;
private Integer uid;
private Integer status;
@Column(name = "update_time")
private Integer updateTime;
@Column(name = "create_time")
private Integer createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
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;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
... ...
package com.yoho.datasync.fullsync.dal.repository.grass.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "user_favorite_article")
public class UserFavoriteArticle extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2270181821264128734L;
@Column(name = "article_id")
private Integer articleId;
private Integer uid;
@Column(name = "create_time")
private Integer createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getArticleId() {
return articleId;
}
public void setArticleId(Integer articleId) {
this.articleId = articleId;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Integer getCreateTime() {
return createTime;
}
public void setCreateTime(Integer createTime) {
this.createTime = createTime;
}
}
... ...
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.PublicUserAttention;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PublicUserAttentionRepository extends JpaRepository<PublicUserAttention, Integer>{
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicUserComment;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PublicUserCommentRepository extends JpaRepository<PublicUserComment, Integer>{
List<PublicUserComment> findAllByRelateIdInAndSrcChannelIs(List<Integer> relateIds, Integer srcChannel);
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicUserFavorite;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PublicUserFavoriteRepository extends JpaRepository<PublicUserFavorite, Integer>{
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicUserHomePage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PublicUserHomePageRepository extends JpaRepository<PublicUserHomePage, Integer>{
}
... ...
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;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicVirtualUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PublicVirtualUserRepository extends JpaRepository<PublicVirtualUser, Integer>{
}
... ...
... ... @@ -18,6 +18,9 @@ public class PublicArticle extends BaseEntity implements Serializable {
@Column(name = "article_title")
private String articleTitle;
@Column(name = "cover_img")
private String coverImg;
//作者uid
@Column(name = "author_uid")
private Integer authorUid;
... ... @@ -167,4 +170,12 @@ public class PublicArticle extends BaseEntity implements Serializable {
public void setPublishTime(Long publishTime) {
this.publishTime = publishTime;
}
public String getCoverImg() {
return coverImg;
}
public void setCoverImg(String coverImg) {
this.coverImg = coverImg;
}
}
... ...
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_attention")
@EqualsAndHashCode(callSuper = true)
public class PublicUserAttention extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2778511431046016623L;
//关注对象id
@Column(name = "target_id")
private Integer targetId;
@Column(name = "uid")
private Integer uid;
//作者uid类型 1:有货uid 2:逛小编authorId 3:马甲用户
@Column(name = "author_type")
private Integer authorType;
//关注类型:0-已取消 1-已关注 2-互相关注
@Column(name = "attention_type")
private Integer attentionType;
//状态(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 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;
}
public Integer getAuthorType() {
return authorType;
}
public void setAuthorType(Integer authorType) {
this.authorType = authorType;
}
public Integer getAttentionType() {
return attentionType;
}
public void setAttentionType(Integer attentionType) {
this.attentionType = attentionType;
}
}
... ...
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_comment")
@EqualsAndHashCode(callSuper = true)
public class PublicUserComment extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2778511431046016623L;
//关注对象id
@Column(name = "to_uid")
private Integer to_uid;
@Column(name = "uid")
private Integer uid;
@Column(name = "article_id")
private Integer articleId;
@Column(name = "to_comment_id")
private Integer toCommentId;
@Column(name = "content_data")
private String contentData;
@Column(name = "root_id")
private Integer rootId;
@Column(name = "floor_num")
private Integer floorNum;
@Column(name = "relate_id")
private Integer relateId;
//同步父评论id
@Column(name = "relate_parent_id")
private Integer relateParentId;
@Column(name = "praise_num")
private Integer praiseNum;
@Column(name = "virtual_praise_num")
private Integer virtualPraiseNum;
@Column(name = "audit_status")
private Integer auditStatus;
@Column(name = "audit_account")
private String auditAccount;
@Column(name = "audit_time")
private Long auditTime;
@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 getSrcChannel() {
return srcChannel;
}
public void setSrcChannel(Integer srcChannel) {
this.srcChannel = srcChannel;
}
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 getTo_uid() {
return to_uid;
}
public void setTo_uid(Integer to_uid) {
this.to_uid = to_uid;
}
public Integer getArticleId() {
return articleId;
}
public void setArticleId(Integer articleId) {
this.articleId = articleId;
}
public Integer getToCommentId() {
return toCommentId;
}
public void setToCommentId(Integer toCommentId) {
this.toCommentId = toCommentId;
}
public String getContentData() {
return contentData;
}
public void setContentData(String contentData) {
this.contentData = contentData;
}
public Integer getRootId() {
return rootId;
}
public void setRootId(Integer rootId) {
this.rootId = rootId;
}
public Integer getFloorNum() {
return floorNum;
}
public void setFloorNum(Integer floorNum) {
this.floorNum = floorNum;
}
public Integer getRelateId() {
return relateId;
}
public void setRelateId(Integer relateId) {
this.relateId = relateId;
}
public Integer getRelateParentId() {
return relateParentId;
}
public void setRelateParentId(Integer relateParentId) {
this.relateParentId = relateParentId;
}
public Integer getPraiseNum() {
return praiseNum;
}
public void setPraiseNum(Integer praiseNum) {
this.praiseNum = praiseNum;
}
public Integer getVirtualPraiseNum() {
return virtualPraiseNum;
}
public void setVirtualPraiseNum(Integer virtualPraiseNum) {
this.virtualPraiseNum = virtualPraiseNum;
}
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;
}
}
... ...
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_favorite")
@EqualsAndHashCode(callSuper = true)
public class PublicUserFavorite 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;
//收藏夹id
@Column(name = "sheet_id")
private Integer sheetId;
//收藏类型: 1、收藏文章
@Column(name = "favorite_type")
private Integer favoriteType;
//状态(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 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;
}
public Integer getSheetId() {
return sheetId;
}
public void setSheetId(Integer sheetId) {
this.sheetId = sheetId;
}
public Integer getFavoriteType() {
return favoriteType;
}
public void setFavoriteType(Integer favoriteType) {
this.favoriteType = favoriteType;
}
}
... ...
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_homepage")
@EqualsAndHashCode(callSuper = true)
public class PublicUserHomePage extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2778511431046016623L;
@Column(name = "uid")
private Integer uid;
//粉丝数
@Column(name = "fans_count")
private Integer fansCount;
//关注数
@Column(name = "atten_count")
private Integer attCount;
//获赞数
@Column(name = "praise_amount")
private Integer praiseAmount;
//收藏数
@Column(name = "favorite_amount")
private Integer favoriteAmount;
//个性签名
@Column(name = "signature")
private String signature;
//用户类型,1 普通用户、2平台小编
@Column(name = "user_type")
private Integer userType;
//用户类型,1 未被禁言、2被禁言
@Column(name = "src_channel")
private Integer src_channel;
//逛小编初始化uid时对应的authorid
@Column(name = "author_id")
private Integer authorId;
@Column(name = "update_time")
private Long updateTime;
@Column(name = "create_time")
private Long createTime;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Integer getFansCount() {
return fansCount;
}
public void setFansCount(Integer fansCount) {
this.fansCount = fansCount;
}
public Integer getAttCount() {
return attCount;
}
public void setAttCount(Integer attCount) {
this.attCount = attCount;
}
public Integer getPraiseAmount() {
return praiseAmount;
}
public void setPraiseAmount(Integer praiseAmount) {
this.praiseAmount = praiseAmount;
}
public Integer getFavoriteAmount() {
return favoriteAmount;
}
public void setFavoriteAmount(Integer favoriteAmount) {
this.favoriteAmount = favoriteAmount;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
public Integer getUserType() {
return userType;
}
public void setUserType(Integer userType) {
this.userType = userType;
}
public Integer getSrc_channel() {
return src_channel;
}
public void setSrc_channel(Integer src_channel) {
this.src_channel = src_channel;
}
public Integer getAuthorId() {
return authorId;
}
public void setAuthorId(Integer authorId) {
this.authorId = authorId;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public Long getCreateTime() {
return createTime;
}
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
}
... ...
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;
}
}
... ...
package com.yoho.datasync.fullsync.dal.repository.pcms.model;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "public_virtual_user")
public class PublicVirtualUser extends BaseEntity implements Serializable {
private static final long serialVersionUID = -2270181821264128734L;
private Integer uid;
private Integer status;
@Column(name = "user_type")
private Integer userType;
@Column(name = "src_channel")
private Integer srcChannel;
@Column(name = "update_time")
private Integer updateTime;
@Column(name = "create_time")
private Integer createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Integer getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Integer updateTime) {
this.updateTime = updateTime;
}
public Integer getCreateTime() {
return createTime;
}
public void setCreateTime(Integer createTime) {
this.createTime = createTime;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getUserType() {
return userType;
}
public void setUserType(Integer userType) {
this.userType = userType;
}
public Integer getSrcChannel() {
return srcChannel;
}
public void setSrcChannel(Integer srcChannel) {
this.srcChannel = srcChannel;
}
}
... ...
... ... @@ -45,6 +45,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 UserAttentionConstant {
public static final int GRASS_HAS_ATTENTION = 0;
public static final int GRASS_CANCEL_ATTENTION = 1;
public static final int PUBLIC_HAS_ATTENTION = 1;
public static final int PUBLIC_CANCEL_ATTENTION = 0;
public static final int PUBLIC_MUTUAL_ATTENTION = 2;
}
... ...
package com.yoho.datasync.fullsync.constant;
public class UserCommentConstant {
public static final int GRASS_NOT_AUDIT = 0;
public static final int GRASS_HAS_AUDIT = 1;
public static final int GRASS_AUDIT_REFUSED = 2;
public static final int PUBLIC_NOT_AUDIT = 1;
public static final int PUBLIC_HAS_AUDIT = 2;
public static final int PUBLIC_AUDIT_REFUSED = 3;
}
... ...
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.service.IGrassArticleSyncService;
import com.yoho.datasync.fullsync.service.IGrassInteractiveDataSyncService;
import com.yoho.datasync.fullsync.service.IGrassUserDataSyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
... ... @@ -12,9 +14,29 @@ public class GrassDataSyncController {
@Autowired
private IGrassArticleSyncService grassArticleSyncService;
@Autowired
private IGrassInteractiveDataSyncService grassInteractiveDataSyncService;
@Autowired
private IGrassUserDataSyncService grassUserDataSyncService;
@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") Integer startTime, @RequestParam("endTime") Integer endTime,
@RequestParam("timeType") Integer timeType, @RequestParam("syncType") Integer syncType){
return grassInteractiveDataSyncService.syncInteractiveData(startTime, endTime, timeType, syncType);
}
@RequestMapping("/syncUserData")
public String syncUserData(@RequestParam("startTime") Integer startTime, @RequestParam("endTime") Integer endTime,
@RequestParam("syncType") Integer syncType){
return "success";
return grassUserDataSyncService.syncGrassUserData(startTime, endTime, syncType);
}
}
... ...
package com.yoho.datasync.fullsync.service;
public interface IGrassInteractiveDataSyncService {
String syncInteractiveData(Integer startTime, Integer endTime,
Integer timeType, Integer syncType);
}
... ...
package com.yoho.datasync.fullsync.service;
public interface IGrassUserDataSyncService {
String syncGrassUserData(Integer startTime, Integer endTime, Integer syncType);
}
... ...
//
//package com.yoho.fullsync.service;
//
//import com.yoho.datasync.consumer.dal.repository.PublicUserPraiseRepository;
//import com.yoho.datasync.core.base.model.yh_pcms.PublicUserPraise;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//
//@Service
//public class PublicUserPraiseService {
//
// @Resource
// private PublicUserPraiseRepository repository;
//
// private static final Logger logger = LoggerFactory.getLogger(PublicUserPraiseService.class);
//
// public void saveOrUpdatePublicUserPraise(PublicUserPraise publicUserPraise) {
// PublicUserPraise publicUserPraiseFromDB = getPublicUserPraiseByUniqueKey(publicUserPraise);
// if (publicUserPraiseFromDB != null) { //更新
// publicUserPraise.setId(publicUserPraiseFromDB.getId());
//
// }
// repository.save(publicUserPraise);
// }
//
// public void deletePublicUserPraise(PublicUserPraise publicUserPraise) throws Exception{
// PublicUserPraise publicUserPraiseFromDB = getPublicUserPraiseByUniqueKey(publicUserPraise);
// if (publicUserPraiseFromDB != null) {
// repository.deleteById(publicUserPraiseFromDB.getId());
// }else{
// logger.error("数据不存在praiseType={},uid={},targetId={}", publicUserPraise.getPraiseType(),
// publicUserPraise.getUid(),publicUserPraise.getTargetId());
// throw new Exception();
// }
// }
//
// private PublicUserPraise getPublicUserPraiseByUniqueKey(PublicUserPraise publicUserPraise){
// //点赞类型,点赞对象,和点赞者id确定唯一一条记录
// Integer praiseType = publicUserPraise.getPraiseType();
// Integer uid = publicUserPraise.getUid();
// Integer targetId = publicUserPraise.getTargetId();
// if(praiseType == null || uid == null || targetId == null){
// logger.error("参数不合法praiseType={},uid={},targetId={}", praiseType , uid , targetId);
// return null;
// }
// return repository.findByUidAndPraiseTypeAndTargetId(uid , praiseType , targetId);
// }
//}
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;
private 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(2);
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);
List<Integer> grassArticleIds = grassArticleList.stream().map(GrassArticle::getId).collect(Collectors.toList());
List<GrassArticleBlock> blockList = grassArticleBlockRepository.findAllByArticleIdInAndStatusIs(grassArticleIds, 1);
Map<Integer, List<GrassArticleBlock>> blocksMap = getBlocksMap(blockList);
try{
List<PublicArticle> publicArticleList = new ArrayList<>();
grassArticleList.forEach(grassArticle -> {
PublicArticle publicArticle = convertPublicArticle(grassArticle,blocksMap);
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,Map<Integer, List<GrassArticleBlock>> blocksMap){
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.setCoverImg(getCoverImg(blocksMap.get(grassArticle.getId())));
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 String getCoverImg(List<GrassArticleBlock> grassArticleBlocks){
grassArticleBlocks = grassArticleBlocks.stream().sorted((o1, o2) ->{
if(o1.getOrderBy()> o2.getOrderBy()){
return 1;
}else {
return -1;
}
}).collect(Collectors.toList());
for (GrassArticleBlock grassArticleBlock:grassArticleBlocks) {
//第一个image为默认封面图
if("image".equals(grassArticleBlock.getTemplateKey())){
String dataString = JSONObject.parseObject(grassArticleBlock.getContentData()).getString("data");
JSONObject block = JSONObject.parseObject(dataString);
return block.getString("src");
}
}
return "";
}
//两张表审核状态转换
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,2);
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.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.yoho.datasync.fullsync.constant.UserAttentionConstant;
import com.yoho.datasync.fullsync.constant.UserCommentConstant;
import com.yoho.datasync.fullsync.constant.UserPraiseConstant;
import com.yoho.datasync.fullsync.dal.repository.BaseEntity;
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.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.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
@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;
@Autowired
private UserFavoriteArticleRepository userFavoriteArticleRepository;
@Autowired
private PublicUserFavoriteRepository publicUserFavoriteRepository;
@Autowired
private GrassUserAttentionRepository grassUserAttentionRepository;
@Autowired
private PublicUserAttentionRepository publicUserAttentionRepository;
@Autowired
private GrassArticleCommentRepository grassArticleCommentRepository;
@Autowired
private PublicUserCommentRepository publicUserCommentRepository;
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;
private static List<Integer> needSyncArticleType = new ArrayList<>();
private static List<Integer> needSyncArticleStatus = new ArrayList<>();
static {
needSyncArticleType.add(1);
needSyncArticleType.add(2);
needSyncArticleType.add(4);
needSyncArticleType.add(5);
needSyncArticleStatus.add(0);
needSyncArticleStatus.add(1);
needSyncArticleStatus.add(2);
needSyncArticleStatus.add(9);
}
@Override
public String syncInteractiveData(Integer startTime, Integer endTime, Integer timeType, Integer syncType) {
// syncType : 1、同步点赞 2、 同步评论 3、 同步收藏 4、 同步关注
switch (syncType){
case PRAISE:
syncPraise(startTime, endTime, timeType);
break;
case FAVORITE:
syncFavorite(startTime, endTime, timeType);
break;
case ATTENTION:
syncUserAttention(startTime, endTime);
break;
case COMMENT:
syncComments(startTime, endTime,timeType);
break;
default:
break;
}
return "success";
}
private void syncPraise(Integer startTime, Integer endTime, Integer timeType){
switch (timeType){
case MASTER:
syncPraiseByArticle(startTime,endTime);
break;
case SLAVE:
syncPraiseBySelf(startTime,endTime);
break;
}
}
private void syncFavorite(Integer startTime, Integer endTime, Integer timeType){
switch (timeType){
case MASTER:
syncFavoriteByArticle(startTime,endTime);
break;
case SLAVE:
syncFavoriteBySelf(startTime,endTime);
break;
}
}
private void syncComments(Integer startTime, Integer endTime, Integer timeType){
switch (timeType){
case MASTER:
syncCommentsByArticle(startTime,endTime);
break;
case SLAVE:
syncCommentsBySelf(startTime,endTime);
break;
}
}
private void syncPraiseByArticle(Integer startTime, Integer endTime){
logger.info("syncPraiseByArticle begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int pageSize = 100;
Long startTimeLong = (long)startTime * 1000;
Long endTimeLong = (long)endTime * 1000;
int total = grassArticleRepository.countByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(startTimeLong, endTimeLong,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(startTimeLong, endTimeLong, 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<Integer> grassRelatedIds = grassArticleList.stream().filter(grassArticle -> grassArticle.getArticleType()==5)
.map(GrassArticle::getRelateId).collect(Collectors.toList());
//社区文章 relate_id 和article_id 对应关系
Map<Integer, Integer> grassRelatedIdAndIdMap = grassArticleList.stream().filter(grassArticle -> grassArticle.getArticleType()==5)
.collect(Collectors.toMap(GrassArticle::getRelateId, GrassArticle::getId));
List<PublicArticle> publicArticleList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassArticleIds, needSyncArticleType);
List<PublicArticle> publicArticleNowList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassRelatedIds, Lists.newArrayList(5));
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap = new HashMap<>();
publicArticleList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
publicArticleNowList.forEach(publicArticle -> {
Integer grassArticleId = grassRelatedIdAndIdMap.get(publicArticle.getRelateId());
nowArticleIdAndpublicArticleIdMap.put(grassArticleId, publicArticle.getId());
});
List<GrassArticlePraise> grassArticlePraiseList = grassArticlePraiseRepository.findAllByArticleIdIn(grassArticleIds);
logger.info("syncPraiseByArticlePage find grassArticlePraise num is {}", grassArticlePraiseList.size());
List<PublicUserPraise> needSyncData = buildPublicUserPraise(publicArticleIdAndGrassIdMap, nowArticleIdAndpublicArticleIdMap,grassArticlePraiseList);
publicUserPraiseRepository.saveAll(needSyncData);
}
private List<PublicUserPraise> buildPublicUserPraise(Map<Integer, Integer> publicArticleIdAndGrassIdMap,Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap, List<GrassArticlePraise> grassArticlePraiseList){
List<PublicUserPraise> resultList = Lists.newArrayList();
if(CollectionUtils.isEmpty(grassArticlePraiseList)){
return resultList;
}
grassArticlePraiseList.forEach(grassArticlePraise -> {
Integer targetId = publicArticleIdAndGrassIdMap.get(grassArticlePraise.getArticleId());
if(targetId == null){
targetId = nowArticleIdAndpublicArticleIdMap.get(grassArticlePraise.getArticleId());
if(targetId == null){
return;
}
}
PublicUserPraise publicUserPraise = new PublicUserPraise();
publicUserPraise.setTargetId(targetId);
publicUserPraise.setUid(grassArticlePraise.getUid());
publicUserPraise.setPraiseType(UserPraiseConstant.ARTICLE_PRAISE);
publicUserPraise.setStatus(convertPraiseStatus(grassArticlePraise.getStatus()));
publicUserPraise.setSrcChannel(1);
publicUserPraise.setCreateTime(convertIntTimeToLong(grassArticlePraise.getCreateTime()));
publicUserPraise.setUpdateTime(convertIntTimeToLong(grassArticlePraise.getUpdateTime()));
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(Integer startTime, Integer endTime){
logger.info("syncPraiseBySelf begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int pageSize = 100;
int total = grassArticlePraiseRepository.countByCreateTimeBetween(startTime, endTime);
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(startTime, endTime, indexPage, pageSize);
});
}
}finally {
es.shutdown();
}
}
private void syncPraiseBySelfPage(int startTime, int endTime, int indexPage, int pageSize){
Pageable pageReq = PageRequest.of(indexPage, pageSize);
List<GrassArticlePraise> grassArticlePraiseList = grassArticlePraiseRepository.findAllByCreateTimeBetween(
startTime, endTime,pageReq);
List<Integer> grassArticleIds = grassArticlePraiseList.stream().map(GrassArticlePraise::getArticleId).collect(Collectors.toList());
List<GrassArticle> grassArticleList = grassArticleRepository.findAllByIdIn(grassArticleIds);
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap = getNowArticleIdAndPulicIdMap(grassArticleList);
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,nowArticleIdAndpublicArticleIdMap, grassArticlePraiseList);
publicUserPraiseRepository.saveAll(needSyncData);
}
private void syncFavoriteByArticle(Integer startTime, Integer endTime){
logger.info("syncFavoriteByArticle begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
Long startTimeLong = (long)startTime * 1000;
Long endTimeLong = (long)endTime * 1000;
int pageSize = 100;
int total = grassArticleRepository.countByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(startTimeLong, endTimeLong,needSyncArticleType,needSyncArticleStatus);
logger.info("syncFavoriteByArticle 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(() -> {
syncFavoriteByArticlePage(startTimeLong, endTimeLong, indexPage, pageSize);
});
}
}finally {
es.shutdown();
}
}
private void syncFavoriteByArticlePage(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<Integer> grassRelatedIds = grassArticleList.stream().filter(grassArticle -> grassArticle.getArticleType()==5)
.map(GrassArticle::getRelateId).collect(Collectors.toList());
//社区文章 relate_id 和article_id 对应关系
Map<Integer, Integer> grassRelatedIdAndIdMap = grassArticleList.stream().filter(grassArticle -> grassArticle.getArticleType()==5)
.collect(Collectors.toMap(GrassArticle::getRelateId, GrassArticle::getId));
List<PublicArticle> publicArticleList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassArticleIds, needSyncArticleType);
List<PublicArticle> publicArticleNowList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassRelatedIds, Lists.newArrayList(5));
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicArticleList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap = new HashMap<>();
publicArticleNowList.forEach(publicArticle -> {
Integer grassArticleId = grassRelatedIdAndIdMap.get(publicArticle.getRelateId());
nowArticleIdAndpublicArticleIdMap.put(grassArticleId, publicArticle.getId());
});
List<UserFavoriteArticle> userFavoriteArticleList = userFavoriteArticleRepository.findAllByArticleIdIn(grassArticleIds);
logger.info("syncFavoriteByArticlePage find userFavoriteArticle num is {}", userFavoriteArticleList.size());
List<PublicUserFavorite> needSyncData = buildPublicUserFavorite(publicArticleIdAndGrassIdMap,nowArticleIdAndpublicArticleIdMap, userFavoriteArticleList);
publicUserFavoriteRepository.saveAll(needSyncData);
}
private List<PublicUserFavorite> buildPublicUserFavorite(Map<Integer, Integer> publicArticleIdAndGrassIdMap,
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap,
List<UserFavoriteArticle> userFavoriteArticleList){
List<PublicUserFavorite> resultList = Lists.newArrayList();
if(CollectionUtils.isEmpty(userFavoriteArticleList)){
return resultList;
}
userFavoriteArticleList.forEach(userFavoriteArticle -> {
Integer targetId = publicArticleIdAndGrassIdMap.get(userFavoriteArticle.getArticleId());
if(null == targetId){
targetId = nowArticleIdAndpublicArticleIdMap.get(userFavoriteArticle.getArticleId());
if(null == targetId){
return;
}
}
PublicUserFavorite publicUserFavorite = new PublicUserFavorite();
publicUserFavorite.setUid(userFavoriteArticle.getUid());
publicUserFavorite.setStatus(1);
publicUserFavorite.setSrcChannel(1);
publicUserFavorite.setTargetId(targetId);
publicUserFavorite.setCreateTime(convertIntTimeToLong(userFavoriteArticle.getCreateTime()));
publicUserFavorite.setFavoriteType(1);
resultList.add(publicUserFavorite);
});
return resultList;
}
private void syncFavoriteBySelf(Integer startTime, Integer endTime){
logger.info("syncFavoriteBySelf begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int pageSize = 100;
int total = userFavoriteArticleRepository.countByCreateTimeBetween(startTime, endTime);
logger.info("syncFavoriteBySelf 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(() -> {
syncFavoriteBySelfPage(startTime, endTime, indexPage, pageSize);
});
}
}finally {
es.shutdown();
}
}
private void syncFavoriteBySelfPage(int startTime, int endTime, int indexPage, int pageSize){
Pageable pageReq = PageRequest.of(indexPage, pageSize);
List<UserFavoriteArticle> userFavoriteArticleList = userFavoriteArticleRepository.findAllByCreateTimeBetween(
startTime, endTime,pageReq);
List<Integer> grassArticleIds = userFavoriteArticleList.stream().map(UserFavoriteArticle::getArticleId).collect(Collectors.toList());
List<GrassArticle> grassArticleList = grassArticleRepository.findAllByIdIn(grassArticleIds);
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap = getNowArticleIdAndPulicIdMap(grassArticleList);
List<PublicArticle> publicArticleList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassArticleIds, needSyncArticleType);
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicArticleList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
List<PublicUserFavorite> needSyncData = buildPublicUserFavorite(publicArticleIdAndGrassIdMap,nowArticleIdAndpublicArticleIdMap, userFavoriteArticleList);
publicUserFavoriteRepository.saveAll(needSyncData);
}
private void syncUserAttention(Integer startTime, Integer endTime){
logger.info("syncUserAttention begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int pageSize = 100;
int total = grassUserAttentionRepository.countByCreateTimeBetween(startTime, endTime);
logger.info("syncUserAttention get attention 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(() -> {
syncUserAttentionPage(startTime, endTime, indexPage, pageSize);
});
}
}finally {
es.shutdown();
}
}
private void syncUserAttentionPage(int startTime, int endTime, int indexPage, int pageSize){
Pageable pageReq = PageRequest.of(indexPage, pageSize);
List<GrassUserAttention> grassUserAttentionList = grassUserAttentionRepository.findAllByCreateTimeBetween(
startTime, endTime,pageReq);
List<PublicUserAttention> needSyncData = buildPublicUserAttention(grassUserAttentionList);
publicUserAttentionRepository.saveAll(needSyncData);
}
private List<PublicUserAttention> buildPublicUserAttention( List<GrassUserAttention> grassUserAttentionList){
List<PublicUserAttention> resultList = Lists.newArrayList();
if(CollectionUtils.isEmpty(grassUserAttentionList)){
return resultList;
}
grassUserAttentionList.forEach(grassUserAttention -> {
PublicUserAttention publicUserAttention = new PublicUserAttention();
publicUserAttention.setUid(grassUserAttention.getUid());
publicUserAttention.setStatus(convertAttentionStatus(grassUserAttention.getStatus()));
publicUserAttention.setSrcChannel(1);
publicUserAttention.setTargetId(grassUserAttention.getFollowUid());
publicUserAttention.setCreateTime(convertIntTimeToLong(grassUserAttention.getCreateTime()));
publicUserAttention.setUpdateTime(convertIntTimeToLong(grassUserAttention.getUpdateTime()));
publicUserAttention.setAuthorType(grassUserAttention.getAuthorType());
publicUserAttention.setAttentionType(1);
resultList.add(publicUserAttention);
});
return resultList;
}
private int convertAttentionStatus(int grassAttentionStatus){
switch (grassAttentionStatus){
case UserAttentionConstant.GRASS_HAS_ATTENTION:
return UserAttentionConstant.PUBLIC_HAS_ATTENTION;
case UserAttentionConstant.GRASS_CANCEL_ATTENTION:
return UserAttentionConstant.PUBLIC_CANCEL_ATTENTION;
default:
return UserAttentionConstant.PUBLIC_CANCEL_ATTENTION;
}
}
/**
* 根据文章主表的时间区间同步 评论
* 数据构成主要是:1 文章的所有根评论
* 2 所有子评论
* @param startTime
* @param endTime
*/
private void syncCommentsByArticle(Integer startTime, Integer endTime){
logger.info("syncCommentsByArticle begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int pageSize = 100;
Long startTimeLong = (long)startTime * 1000;
Long endTimeLong = (long)endTime * 1000;
int total = grassArticleRepository.countByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(startTimeLong, endTimeLong,needSyncArticleType,needSyncArticleStatus);
logger.info("syncCommentsByArticle 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(() -> {
syncCommentsByArticlePage(startTimeLong, endTimeLong, indexPage, pageSize);
});
}
}finally {
es.shutdown();
}
}
/**
* 根据评论表自己的时间区间同步 评论
* 数据构成主要是:1 时间区间内所有新产生的根评论
* 2 时间区间内所有新产生的子评论
* 3 非时间区间内的根评论的子评论
* @param startTime
* @param endTime
*/
private void syncCommentsBySelf(Integer startTime, Integer endTime){
logger.info("syncCommentsBySelf begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int pageSize = 100;
int total = grassArticleCommentRepository.countByCreateTimeBetween(startTime, endTime);
logger.info("syncCommentsBySelf 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(() -> {
syncCommentsBySelfPage(startTime, endTime, indexPage, pageSize);
});
}
}finally {
es.shutdown();
}
}
/**
* 根据评论表自己的时间区间同步 评论
* 数据构成主要是:1 时间区间内所有新产生的根评论
* 2 时间区间内所有新产生的子评论
* 3 非时间区间内的根评论的子评论
* @param startTime
* @param endTime
*/
private void syncCommentsBySelfPage(int startTime, int endTime, int indexPage, int pageSize){
Pageable pageReq = PageRequest.of(indexPage, pageSize);
List<GrassArticleComment> grassArticleCommentsList = grassArticleCommentRepository.findAllByCreateTimeBetween(
startTime, endTime, pageReq);
List<Integer> grassArticleIds = grassArticleCommentsList.stream().map(GrassArticleComment::getDestId).collect(Collectors.toList());
List<GrassArticle> grassArticleList = grassArticleRepository.findAllByIdIn(grassArticleIds);
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap = getNowArticleIdAndPulicIdMap(grassArticleList);
List<PublicArticle> publicArticleList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassArticleIds, needSyncArticleType);
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicArticleList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
//先把时间区间内所有的新产生的根评论同步
List<GrassArticleComment> grassRootArticleComments = grassArticleCommentsList.stream().filter(grassArticleComment -> grassArticleComment.getParentId() == null).collect(Collectors.toList());;
List<PublicUserComment> newRootPublicComments = buildRootComments(publicArticleIdAndGrassIdMap, grassRootArticleComments,nowArticleIdAndpublicArticleIdMap);
List<PublicUserComment> rootPublicComments = publicUserCommentRepository.saveAll(newRootPublicComments);
//同步之后,查询所有新产生子评论的父评论id
//要同步的子评论数据中包含两部分 1 父评论已经存在在新表中 刚刚同步的 或者是时间区间之前产生的
// 2 父评论也在这一部分子评论中 此时需要递归进行插入
List<GrassArticleComment> grassChildrenArticleComments = grassArticleCommentsList.stream().filter(grassArticleComment -> grassArticleComment.getParentId() != null).collect(Collectors.toList());
List<Integer> rootIds = grassChildrenArticleComments.stream().map(GrassArticleComment::getRootId).distinct().collect(Collectors.toList());
List<Integer> parentIds = grassChildrenArticleComments.stream().map(GrassArticleComment::getParentId).distinct().collect(Collectors.toList());
rootIds.addAll(parentIds);
List<Integer> relatedIds = rootIds.stream().distinct().collect(Collectors.toList());
List<PublicUserComment> publicRootIds = publicUserCommentRepository.findAllByRelateIdInAndSrcChannelIs(relatedIds, 1);
Map<Integer, Integer> relateIdMap = new HashMap<>();
publicRootIds.forEach(publicUserComment -> {
relateIdMap.put(publicUserComment.getRelateId(), publicUserComment.getId());
});
buildAndSaveChildrenCommentBySelf(publicArticleIdAndGrassIdMap, grassChildrenArticleComments, relateIdMap);
}
/**
* 根据文章主表的时间区间同步 评论
* 数据构成主要是:1 文章的所有根评论
* 2 所有子评论
* @param startTime
* @param endTime
*/
private void syncCommentsByArticlePage(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<Integer> grassRelatedIds = grassArticleList.stream().filter(grassArticle -> grassArticle.getArticleType()==5)
.map(GrassArticle::getRelateId).collect(Collectors.toList());
//社区文章 relate_id 和article_id 对应关系
Map<Integer, Integer> grassRelatedIdAndIdMap = grassArticleList.stream().filter(grassArticle -> grassArticle.getArticleType()==5)
.collect(Collectors.toMap(GrassArticle::getRelateId, GrassArticle::getId));
List<PublicArticle> publicArticleList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassArticleIds, needSyncArticleType);
List<PublicArticle> publicArticleNowList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassRelatedIds, Lists.newArrayList(5));
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
publicArticleList.forEach(publicArticle -> {
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
});
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap = new HashMap<>();
publicArticleNowList.forEach(publicArticle -> {
Integer grassArticleId = grassRelatedIdAndIdMap.get(publicArticle.getRelateId());
nowArticleIdAndpublicArticleIdMap.put(grassArticleId, publicArticle.getId());
});
//先把所有根评论同步
List<PublicUserComment> roots = queryAndBuildRootComment(grassArticleIds, publicArticleIdAndGrassIdMap,nowArticleIdAndpublicArticleIdMap);
List<PublicUserComment> rootPublicComments = publicUserCommentRepository.saveAll(roots);
//审核未通过的不查
List<GrassArticleComment> childrenComments = grassArticleCommentRepository.findAllByDestIdInAndArticleTypeInAndStatusIsNotAndParentIdIsNotNull(grassArticleIds,
needSyncArticleType, 2);
Map<Integer, Integer> rootIdMap = new HashMap<>();
rootPublicComments.forEach(publicUserComment -> {
rootIdMap.put(publicUserComment.getRelateId(), publicUserComment.getId());
});
//同步所有层级的子评论
buildAndSaveChildrenComment(publicArticleIdAndGrassIdMap,rootPublicComments, childrenComments, rootIdMap);
}
private List<PublicUserComment> queryAndBuildRootComment(List<Integer> grassArticleIds, Map<Integer, Integer> publicArticleIdAndGrassIdMap,
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap){
List<PublicUserComment> result;
//审核未通过的不查
List<GrassArticleComment> rootComments = grassArticleCommentRepository.findAllByDestIdInAndArticleTypeInAndStatusIsNotAndParentIdIsNull(grassArticleIds,
needSyncArticleType, 2);
result = buildRootComments(publicArticleIdAndGrassIdMap, rootComments,nowArticleIdAndpublicArticleIdMap);
return result;
}
private List<PublicUserComment> buildRootComments( Map<Integer, Integer> publicArticleIdAndGrassIdMap, List<GrassArticleComment> grassRootArticleComments,
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap){
List<PublicUserComment> result = Lists.newArrayList();
grassRootArticleComments.forEach(grassArticleComment -> {
Integer articleId = publicArticleIdAndGrassIdMap.get(grassArticleComment.getDestId());
if(articleId == null){
articleId = nowArticleIdAndpublicArticleIdMap.get(grassArticleComment.getDestId());
if(articleId == null){
return;
}
}
PublicUserComment publicUserComment = new PublicUserComment();
publicUserComment.setUid(grassArticleComment.getUid());
publicUserComment.setSrcChannel(1);
publicUserComment.setCreateTime(convertIntTimeToLong(grassArticleComment.getCreateTime()));
publicUserComment.setUpdateTime(convertIntTimeToLong(grassArticleComment.getUpdateTime()));
publicUserComment.setArticleId(articleId);
publicUserComment.setContentData(convertCommentContent(grassArticleComment.getContent()));
publicUserComment.setRelateId(grassArticleComment.getId());
publicUserComment.setPraiseNum(grassArticleComment.getPraiseTotal());
publicUserComment.setAuditStatus(convertCommentStatus(grassArticleComment.getStatus()));
publicUserComment.setAuditAccount(grassArticleComment.getReviewer());
publicUserComment.setAuditTime(convertIntTimeToLong(grassArticleComment.getUpdateTime()));
result.add(publicUserComment);
});
return result;
}
//同步所有层级的子评论 各层级的自关联子评论 递归处理
private void buildAndSaveChildrenComment( Map<Integer, Integer> publicArticleIdAndGrassIdMap,
List<PublicUserComment> rootPublicComments, List<GrassArticleComment> childrenComments,
Map<Integer, Integer> rootIdMap){
if(CollectionUtils.isEmpty(childrenComments) || CollectionUtils.isEmpty(rootPublicComments)){
return;
}
List<PublicUserComment> syncPublicUserCommentList;
List<Integer> rootIds = rootPublicComments.stream().map(PublicUserComment::getRelateId).collect(Collectors.toList());
Map<Integer, Integer> commentRootIdAndPublicId = new HashMap<>();
rootPublicComments.forEach(publicUserComment -> {
commentRootIdAndPublicId.put(publicUserComment.getRelateId(), publicUserComment.getId());
});
List<GrassArticleComment> needSync = childrenComments.stream().filter(grassArticleComment ->
rootIds.contains(grassArticleComment.getParentId())).collect(Collectors.toList());
List<GrassArticleComment> nextSync = childrenComments.stream().filter(grassArticleComment ->
!rootIds.contains(grassArticleComment.getParentId())).collect(Collectors.toList());
syncPublicUserCommentList = buildChildrenComments(publicArticleIdAndGrassIdMap, needSync, commentRootIdAndPublicId, rootIdMap);
List<PublicUserComment> publicUserCommentList = publicUserCommentRepository.saveAll(syncPublicUserCommentList);
buildAndSaveChildrenComment(publicArticleIdAndGrassIdMap, publicUserCommentList, nextSync, rootIdMap);
}
//同步之后,查询所有新产生子评论的父评论id
//要同步的子评论数据中包含两部分 1 父评论已经存在在新表中 刚刚同步的 或者是时间区间之前产生的
// 2 父评论也在这一部分子评论中 此时需要递归进行插入
private void buildAndSaveChildrenCommentBySelf( Map<Integer, Integer> publicArticleIdAndGrassIdMap,
List<GrassArticleComment> childrenComments,
Map<Integer, Integer> relateIdMap){
if(CollectionUtils.isEmpty(childrenComments) ){
return;
}
List<PublicUserComment> syncPublicUserCommentList;
// 父评论已经存在在新表中
List<GrassArticleComment> needSync = childrenComments.stream().filter(grassArticleComment ->
relateIdMap.keySet().contains(grassArticleComment.getParentId())).collect(Collectors.toList());
//父评论也在这一部分子评论中
List<GrassArticleComment> nextSync = childrenComments.stream().filter(grassArticleComment ->
!relateIdMap.keySet().contains(grassArticleComment.getParentId())).collect(Collectors.toList());
syncPublicUserCommentList = buildChildrenComments(publicArticleIdAndGrassIdMap, needSync, relateIdMap, relateIdMap);
//新同步的数据id对应关系 直接加到map中来
List<PublicUserComment> publicUserCommentList = publicUserCommentRepository.saveAll(syncPublicUserCommentList);
if(CollectionUtils.isEmpty(publicUserCommentList)){
return;
}
publicUserCommentList.forEach(publicUserComment -> {
relateIdMap.put(publicUserComment.getRelateId(), publicUserComment.getId());
});
buildAndSaveChildrenCommentBySelf(publicArticleIdAndGrassIdMap, nextSync, relateIdMap);
}
private List<PublicUserComment> buildChildrenComments(Map<Integer, Integer> publicArticleIdAndGrassIdMap,List<GrassArticleComment> needSync,
Map<Integer, Integer> commentRootIdAndPublicId,
Map<Integer, Integer> rootIdMap){
List<PublicUserComment> syncPublicUserCommentList = Lists.newArrayList();
needSync.forEach(grassArticleComment -> {
Integer articleId = publicArticleIdAndGrassIdMap.get(grassArticleComment.getDestId());
if(articleId == null){
return;
}
PublicUserComment publicUserComment = new PublicUserComment();
publicUserComment.setUid(grassArticleComment.getUid());
publicUserComment.setSrcChannel(1);
publicUserComment.setCreateTime(convertIntTimeToLong(grassArticleComment.getCreateTime()));
publicUserComment.setUpdateTime(convertIntTimeToLong(grassArticleComment.getUpdateTime()));
publicUserComment.setArticleId(articleId);
publicUserComment.setToCommentId(commentRootIdAndPublicId.get(grassArticleComment.getParentId()));
publicUserComment.setContentData(convertCommentContent(grassArticleComment.getContent()));
publicUserComment.setRootId(rootIdMap.get(grassArticleComment.getRootId()));
publicUserComment.setRelateId(grassArticleComment.getId());
publicUserComment.setRelateParentId(grassArticleComment.getParentId());
publicUserComment.setPraiseNum(grassArticleComment.getPraiseTotal());
publicUserComment.setAuditStatus(convertCommentStatus(grassArticleComment.getStatus()));
publicUserComment.setAuditAccount(grassArticleComment.getReviewer());
publicUserComment.setAuditTime(convertIntTimeToLong(grassArticleComment.getUpdateTime()));
syncPublicUserCommentList.add(publicUserComment);
});
return syncPublicUserCommentList;
}
private String convertCommentContent(String text){
JSONObject jsonObject = new JSONObject();
jsonObject.put("type","text");
jsonObject.put("content",text);
return jsonObject.toString();
}
private int convertCommentStatus(int grassCommentStatus){
switch (grassCommentStatus){
case UserCommentConstant.GRASS_NOT_AUDIT:
return UserCommentConstant.PUBLIC_NOT_AUDIT;
case UserCommentConstant.GRASS_HAS_AUDIT:
return UserCommentConstant.PUBLIC_HAS_AUDIT;
case UserCommentConstant.GRASS_AUDIT_REFUSED:
return UserCommentConstant.PUBLIC_AUDIT_REFUSED;
default:
return UserCommentConstant.PUBLIC_NOT_AUDIT;
}
}
private Map<Integer, Integer> getNowArticleIdAndPulicIdMap(List<GrassArticle> grassArticleList){
Map<Integer, Integer> nowArticleIdAndpublicArticleIdMap = new HashMap<>();
List<Integer> grassRelatedIds = grassArticleList.stream().filter(grassArticle -> grassArticle.getArticleType()==5)
.map(GrassArticle::getRelateId).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(grassRelatedIds)){
//社区文章 relate_id 和article_id 对应关系
Map<Integer, Integer> grassRelatedIdAndIdMap = grassArticleList.stream().filter(grassArticle -> grassArticle.getArticleType()==5)
.collect(Collectors.toMap(GrassArticle::getRelateId, GrassArticle::getId));
List<PublicArticle> publicArticleNowList = publicArticleRepository.findAllByRelateIdInAndArticleTypeIn(grassRelatedIds, Lists.newArrayList(5));
publicArticleNowList.forEach(publicArticle -> {
Integer grassArticleId = grassRelatedIdAndIdMap.get(publicArticle.getRelateId());
nowArticleIdAndpublicArticleIdMap.put(grassArticleId, publicArticle.getId());
});
}
return nowArticleIdAndpublicArticleIdMap;
}
private Long convertIntTimeToLong(Integer time){
return Long.valueOf(Optional.ofNullable(time).orElse(0)) * 1000;
}
}
... ...
package com.yoho.datasync.fullsync.service.impl;
import com.google.common.collect.Lists;
import com.yoho.datasync.fullsync.dal.repository.grass.GrassUserAchieveRepository;
import com.yoho.datasync.fullsync.dal.repository.grass.GrassVirtualUserRepository;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassUserAchieve;
import com.yoho.datasync.fullsync.dal.repository.grass.model.GrassVirtualUser;
import com.yoho.datasync.fullsync.dal.repository.pcms.PublicUserHomePageRepository;
import com.yoho.datasync.fullsync.dal.repository.pcms.PublicVirtualUserRepository;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicUserHomePage;
import com.yoho.datasync.fullsync.dal.repository.pcms.model.PublicVirtualUser;
import com.yoho.datasync.fullsync.service.IGrassUserDataSyncService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Service
public class GrassUserDataSyncServiceImpl implements IGrassUserDataSyncService {
private Logger logger = LoggerFactory.getLogger(GrassUserDataSyncServiceImpl.class);
@Autowired
private GrassUserAchieveRepository grassUserAchieveRepository;
@Autowired
private PublicUserHomePageRepository publicUserHomePageRepository;
@Autowired
private GrassVirtualUserRepository grassVirtualUserRepository;
@Autowired
private PublicVirtualUserRepository publicVirtualUserRepository;
private static final int USER_ACHIEVE = 1;
private static final int USER_VIRTUAL = 2;
private static final int pageSize = 100;
@Override
public String syncGrassUserData(Integer startTime, Integer endTime, Integer syncType) {
switch (syncType){
case USER_ACHIEVE:
syncUserAchieveData(startTime,endTime);
break;
case USER_VIRTUAL:
syncVirtualUserData(startTime,endTime);
break;
default:
break;
}
return "success";
}
private void syncUserAchieveData(Integer startTime, Integer endTime){
logger.info("syncUserAchieveData begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int total = grassUserAchieveRepository.countByCreateTimeBetween(startTime, endTime);
logger.info("syncUserAchieveData 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(() -> {
syncUserAchieveDataPage(startTime, endTime, indexPage);
});
}
}finally {
es.shutdown();
}
}
private void syncUserAchieveDataPage(Integer startTime, Integer endTime, int indexPage){
PageRequest pageRequest = PageRequest.of(indexPage, pageSize);
List<GrassUserAchieve> grassUserAchieveList = grassUserAchieveRepository.findAllByCreateTimeBetween(startTime,endTime, pageRequest);
List<PublicUserHomePage> needSyncData = buildPublicUserHomePage(grassUserAchieveList);
logger.info("syncUserAchieveDataPage need sync data count is {}", needSyncData.size());
publicUserHomePageRepository.saveAll(needSyncData);
}
private List<PublicUserHomePage> buildPublicUserHomePage( List<GrassUserAchieve> grassUserAchieveList ){
List<PublicUserHomePage> result = Lists.newArrayList();
grassUserAchieveList.forEach(grassUserAchieve -> {
PublicUserHomePage publicUserHomePage = new PublicUserHomePage();
publicUserHomePage.setUid(grassUserAchieve.getUid());
publicUserHomePage.setFansCount(grassUserAchieve.getFansCount());
publicUserHomePage.setAttCount(grassUserAchieve.getAttCount());
publicUserHomePage.setPraiseAmount(grassUserAchieve.getPraiseAmount());
publicUserHomePage.setFavoriteAmount(grassUserAchieve.getFavoriteAmount());
publicUserHomePage.setSignature(grassUserAchieve.getSignature());
publicUserHomePage.setUserType(grassUserAchieve.getUserType());
publicUserHomePage.setSrc_channel(1);
publicUserHomePage.setAuthorId(grassUserAchieve.getAuthorId());
publicUserHomePage.setUpdateTime(convertIntTimeToLong(grassUserAchieve.getUpdateTime()));
publicUserHomePage.setCreateTime(convertIntTimeToLong(grassUserAchieve.getCreateTime()));
result.add(publicUserHomePage);
});
return result;
}
private void syncVirtualUserData(Integer startTime, Integer endTime){
logger.info("syncVirtualUserData begin, startTime is {}, endTime is {}", startTime, endTime);
ExecutorService es = Executors.newSingleThreadExecutor();
int total = grassVirtualUserRepository.countByCreateTimeBetween(startTime, endTime);
logger.info("syncVirtualUserData 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(() -> {
syncVirtualUserDataPage(startTime, endTime, indexPage);
});
}
}finally {
es.shutdown();
}
}
private void syncVirtualUserDataPage(Integer startTime, Integer endTime, int indexPage){
PageRequest pageRequest = PageRequest.of(indexPage, pageSize);
List<GrassVirtualUser> grassUserAchieveList = grassVirtualUserRepository.findAllByCreateTimeBetween(startTime,endTime, pageRequest);
List<PublicVirtualUser> needSyncData = buildPublicVirtualUserPage(grassUserAchieveList);
logger.info("syncUserAchieveDataPage need sync data count is {}", needSyncData.size());
publicVirtualUserRepository.saveAll(needSyncData);
}
private List<PublicVirtualUser> buildPublicVirtualUserPage(List<GrassVirtualUser> grassUserAchieveList ){
List<PublicVirtualUser> result = Lists.newArrayList();
grassUserAchieveList.forEach(grassVirtualUser -> {
PublicVirtualUser publicVirtualUser = new PublicVirtualUser();
publicVirtualUser.setUid(grassVirtualUser.getUid());
publicVirtualUser.setCreateTime(grassVirtualUser.getCreateTime());
publicVirtualUser.setUpdateTime(grassVirtualUser.getUpdateTime());
publicVirtualUser.setStatus(grassVirtualUser.getStatus());
publicVirtualUser.setSrcChannel(1);
publicVirtualUser.setUserType(1);
result.add(publicVirtualUser);
});
return result;
}
private Long convertIntTimeToLong(Integer time){
return Long.valueOf(Optional.ofNullable(time).orElse(0)) * 1000;
}
}
... ...
... ... @@ -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());
}
}
... ...