package nju.seec.helper.service.impl; import com.google.common.collect.ImmutableSet; import nju.seec.helper.dao.*; import nju.seec.helper.dto.quiz.QuizDTO; import nju.seec.helper.dto.user.LoginUser; import nju.seec.helper.entity.Course; import nju.seec.helper.entity.Quiz; import nju.seec.helper.entity.Slide; import nju.seec.helper.service.MessageService; import nju.seec.helper.service.QuizService; import nju.seec.helper.service.util.AuthUtils; import nju.seec.helper.service.util.StringUtils; import nju.seec.helper.util.enums.*; import nju.seec.helper.util.exception.HelperException; import nju.seec.helper.vo.quiz.QuizVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Set; /** * @author xst *
* updated by cst
*/
@Service
public class QuizServiceImpl implements QuizService {
private final SlideDAO slideDAO;
private final QuizDAO quizDAO;
private final QuizStudentAnswerDAO quizStudentAnswerDAO;
private final ChooseDAO chooseDAO;
private final CourseDAO courseDAO;
private final UserDAO userDAO;
private final MessageService messageService;
@Autowired
public QuizServiceImpl(SlideDAO slideDAO, QuizDAO quizDAO, QuizStudentAnswerDAO quizStudentAnswerDAO, ChooseDAO chooseDAO, CourseDAO courseDAO, UserDAO userDAO, MessageService messageService) {
this.slideDAO = slideDAO;
this.quizDAO = quizDAO;
this.quizStudentAnswerDAO = quizStudentAnswerDAO;
this.chooseDAO = chooseDAO;
this.courseDAO = courseDAO;
this.userDAO = userDAO;
this.messageService = messageService;
}
@Transactional(rollbackFor = Exception.class)
@Override
public QuizVO createQuiz(LoginUser user, QuizDTO quizDTO) {
Slide slide = slideDAO.findSlideById(quizDTO.getSlideId());
AuthUtils.checkDataAuth(user.getId(), slide.getTeacher().getId(), "您无权创建该课件的测试");
checkSameName(0L, quizDTO.getSlideId(), quizDTO.getName());
checkQuizTypeOkToSlideState(slide.getState(), quizDTO.getType());
Quiz quiz = new Quiz()
.setCourse(slide.getCourse())
.setSlide(slide)
.setTeacher(slide.getTeacher())
.setType(quizDTO.getType())
.setState(QuizState.getQuizStateBySlideStateAndQuizType(slide.getState(), quizDTO.getType()))
.setName(quizDTO.getName())
.setMaxSubmitNumber(quizDTO.getMaxSubmitTime())
.setQuestions(quizDTO.getQuestions());
return new QuizVO(quizDAO.save(quiz));
}
@Transactional(rollbackFor = Exception.class)
@Override
public QuizVO modifyQuiz(LoginUser user, Long quizId, QuizDTO quizDTO) {
Quiz quiz = quizDAO.findQuizById(quizId);
AuthUtils.checkDataAuth(user.getId(), quiz.getId(), "您无权修改该测试");
checkSubmit(quiz);
Slide slide = quiz.getSlide();
checkQuizTypeOkToSlideState(slide.getState(), quizDTO.getType());
checkSameName(quiz.getId(), quizDTO.getSlideId(), quizDTO.getName());
quiz.setType(quizDTO.getType())
.setState(QuizState.getQuizStateBySlideStateAndQuizType(slide.getState(), quizDTO.getType()))
.setName(quizDTO.getName())
.setMaxSubmitNumber(quizDTO.getMaxSubmitTime())
.setQuestions(quizDTO.getQuestions());
return new QuizVO(quizDAO.save(quiz));
}
private void checkSameName(Long quizId, Long slideId, String name) {
long exists = quizDAO.count((Specification