package com.lst.lc.web.frontend.controller;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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.servlet.mvc.support.RedirectAttributes;
import com.lst.lc.dao.BlogCommentDao;
import com.lst.lc.dao.BlogDao;
import com.lst.lc.dao.BlogTagDao;
import com.lst.lc.dao.UserDao;
import com.lst.lc.entities.Blog;
import com.lst.lc.entities.BlogComment;
import com.lst.lc.entities.BlogTag;
import com.lst.lc.entities.Question;
import com.lst.lc.entities.QuestionAnswer;
import com.lst.lc.entities.User;
import com.lst.lc.hbase.service.IntegralRecordOperation;
import com.lst.lc.utils.StringUtils;
import com.lst.lc.web.service.BlogPageHandler;
import com.lst.lc.web.service.LogHandler;
@Controller
@RequestMapping("/blog")
public class BlogController {
@Autowired
private IntegralRecordOperation integralRecordOperation;
@Autowired
@Qualifier("blogDao")
private BlogDao blogDao;
@Autowired
@Qualifier("userDao")
private UserDao userDao;
@Autowired
@Qualifier("blogTagDao")
private BlogTagDao blogTagDao;
@Autowired
@Qualifier("blogCommentDao")
private BlogCommentDao blogCommentDao;
@Autowired
@Qualifier("blogPageHandler")
private BlogPageHandler blogPageHandler;
@Autowired
private LogHandler logHandler;
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add(Model model) {
model.addAttribute("module", "blog");
return "frontend/blog/add";
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public String add(Model model, String title, String tag, String content,
RedirectAttributes redirectAttributes, HttpSession session) {
User user = (User) session.getAttribute("loginUser");
Set<BlogTag> tagSet = new HashSet<BlogTag>();
List<String> tags = StringUtils.stringSplit(tag);
for (int i = 0; i < tags.size(); i++) {
BlogTag blogTag = blogTagDao.getTagByName(tags.get(i));
if (blogTag == null) {
blogTag = new BlogTag(tags.get(i), 1);
blogTagDao.addTag(blogTag);
} else {
// 数量加1
int number = blogTag.getNumber() + 1;
blogTag.setNumber(number);
}
tagSet.add(blogTag);
}
Blog blog = new Blog(user, title, content, new Date(), 0, 0, tag,
tagSet, null);
blogDao.addBlog(blog);
//写入日志,用户加积分
logHandler.toLog(user, "发布博客:"+blog.getBlogId());
logHandler.updateIntegral(user.getUserId(), "addBlog");
integralRecordOperation.update(user.getEmail(), "addBlog");
redirectAttributes.addFlashAttribute("blogMsg", "博客发布成功");
return "redirect:/blog/view/" + blog.getBlogId();
}
@RequestMapping(value = "/view/{blogId}", method = RequestMethod.GET)
public String detail(Model model, @PathVariable int blogId, String pageNum,
String pageSize) {
int pageNow = 1;
int pagesize = 10;
if (pageSize != null) {
pagesize = Integer.valueOf(pageSize);
}
if (pageSize != null) {
pageNow = Integer.valueOf(pageNum);
}
Blog blog = blogDao.getBlog(blogId);
blogDao.addReadNums(blogId);
List<Blog> blogs = blogDao.getOtherBlogs(blog.getUser().getUserId(), blogId);
model.addAttribute("blog", blog);
model.addAttribute("otherBlogs", blogs);
model.addAttribute("comments",
blogPageHandler.getComments(blogId, pageNow, pagesize));
model.addAttribute("module", "blog");
return "frontend/blog/view";
}
/**
* 博客列表
*
* @param model
* @param pageNum
* @param pageSize
* @param type 排序类型,取指1,2,3,1表示按照回答数排序,2表示按照阅读数排序,3表示按照时间排序
* @return
*/
@RequestMapping(value = "/blogs", method = RequestMethod.GET)
public String list(Model model, String pageNum, String pageSize, String type) {
int pageNow = 1;
int pagesize = 10;
int sorttype = 3;
if (pageSize != null) {
pagesize = Integer.valueOf(pageSize);
}
if (pageNum != null) {
pageNow = Integer.valueOf(pageNum);
}
if (type != null) {
sorttype = Integer.valueOf(type);
}
List<User> users = userDao.getTopFive();
model.addAttribute("users", users);
List<BlogTag> tags = blogTagDao.getTagsOrderByNum();
model.addAttribute("tags", tags);
model.addAttribute("page",
blogPageHandler.getBlogs(pageNow, pagesize, sorttype));
model.addAttribute("module", "blog");
return "frontend/blog/list";
}
@RequestMapping(value = "/edit/{blogId}", method = RequestMethod.GET)
public String edit(@PathVariable int blogId, Model model) {
Blog blog = blogDao.getBlog(blogId);
model.addAttribute("blog", blog);
model.addAttribute("module", "blog");
return "frontend/question/edit";
}
@RequestMapping(value = "/comment/{blogId}", method = RequestMethod.POST)
public String comment(Model model, @PathVariable int blogId, String head, String content,
HttpSession session, RedirectAttributes redirectAttributes) {
User user = (User) session.getAttribute("loginUser");
Blog blog = blogDao.getBlog(blogId);
BlogComment comment = new BlogComment(blog, user, new Date(), content, head);
blogCommentDao.addBlogComment(comment);
blogDao.addCommentNums(blogId);
//写入日志
logHandler.toLog(user, "回复了博客:"+ blogId);
logHandler.updateIntegral(user.getUserId(), "commentBlog");
integralRecordOperation.update(user.getEmail(), "commentBlog");
redirectAttributes.addFlashAttribute("blogMsg", "评论成功");
return "redirect:/blog/view/" + blogId;
}
}