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.hibernate.Query; 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.QueryDao; import com.lst.lc.dao.QuestionAnswerDao; import com.lst.lc.dao.QuestionDao; import com.lst.lc.dao.QuestionTagDao; import com.lst.lc.dao.UserDao; import com.lst.lc.entities.Course; import com.lst.lc.entities.Direction; import com.lst.lc.entities.Question; import com.lst.lc.entities.QuestionAnswer; import com.lst.lc.entities.QuestionTag; import com.lst.lc.entities.User; import com.lst.lc.hbase.service.IntegralRecordOperation; import com.lst.lc.page.Page; import com.lst.lc.page.PageHandler; import com.lst.lc.utils.StringUtils; import com.lst.lc.web.bean.QuestionSide; import com.lst.lc.web.service.LogHandler; import com.lst.lc.web.service.QuestionPageHandler; @Controller @RequestMapping("/question") public class QuestionController { @Autowired private IntegralRecordOperation integralRecordOperation; @Autowired @Qualifier("userDao") private UserDao userDao; @Autowired @Qualifier("questionDao") private QuestionDao questionDao; @Autowired @Qualifier("questionAnswerDao") private QuestionAnswerDao questionAnswerDao; @Autowired @Qualifier("questionTagDao") private QuestionTagDao questionTagDao; @Autowired private QuestionPageHandler questionPageHandler; @Autowired private LogHandler logHandler; @RequestMapping(value = "/ask", method = RequestMethod.GET) public String add(Model model) { model.addAttribute("module", "question"); return "frontend/question/add"; } @RequestMapping(value = "/ask", method = RequestMethod.POST) public String add(Model model, String title, String tag, String content, HttpSession session, RedirectAttributes redirectAttributes) { User user = (User) session.getAttribute("loginUser"); Set<QuestionTag> tagSet = new HashSet<QuestionTag>(); List<String> tags = StringUtils.stringSplit(tag); for (int i = 0; i < tags.size(); i++) { QuestionTag questionTag = questionTagDao.getTagByName(tags.get(i)); if (questionTag == null) { questionTag = new QuestionTag(tags.get(i), 1); questionTagDao.addTag(questionTag); } else { // 数量加1 int number = questionTag.getNumber() + 1; questionTag.setNumber(number); } tagSet.add(questionTag); } Question question = new Question(user, title, content, new Date(), 0, 0, tag, tagSet, null); questionDao.addQuestion(question); question.getQuestionId(); // 写入日志,用户增加积分 logHandler.toLog(user, "发布问题:" + question.getQuestionId()); logHandler.updateIntegral(user.getUserId(), "addQuestion"); integralRecordOperation.update(user.getEmail(), "addQuestion"); model.addAttribute("question", question); redirectAttributes.addFlashAttribute("questionMsg", "问题发布成功"); return "redirect:/question/view/" + question.getQuestionId(); } @RequestMapping(value = "/view/{questionId}", method = RequestMethod.GET) public String detail(HttpSession session, Model model, @PathVariable int questionId, String pageNum, String pageSize) { int pageNow = 1; int pagesize = 10; if (pageSize != null) { pagesize = Integer.valueOf(pageSize); } if (pageNum != null) { pageNow = Integer.valueOf(pageNum); } Question question = questionDao.getQuestion(questionId); questionDao.addReadNums(questionId); User user = (User) session.getAttribute("loginUser"); QuestionSide questionSide; List<QuestionTag> tags = questionTagDao.getTagsOrderByNum(); List<Question> questions = questionDao.getTopFiveRecently(questionId); if (user == null) { questionSide = new QuestionSide(false, 0, 0, tags, questions); } else { User u = userDao.getById(user.getUserId()); questionSide = new QuestionSide(true, u.getQuestions().size(), u .getQuestionAnswers().size(), tags, questions); } model.addAttribute("questionSide", questionSide); model.addAttribute("question", question); model.addAttribute("answers", questionPageHandler.getAnswers(questionId, pageNow, pagesize)); model.addAttribute("module", "question"); return "frontend/question/view"; } /** * 问题列表 * * @param model * @param pageNum * @param pageSize * @param type *  排序类型,取指1,2,3,1表示按照回答数排序,2表示按照阅读数排序,3表示按照时间排序 * @return */ @RequestMapping(value = "/questions", method = RequestMethod.GET) public String list(HttpSession session, 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); } User user = (User) session.getAttribute("loginUser"); QuestionSide questionSide; List<QuestionTag> tags = questionTagDao.getTagsOrderByNum(); int arg = 0; List<Question> questions = questionDao.getTopFiveRecently(arg); if (user == null) { questionSide = new QuestionSide(false, 0, 0, tags, questions); } else { User u = userDao.getById(user.getUserId()); questionSide = new QuestionSide(true, u.getQuestions().size(), u .getQuestionAnswers().size(), tags, questions); } model.addAttribute("questionSide", questionSide); model.addAttribute("page", questionPageHandler.getQuestions(pageNow, pagesize, sorttype)); model.addAttribute("module", "question"); return "frontend/question/list"; } @RequestMapping(value = "/edit/{questionId}", method = RequestMethod.GET) public String edit(@PathVariable int questionId, Model model) { Question question = questionDao.getQuestion(questionId); model.addAttribute("question", question); model.addAttribute("module", "question"); return "frontend/question/edit"; } @RequestMapping(value = "/edit/{questionId}", method = RequestMethod.POST) public String edit(@PathVariable int questionId, Model model, String title, String tag, String content, RedirectAttributes redirectAttributes) { questionDao.update(questionId, title, tag, content); redirectAttributes.addFlashAttribute("questionMsg", "问题修改成功"); return "redirect:/question/view/" + questionId; } @RequestMapping(value = "/answer/{questionId}", method = RequestMethod.POST) public String answer(Model model, @PathVariable int questionId, String head, String content, HttpSession session, RedirectAttributes redirectAttributes) { User user = (User) session.getAttribute("loginUser"); Question question = questionDao.getQuestion(questionId); QuestionAnswer answer = new QuestionAnswer(question, user, new Date(), content, head); questionAnswerDao.addQuestionAnswer(answer); questionDao.addAnswerNums(questionId); // 写入日志 logHandler.toLog(user, "回答了问题:" + questionId); logHandler.updateIntegral(user.getUserId(), "answerQuestion"); integralRecordOperation.update(user.getEmail(), "answerQuestion"); redirectAttributes.addFlashAttribute("questionMsg", "回答成功"); return "redirect:/question/view/" + questionId; } }