package nju.seec.helper.controller; import com.fasterxml.jackson.databind.ObjectMapper; import nju.seec.helper.aspect.auth.Auth; import nju.seec.helper.controller.response.PageResponse; import nju.seec.helper.dao.CourseDAO; import nju.seec.helper.dao.SlideDAO; import nju.seec.helper.dto.LoginUser; import nju.seec.helper.dto.QuizAnswerDTO; import nju.seec.helper.dto.QuizDTO; import nju.seec.helper.dto.QuizUpdateDTO; import nju.seec.helper.entity.Quiz; import nju.seec.helper.service.QuizService; import nju.seec.helper.util.BOKUtil; import nju.seec.helper.util.enums.QuestionKindState; import nju.seec.helper.util.enums.QuizState; import nju.seec.helper.util.enums.SlideState; import nju.seec.helper.util.enums.UserType; import nju.seec.helper.vo.CourseVO; import nju.seec.helper.vo.SlideVO; import nju.seec.helper.vo.UserVO; import nju.seec.helper.vo.quiz.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.web.bind.annotation.*; import javax.persistence.EntityNotFoundException; import java.util.*; import java.util.stream.Collectors; /** * 测试 * * @doc http://47.100.18.120:3000/SEEC-BOK/API-DOC/src/master/helper/api/Quiz-%e6%b5%8b%e8%af%95.md */ @RestController @RequestMapping("/api/quiz") public class QuizController { @Autowired private CourseDAO courseDAO; @Autowired private SlideDAO slideDAO; @Autowired private BOKUtil bokUtil; @Autowired private QuizService quizService; /** * 获得测试列表 */ @Auth(roles = {UserType.STUDENT,UserType.TEACHER}, message = "获得测试列表") @GetMapping("") public Map getBasicQuizList(LoginUser user, String slideId, QuizState state , @PageableDefault(Integer.MAX_VALUE) Pageable pageable) { List quizzes=new ArrayList(); Map ret=new LinkedHashMap(2); Page page; if(slideId!=null){ page = quizService.getAllBasicQuizBySlide(Long.valueOf(slideId), pageable, state, user.getId()); }else{ page = quizService.getAllBasicQuizByUser( pageable, state, user.getId()); } quizzes.addAll(page.getContent().stream().map(QuizVO::new).collect(Collectors.toList())); ret.put("page",PageResponse.PageInfo.of(page.getNumber()+1, page.getSize(), page.getTotalPages(), Long.valueOf(page.getTotalElements()).intValue())); ret.put("quizzes",quizzes); return ret; } /** * 获得某一测试的详细内容 */ @Auth(roles = {UserType.STUDENT,UserType.TEACHER}, message = "获得某一测试的详细内容") @GetMapping("/{quizId}") public QuizVO GetOneQuiz(LoginUser user, @PathVariable("quizId") String quizId) { return quizService.combineQuizWithAnswer(Long.valueOf(quizId),user.getId(),user.getType()); } /** * 创建测试 */ @Auth(roles = {UserType.TEACHER}, message = "创建测试") @PostMapping("") public QuizVO CreateQuiz(LoginUser user,@RequestBody QuizDTO newQuiz) { System.out.println(newQuiz); final Quiz quiz = quizService.CreateQuiz(newQuiz.getName(), user.getId(), newQuiz.getQuizTime(), Long.valueOf(newQuiz.getSlideId()), newQuiz.getQuestions()); return quizService.combineQuiz(quiz.getId()); } /** * 修改测试 (仅限未开始时可以修改) */ @Auth(roles = {UserType.TEACHER}, message = "修改测试") @PutMapping("/{quizId}") public QuizVO updateQuiz(LoginUser user, @RequestBody QuizUpdateDTO newQuiz, @PathVariable("quizId") String quizId) { Quiz ret = quizService.modifyQuiz(Long.valueOf(quizId),newQuiz.getName(), newQuiz.getQuestions(),newQuiz.getQuizTime(),newQuiz.getSlideId()); return quizService.combineQuiz(ret.getId()); } /** * 删除测试 (仅限未开始时可以删除) */ @Auth(roles = {UserType.TEACHER}, message = "删除测试") @DeleteMapping("/{quizId}") public Map deleteQuiz(LoginUser user, @PathVariable("quizId") String quizId) { Map map=new HashMap(); String message = quizService.deleteQuiz(Long.valueOf(quizId)); map.put("message",message); return map; } /** * 获得测试结果统计 */ @Auth(roles = {UserType.TEACHER}, message = "获得测试结果统计") @GetMapping("/{quizId}/result") public Map getQuizResult(LoginUser user, @PathVariable("quizId") String quizId) { if(quizId==null){ throw new EntityNotFoundException("quiz can't be null"); } Map map=new HashMap(); List list= quizService.getQuizResult(Long.valueOf(quizId)); map.put("message","success"); map.put("average",list.stream().mapToInt(QuizResultVO::getScore).average()); map.put("data",list); return map; } /** * 提交答案 */ @Auth(roles = {UserType.STUDENT}, message = "提交答案") @PutMapping("/{quizId}/student-answer") public Map putStudentAnswer(LoginUser user, @PathVariable("quizId") String quizId, @RequestBody QuizAnswerDTO quizAnswerDTO) { if(quizId==null){ throw new EntityNotFoundException("quiz can't be null"); } Integer match = quizService.upStudentAnswer(Long.valueOf(quizId),user.getId(),quizAnswerDTO.getAnswers()); Map map=new HashMap(); map.put("message","success"); map.put("matchNum",match); return map; } }