|
|
package com.yohobuy.platform.grass.service.impl;
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.yohobuy.platform.common.exception.PlatformException;
|
|
|
import com.yohobuy.platform.common.util.DateUtil;
|
|
|
import com.yohobuy.platform.dal.grass.IGrassArticleBlockDao;
|
|
|
import com.yohobuy.platform.dal.grass.IGrassArticleDao;
|
|
|
import com.yohobuy.platform.dal.grass.IGrassArticleImageDao;
|
|
|
import com.yohobuy.platform.dal.grass.IGrassArticleSknDao;
|
|
|
import com.yohobuy.platform.dal.grass.IGrassPlatUserDao;
|
|
|
import com.yohobuy.platform.dal.grass.IGrassArticleProductDao;
|
|
|
import com.yohobuy.platform.dal.grass.IGrassVirtualUserDao;
|
|
|
import com.yohobuy.platform.dal.grass.model.GrassArticle;
|
|
|
import com.yohobuy.platform.dal.grass.model.GrassArticleImage;
|
|
|
import com.yohobuy.platform.dal.grass.model.GrassArticleSkn;
|
|
|
import com.yohobuy.platform.dal.grass.model.GrassArticleBlock;
|
|
|
import com.yohobuy.platform.dal.grass.model.GrassArticleProduct;
|
|
|
import com.yohobuy.platform.grass.service.IGrassArticleService;
|
|
|
import com.yohobuy.platform.model.grass.request.GrassArticleReq;
|
|
|
import com.yohobuy.platform.model.grass.response.ArticleDetailRspBo;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.util.Arrays;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
*/
|
...
|
...
|
@@ -31,11 +36,11 @@ public class GrassArticleServiceImpl implements IGrassArticleService{ |
|
|
@Resource
|
|
|
private IGrassArticleDao grassArticleDao;
|
|
|
@Resource
|
|
|
private IGrassArticleImageDao grassArticleImageDao;
|
|
|
private IGrassArticleBlockDao grassArticleBlockDao;
|
|
|
@Resource
|
|
|
private IGrassArticleSknDao grassArticleSknDao;
|
|
|
private IGrassArticleProductDao grassArticleProductDao;
|
|
|
@Resource
|
|
|
private IGrassPlatUserDao grassPlatUserDao;
|
|
|
private IGrassVirtualUserDao grassVirtualUserDao;
|
|
|
|
|
|
|
|
|
@Override
|
...
|
...
|
@@ -44,45 +49,58 @@ public class GrassArticleServiceImpl implements IGrassArticleService{ |
|
|
publishCheck(req);
|
|
|
|
|
|
GrassArticle article = new GrassArticle();
|
|
|
article.setAuthorUid(req.getArticleUid());
|
|
|
article.setArticleContent(req.getContent());
|
|
|
article.setPublishTime(DateUtil.getCurrentTimeSeconds());
|
|
|
article.setAuthorUid(req.getAuthorUid());
|
|
|
article.setCreateTime(DateUtil.getCurrentTimeSeconds());
|
|
|
article.setTopicId(req.getTopicId());
|
|
|
try{
|
|
|
grassArticleDao.insertArticleSeletive(article);
|
|
|
logger.info("insert grass article success, uid is {}, ariticle id is {}", article.getAuthorUid(), article.getId());
|
|
|
}catch (Exception e){
|
|
|
logger.warn("insert grass article fail, uid is {}, e is {}",req.getArticleUid(), e );
|
|
|
logger.warn("insert grass article fail, uid is {}, e is {}",req.getAuthorUid(), e );
|
|
|
throw new PlatformException("publish article failed", 402);
|
|
|
}
|
|
|
|
|
|
try{
|
|
|
List<GrassArticleImage> imageList = Lists.newArrayList();
|
|
|
List<GrassArticleBlock> contentList = Lists.newArrayList();
|
|
|
String[] urls = req.getArticleImages().split(",");
|
|
|
for (String img: urls) {
|
|
|
GrassArticleImage image = new GrassArticleImage();
|
|
|
image.setArticleId(article.getId());
|
|
|
image.setImgSrc(img);
|
|
|
image.setCreateTime(DateUtil.getCurrentTimeSeconds());
|
|
|
imageList.add(image);
|
|
|
int contentOrder =0;
|
|
|
for (String url : urls) {
|
|
|
GrassArticleBlock content = new GrassArticleBlock();
|
|
|
content.setArticleId(article.getId());
|
|
|
content.setContentData(url);
|
|
|
content.setCreateTime(DateUtil.getCurrentTimeSeconds());
|
|
|
content.setTemplateKey("image");
|
|
|
content.setOrderBy(contentOrder);
|
|
|
contentOrder++;
|
|
|
contentList.add(content);
|
|
|
}
|
|
|
grassArticleImageDao.insertArticleImgs(imageList);
|
|
|
logger.info("insert grass article images success, ariticle id is {}, imageList size is {}", article.getId(), imageList.size());
|
|
|
GrassArticleBlock content = new GrassArticleBlock();
|
|
|
content.setArticleId(article.getId());
|
|
|
content.setContentData(req.getContent());
|
|
|
content.setCreateTime(DateUtil.getCurrentTimeSeconds());
|
|
|
content.setTemplateKey("text");
|
|
|
content.setOrderBy(contentOrder);
|
|
|
contentList.add(content);
|
|
|
grassArticleBlockDao.insertArticleContents(contentList);
|
|
|
logger.info("insert grass article content success, ariticle id is {}, contentList size is {}", article.getId(), contentList.size());
|
|
|
}catch (Exception e){
|
|
|
logger.warn("insert article images fail,ariticle id is {}, e is {}",article.getId(), e );
|
|
|
}
|
|
|
|
|
|
try{
|
|
|
List<GrassArticleSkn> sknList = Lists.newArrayList();
|
|
|
List<GrassArticleProduct> sknList = Lists.newArrayList();
|
|
|
String[] skns = req.getArticleSkns().split(",");
|
|
|
int orderby = 0;
|
|
|
for (String skn: skns) {
|
|
|
GrassArticleSkn grassArticleSkn = new GrassArticleSkn();
|
|
|
GrassArticleProduct grassArticleSkn = new GrassArticleProduct();
|
|
|
grassArticleSkn.setArticleId(article.getId());
|
|
|
grassArticleSkn.setProductSkn(Integer.valueOf(skn));
|
|
|
grassArticleSkn.setCreateTime(DateUtil.getCurrentTimeSeconds());
|
|
|
grassArticleSkn.setOrderBy(orderby);
|
|
|
orderby++;
|
|
|
sknList.add(grassArticleSkn);
|
|
|
}
|
|
|
grassArticleSknDao.insertArticleSkns(sknList);
|
|
|
grassArticleProductDao.insertArticleSkns(sknList);
|
|
|
logger.info("insert grass article skns success, ariticle id is {}, sknList size is {}", article.getId(), sknList.size());
|
|
|
}catch (Exception e){
|
|
|
logger.warn("insert article skns fail,ariticle id is {}, e is {}",article.getId(), e );
|
...
|
...
|
@@ -93,12 +111,188 @@ public class GrassArticleServiceImpl implements IGrassArticleService{ |
|
|
|
|
|
@Override
|
|
|
public List<Integer> getPlatPublishUser() {
|
|
|
List<Integer> list = grassPlatUserDao.getAllPlatUid();
|
|
|
List<Integer> list = grassVirtualUserDao.getAllPlatUid();
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public List<ArticleDetailRspBo> getArticleList(GrassArticleReq req) {
|
|
|
logger.info("enter getArticleList, req is {}", req);
|
|
|
Integer articleId = req.getArticleId();
|
|
|
Integer source = req.getSource()==null || req.getSource() == 0 ? null:req.getSource();
|
|
|
Integer authStatus = req.getAuthStatus()==null ||req.getAuthStatus()==8 ? null:req.getAuthStatus();
|
|
|
Integer authorUid =null;
|
|
|
String authName = req.getPublisher();
|
|
|
String startTime = req.getStartTimeStr();
|
|
|
String endTime = req.getEndTimeStr();
|
|
|
Integer startTimeInt = null;
|
|
|
Integer endTimeInt = null;
|
|
|
if(StringUtils.isNumeric(authName)){
|
|
|
authorUid = Integer.valueOf(authName);
|
|
|
};
|
|
|
if(StringUtils.isNotEmpty(startTime)){
|
|
|
startTimeInt = Integer.valueOf(startTime);
|
|
|
}
|
|
|
if(StringUtils.isNotEmpty(endTime)){
|
|
|
endTimeInt = Integer.valueOf(endTime);
|
|
|
}
|
|
|
int page = req.getPage();
|
|
|
int size = req.getSize();
|
|
|
int total = grassArticleDao.getArticleCount(articleId, source, authStatus,authorUid,startTimeInt, endTimeInt);
|
|
|
logger.info("getArticleList: grassArticleDao.getArticleCount: articleId is {}, source is {}, total is {}", articleId, source, total);
|
|
|
int offset = (page - 1) * size;
|
|
|
List<GrassArticle> articleList = grassArticleDao.getArticleList(articleId, source, authStatus,authorUid,startTimeInt, endTimeInt,offset, size);
|
|
|
return buildArticleDetail(articleList);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void updateArticle(GrassArticleReq req) throws PlatformException {
|
|
|
Integer type= req.getOperateType();
|
|
|
logger.info("enter updateArticle, req is {}",req);
|
|
|
if(type == null){
|
|
|
return;
|
|
|
}
|
|
|
//置顶 推荐
|
|
|
if(type == 0){
|
|
|
Integer isRecommend = req.getIsRecommend();
|
|
|
Integer isTop = req.getIsTop();
|
|
|
GrassArticle grassArticle = new GrassArticle();
|
|
|
grassArticle.setId(req.getArticleId());
|
|
|
if(isRecommend !=null){
|
|
|
grassArticle.setIsRecommend(isRecommend);
|
|
|
grassArticle.setRecommendTime(DateUtil.getCurrentTimeSeconds());
|
|
|
}
|
|
|
if(isTop !=null){
|
|
|
grassArticle.setIsTop(isTop);
|
|
|
grassArticle.setTopTime(DateUtil.getCurrentTimeSeconds());
|
|
|
}
|
|
|
grassArticleDao.updateByPrimaryKeySelective(grassArticle);
|
|
|
}
|
|
|
//编辑文章
|
|
|
if(type == 1){
|
|
|
Integer articleId = req.getArticleId();
|
|
|
if(articleId == null){
|
|
|
throw new PlatformException("articleId is null", 402);
|
|
|
}
|
|
|
//修改文章内容
|
|
|
GrassArticle grassArticle = new GrassArticle();
|
|
|
grassArticle.setId(articleId);
|
|
|
grassArticle.setTopicId(req.getTopicId());
|
|
|
grassArticleDao.updateByPrimaryKeySelective(grassArticle);
|
|
|
//文章图片
|
|
|
List<GrassArticleBlock> imageList = grassArticleBlockDao.selectByArticleId(articleId);
|
|
|
List<String> dbImageList = imageList.stream().filter(Objects::nonNull).filter(content ->"image".equals(content.getTemplateKey()) ).map(GrassArticleBlock::getContentData).collect(Collectors.toList());
|
|
|
List<String> reqlist = req.getArticleImages() == null ? Lists.newArrayList() : Lists.newArrayList(req.getArticleImages().split(","));
|
|
|
List<String> newimgList = reqlist.stream().filter(s -> !dbImageList.contains(s)).collect(Collectors.toList());
|
|
|
List<GrassArticleBlock> deleteList = imageList.stream().filter(content -> content!=null&&!reqlist.contains(content.getContentData())).collect(Collectors.toList());
|
|
|
//新增
|
|
|
List<GrassArticleBlock> addList = Lists.newArrayList();
|
|
|
int contentOrder = imageList.size();
|
|
|
for (String src : newimgList) {
|
|
|
GrassArticleBlock content = new GrassArticleBlock();
|
|
|
content.setArticleId(articleId);
|
|
|
content.setContentData(src);
|
|
|
content.setCreateTime(DateUtil.getCurrentTimeSeconds());
|
|
|
content.setOrderBy(contentOrder);
|
|
|
contentOrder++;
|
|
|
addList.add(content);
|
|
|
}
|
|
|
if(CollectionUtils.isNotEmpty(addList)){
|
|
|
grassArticleBlockDao.insertArticleContents(addList);
|
|
|
}
|
|
|
//删除
|
|
|
List<Integer> delList = deleteList.stream().filter(Objects::nonNull).map(GrassArticleBlock::getArticleId).collect(Collectors.toList());
|
|
|
if(CollectionUtils.isNotEmpty(delList)){
|
|
|
grassArticleBlockDao.deleteArticleContentByIds(delList, DateUtil.getCurrentTimeSeconds());
|
|
|
}
|
|
|
|
|
|
|
|
|
//商品
|
|
|
List<GrassArticleProduct> sknList = grassArticleProductDao.selectByArticleId(articleId);
|
|
|
List<Integer> dbSknList = sknList.stream().filter(Objects::nonNull).map(GrassArticleProduct::getProductSkn).collect(Collectors.toList());
|
|
|
List<String> reqSknlist = req.getArticleSkns() == null ? Lists.newArrayList() : Lists.newArrayList(req.getArticleSkns().split(","));
|
|
|
List<String> newSknList = reqSknlist.stream().filter(s -> !dbSknList.contains(Integer.valueOf(s))).collect(Collectors.toList());
|
|
|
List<GrassArticleProduct> delSknList = sknList.stream().filter(skn -> skn !=null && !reqlist.contains(String.valueOf(skn.getProductSkn()))).collect(Collectors.toList());
|
|
|
//新增
|
|
|
List<GrassArticleProduct> addSknList = Lists.newArrayList();
|
|
|
int orderBy = sknList.size();
|
|
|
for (String skn : newSknList) {
|
|
|
GrassArticleProduct grassArticleSkn = new GrassArticleProduct();
|
|
|
grassArticleSkn.setArticleId(articleId);
|
|
|
grassArticleSkn.setProductSkn(Integer.valueOf(skn));
|
|
|
grassArticleSkn.setCreateTime(DateUtil.getCurrentTimeSeconds());
|
|
|
grassArticleSkn.setOrderBy(orderBy);
|
|
|
orderBy++;
|
|
|
addSknList.add(grassArticleSkn);
|
|
|
}if(CollectionUtils.isNotEmpty(addList)){
|
|
|
grassArticleProductDao.insertArticleSkns(addSknList);
|
|
|
}
|
|
|
//删除
|
|
|
List<Integer> delSknIds = delSknList.stream().filter(Objects::nonNull).map(GrassArticleProduct::getArticleId).collect(Collectors.toList());
|
|
|
if(CollectionUtils.isNotEmpty(delSknIds)){
|
|
|
grassArticleProductDao.deleteArticleSkns(delSknIds, DateUtil.getCurrentTimeSeconds());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private List<ArticleDetailRspBo> buildArticleDetail( List<GrassArticle> articleList){
|
|
|
if(CollectionUtils.isEmpty(articleList)){
|
|
|
return null;
|
|
|
}
|
|
|
List<Integer> ids = articleList.stream().map(GrassArticle::getId).collect(Collectors.toList());
|
|
|
List<Integer> topicIds = articleList.stream().map(GrassArticle::getTopicId).collect(Collectors.toList());
|
|
|
List<GrassArticleBlock> grassArticleContentList = grassArticleBlockDao.selectByArticleIds(ids);
|
|
|
List<GrassArticleProduct> grassArticlePoductList = grassArticleProductDao.selectByArticleIds(ids);
|
|
|
GrassArticleBlock grassArticleContent = grassArticleContentList.stream().filter(content -> "text".equals(content.getTemplateKey())).findFirst().orElse(null);
|
|
|
if(CollectionUtils.isNotEmpty(topicIds)){
|
|
|
List<String> topics = Lists.newArrayList();
|
|
|
}
|
|
|
Map<Integer, List<String>> imgMap = Maps.newHashMap();
|
|
|
Map<Integer, List<Integer>> sknMap = Maps.newHashMap();
|
|
|
grassArticleContentList.forEach(content ->{
|
|
|
if ("image".equals(content.getTemplateKey())) {
|
|
|
List<String> images = imgMap.get(content.getArticleId());
|
|
|
if(images == null){
|
|
|
images = Lists.newArrayList();
|
|
|
}
|
|
|
images.add(content.getContentData());
|
|
|
imgMap.put(content.getArticleId(), images);
|
|
|
}
|
|
|
|
|
|
});
|
|
|
grassArticlePoductList.forEach(product -> {
|
|
|
List<Integer> skns = sknMap.get(product.getArticleId());
|
|
|
if(skns == null){
|
|
|
skns = Lists.newArrayList();
|
|
|
}
|
|
|
skns.add(product.getProductSkn());
|
|
|
sknMap.put(product.getArticleId(), skns);
|
|
|
});
|
|
|
List<ArticleDetailRspBo> rspBoList = Lists.newArrayList();
|
|
|
articleList.forEach(article -> {
|
|
|
ArticleDetailRspBo rspBo = new ArticleDetailRspBo();
|
|
|
rspBo.setArticleId(article.getId());
|
|
|
rspBo.setArticleContent(grassArticleContent ==null ? "": grassArticleContent.getContentData());
|
|
|
rspBo.setAuthorUid(article.getAuthorUid());
|
|
|
rspBo.setTopicId(article.getTopicId());
|
|
|
rspBo.setNickName("");
|
|
|
rspBo.setCommentCount(article.getCommentCount());
|
|
|
rspBo.setShareCount(article.getShareCount());
|
|
|
rspBo.setFavorCount(article.getFavoriteCount());
|
|
|
rspBo.setPraiseCount(article.getPraiseCount());
|
|
|
rspBo.setPublishTime(DateUtil.int2DateStr(article.getCreateTime(),DateUtil.DATE_TIME_FORMAT));
|
|
|
rspBo.setAuthStatus(article.getAuthStatus());
|
|
|
rspBo.setSource(article.getArticleType());
|
|
|
rspBo.setImgList(imgMap.get(article.getId()));
|
|
|
rspBo.setIsTop(article.getIsTop());
|
|
|
rspBo.setIsRecommend(article.getIsRecommend());
|
|
|
rspBoList.add(rspBo);
|
|
|
});
|
|
|
return rspBoList;
|
|
|
}
|
|
|
|
|
|
private void publishCheck(GrassArticleReq req) throws PlatformException {
|
|
|
if(req.getArticleUid() ==null){
|
|
|
if(req.getAuthorUid() ==null){
|
|
|
logger.info("publishCheck uid is null");
|
|
|
throw new PlatformException("publish uid is null", 403);
|
|
|
}
|
...
|
...
|
|