|
|
package com.yoho.datasync.fullsync.service.impl;
|
|
|
|
|
|
import com.yoho.datasync.fullsync.dal.repository.grass.GrassArticleRepository;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.google.common.collect.Lists;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.yoho.datasync.fullsync.constant.ArticleStatusConstant;
|
|
|
import com.yoho.datasync.fullsync.dal.repository.grass.*;
|
|
|
import com.yoho.datasync.fullsync.dal.repository.grass.model.*;
|
|
|
import com.yoho.datasync.fullsync.dal.repository.pcms.*;
|
|
|
import com.yoho.datasync.fullsync.dal.repository.pcms.model.*;
|
|
|
import com.yoho.datasync.fullsync.service.IGrassArticleSyncService;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.domain.PageRequest;
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
import java.util.concurrent.Executors;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
@Service
|
|
|
public class GrassArticleSyncServiceImpl implements IGrassArticleSyncService {
|
|
|
|
|
|
private Logger logger = LoggerFactory.getLogger(GrassArticleSyncServiceImpl.class);
|
|
|
|
|
|
@Autowired
|
|
|
private GrassArticleRepository grassArticleRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private PublicArticleRepository publicArticleRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private GrassArticleBlockRepository grassArticleBlockRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private PublicArticleBlockRepository publicArticleBlockRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private GrassArticleProductRepository grassArticleProductRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private PublicArticleProductRepository publicArticleProductRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private GrassArticleLabelRepository grassArticleLabelRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private PublicArticleLabelRepository publicArticleLabelRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private GrassLabelRepository grassLabelRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private PublicLabelRepository publicLabelRepository;
|
|
|
|
|
|
@Autowired
|
|
|
private PublicArticleAuditRepository publicArticleAuditRepository;
|
|
|
|
|
|
public static List<Integer> needSyncArticleType = new ArrayList<>();
|
|
|
|
|
|
public static List<Integer> needSyncArticleStatus = new ArrayList<>();
|
|
|
|
|
|
static {
|
|
|
needSyncArticleType.add(1);
|
|
|
needSyncArticleType.add(2);
|
|
|
needSyncArticleType.add(4);
|
|
|
needSyncArticleStatus.add(0);
|
|
|
needSyncArticleStatus.add(1);
|
|
|
needSyncArticleStatus.add(9);
|
|
|
}
|
|
|
@Override
|
|
|
public String syncArticle(Long startTime, Long endTime) {
|
|
|
return null;
|
|
|
logger.info("syncArticle begin, startTime is {}, endTime is {}", startTime, endTime);
|
|
|
ExecutorService es = Executors.newSingleThreadExecutor();
|
|
|
int pageSize = 100;
|
|
|
int total = grassArticleRepository.countByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(startTime, endTime,needSyncArticleType,needSyncArticleStatus);
|
|
|
logger.info("syncArticle get grassArticle count is {}", total);
|
|
|
int totalPage = total % pageSize ==0 ? total / pageSize : (total / pageSize)+1;
|
|
|
try{
|
|
|
//每次查询100条,增加detail
|
|
|
for (int index=0; index < totalPage; index++) {
|
|
|
int indexPage = index;
|
|
|
es.execute(() -> {
|
|
|
syncArticle(startTime, endTime, indexPage, pageSize);
|
|
|
});
|
|
|
}
|
|
|
}finally {
|
|
|
es.shutdown();
|
|
|
}
|
|
|
return String.valueOf(total);
|
|
|
}
|
|
|
|
|
|
private void syncArticle(long startTime , long endTime, int indexPage, int pageSize){
|
|
|
|
|
|
//同步主表 拿到自增主键 同步文章审核信息
|
|
|
List<PublicArticle> publicArticleList = syncPublicArticle(startTime, endTime, indexPage, pageSize);
|
|
|
//同步block表
|
|
|
syncArticleBlock(publicArticleList);
|
|
|
//同步product表
|
|
|
syncArticleProduct(publicArticleList);
|
|
|
//同步label 和 article_label表
|
|
|
syncArticleLabel(publicArticleList);
|
|
|
}
|
|
|
|
|
|
|
|
|
//同步文章主表信息, 拿到主表生成的新的主键id
|
|
|
private List<PublicArticle> syncPublicArticle(long startTime, long endTime, int indexPage, int pageSize){
|
|
|
List<PublicArticle> savedList = new ArrayList<>();
|
|
|
|
|
|
Pageable pageReq = PageRequest.of(indexPage, pageSize);
|
|
|
List<GrassArticle> grassArticleList = grassArticleRepository.findAllByCreateTimeAfterAndCreateTimeBeforeAndArticleTypeInAndAuthStatusIn(
|
|
|
startTime, endTime,needSyncArticleType,needSyncArticleStatus,pageReq);
|
|
|
|
|
|
try{
|
|
|
List<PublicArticle> publicArticleList = new ArrayList<>();
|
|
|
grassArticleList.forEach(grassArticle -> {
|
|
|
PublicArticle publicArticle = convertPublicArticle(grassArticle);
|
|
|
publicArticleList.add(publicArticle);
|
|
|
});
|
|
|
savedList = publicArticleRepository.saveAll(publicArticleList);
|
|
|
}catch (Exception e){
|
|
|
logger.warn(" syncPublicArticle error with exception e {}", e);
|
|
|
}
|
|
|
|
|
|
//同步文章审核信息
|
|
|
syncArticleAudit(grassArticleList, savedList);
|
|
|
return savedList;
|
|
|
}
|
|
|
|
|
|
//同步articleBlock表信息: 先根据article_id去grass库 查到grass_article_block表的数据,按照格式组装 并关联新的主表id 入库
|
|
|
private void syncArticleBlock(List<PublicArticle> publicArticleList){
|
|
|
if(CollectionUtils.isEmpty(publicArticleList)){
|
|
|
return;
|
|
|
}
|
|
|
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
|
|
|
publicArticleList.forEach(publicArticle -> {
|
|
|
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
|
|
|
});
|
|
|
List<Integer> grassArticleIds = publicArticleList.stream().map(PublicArticle::getRelateId).collect(Collectors.toList());
|
|
|
List<GrassArticleBlock> blockList = grassArticleBlockRepository.findAllByArticleIdInAndStatusIs(grassArticleIds, 1);
|
|
|
Map<Integer, List<GrassArticleBlock>> blocksMap = getBlocksMap(blockList);
|
|
|
List<PublicArticleBlock> needSyncBlocks = buildPublicBlocks(blocksMap, publicArticleIdAndGrassIdMap);
|
|
|
|
|
|
if(!CollectionUtils.isEmpty(needSyncBlocks)){
|
|
|
publicArticleBlockRepository.saveAll(needSyncBlocks);
|
|
|
}
|
|
|
logger.info("syncArticleBlock success , sync count is {}",needSyncBlocks.size());
|
|
|
}
|
|
|
|
|
|
private List<PublicArticleBlock> buildPublicBlocks(Map<Integer, List<GrassArticleBlock>> blocksMap, Map<Integer, Integer> publicArticleIdAndGrassIdMap){
|
|
|
List<PublicArticleBlock> publicArticleBlockList = new ArrayList<>();
|
|
|
publicArticleIdAndGrassIdMap.keySet().forEach(grassArticleId -> {
|
|
|
Integer publicArticleId = publicArticleIdAndGrassIdMap.get(grassArticleId);
|
|
|
List<GrassArticleBlock> grassArticleBlocks = blocksMap.get(grassArticleId);
|
|
|
List<PublicArticleBlock> singleArticleList = convertPublicArticleBlocks(grassArticleBlocks, publicArticleId);
|
|
|
publicArticleBlockList.addAll(singleArticleList);
|
|
|
});
|
|
|
return publicArticleBlockList;
|
|
|
}
|
|
|
|
|
|
private Map<Integer, List<GrassArticleBlock>> getBlocksMap(List<GrassArticleBlock> blocks){
|
|
|
|
|
|
Map<Integer, List<GrassArticleBlock>> resultMap = new HashMap<>();
|
|
|
blocks.forEach(grassArticleBlock -> {
|
|
|
List<GrassArticleBlock> blockList = resultMap.get(grassArticleBlock.getArticleId());
|
|
|
if(blockList == null){
|
|
|
blockList = new ArrayList<>();
|
|
|
}
|
|
|
blockList.add(grassArticleBlock);
|
|
|
resultMap.put(grassArticleBlock.getArticleId(), blockList);
|
|
|
});
|
|
|
return resultMap;
|
|
|
}
|
|
|
|
|
|
private PublicArticle convertPublicArticle(GrassArticle grassArticle){
|
|
|
PublicArticle publicArticle = new PublicArticle();
|
|
|
publicArticle.setAuthorUid(grassArticle.getAuthorUid());
|
|
|
publicArticle.setArticleType(grassArticle.getArticleType());
|
|
|
publicArticle.setRelateId(grassArticle.getId());
|
|
|
publicArticle.setCreateTime(grassArticle.getCreateTime());
|
|
|
publicArticle.setUpdateTime(grassArticle.getUpdateTime());
|
|
|
publicArticle.setAuthorType(grassArticle.getAuthorType());
|
|
|
publicArticle.setArticleTitle("");
|
|
|
publicArticle.setMinRelateId(grassArticle.getRelateId());
|
|
|
publicArticle.setPraiseNum(grassArticle.getPraiseCount());
|
|
|
publicArticle.setFavoriteNum(grassArticle.getFavoriteCount());
|
|
|
publicArticle.setAuditStatus(getArticleAuditStatus(grassArticle.getAuthStatus()));
|
|
|
publicArticle.setStatus(getArticleStatus(grassArticle.getAuthStatus()));
|
|
|
publicArticle.setPublishTime(grassArticle.getCreateTime());
|
|
|
return publicArticle;
|
|
|
}
|
|
|
|
|
|
//两张表审核状态转换
|
|
|
private int getArticleAuditStatus(int authStatus){
|
|
|
switch (authStatus){
|
|
|
case ArticleStatusConstant.GrassArticleAuthorStatus.NOT_AUDIT:
|
|
|
return ArticleStatusConstant.PublicArticleAuditStatus.NOT_AUDIT;
|
|
|
case ArticleStatusConstant.GrassArticleAuthorStatus.PASS_AUDIT:
|
|
|
return ArticleStatusConstant.PublicArticleAuditStatus.PASS_AUDIT;
|
|
|
case ArticleStatusConstant.GrassArticleAuthorStatus.NOT_PASS_AUDIT:
|
|
|
return ArticleStatusConstant.PublicArticleAuditStatus.NOT_PASS_AUDIT;
|
|
|
default:
|
|
|
return ArticleStatusConstant.PublicArticleAuditStatus.NOT_AUDIT;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 草稿箱和删除状态转换
|
|
|
private int getArticleStatus(int authStatus){
|
|
|
switch (authStatus){
|
|
|
case ArticleStatusConstant.GrassArticleAuthorStatus.HAS_DELETE:
|
|
|
return ArticleStatusConstant.PublicArticleStatus.HAS_DELETE;
|
|
|
case ArticleStatusConstant.GrassArticleAuthorStatus.DRAFT:
|
|
|
return ArticleStatusConstant.PublicArticleStatus.DRAFT;
|
|
|
default:
|
|
|
return ArticleStatusConstant.PublicArticleStatus.NORMAL;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//组装每个新的articleID 对应的 blocklist
|
|
|
private List<PublicArticleBlock> convertPublicArticleBlocks(List<GrassArticleBlock> grassArticleBlocks,Integer publicArticleId){
|
|
|
if (CollectionUtils.isEmpty(grassArticleBlocks)){
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
List<PublicArticleBlock> blocks = new ArrayList<>();
|
|
|
boolean hasCover =false;
|
|
|
grassArticleBlocks = grassArticleBlocks.stream().sorted((o1, o2) ->{
|
|
|
if(o1.getOrderBy()> o2.getOrderBy()){
|
|
|
return 1;
|
|
|
}else {
|
|
|
return -1;
|
|
|
}
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
|
for (GrassArticleBlock grassArticleBlock:grassArticleBlocks) {
|
|
|
boolean isCover = false;
|
|
|
//第一个image为默认封面图
|
|
|
if("image".equals(grassArticleBlock.getTemplateKey())){
|
|
|
if(!hasCover){
|
|
|
isCover =true;
|
|
|
hasCover=true;
|
|
|
}
|
|
|
}
|
|
|
PublicArticleBlock publicArticleBlock = new PublicArticleBlock();
|
|
|
publicArticleBlock.setArticleId(publicArticleId);
|
|
|
publicArticleBlock.setContentData(getBlock(grassArticleBlock.getTemplateKey(),grassArticleBlock.getContentData(),isCover));
|
|
|
publicArticleBlock.setContentType(grassArticleBlock.getTemplateKey());
|
|
|
publicArticleBlock.setCreateTime(grassArticleBlock.getCreateTime());
|
|
|
publicArticleBlock.setUpdateTime(grassArticleBlock.getUpdateTime());
|
|
|
publicArticleBlock.setOrderBy(grassArticleBlock.getOrderBy());
|
|
|
blocks.add(publicArticleBlock);
|
|
|
}
|
|
|
|
|
|
return blocks;
|
|
|
}
|
|
|
|
|
|
//组装block的content_data 字段,
|
|
|
private String getBlock(String templatName, String data, boolean isCover){
|
|
|
JSONObject dataObject = new JSONObject();
|
|
|
String dataString = JSONObject.parseObject(data).getString("data");
|
|
|
JSONObject block = JSONObject.parseObject(dataString);
|
|
|
switch (templatName){
|
|
|
case "image":
|
|
|
dataObject.put("url",block.getString("src"));
|
|
|
dataObject.put("type","image");
|
|
|
dataObject.put("width",block.getString("width"));
|
|
|
dataObject.put("height",block.getString("height"));
|
|
|
dataObject.put("actionUrl","");
|
|
|
if(isCover){
|
|
|
dataObject.put("isCoverImg","Y");
|
|
|
}else{
|
|
|
dataObject.put("isCoverImg","N");
|
|
|
}
|
|
|
break;
|
|
|
case "text":
|
|
|
dataObject.put("type","text");
|
|
|
dataObject.put("content",block.getString("text"));
|
|
|
break;
|
|
|
default:break;
|
|
|
}
|
|
|
return dataObject.toJSONString();
|
|
|
}
|
|
|
|
|
|
//同步文章关联商品表
|
|
|
private void syncArticleProduct(List<PublicArticle> publicArticleList){
|
|
|
if(CollectionUtils.isEmpty(publicArticleList)){
|
|
|
return;
|
|
|
}
|
|
|
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
|
|
|
publicArticleList.forEach(publicArticle -> {
|
|
|
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
|
|
|
});
|
|
|
List<Integer> grassArticleIds = publicArticleList.stream().map(PublicArticle::getRelateId).collect(Collectors.toList());
|
|
|
List<GrassArticleProduct> productList = grassArticleProductRepository.findAllByArticleIdInAndStatusIs(grassArticleIds, 1);
|
|
|
Map<Integer, List<GrassArticleProduct>> productMap = getProductMap(productList);
|
|
|
List<PublicArticleProduct> needSyncProducts = buildPublicProduct(productMap, publicArticleIdAndGrassIdMap);
|
|
|
|
|
|
if(!CollectionUtils.isEmpty(needSyncProducts)){
|
|
|
publicArticleProductRepository.saveAll(needSyncProducts);
|
|
|
}
|
|
|
logger.info("syncArticleProduct success , sync count is {}",needSyncProducts.size());
|
|
|
}
|
|
|
|
|
|
private Map<Integer, List<GrassArticleProduct>> getProductMap(List<GrassArticleProduct> productList){
|
|
|
|
|
|
Map<Integer, List<GrassArticleProduct>> resultMap = new HashMap<>();
|
|
|
productList.forEach(grassArticleProduct -> {
|
|
|
List<GrassArticleProduct> products = resultMap.get(grassArticleProduct.getArticleId());
|
|
|
if(products == null){
|
|
|
products = new ArrayList<>();
|
|
|
}
|
|
|
products.add(grassArticleProduct);
|
|
|
resultMap.put(grassArticleProduct.getArticleId(), products);
|
|
|
});
|
|
|
return resultMap;
|
|
|
}
|
|
|
|
|
|
private List<PublicArticleProduct> buildPublicProduct(Map<Integer, List<GrassArticleProduct>> productMap, Map<Integer, Integer> publicArticleIdAndGrassIdMap){
|
|
|
List<PublicArticleProduct> publicArticleProductList = new ArrayList<>();
|
|
|
publicArticleIdAndGrassIdMap.keySet().forEach(grassArticleId -> {
|
|
|
Integer publicArticleId = publicArticleIdAndGrassIdMap.get(grassArticleId);
|
|
|
List<GrassArticleProduct> grassArticleBlocks = productMap.get(grassArticleId);
|
|
|
List<PublicArticleProduct> singleArticleList = convertPublicArticleProducts(grassArticleBlocks, publicArticleId);
|
|
|
publicArticleProductList.addAll(singleArticleList);
|
|
|
});
|
|
|
return publicArticleProductList;
|
|
|
}
|
|
|
|
|
|
private List<PublicArticleProduct> convertPublicArticleProducts(List<GrassArticleProduct> grassArticleProduct, Integer publicArticleId){
|
|
|
if (CollectionUtils.isEmpty(grassArticleProduct)){
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
List<PublicArticleProduct> products = new ArrayList<>();
|
|
|
|
|
|
grassArticleProduct.forEach(product -> {
|
|
|
PublicArticleProduct publicArticleProduct = new PublicArticleProduct();
|
|
|
publicArticleProduct.setArticleId(publicArticleId);
|
|
|
publicArticleProduct.setOrderBy(product.getOrderBy());
|
|
|
publicArticleProduct.setProductSkn(product.getProductSkn());
|
|
|
publicArticleProduct.setProductType(product.getProductSource());
|
|
|
publicArticleProduct.setCreateTime(product.getCreateTime());
|
|
|
publicArticleProduct.setSrcChannel(1);
|
|
|
products.add(publicArticleProduct);
|
|
|
});
|
|
|
return products;
|
|
|
}
|
|
|
|
|
|
//同步文章和标签的关联关系: 1、先同步文章关联的标签 2、再同步文章和标签的关联关系
|
|
|
private void syncArticleLabel(List<PublicArticle> publicArticleList){
|
|
|
if(CollectionUtils.isEmpty(publicArticleList)){
|
|
|
return;
|
|
|
}
|
|
|
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
|
|
|
publicArticleList.forEach(publicArticle -> {
|
|
|
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
|
|
|
});
|
|
|
List<Integer> grassArticleIds = publicArticleList.stream().map(PublicArticle::getRelateId).collect(Collectors.toList());
|
|
|
List<Integer> needSyncStatus = Lists.newArrayList(0,1);
|
|
|
List<GrassArticleLabel> grassArticleLabels = grassArticleLabelRepository.findAllByArticleIdInAndAuthStatusIn(grassArticleIds, needSyncStatus);
|
|
|
//这批文章没有标签关联关系需要同步
|
|
|
if(CollectionUtils.isEmpty(grassArticleLabels)){
|
|
|
return;
|
|
|
}
|
|
|
List<Integer> grassLabelIds = grassArticleLabels.stream().map(GrassArticleLabel::getLabelId).distinct().collect(Collectors.toList());
|
|
|
List<GrassLabel> grassLabelList = grassLabelRepository.findAllByIdIn(grassLabelIds);
|
|
|
|
|
|
List<PublicLabel> publicLabelList = getPublicbLabels(grassLabelList);
|
|
|
Map<String, Integer> labelNameAndPublicLabelIdMap = getLabelNameAndPublicLabelId(publicLabelList);
|
|
|
Map<Integer, String> grassLabelIdAndLabelNameMap = getLabelNameAndGrassId(grassLabelList);
|
|
|
|
|
|
List<PublicArticleLabel> publicArticleLabelList = buildPublicArticleLabel(publicArticleIdAndGrassIdMap,labelNameAndPublicLabelIdMap,
|
|
|
grassLabelIdAndLabelNameMap,grassArticleLabels );
|
|
|
|
|
|
if(!CollectionUtils.isEmpty(publicArticleLabelList)){
|
|
|
publicArticleLabelRepository.saveAll(publicArticleLabelList);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
private List<PublicLabel> buildPublicLabels(List<GrassLabel> grassLabelList, List<String> existNames){
|
|
|
List<PublicLabel> resultList = Lists.newArrayList();
|
|
|
if(CollectionUtils.isEmpty(grassLabelList)){
|
|
|
return resultList;
|
|
|
}
|
|
|
grassLabelList.forEach(grassLabel -> {
|
|
|
if(existNames.contains(grassLabel.getLabelName())){
|
|
|
return;
|
|
|
}
|
|
|
PublicLabel publicLabel = new PublicLabel();
|
|
|
publicLabel.setLabelName(grassLabel.getLabelName());
|
|
|
publicLabel.setGroupId(grassLabel.getGroupId());
|
|
|
publicLabel.setStatus(grassLabel.getStatus());
|
|
|
publicLabel.setIsVisible(grassLabel.getVisibleStatus() == 1 ? 1 : 2);
|
|
|
publicLabel.setCreateTime((long) (grassLabel.getCreateTime()) * 1000);
|
|
|
publicLabel.setUpdateTime((long) (Optional.ofNullable(grassLabel.getUpdateTime()).orElse(0)) * 1000);
|
|
|
publicLabel.setSrcChannel(1);
|
|
|
publicLabel.setRelateId(grassLabel.getId());
|
|
|
resultList.add(publicLabel);
|
|
|
});
|
|
|
|
|
|
return resultList;
|
|
|
}
|
|
|
|
|
|
private Map<String, Integer> getLabelNameAndPublicLabelId(List<PublicLabel> publicLabelList){
|
|
|
Map<String, Integer> labelNameAndPublicLabelIdMap = Maps.newHashMap();
|
|
|
publicLabelList.forEach(publicLabel -> {
|
|
|
labelNameAndPublicLabelIdMap.put(publicLabel.getLabelName(),publicLabel.getId());
|
|
|
});
|
|
|
return labelNameAndPublicLabelIdMap;
|
|
|
}
|
|
|
|
|
|
private Map<Integer, String> getLabelNameAndGrassId(List<GrassLabel> grassLabelList){
|
|
|
Map<Integer, String> GrassLabelIdAndlabelNameMap = Maps.newHashMap();
|
|
|
grassLabelList.forEach(grassLabel -> {
|
|
|
GrassLabelIdAndlabelNameMap.put(grassLabel.getId(),grassLabel.getLabelName());
|
|
|
});
|
|
|
return GrassLabelIdAndlabelNameMap;
|
|
|
}
|
|
|
|
|
|
private List<PublicArticleLabel> buildPublicArticleLabel(Map<Integer, Integer> publicArticleIdAndGrassIdMap,Map<String, Integer> labelNameAndPublicLabelIdMap,
|
|
|
Map<Integer, String> grassLabelIdAndlabelNameMap, List<GrassArticleLabel> grassArticleLabels){
|
|
|
List<PublicArticleLabel> resultList = Lists.newArrayList();
|
|
|
grassArticleLabels.forEach(grassArticleLabel -> {
|
|
|
String labelName = grassLabelIdAndlabelNameMap.get(grassArticleLabel.getLabelId());
|
|
|
PublicArticleLabel publicArticleLabel = new PublicArticleLabel();
|
|
|
publicArticleLabel.setArticleId(publicArticleIdAndGrassIdMap.get(grassArticleLabel.getArticleId()));
|
|
|
publicArticleLabel.setCreateTime(grassArticleLabel.getCreateTime());
|
|
|
publicArticleLabel.setLabelId(labelNameAndPublicLabelIdMap.get(labelName));
|
|
|
publicArticleLabel.setSrcChannel(1);
|
|
|
resultList.add(publicArticleLabel);
|
|
|
});
|
|
|
|
|
|
return resultList;
|
|
|
}
|
|
|
|
|
|
private List<PublicLabel> getPublicbLabels(List<GrassLabel> grassLabelList){
|
|
|
List<PublicLabel> result = Lists.newArrayList();
|
|
|
|
|
|
if(CollectionUtils.isEmpty(grassLabelList)){
|
|
|
return result;
|
|
|
}
|
|
|
//剔除已经存在的标签
|
|
|
List<String> allLabelNames = grassLabelList.stream().map(GrassLabel::getLabelName).collect(Collectors.toList());
|
|
|
List<PublicLabel> existPublicLabels = publicLabelRepository.findAllByLabelNameIn(allLabelNames);
|
|
|
List<String> existLabelName = existPublicLabels.stream().map(PublicLabel::getLabelName).collect(Collectors.toList());
|
|
|
List<PublicLabel> newpublicLabelList = buildPublicLabels(grassLabelList,existLabelName);
|
|
|
newpublicLabelList = publicLabelRepository.saveAll(newpublicLabelList);
|
|
|
|
|
|
result.addAll(existPublicLabels);
|
|
|
result.addAll(newpublicLabelList);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
private void syncArticleAudit(List<GrassArticle> grassArticleList,List<PublicArticle> publicArticleList){
|
|
|
if(CollectionUtils.isEmpty(publicArticleList) || CollectionUtils.isEmpty(grassArticleList) ){
|
|
|
return;
|
|
|
}
|
|
|
List<PublicArticleAudit> publicArticleAuditList = Lists.newArrayList();
|
|
|
Map<Integer, Integer> publicArticleIdAndGrassIdMap = new HashMap<>();
|
|
|
publicArticleList.forEach(publicArticle -> {
|
|
|
publicArticleIdAndGrassIdMap.put(publicArticle.getRelateId(), publicArticle.getId());
|
|
|
});
|
|
|
grassArticleList.forEach(grassArticle -> {
|
|
|
if(StringUtils.isEmpty(grassArticle.getAuthorizeAccount())){
|
|
|
return;
|
|
|
}
|
|
|
PublicArticleAudit publicArticleAudit = new PublicArticleAudit();
|
|
|
publicArticleAudit.setAuditStatus(grassArticle.getAuthStatus());
|
|
|
publicArticleAudit.setAuditAccount(grassArticle.getAuthorizeAccount());
|
|
|
publicArticleAudit.setAuditTime(grassArticle.getAuthTime());
|
|
|
publicArticleAudit.setArticleId(publicArticleIdAndGrassIdMap.get(grassArticle.getId()));
|
|
|
publicArticleAuditList.add(publicArticleAudit);
|
|
|
});
|
|
|
if(!CollectionUtils.isEmpty(publicArticleAuditList)){
|
|
|
publicArticleAuditRepository.saveAll(publicArticleAuditList);
|
|
|
}
|
|
|
logger.info("syncArticleAudit success, total is {}",publicArticleAuditList.size());
|
|
|
}
|
|
|
} |
...
|
...
|
|