package com.my.blog.website.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.my.blog.website.constant.WebConst; import com.my.blog.website.dao.MetaVoMapper; import com.my.blog.website.dto.Types; import com.my.blog.website.exception.TipException; import com.my.blog.website.modal.Vo.ContentVo; import com.my.blog.website.modal.Vo.ContentVoExample; import com.my.blog.website.service.IContentService; import com.my.blog.website.service.IMetaService; import com.my.blog.website.service.IRelationshipService; import com.my.blog.website.utils.DateKit; import com.my.blog.website.utils.TaleUtils; import com.my.blog.website.utils.Tools; import com.vdurmont.emoji.EmojiParser; import com.my.blog.website.dao.ContentVoMapper; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; /** * Created by Administrator on 2017/3/13 013. */ @Service public class ContentServiceImpl implements IContentService { private static final Logger LOGGER = LoggerFactory.getLogger(ContentServiceImpl.class); @Resource private ContentVoMapper contentDao; @Resource private MetaVoMapper metaDao; @Resource private IRelationshipService relationshipService; @Resource private IMetaService metasService; @Override public void publish(ContentVo contents) { if (null == contents) { throw new TipException("文章对象为空"); } if (StringUtils.isBlank(contents.getTitle())) { throw new TipException("文章标题不能为空"); } if (StringUtils.isBlank(contents.getContent())) { throw new TipException("文章内容不能为空"); } int titleLength = contents.getTitle().length(); if (titleLength > WebConst.MAX_TITLE_COUNT) { throw new TipException("文章标题过长"); } int contentLength = contents.getContent().length(); if (contentLength > WebConst.MAX_TEXT_COUNT) { throw new TipException("文章内容过长"); } if (null == contents.getAuthorId()) { throw new TipException("请登录后发布文章"); } if (StringUtils.isNotBlank(contents.getSlug())) { if (contents.getSlug().length() < 5) { throw new TipException("路径太短了"); } if (!TaleUtils.isPath(contents.getSlug())) throw new TipException("您输入的路径不合法"); ContentVoExample contentVoExample = new ContentVoExample(); contentVoExample.createCriteria().andTypeEqualTo(contents.getType()).andStatusEqualTo(contents.getSlug()); long count = contentDao.countByExample(contentVoExample); if (count > 0) throw new TipException("该路径已经存在,请重新输入"); } else { contents.setSlug(null); } contents.setContent(EmojiParser.parseToAliases(contents.getContent())); int time = DateKit.getCurrentUnixTime(); contents.setCreated(time); contents.setModified(time); contents.setHits(0); contents.setCommentsNum(0); String tags = contents.getTags(); String categories = contents.getCategories(); contentDao.insert(contents); Integer cid = contents.getCid(); metasService.saveMetas(cid, tags, Types.TAG.getType()); metasService.saveMetas(cid, categories, Types.CATEGORY.getType()); } @Override public PageInfo<ContentVo> getContents(Integer p, Integer limit) { LOGGER.debug("Enter getContents method"); ContentVoExample example = new ContentVoExample(); example.setOrderByClause("created desc"); example.createCriteria().andTypeEqualTo(Types.ARTICLE.getType()).andStatusEqualTo(Types.PUBLISH.getType()); PageHelper.startPage(p, limit); List<ContentVo> data = contentDao.selectByExampleWithBLOBs(example); PageInfo<ContentVo> pageInfo = new PageInfo<>(data); LOGGER.debug("Exit getContents method"); return pageInfo; } @Override public ContentVo getContents(String id) { if (StringUtils.isNotBlank(id)) { if (Tools.isNumber(id)) { ContentVo contentVo = contentDao.selectByPrimaryKey(Integer.valueOf(id)); if (contentVo != null) { contentVo.setHits(contentVo.getHits() + 1); contentDao.updateByPrimaryKey(contentVo); } return contentVo; } else { ContentVoExample contentVoExample = new ContentVoExample(); contentVoExample.createCriteria().andSlugEqualTo(id); List<ContentVo> contentVos = contentDao.selectByExampleWithBLOBs(contentVoExample); if (contentVos.size() != 1) { throw new TipException("query content by id and return is not one"); } return contentVos.get(0); } } return null; } @Override public void updateContentByCid(ContentVo contentVo) { if (null != contentVo && null != contentVo.getCid()) { contentDao.updateByPrimaryKeySelective(contentVo); } } @Override public PageInfo<ContentVo> getArticles(Integer mid, int page, int limit) { int total = metaDao.countWithSql(mid); PageHelper.startPage(page, limit); List<ContentVo> list = contentDao.findByCatalog(mid); PageInfo<ContentVo> paginator = new PageInfo<>(list); paginator.setTotal(total); return paginator; } @Override public PageInfo<ContentVo> getArticles(String keyword, Integer page, Integer limit) { PageHelper.startPage(page, limit); ContentVoExample contentVoExample = new ContentVoExample(); ContentVoExample.Criteria criteria = contentVoExample.createCriteria(); criteria.andTypeEqualTo(Types.ARTICLE.getType()); criteria.andStatusEqualTo(Types.PUBLISH.getType()); criteria.andTitleLike("%" + keyword + "%"); contentVoExample.setOrderByClause("created desc"); List<ContentVo> contentVos = contentDao.selectByExampleWithBLOBs(contentVoExample); return new PageInfo<>(contentVos); } @Override public PageInfo<ContentVo> getArticlesWithpage(ContentVoExample commentVoExample, Integer page, Integer limit) { PageHelper.startPage(page, limit); List<ContentVo> contentVos = contentDao.selectByExampleWithBLOBs(commentVoExample); return new PageInfo<>(contentVos); } @Override public void deleteByCid(Integer cid) { ContentVo contents = this.getContents(cid + ""); if (null != contents) { contentDao.deleteByPrimaryKey(cid); relationshipService.deleteById(cid, null); } } @Override public void updateCategory(String ordinal, String newCatefory) { ContentVo contentVo = new ContentVo(); contentVo.setCategories(newCatefory); ContentVoExample example = new ContentVoExample(); example.createCriteria().andCategoriesEqualTo(ordinal); contentDao.updateByExampleSelective(contentVo, example); } @Override public void updateArticle(ContentVo contents) { if (null == contents || null == contents.getCid()) { throw new TipException("文章对象不能为空"); } if (StringUtils.isBlank(contents.getTitle())) { throw new TipException("文章标题不能为空"); } if (StringUtils.isBlank(contents.getContent())) { throw new TipException("文章内容不能为空"); } if (contents.getTitle().length() > 200) { throw new TipException("文章标题过长"); } if (contents.getContent().length() > 65000) { throw new TipException("文章内容过长"); } if (null == contents.getAuthorId()) { throw new TipException("请登录后发布文章"); } if (StringUtils.isBlank(contents.getSlug())) { contents.setSlug(null); } int time = DateKit.getCurrentUnixTime(); contents.setModified(time); Integer cid = contents.getCid(); contents.setContent(EmojiParser.parseToAliases(contents.getContent())); contentDao.updateByPrimaryKeySelective(contents); relationshipService.deleteById(cid, null); metasService.saveMetas(cid, contents.getTags(), Types.TAG.getType()); metasService.saveMetas(cid, contents.getCategories(), Types.CATEGORY.getType()); } }