首页>代码>基于JFinal的Springboot博客系统>/AutuBlog/src/main/java/com/autu/_admin/article/AdminArticleService.java
package com.autu._admin.article;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import com.autu._admin.config.AdminBaiduSeoService;
import com.autu._admin.meta.AdminMetaService;
import com.autu._admin.metaweblog.MetaweblogHelper;
import com.autu.article.ArticleService;
import com.autu.common.exception.MsgException;
import com.autu.common.kit.ListKit;
import com.autu.common.kit.StrKit;
import com.autu.common.model.entity.Article;
import com.autu.common.model.entity.Meta;
import com.autu.common.safe.JsoupFilter;
import com.autu.meta.MetaTypeEnum;
import com.jfinal.aop.Inject;
import com.jfinal.kit.Kv;
import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.SqlPara;

/**
 * 文章service实现类
 * 
 * @author tyf
 *
 */
public class AdminArticleService {
	@Inject
	private Article  dao;
	@Inject
	private AdminMetaService mservice;
	@Inject
	private  ArticleService articleService;
	@Inject
	private AdminBaiduSeoService baiduSeoService;
	@Inject
	private MetaweblogHelper metaweblogService;
	@Inject
	private AdminArticleLuceneIndexes luceneIndexes;

	/**
	 * 获取文章的 title,id,identify
	 * @return
	 */
	public List<Article> listSimpleArtilce(){
		return dao.find("select title,id,identify from article");
	}
	
	/**
	 * 将指定文章推送至其他网站
	 * @param id
	 * @return
	 */
	public Ret asyncMetaWeblog(Integer id) {
		List<Meta> tags=listTag(id);
		Article article=dao.findById(id);
		new Thread(()-> {
			//向其他论坛推送
			metaweblogService.pushPostMetaweblog(article, tags);
		
		}).start();
		return Ret.ok();
	}
	
	public List<Meta> listCategory(Integer id){
		return mservice.listByCId(id,MetaTypeEnum.CATEGORY.toString());
	}
	
	public List<Meta> listTag(Integer id){
		return mservice.listByCId(id,MetaTypeEnum.TAG.toString());
	}
	
	/**
	 * 根据id是否为空判断执行update还是add
	 * @param article
	 * @param tags
	 * @param categorys
	 */
	public void saveOrUpdate(Article article,List<Meta> tags,List<Meta> categorys) {
		//如果简介为空则从content中取出100纯文字作为简介
		if(article.getIntro()==null) {
			JsoupFilter.filterArticle(article, 100);
		}
		if(article.getIsTop()==null) {
			article.setIsTop(false);
		}
		
		if(article.getId()==null) {
			save(article, tags, categorys);
			luceneIndexes.addIndex(article);
		}else {
			update(article, tags, categorys);
			luceneIndexes.update(article);
		}
		
		if(article.getState().equals(1)) {
			new Thread(()-> {
				//向百度推送该文章
				baiduSeoService.pushLink(article.getUrl());	
			}).start();;
		}
		
	}
	
	
	/**
	 * 添加一篇文章
	 * @param article
	 * @param categoryIds
	 */
	public void save(Article article,List<Meta> tags,List<Meta> categorys)  {
	  
		String identify=article.getIdentify();
		
	
		if(StrKit.notBlank(identify)) {
			Article tempArticle=articleService.getArticle(identify);
			if(tempArticle!=null&&!identify.equals(tempArticle.getIdentify())) {
				throw 	new MsgException("路径已存在!");
			}
		}else {
			//默认路径为创建时间
			article.setIdentify(genIdentify(new Date()));
		}
		
		article.setGmtCreate(new Date());
		article.save();
		
		int articleId=article.getId();
		//创建分类 标签的关联
		if(ListKit.notBlank(categorys)) {
			mservice.saveMetas(categorys, articleId);
		}
		if(ListKit.notBlank(tags)) {
			mservice.saveMetas(tags, articleId);
		}

	}

	private String genIdentify(Date date) {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
		return sdf.format(date); 
	}
	/**
	 * 更新文章
	 * @param article
	 * @param tags
	 * @param categorys
	 */
	public void update(Article article,List<Meta> tags,List<Meta> categorys) {
		
		String identify=article.getIdentify();
		
		if(StrKit.notBlank(identify)) {
			Article tempArticle=articleService.getArticle(identify);
			if(tempArticle!=null&&tempArticle.getId().equals(article.getId())) {
				new MsgException("路径已存在!");
			}
		}else {
			//默认路径为创建时间
			Article tempArticle=article.findById(article.getId());
			article.setIdentify(genIdentify(tempArticle.getGmtCreate()));
		}
		
		article.update();
		
		int articleId=article.getId();
		
		//删除文章的关联
		mservice.deleteRelevanceByCid(articleId);
		
		//创建标签分类的关联
		if(ListKit.notBlank(categorys)) {
			mservice.saveMetas(categorys, articleId);
		}
		if(ListKit.notBlank(tags)) {
			mservice.saveMetas(tags, articleId);
		}
		
	}

	/**
	 * 真删除
	 * @param article
	 */
	public Ret delete(Integer id) {
		Article article=dao.findById(id);
		if(article==null) {
			return Ret.ok();
		}
		//删除文章的关联
		mservice.deleteRelevanceByCid(article.getId());
		luceneIndexes.delete(id);
		return article.delete()?Ret.ok():Ret.fail();
	}

	/**
	 * 假删除
	 * @param id
	 * @return
	 */
	public Ret remove(Integer id) {
		Article article=new Article();
		article.setId(id);
		article.setState(Article.STATE_DISCARD);
		luceneIndexes.delete(id);
		return article.update()?Ret.ok():Ret.fail();
	}
	/**
	 * 从删除状态修改为发布状态
	 * @param id
	 * @return
	 */
	public Ret recover(Integer id) {
		Article article=new Article();
		article.setId(id);
		article.setState(Article.STATE_PUBLISH);
		
		Article temp=dao.findById(id);
		if(temp!=null) {
			luceneIndexes.addIndex(temp);
		}
		return article.update()?Ret.ok():Ret.fail();
	}
		
	public Article get(int articleId) {
		Article article= dao.findById(articleId);
		return article;
	}

	/**
	 * 分页查询
	 * @param article
	 * @param metaId
	 * @param pageNumber
	 * @param pageSize
	 * @return
	 */
	public Page<Article> page(Article article, Integer metaId, int pageNumber, int pageSize) {

		Kv kv=Kv.by("mid", metaId).set("article", article);
		
		SqlPara sql=dao.getSqlPara("adminArticle.page", kv);
		
		Page<Article> articlePage = dao.paginate(pageNumber, pageSize,sql);
		
		return articlePage;
	}
	
	public List<Article> listAll(Integer state){
		SqlPara sql=dao.getSqlPara("adminArticle.listAll",Kv.by("article", new Article().setState(state)));
		return dao.find(sql);
	}
	
	public List<Article> listHot(Integer num){
		return dao.find("select title,identify,thumbImg,intro,content from article where state=1 order by pv desc limit  "+num);
	}
}
最近下载更多
校园网  LV9 2023年5月31日
qingsj  LV6 2023年3月2日
dawnguarda  LV17 2022年11月2日
lcbaaa  LV6 2022年8月12日
wr450702  LV2 2022年5月18日
小尤ggggg  LV8 2022年5月9日
Demo1111  LV30 2022年3月14日
刘亦菲9527  LV15 2021年12月31日
采暖11  LV11 2021年12月6日
chinawind1990  LV5 2021年11月25日
最近浏览更多
krispeng  LV13 昨天
yellow_flowers  LV8 7月8日
TY0165  LV20 6月21日
玖零定制问题修复  LV34 5月4日
lichengai  LV7 2月26日
yxzzxy  LV3 2月18日
pangzhihui  LV14 2月15日
无敌霸王龙 1月18日
暂无贡献等级
skiler  LV4 1月7日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友