| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- 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<QuizVO> quizzes=new ArrayList<QuizVO>();
- Map ret=new LinkedHashMap(2);
- Page<Quiz> 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<QuizResultVO> 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;
- }
- }
|