package com.javaweb.cms.service.impl; import java.util.HashMap; import java.util.List; import java.util.Map; import cn.hutool.cache.Cache; import cn.hutool.cache.CacheUtil; import com.google.common.collect.Lists; import com.javaweb.cms.domain.ArticleRegionType; import com.javaweb.cms.domain.Category; import com.javaweb.cms.domain.Tags; import com.javaweb.cms.mapper.TagsMapper; import com.javaweb.cms.service.ICategoryService; import com.javaweb.common.utils.DateUtils; import com.javaweb.common.utils.Guid; import com.javaweb.common.utils.StringUtils; import com.javaweb.ehcache.util.EhCacheUtils; import com.javaweb.framework.util.ShiroUtils; import com.javaweb.system.domain.SysUser; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.javaweb.cms.mapper.ArticleMapper; import com.javaweb.cms.domain.Article; import com.javaweb.cms.service.IArticleService; import com.javaweb.common.core.text.Convert; import org.springframework.transaction.annotation.Transactional; /** * 文章管理Service业务层处理 * * @author wujiyue * @date 2019-10-28 */ @Service public class ArticleServiceImpl implements IArticleService { @Autowired private ArticleMapper articleMapper; @Autowired private TagsMapper tagsMapper; @Autowired private ICategoryService categoryService; private Cache categoryCache= CacheUtil.newLFUCache(100); private Cache tagCache= CacheUtil.newLFUCache(100); /** * 查询文章管理 * * @param id 文章管理ID * @return 文章管理 */ @Override public Article selectArticleById(String id) { Article article=articleMapper.selectArticleById(id); Map m = articleMapper.getArticleContent(id); if(m!=null){ article.setContent(String.valueOf(m.get("content"))); article.setContent_markdown_source(String.valueOf(m.get("content_markdown_source"))); } selectCategory(article); selectTags(article); return article; } /** * 查询文章管理列表 * * @param article 文章管理 * @return 文章管理 */ @Override public List
selectArticleList(Article article) { List
articles=articleMapper.selectArticleList(article); selectTags(articles); selectCategory(articles); return articles; } /** * 新增文章管理 * * @param article 文章管理 * @return 结果 */ @Override @Transactional public int insertArticle(Article article) { article.setId(Guid.get()); article.setCreateTime(DateUtils.getNowDate()); article.setUpdateTime(DateUtils.getNowDate()); SysUser user= ShiroUtils.getSysUser(); article.setYhid(user.getUserId().toString()); article.setDeleted(0); String tags=article.getTags(); if(StringUtils.isNotEmpty(tags)){ if(!tags.endsWith(",")){ tags+=","; article.setTags(tags); } } article.setAuthor(user.getUserName()); if(article.getCommentFlag()==null){ article.setCommentFlag("0"); } if("on".equals(article.getCommentFlag())){ article.setCommentFlag("1"); } if("off".equals(article.getCommentFlag())){ article.setCommentFlag("0"); } int n=articleMapper.insertArticle(article); n=articleMapper.insertArticleContent(article); return n; } /** * 修改文章管理 * * @param article 文章管理 * @return 结果 */ @Override @Transactional public int updateArticle(Article article) { article.setUpdateTime(DateUtils.getNowDate()); String tags=article.getTags(); if(StringUtils.isNotEmpty(tags)){ if(!tags.endsWith(",")){ tags+=","; article.setTags(tags); } } if(article.getCommentFlag()==null){ article.setCommentFlag("0"); } if("on".equals(article.getCommentFlag())){ article.setCommentFlag("1"); } if("off".equals(article.getCommentFlag())){ article.setCommentFlag("0"); } int n=articleMapper.updateArticle(article); n=articleMapper.updateArticleContent(article); return n; } /** * 删除文章管理对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteArticleByIds(String ids) { articleMapper.deleteArticleContentByIds(Convert.toStrArray(ids)); return articleMapper.deleteArticleByIds(Convert.toStrArray(ids)); } /** * 删除文章管理信息 * * @param id 文章管理ID * @return 结果 */ @Override public int deleteArticleById(String id) { articleMapper.deleteArticleContentById(id); return articleMapper.deleteArticleById(id); } @Override public List
selectArticlesByArticleRegionType(ArticleRegionType articleRegionType) { List
list=(List
) EhCacheUtils.getSysInfo("ArticleRegionType_", articleRegionType.getVal()); if(CollectionUtils.isEmpty(list)){ list=this.selectArticlesByArticleRegionTypeInDb(articleRegionType); EhCacheUtils.putSysInfo("ArticleRegionType_", articleRegionType.getVal(), list); } //selectCategory(list); return list; } @Override public List
selectArticlesRegionNotNull(Article article) { List
list=articleMapper.selectArticlesRegionNotNull(article); selectCategory(list); return list; } @Override public List
selectArticlesRegionIsNull(Article article) { List
list=articleMapper.selectArticlesRegionIsNull(article); //selectCategory(list); return list; } @Override public int upVote(String id) { return articleMapper.upVote(id); } @Override public int articleLook(String id) { return articleMapper.articleLook(id); } private List
selectArticlesByArticleRegionTypeInDb(ArticleRegionType articleRegionType) { Article queryForm=new Article(); queryForm.setArticleRegion(articleRegionType.getVal()); List
list = this.selectArticleList(queryForm); selectCategory(list); return list; } private void selectCategory(List
list){ list.forEach(a->{ String cid = a.getCategoryId(); Category category=categoryCache.get(cid); if(category==null){ category=categoryService.selectCategoryById(Long.valueOf(cid)); if(category!=null){ categoryCache.put(cid,category); } } if(category!=null){ a.setCategory(category); } }); } private void selectCategory(Article a){ String cid = a.getCategoryId(); Category category=categoryCache.get(cid); if(category==null){ category=categoryService.selectCategoryById(Long.valueOf(cid)); if(category!=null){ categoryCache.put(cid,category); } } if(category!=null){ a.setCategory(category); } } private void selectTags(List
articles){ //转换标签名称,这部分可以使用缓存提升性能 articles.forEach(a->{ String tagsStr=a.getTags(); if(StringUtils.isNotEmpty(tagsStr)){ String[] tagsArr=Convert.toStrArray(tagsStr); String tags_name=""; List tags= Lists.newArrayList(); for(String id:tagsArr){ if(StringUtils.isNotEmpty(id)){ Tags tag=tagCache.get(id); if(tag==null){ tag=tagsMapper.selectTagsById(Long.valueOf(id)); tagCache.put(id,tag); } tags.add(tag); if(tag!=null){ tags_name+=tag.getTagName()+","; } } } if(tags_name.endsWith(",")){ tags_name=StringUtils.substring(tags_name,0,tags_name.length()-1); } a.setTags_name(tags_name); a.setTagList(tags); } }); } private void selectTags(Article a){ String tids = a.getTags();//tagIds if(StringUtils.isEmpty(tids)){ return; } String[] arr=Convert.toStrArray(tids); List tags= Lists.newArrayList(); for(String tid:arr){ if (StringUtils.isEmpty(tid)) { continue; } Tags tag=tagCache.get(tid); if(tag==null){ tag=tagsMapper.selectTagsById(Long.valueOf(tid)); tagCache.put(tid,tag); } tags.add(tag); } a.setTagList(tags); } @Override public List
selectArticleListByAll(Article article) { List
articles=articleMapper.selecArticleListByAll(article); selectTags(articles); selectCategory(articles); return articles; } @Override public List
selectArticleCount() { // TODO Auto-generated method stub return articleMapper.selectArticleCount(); } }