|
@@ -2,7 +2,10 @@ package nju.seec.helper.service.impl;
|
|
|
|
|
|
|
|
import com.google.common.collect.ImmutableSet;
|
|
import com.google.common.collect.ImmutableSet;
|
|
|
import nju.seec.helper.aspect.auth.LoginUser;
|
|
import nju.seec.helper.aspect.auth.LoginUser;
|
|
|
-import nju.seec.helper.dao.*;
|
|
|
|
|
|
|
+import nju.seec.helper.dao.ChooseDAO;
|
|
|
|
|
+import nju.seec.helper.dao.QuizDAO;
|
|
|
|
|
+import nju.seec.helper.dao.QuizStudentAnswerDAO;
|
|
|
|
|
+import nju.seec.helper.dao.SlideDAO;
|
|
|
import nju.seec.helper.dto.quiz.QuizDTO;
|
|
import nju.seec.helper.dto.quiz.QuizDTO;
|
|
|
import nju.seec.helper.entity.Course;
|
|
import nju.seec.helper.entity.Course;
|
|
|
import nju.seec.helper.entity.Quiz;
|
|
import nju.seec.helper.entity.Quiz;
|
|
@@ -36,19 +39,15 @@ public class QuizServiceImpl implements QuizService {
|
|
|
private final QuizDAO quizDAO;
|
|
private final QuizDAO quizDAO;
|
|
|
private final QuizStudentAnswerDAO quizStudentAnswerDAO;
|
|
private final QuizStudentAnswerDAO quizStudentAnswerDAO;
|
|
|
private final ChooseDAO chooseDAO;
|
|
private final ChooseDAO chooseDAO;
|
|
|
- private final CourseDAO courseDAO;
|
|
|
|
|
- private final UserDAO userDAO;
|
|
|
|
|
|
|
|
|
|
private final MessageService messageService;
|
|
private final MessageService messageService;
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
- public QuizServiceImpl(SlideDAO slideDAO, QuizDAO quizDAO, QuizStudentAnswerDAO quizStudentAnswerDAO, ChooseDAO chooseDAO, CourseDAO courseDAO, UserDAO userDAO, MessageService messageService) {
|
|
|
|
|
|
|
+ public QuizServiceImpl(SlideDAO slideDAO, QuizDAO quizDAO, QuizStudentAnswerDAO quizStudentAnswerDAO, ChooseDAO chooseDAO, MessageService messageService) {
|
|
|
this.slideDAO = slideDAO;
|
|
this.slideDAO = slideDAO;
|
|
|
this.quizDAO = quizDAO;
|
|
this.quizDAO = quizDAO;
|
|
|
this.quizStudentAnswerDAO = quizStudentAnswerDAO;
|
|
this.quizStudentAnswerDAO = quizStudentAnswerDAO;
|
|
|
this.chooseDAO = chooseDAO;
|
|
this.chooseDAO = chooseDAO;
|
|
|
- this.courseDAO = courseDAO;
|
|
|
|
|
- this.userDAO = userDAO;
|
|
|
|
|
this.messageService = messageService;
|
|
this.messageService = messageService;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -61,15 +60,18 @@ public class QuizServiceImpl implements QuizService {
|
|
|
checkSameName(0L, quizDTO.getSlideId(), quizDTO.getName());
|
|
checkSameName(0L, quizDTO.getSlideId(), quizDTO.getName());
|
|
|
checkQuizTypeOkToSlideState(slide.getState(), quizDTO.getType());
|
|
checkQuizTypeOkToSlideState(slide.getState(), quizDTO.getType());
|
|
|
|
|
|
|
|
- return new QuizVO(quizDAO.save(new Quiz()
|
|
|
|
|
|
|
+ QuizState quizState = QuizState.getQuizStateBySlideStateAndQuizType(slide.getState(), quizDTO.getType());
|
|
|
|
|
+ Quiz quiz = quizDAO.save(new Quiz()
|
|
|
.setCourse(slide.getCourse())
|
|
.setCourse(slide.getCourse())
|
|
|
.setSlide(slide)
|
|
.setSlide(slide)
|
|
|
.setTeacher(slide.getTeacher())
|
|
.setTeacher(slide.getTeacher())
|
|
|
.setType(quizDTO.getType())
|
|
.setType(quizDTO.getType())
|
|
|
- .setState(QuizState.getQuizStateBySlideStateAndQuizType(slide.getState(), quizDTO.getType()))
|
|
|
|
|
|
|
+ .setState(quizState)
|
|
|
.setName(quizDTO.getName())
|
|
.setName(quizDTO.getName())
|
|
|
.setMaxSubmitNumber(quizDTO.getMaxSubmitTime())
|
|
.setMaxSubmitNumber(quizDTO.getMaxSubmitTime())
|
|
|
- .setQuestions(quizDTO.getQuestions())));
|
|
|
|
|
|
|
+ .setQuestions(quizDTO.getQuestions()));
|
|
|
|
|
+ sendMessages(quiz);
|
|
|
|
|
+ return new QuizVO(quiz);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -85,11 +87,15 @@ public class QuizServiceImpl implements QuizService {
|
|
|
|
|
|
|
|
checkSameName(quiz.getId(), quizDTO.getSlideId(), quizDTO.getName());
|
|
checkSameName(quiz.getId(), quizDTO.getSlideId(), quizDTO.getName());
|
|
|
|
|
|
|
|
- return new QuizVO(quizDAO.save(quiz.setType(quizDTO.getType())
|
|
|
|
|
- .setState(QuizState.getQuizStateBySlideStateAndQuizType(slide.getState(), quizDTO.getType()))
|
|
|
|
|
|
|
+ QuizState quizState = QuizState.getQuizStateBySlideStateAndQuizType(slide.getState(), quizDTO.getType());
|
|
|
|
|
+ quiz = quizDAO.save(quiz
|
|
|
|
|
+ .setType(quizDTO.getType())
|
|
|
|
|
+ .setState(quizState)
|
|
|
.setName(quizDTO.getName())
|
|
.setName(quizDTO.getName())
|
|
|
.setMaxSubmitNumber(quizDTO.getMaxSubmitTime())
|
|
.setMaxSubmitNumber(quizDTO.getMaxSubmitTime())
|
|
|
- .setQuestions(quizDTO.getQuestions())));
|
|
|
|
|
|
|
+ .setQuestions(quizDTO.getQuestions()));
|
|
|
|
|
+ sendMessages(quiz);
|
|
|
|
|
+ return new QuizVO(quiz);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void checkSameName(Long quizId, Long slideId, String name) {
|
|
private void checkSameName(Long quizId, Long slideId, String name) {
|
|
@@ -122,6 +128,7 @@ public class QuizServiceImpl implements QuizService {
|
|
|
AuthUtils.checkDataAuth(user.getId(), quiz.getTeacher().getId(), "您无权删除该测试");
|
|
AuthUtils.checkDataAuth(user.getId(), quiz.getTeacher().getId(), "您无权删除该测试");
|
|
|
quiz.setDeleteAt(System.currentTimeMillis());
|
|
quiz.setDeleteAt(System.currentTimeMillis());
|
|
|
quizDAO.save(quiz);
|
|
quizDAO.save(quiz);
|
|
|
|
|
+ messageService.deleteMessages(quizId, MessageType.QUIZ_NEW);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Transactional(readOnly = true)
|
|
@Transactional(readOnly = true)
|
|
@@ -160,17 +167,22 @@ public class QuizServiceImpl implements QuizService {
|
|
|
@Override
|
|
@Override
|
|
|
public void modifyQuizState(Slide slide) {
|
|
public void modifyQuizState(Slide slide) {
|
|
|
List<Quiz> quizzes = quizDAO.findAllBySlide(slide);
|
|
List<Quiz> quizzes = quizDAO.findAllBySlide(slide);
|
|
|
- Course course = slide.getCourse();
|
|
|
|
|
- Set<Long> chooseStudentIds = chooseDAO.findStudentIdsByCourseId(course.getId());
|
|
|
|
|
quizzes.forEach(quiz -> {
|
|
quizzes.forEach(quiz -> {
|
|
|
QuizState quizState = QuizState.getQuizStateBySlideStateAndQuizType(slide.getState(), quiz.getType());
|
|
QuizState quizState = QuizState.getQuizStateBySlideStateAndQuizType(slide.getState(), quiz.getType());
|
|
|
quiz.setState(quizState);
|
|
quiz.setState(quizState);
|
|
|
- if (quizState == QuizState.ONGOING) {
|
|
|
|
|
- messageService.createMessage(chooseStudentIds, MessageType.QUIZ_NEW, String.format("[%s] - [%s] 的测试 [%s] 已开放", course.getName(), slide.getName(), quiz.getName()), slide.getId());
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ sendMessages(quiz);
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private void sendMessages(Quiz quiz) {
|
|
|
|
|
+ Slide slide = quiz.getSlide();
|
|
|
|
|
+ Course course = slide.getCourse();
|
|
|
|
|
+ Set<Long> chooseStudentIds = chooseDAO.findStudentIdsByCourseId(course.getId());
|
|
|
|
|
+ if (quiz.getState() == QuizState.ONGOING) {
|
|
|
|
|
+ messageService.createMessage(chooseStudentIds, MessageType.QUIZ_NEW, String.format("[%s] - [%s] 的测试 [%s] 已开放", course.getName(), slide.getName(), quiz.getName()), quiz.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void checkDataAccessAuth(LoginUser user, Quiz quiz) {
|
|
private void checkDataAccessAuth(LoginUser user, Quiz quiz) {
|
|
|
HelperException forbiddenEx = HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该测试");
|
|
HelperException forbiddenEx = HelperException.of(ExceptionType.FORBIDDEN, "您无权访问该测试");
|
|
|
|
|
|