package com.liuyanzhao.ssm.blog.controller.admin;
import cn.hutool.http.HtmlUtil;
import com.github.pagehelper.PageInfo;
import com.liuyanzhao.ssm.blog.dto.ArticleParam;
import com.liuyanzhao.ssm.blog.entity.Article;
import com.liuyanzhao.ssm.blog.entity.Category;
import com.liuyanzhao.ssm.blog.entity.Tag;
import com.liuyanzhao.ssm.blog.entity.User;
import com.liuyanzhao.ssm.blog.enums.UserRole;
import com.liuyanzhao.ssm.blog.service.ArticleService;
import com.liuyanzhao.ssm.blog.service.CategoryService;
import com.liuyanzhao.ssm.blog.service.TagService;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpSession;
import javax.xml.transform.sax.SAXResult;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
@Controller
@RequestMapping("/admin/article")
public class BAC {
//控制器引入服务
//文章服务
@Autowired
private ArticleService articleService;
//标签服务
@Autowired
private TagService tagService;
//分类服务
@Autowired
private CategoryService categoryService;
//设置地址
//后台文章列表显示
@RequestMapping("")
public String index(@RequestParam(required = false,defaultValue = "1") Integer pageIndex,
@RequestParam(required = false,defaultValue = "10") Integer pageSize,
@RequestParam(required = false)String status, Model model,
HttpSession session
){
HashMap<String, Object> criteria = new HashMap<>(1);
if(status==null){
//没有状态
model.addAttribute("pageUrlPrefix","/admin/article?pageIndex");
}else{
//在标准中加入状态
criteria.put("status",status);
//加载模板,跳转状态的路径
model.addAttribute("pageUrlPrefix","/admin/article?status="+status+"&pageIndex");
}
//获得会话对象
User user = (User)session.getAttribute("user");
//如果不是管理员
if(!UserRole.ADMIN.getValue().equals(user.getUserRole())){
criteria.put("userId",user.getUserId());
}
//页面信息对象
PageInfo<Article> articlePageInfo = articleService.pageArticle(pageIndex,pageSize,criteria);
//加载视图
model.addAttribute("pageInfo",articlePageInfo);
//返回到默认页面
return "Admin/Article/index";
}
//后台添加页面
@RequestMapping("/insert")
public String insertArticleView(Model model){
//从对象中获取类别列表 对象可能已经有数据
List<Category> categoryList = categoryService.listCategory();
//从对象中获取便签列表 对象标签可能已经初始化
List<Tag>tagList = tagService.listTag();
//将对象加载到视图中
model.addAttribute("categoryList",categoryList);
model.addAttribute("tagList",tagList);
//返回插入页面
return "Admin/Article/insert";
}
//后台添加文章 按下添加文章按钮后后台的操作
@RequestMapping(value = "/insertSubmit",method = RequestMethod.POST)
//传入所有文章参数
public String insertArticleSubmit(HttpSession session, ArticleParam articleParam){
//创造一个article对象
Article article=new Article();
//从当前会话中获取用户的id
User user=(User)session.getAttribute("user");
//如果会话中有用户,将文章的用户id设为此用户id
if(user!=null){
article.setArticleUserId(user.getUserId());
}
article.setArticleTitle(articleParam.getArticleTitle());
//文章摘要
int summaryLength=150;
//获取文章的内容
String summaryText= HtmlUtil.cleanHtmlTag(articleParam.getArticleContent());
//如果大于长度,截取前面的到summaryLength到上传中
if(summaryText.length()>summaryLength){
String summary=summaryText.substring(0,summaryLength);
article.setArticleSummary(summary);
}else{
article.setArticleSummary(summaryText);
}
//article中已经有上传的文章
//设置缩略图 函数传入articleParam 好修改后传出去
article.setArticleThumbnail(articleParam.getArticleThumbnail());
article.setArticleContent(articleParam.getArticleContent());
article.setArticleStatus(articleParam.getArticleStatus());
//填充分类 分类数组
List<Category>categoryList=new ArrayList<>();
//获取子分类
//这里的为什么两个条件相等不太清楚 应该是作者写错了,我改了过来,第一次看源代码看出作者错了,真好,哈哈哈!
if(articleParam.getArticleParentCategoryId()!=null){
categoryList.add(new Category(articleParam.getArticleParentCategoryId()));
}
if(articleParam.getArticleChildCategoryId()!=null){
categoryList.add(new Category(articleParam.getArticleChildCategoryId()));
}
//将列表中的list传入article中
article.setCategoryList(categoryList);
//填充便签,先创造一个对象以便赋值给对象后传出去
List<Tag>tagList=new ArrayList<>();
//如果id不为空 将其中的id都传到造出来的对象中
if(articleParam.getArticleTagIds()!=null){
for(int i=0;i<articleParam.getArticleTagIds().size();i++){
Tag tag=new Tag(articleParam.getArticleTagIds().get(i));
tagList.add(tag);
}
}
//将赋值好的对象返回给article对象
article.setTagList(tagList);
//将主要的对象article插入到表中
articleService.insertArticle(article);
//跳转到文章主页面
return "redirect:/admin/article";
//删除文章
@RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
public void deleteArticle(@PathVariable("id") Integer id,HttpSession session){
Article dbArticle = articleService.getArticleByStatusAndId(null,id);
//文章不存在
if(dbArticle==null){
return;
}
User user= (User) session.getAttribute("user");
如果不是管理员,访问其他用户的数据,则跳转403
if(!Object.equals(dbArticle.getArticleUserId(),user.getUserId())&&!Objects.equals(user.getUserRole(),UserRole.ADMIN.getValue())){
return;
}
articleService.deleteArticle(id);
}
}
//编辑文章页面显示
@RequestMapping(value="/edit/{id}")
//传入model和session 便于修改他们的值 传入id
public String ediArticleView(@PathVariable("id") Integer id,Model model,HttpSession session){
//通过id获取文章
Article article = articleService.getArticleByStatusAndId(null,id);
//如果文章不存在
if(article==null){
return "redirect:/404";
}
//获取session中user的值
User user=(User)session.getAttribute("user");
//如果不是文章的作者或者管理员
if(!Objects.equals(article.getArticleUserId(),user.getUserId())&&!Objects.equals(user.getUserRole(),UserRole.ADMIN.getValue())){
return "redirect:/403";
}
//将翁主传入model
model.addAttribute("article",article);
//传入分类列表
List<Category> categoryList=categoryService.listCategory();
model.addAttribute("categoryList",categoryList);
//传入标签列表
List<Tag> tagList = tagService.listTag();
model.addAttribute("tagList",tagList);
//跳转到编辑界面
return "Admin/Article/edit";
}
//编辑文章提交
@RequestMapping(value = "/editSubmit",method = RequestMethod.POST)
//后台提交到数据库 大概是创一个对象 把数据弄到对象中在传到数据库
//传入表中参数和session 便于修该
public String editArticleSubmit(ArticleParam articleParam,HttpSession session){
//通过文章id获取已经存到数据库文章 接下来就是修改文章
Article dbArticle = articleService.getArticleByStatusAndId(null,articleParam.getArticleId());
//如果没有这篇文章
if(dbArticle == null){
return "redirect:/404";
}
//获得会话中的user对象
User user=(User)session.getAttribute("user");
//和上面一样,判断是不是本人或者管理员
if(!Objects.equals(dbArticle.getArticleUserId(),user.getUserId())&&!Objects(user.getUserRole(),UserRole.ADMIN.getValue())){
return "rediect:/403";
}
//创造article对象,将修改的参数传入
Article article = new Article();
article.setArticleThumbnail(articleParam.getArticleThumbnail());//缩略图
article.setArticleId(articleParam.getArticleId());
article.setArticleTitle(articleParam.getArticleTitle());
article.setArticleContent(articleParam.getArticleContent());
article.setArticleStatus(articleParam.getArticleStatus());
//设置文章的摘要
int summaryLength=150;
//清除以前的文章
String summaryText= HtmlUtil.cleanHtmlTag(article.getArticleContent());
//限制字数
if(summaryText.length()>summaryLength){
//如果超出,截断
String summary= summaryText.substring(0,summaryLength);
article.setArticleSummary(summary);
}else{
article.setArticleSummary(summaryText);
}
//填充分类
//创造列表,等下可以将数据传到列表中进而传到article对象,进而返回
List<Category>categoryList=new ArrayList<>();
//判断传入的参数中分类是否为空,如果不为空,将其中所有参数传入到model(视图)中
if(articleParam.getArticleParentCategoryId()!=null){
categoryList.add(new Category(articleParam.getArticleParentCategoryId()));
}
if(articleParam.getArticleChildCategoryId()!=null){
categoryList.add(new Category(articleParam.getArticleChildCategoryId()));
}//填充分类
article.setCategoryList(categoryList);
//填充标签
List<Tag> tagList = new ArrayList<>();
if(articleParam.getArticleTagIds()!=null){
for(int i=0;i<articleParam.getArticleTagIds().size();i++){
Tag tag = new Tag(articleParam.getArticleTagIds().get(i));
tagList.add(tag);
}
}
//将标签列表添加到article中
article.setTagList(tagList);
articleService.updateArticleDetail(article);
return "redirect:/admin/article";
}
//后台添加文章提交
@RequestMapping(value = "/insertDraftSubmit",method = RequestMethod.POST)
public String insertDraftSubmit(HttpSession session,ArticleParam articleParam){
//新建文章
Article article = new Article();
//获取当前用户
User user= (User)session.getAttribute("user");
//用户不为空 设置文章的用户id
if(user!=null){
article.setArticleUserId(user.getUserId());
}
//传入开头
article.setArticleTitle(articleParam.getArticleTitle());
//传入文章摘要
int summaryLength= 150;
//过滤html中的便签内容
String summaryText = HtmlUtil.cleanHtmlTag(articleParam.getArticleContent());
if(summaryText.length()>summaryLength){
String summary = summaryText.substring(0,summaryLength);
article.setArticleSummary(summary);
}else{
article.setArticleSummary(summaryText);
}//传入文章缩略图,内容,状态
article.setArticleThumbnail(articleParam.getArticleThumbnail());
article.setArticleContent(articleParam.getArticleContent());
article.setArticleStatus(articleParam.getArticleStatus());
//填充分类
List<Category> categoryList = new ArrayList<>();
if (articleParam.getArticleChildCategoryId() != null) {
categoryList.add(new Category(articleParam.getArticleParentCategoryId()));
}
if (articleParam.getArticleChildCategoryId() != null) {
categoryList.add(new Category(articleParam.getArticleChildCategoryId()));
}
article.setCategoryList(categoryList);
//填充标签
List<Tag>tagList=new ArrayList<>();
if(articleParam.getArticleTagIds()!=null){
for(int i=0;i<articleParam.getArticleTagIds().size();i++){
Tag tag = new Tag(articleParam.getArticleTagIds().get(i));
tagList.add(tag);
}
}
//将tag列表传入文章中 至此 article(文章)对象赋值完成
article.setTagList(tagList);
//将文章传入到数据库
articleService.insertArticle(article);
return "redirect:/admin";
}
}
抄forestblog项目源代码controller学习,加自己注释,第一次学项目代码
最新推荐文章于 2024-05-11 09:49:14 发布