QuizController.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package nju.seec.helper.controller;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import nju.seec.helper.aspect.auth.Auth;
  4. import nju.seec.helper.controller.response.PageResponse;
  5. import nju.seec.helper.dao.CourseDAO;
  6. import nju.seec.helper.dao.SlideDAO;
  7. import nju.seec.helper.dto.LoginUser;
  8. import nju.seec.helper.dto.QuizAnswerDTO;
  9. import nju.seec.helper.dto.QuizDTO;
  10. import nju.seec.helper.dto.QuizUpdateDTO;
  11. import nju.seec.helper.entity.Quiz;
  12. import nju.seec.helper.service.QuizService;
  13. import nju.seec.helper.util.BOKUtil;
  14. import nju.seec.helper.util.enums.QuestionKindState;
  15. import nju.seec.helper.util.enums.QuizState;
  16. import nju.seec.helper.util.enums.SlideState;
  17. import nju.seec.helper.util.enums.UserType;
  18. import nju.seec.helper.vo.CourseVO;
  19. import nju.seec.helper.vo.SlideVO;
  20. import nju.seec.helper.vo.UserVO;
  21. import nju.seec.helper.vo.quiz.*;
  22. import org.springframework.beans.factory.annotation.Autowired;
  23. import org.springframework.data.domain.Page;
  24. import org.springframework.data.domain.Pageable;
  25. import org.springframework.data.web.PageableDefault;
  26. import org.springframework.web.bind.annotation.*;
  27. import javax.persistence.EntityNotFoundException;
  28. import java.util.*;
  29. import java.util.stream.Collectors;
  30. /**
  31. * 测试
  32. *
  33. * @doc http://47.100.18.120:3000/SEEC-BOK/API-DOC/src/master/helper/api/Quiz-%e6%b5%8b%e8%af%95.md
  34. */
  35. @RestController
  36. @RequestMapping("/api/quiz")
  37. public class QuizController {
  38. @Autowired
  39. private CourseDAO courseDAO;
  40. @Autowired
  41. private SlideDAO slideDAO;
  42. @Autowired
  43. private BOKUtil bokUtil;
  44. @Autowired
  45. private QuizService quizService;
  46. /**
  47. * 获得测试列表
  48. */
  49. @Auth(roles = {UserType.STUDENT,UserType.TEACHER}, message = "获得测试列表")
  50. @GetMapping("")
  51. public Map getBasicQuizList(LoginUser user, String slideId,
  52. QuizState state , @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
  53. List<QuizVO> quizzes=new ArrayList<QuizVO>();
  54. Map ret=new LinkedHashMap(2);
  55. Page<Quiz> page;
  56. if(slideId!=null){
  57. page = quizService.getAllBasicQuizBySlide(Long.valueOf(slideId), pageable, state, user.getId());
  58. }else{
  59. page = quizService.getAllBasicQuizByUser( pageable, state, user.getId());
  60. }
  61. quizzes.addAll(page.getContent().stream().map(QuizVO::new).collect(Collectors.toList()));
  62. ret.put("page",PageResponse.PageInfo.of(page.getNumber()+1, page.getSize(), page.getTotalPages(), Long.valueOf(page.getTotalElements()).intValue()));
  63. ret.put("quizzes",quizzes);
  64. return ret;
  65. }
  66. /**
  67. * 获得某一测试的详细内容
  68. */
  69. @Auth(roles = {UserType.STUDENT,UserType.TEACHER}, message = "获得某一测试的详细内容")
  70. @GetMapping("/{quizId}")
  71. public QuizVO GetOneQuiz(LoginUser user, @PathVariable("quizId") String quizId) {
  72. return quizService.combineQuizWithAnswer(Long.valueOf(quizId),user.getId(),user.getType());
  73. }
  74. /**
  75. * 创建测试
  76. */
  77. @Auth(roles = {UserType.TEACHER}, message = "创建测试")
  78. @PostMapping("")
  79. public QuizVO CreateQuiz(LoginUser user,@RequestBody QuizDTO newQuiz) {
  80. System.out.println(newQuiz);
  81. final Quiz quiz = quizService.CreateQuiz(newQuiz.getName(), user.getId(), newQuiz.getQuizTime(),
  82. Long.valueOf(newQuiz.getSlideId()), newQuiz.getQuestions());
  83. return quizService.combineQuiz(quiz.getId());
  84. }
  85. /**
  86. * 修改测试 (仅限未开始时可以修改)
  87. */
  88. @Auth(roles = {UserType.TEACHER}, message = "修改测试")
  89. @PutMapping("/{quizId}")
  90. public QuizVO updateQuiz(LoginUser user, @RequestBody QuizUpdateDTO newQuiz, @PathVariable("quizId") String quizId) {
  91. Quiz ret = quizService.modifyQuiz(Long.valueOf(quizId),newQuiz.getName(),
  92. newQuiz.getQuestions(),newQuiz.getQuizTime(),newQuiz.getSlideId());
  93. return quizService.combineQuiz(ret.getId());
  94. }
  95. /**
  96. * 删除测试 (仅限未开始时可以删除)
  97. */
  98. @Auth(roles = {UserType.TEACHER}, message = "删除测试")
  99. @DeleteMapping("/{quizId}")
  100. public Map deleteQuiz(LoginUser user, @PathVariable("quizId") String quizId) {
  101. Map map=new HashMap();
  102. String message = quizService.deleteQuiz(Long.valueOf(quizId));
  103. map.put("message",message);
  104. return map;
  105. }
  106. /**
  107. * 获得测试结果统计
  108. */
  109. @Auth(roles = {UserType.TEACHER}, message = "获得测试结果统计")
  110. @GetMapping("/{quizId}/result")
  111. public Map getQuizResult(LoginUser user, @PathVariable("quizId") String quizId) {
  112. if(quizId==null){
  113. throw new EntityNotFoundException("quiz can't be null");
  114. }
  115. Map map=new HashMap();
  116. List<QuizResultVO> list= quizService.getQuizResult(Long.valueOf(quizId));
  117. map.put("message","success");
  118. map.put("average",list.stream().mapToInt(QuizResultVO::getScore).average());
  119. map.put("data",list);
  120. return map;
  121. }
  122. /**
  123. * 提交答案
  124. */
  125. @Auth(roles = {UserType.STUDENT}, message = "提交答案")
  126. @PutMapping("/{quizId}/student-answer")
  127. public Map putStudentAnswer(LoginUser user, @PathVariable("quizId") String quizId, @RequestBody QuizAnswerDTO quizAnswerDTO) {
  128. if(quizId==null){
  129. throw new EntityNotFoundException("quiz can't be null");
  130. }
  131. Integer match = quizService.upStudentAnswer(Long.valueOf(quizId),user.getId(),quizAnswerDTO.getAnswers());
  132. Map map=new HashMap();
  133. map.put("message","success");
  134. map.put("matchNum",match);
  135. return map;
  136. }
  137. }