|
|
@@ -0,0 +1,111 @@
|
|
|
+package nju.seec.helper.logic.service.impl;
|
|
|
+
|
|
|
+import nju.seec.helper.data.dao.QuestionDAO;
|
|
|
+import nju.seec.helper.data.dao.QuizDAO;
|
|
|
+import nju.seec.helper.data.dao.SlideDAO;
|
|
|
+import nju.seec.helper.data.dao.SubmitAnswerDAO;
|
|
|
+import nju.seec.helper.data.entity.Question;
|
|
|
+import nju.seec.helper.data.entity.Quiz;
|
|
|
+import nju.seec.helper.data.entity.Slide;
|
|
|
+import nju.seec.helper.data.entity.SubmitAnswer;
|
|
|
+import nju.seec.helper.logic.service.QuizService;
|
|
|
+import nju.seec.helper.logic.vo.QuizVO;
|
|
|
+import nju.seec.helper.logic.vo.StudentQuizVO;
|
|
|
+import nju.seec.helper.util.enums.QuizType;
|
|
|
+import nju.seec.helper.util.exception.HelperException;
|
|
|
+import nju.seec.helper.web.dto.QuizDTO;
|
|
|
+import nju.seec.helper.web.dto.SubmitAnswerDTO;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author cst
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class QuizServiceImpl implements QuizService {
|
|
|
+ private final QuestionDAO questionDAO;
|
|
|
+ private final SlideDAO slideDAO;
|
|
|
+ private final QuizDAO quizDAO;
|
|
|
+ private final SubmitAnswerDAO submitAnswerDAO;
|
|
|
+
|
|
|
+ public QuizServiceImpl(QuestionDAO questionDAO, SlideDAO slideDAO, QuizDAO quizDAO, SubmitAnswerDAO submitAnswerDAO) {
|
|
|
+ this.questionDAO = questionDAO;
|
|
|
+ this.slideDAO = slideDAO;
|
|
|
+ this.quizDAO = quizDAO;
|
|
|
+ this.submitAnswerDAO = submitAnswerDAO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public QuizVO createQuiz(QuizDTO quizDTO) {
|
|
|
+ List<Question> questions = quizDTO.getQuestionIds()
|
|
|
+ .stream()
|
|
|
+ .map(questionDAO::findQuestionById)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ Quiz quiz = this.copyQuizDTOToQuiz(quizDTO);
|
|
|
+ quiz.setQuestions(questions);
|
|
|
+ quiz = quizDAO.save(quiz);
|
|
|
+ return new QuizVO(quiz);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public QuizVO teacherGetQuiz(int slideId, QuizType quizType) {
|
|
|
+ Quiz quiz = quizDAO.findBySlideIdAndType(slideId, quizType);
|
|
|
+ return quiz == null ? null : new QuizVO(quiz);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public StudentQuizVO studentGetQuiz(int slideId, QuizType quizType) {
|
|
|
+ Slide slide = slideDAO.findSlideById(slideId);
|
|
|
+ HelperException forbiddenException = HelperException.of(HelperException.ExceptionType.FORBIDDEN, "你暂时无权限查看该测验");
|
|
|
+ switch (slide.getState()) {
|
|
|
+ case DRAFT:
|
|
|
+ throw forbiddenException;
|
|
|
+ case BEFORE_CLASS:
|
|
|
+ if (quizType != QuizType.PREVIEW) {
|
|
|
+ throw forbiddenException;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case IN_CLASS:
|
|
|
+ if (quizType != QuizType.PREVIEW && quizType != QuizType.STUDY) {
|
|
|
+ throw forbiddenException;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case AFTER_CLASS:
|
|
|
+ if (quizType != QuizType.PREVIEW && quizType != QuizType.STUDY && quizType != QuizType.REVIEW) {
|
|
|
+ throw forbiddenException;
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ Quiz quiz = quizDAO.findBySlideIdAndType(slideId, quizType);
|
|
|
+ if (quiz == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ SubmitAnswer submitAnswer = submitAnswerDAO.findByQuizIdAndStudentId(quiz.getId(), 1);
|
|
|
+ return new StudentQuizVO(quiz, submitAnswer);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void answerQuiz(Integer studentId, SubmitAnswerDTO submitAnswerDTO) {
|
|
|
+ SubmitAnswer submitAnswer = submitAnswerDAO.findByQuizIdAndStudentId(submitAnswerDTO.getQuizId(), studentId);
|
|
|
+ if (submitAnswer == null) {
|
|
|
+ submitAnswer = new SubmitAnswer();
|
|
|
+ submitAnswer.setChooseOptions(submitAnswerDTO.getChooseOptions());
|
|
|
+ submitAnswer.setSubmitNum(1);
|
|
|
+ } else {
|
|
|
+ submitAnswer.setChooseOptions(submitAnswerDTO.getChooseOptions());
|
|
|
+ submitAnswer.setSubmitNum(submitAnswer.getSubmitNum() + 1);
|
|
|
+ }
|
|
|
+ submitAnswerDAO.save(submitAnswer);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Quiz copyQuizDTOToQuiz(QuizDTO quizDTO) {
|
|
|
+ Quiz quiz = new Quiz();
|
|
|
+ BeanUtils.copyProperties(quizDTO, quiz, "questionIds");
|
|
|
+ return quiz;
|
|
|
+ }
|
|
|
+}
|