ソースを参照

feat: 增加老师获取选课名单,学生根据测试状态获取测试

ChenSiTong 6 年 前
コミット
432e1e3766

+ 10 - 0
src/main/java/nju/seec/helper/controller/CourseController.java

@@ -10,6 +10,7 @@ import nju.seec.helper.dto.user.LoginUser;
 import nju.seec.helper.service.CourseService;
 import nju.seec.helper.util.enums.UserType;
 import nju.seec.helper.vo.CourseVO;
+import nju.seec.helper.vo.UserVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.web.PageableDefault;
 import org.springframework.validation.annotation.Validated;
@@ -127,4 +128,13 @@ public class CourseController {
     public CourseVO getOneCourse(@PathVariable Long courseId) {
         return courseService.getOneCourse(courseId);
     }
+
+    @Auth(roles = UserType.TEACHER, message = "获取选课名单")
+    @GetMapping("/{courseId}/choose-student")
+    public PageResponse<UserVO> getChooseStudents(LoginUser user,
+                                                  @PathVariable Long courseId,
+                                                  @RequestParam(required = false, defaultValue = "") String key,
+                                                  @PageableDefault(size = Integer.MAX_VALUE) Pageable pageable) {
+        return PageResponse.of(courseService.getChooseStudents(user, courseId, key, pageable));
+    }
 }

+ 2 - 2
src/main/java/nju/seec/helper/controller/NoticeController.java

@@ -57,8 +57,8 @@ public class NoticeController {
     }
 
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取公告")
-    @GetMapping("{noticeId}")
-    public NoticeVO getOneNotices(LoginUser user,
+    @GetMapping("/{noticeId}")
+    public NoticeVO getOneNotice(LoginUser user,
                                   @PathVariable Long noticeId) {
         return noticeService.getOneNotice(user, noticeId);
     }

+ 23 - 10
src/main/java/nju/seec/helper/controller/QuizController.java

@@ -9,6 +9,7 @@ import nju.seec.helper.dto.quiz.QuizStudentAnswerDTO;
 import nju.seec.helper.dto.user.LoginUser;
 import nju.seec.helper.service.QuizService;
 import nju.seec.helper.service.QuizStudentAnswerService;
+import nju.seec.helper.util.enums.QuizState;
 import nju.seec.helper.util.enums.UserType;
 import nju.seec.helper.vo.quiz.QuizStudentAnswerVO;
 import nju.seec.helper.vo.quiz.QuizVO;
@@ -38,27 +39,39 @@ public class QuizController {
     }
 
     /**
-     * 老师获取测试列表
+     * 老师基于课件获取测试列表
      */
     @Auth(roles = UserType.TEACHER, message = "获得测试列表")
     @GetMapping("/teacher/slide/{slideId}")
-    public PageResponse<QuizVO> teacherGetQuizzes(LoginUser user,
-                                                  @PathVariable Long slideId,
-                                                  @RequestParam(required = false, defaultValue = "") String key,
-                                                  @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
-        return PageResponse.of(quizService.teacherGetQuizzes(user, slideId, key, pageable));
+    public PageResponse<QuizVO> teacherGetQuizzesBySlide(LoginUser user,
+                                                         @PathVariable Long slideId,
+                                                         @RequestParam(required = false, defaultValue = "") String key,
+                                                         @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
+        return PageResponse.of(quizService.teacherGetQuizzesBySlide(user, slideId, key, pageable));
     }
 
     /**
-     * 学生获取测试列表
+     * 学生基于课件获取测试列表
      */
     @Auth(roles = UserType.STUDENT, message = "获得测试列表")
     @GetMapping("/student/slide/{slideId}")
-    public PageResponse<QuizVO> studentGetQuizzes(LoginUser user,
-                                                  @PathVariable Long slideId,
+    public PageResponse<QuizVO> studentGetQuizzesBySlide(LoginUser user,
+                                                         @PathVariable Long slideId,
+                                                         @RequestParam(required = false, defaultValue = "") String key,
+                                                         @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
+        return PageResponse.of(quizService.studentGetQuizzesBySlide(user, slideId, key, pageable));
+    }
+
+    /**
+     * 学生基于状态获取测试列表
+     */
+    @Auth(roles = UserType.STUDENT, message = "获取测试列表")
+    @GetMapping("/student")
+    public PageResponse<QuizVO> studentGetQuizzesByState(LoginUser user,
+                                                  QuizState state,
                                                   @RequestParam(required = false, defaultValue = "") String key,
                                                   @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
-        return PageResponse.of(quizService.studentGetQuizzes(user, slideId, key, pageable));
+        return PageResponse.of(quizService.studentGetQuizzesByState(user, state, key, pageable));
     }
 
     /**

+ 12 - 0
src/main/java/nju/seec/helper/dao/UserDAO.java

@@ -3,10 +3,13 @@ package nju.seec.helper.dao;
 import nju.seec.helper.entity.User;
 import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 import java.util.Optional;
+import java.util.Set;
 
 /**
  * @author cst
@@ -57,4 +60,13 @@ public interface UserDAO extends JpaRepository<User, Long> {
      * @return
      */
     Optional<User> findByEmail(String email);
+
+    /**
+     * ID列表查询
+     *
+     * @param ids
+     * @param pageable
+     * @return
+     */
+    Page<User> findByIdIn(Set<Long> ids, Pageable pageable);
 }

+ 2 - 2
src/main/java/nju/seec/helper/entity/Choose.java

@@ -11,8 +11,8 @@ import javax.persistence.*;
 @Data
 @Accessors(chain = true)
 @Entity
-@Table(name = "choose",
-        uniqueConstraints = @UniqueConstraint(columnNames = {"course_id", "student_id"}))
+@Table(name = "choose", indexes = @Index(name = "choose_student", columnList = "student_id"),
+        uniqueConstraints = @UniqueConstraint(name = "course_student_unique", columnNames = {"course_id", "student_id"}))
 public class Choose {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

+ 4 - 4
src/main/java/nju/seec/helper/entity/Comment.java

@@ -16,9 +16,9 @@ import java.time.LocalDateTime;
 @Accessors(chain = true)
 @Entity
 @Table(name = "comment",
-        indexes = {@Index(name = "slide_page_top_index", columnList = "slide_id"),
-                @Index(name = "slide_page_top_index", columnList = "page_number"),
-                @Index(name = "slide_page_top_index", columnList = "top_number")})
+        indexes = {@Index(name = "slide_page_top", columnList = "slide_id"),
+                @Index(name = "slide_page_top", columnList = "page_number"),
+                @Index(name = "slide_page_top", columnList = "top_number")})
 @DynamicUpdate
 @DynamicInsert
 public class Comment {
@@ -45,7 +45,7 @@ public class Comment {
     private String content;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "user_id", nullable = false)
+    @JoinColumn(name = "user_id", nullable = false, foreignKey = @ForeignKey(name = "comment_user"))
     private User user;
 
     @Column(name = "create_at", updatable = false, nullable = false)

+ 2 - 2
src/main/java/nju/seec/helper/entity/Course.java

@@ -16,7 +16,7 @@ import java.time.LocalDateTime;
 @Accessors(chain = true)
 @Entity
 @Table(name = "course",
-        uniqueConstraints = @UniqueConstraint(name = "course_name_constraint", columnNames = {"teacher_id", "delete_at", "name"}))
+        uniqueConstraints = @UniqueConstraint(name = "course_name_unique", columnNames = {"teacher_id", "delete_at", "name"}))
 @DynamicUpdate
 @DynamicInsert
 public class Course {
@@ -38,7 +38,7 @@ public class Course {
     private LocalDateTime createAt;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "teacher_id", nullable = false)
+    @JoinColumn(name = "teacher_id", nullable = false, foreignKey = @ForeignKey(name = "course_teacher"))
     private User teacher;
 
     @Column(name = "delete_at", columnDefinition = "bigint default 0 not null")

+ 1 - 1
src/main/java/nju/seec/helper/entity/CourseFile.java

@@ -13,7 +13,7 @@ import java.time.LocalDateTime;
 @Data
 @Accessors(chain = true)
 @Entity
-@Table(name = "course_file", uniqueConstraints = {@UniqueConstraint(columnNames = {"course_id", "file_name"})})
+@Table(name = "course_file", uniqueConstraints = {@UniqueConstraint(name = "course_file_name_unique", columnNames = {"course_id", "file_name"})})
 public class CourseFile {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

+ 1 - 2
src/main/java/nju/seec/helper/entity/Message.java

@@ -16,8 +16,7 @@ import java.time.LocalDateTime;
 @Data
 @Accessors(chain = true)
 @Entity
-@Table(name = "message")
-@Inheritance(strategy = InheritanceType.JOINED)
+@Table(name = "message", indexes = {@Index(name = "message_user", columnList = "to_user_id")})
 @DynamicUpdate
 @DynamicInsert
 public class Message {

+ 1 - 1
src/main/java/nju/seec/helper/entity/Notice.java

@@ -14,7 +14,7 @@ import java.time.LocalDateTime;
 @Data
 @Accessors(chain = true)
 @Entity
-@Table(name = "notice")
+@Table(name = "notice", indexes = {@Index(name = "notice_course", columnList = "course_id")})
 public class Notice {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)

+ 4 - 4
src/main/java/nju/seec/helper/entity/Quiz.java

@@ -22,7 +22,7 @@ import java.util.List;
 @Data
 @Accessors(chain = true)
 @Entity
-@Table(name = "quiz", uniqueConstraints = @UniqueConstraint(name = "quiz_name_constraint", columnNames = {"slide_id", "delete_at", "name",}))
+@Table(name = "quiz", uniqueConstraints = @UniqueConstraint(name = "quiz_name_unique", columnNames = {"slide_id", "delete_at", "name",}))
 @DynamicInsert
 @DynamicUpdate
 public class Quiz {
@@ -36,15 +36,15 @@ public class Quiz {
     private String name;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "course_id", referencedColumnName = "id")
+    @JoinColumn(name = "course_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "quiz_course"))
     private Course course;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "slide_id", referencedColumnName = "id")
+    @JoinColumn(name = "slide_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "quiz_slide"))
     private Slide slide;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "teacher_id", referencedColumnName = "id")
+    @JoinColumn(name = "teacher_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "quiz_teacher"))
     private User teacher;
 
     @Convert(converter = ListConverter.class)

+ 3 - 3
src/main/java/nju/seec/helper/entity/QuizStudentAnswer.java

@@ -21,7 +21,7 @@ import java.util.Map;
 @Data
 @Accessors(chain = true)
 @Entity
-@Table(name = "quiz_student_answer", uniqueConstraints = @UniqueConstraint(columnNames = {"quiz_id", "student_id"}))
+@Table(name = "quiz_student_answer", uniqueConstraints = @UniqueConstraint(name = "quiz_student_unique", columnNames = {"quiz_id", "student_id"}))
 @DynamicUpdate
 @DynamicInsert
 public class QuizStudentAnswer {
@@ -31,11 +31,11 @@ public class QuizStudentAnswer {
     private Long id;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "quiz_id", referencedColumnName = "id")
+    @JoinColumn(name = "quiz_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "answer_quiz"))
     private Quiz quiz;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "student_id", referencedColumnName = "id")
+    @JoinColumn(name = "student_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "answer_student"))
     private User student;
 
     @SuppressWarnings("all")

+ 2 - 2
src/main/java/nju/seec/helper/entity/Reply.java

@@ -24,11 +24,11 @@ public class Reply {
     private Long id;
 
     @OneToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "comment_id", nullable = false)
+    @JoinColumn(name = "comment_id", nullable = false, foreignKey = @ForeignKey(name = "reply_comment"))
     private Comment comment;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "teacher_id", nullable = false)
+    @JoinColumn(name = "teacher_id", nullable = false, foreignKey = @ForeignKey(name = "reply_teacher"))
     private User teacher;
 
     @Column(nullable = false)

+ 3 - 3
src/main/java/nju/seec/helper/entity/Slide.java

@@ -18,7 +18,7 @@ import java.time.LocalDateTime;
 @Accessors(chain = true)
 @Entity
 @Table(name = "slide",
-        uniqueConstraints = @UniqueConstraint(name = "slide_name_constraint", columnNames = {"course_id", "delete_at", "name",}))
+        uniqueConstraints = @UniqueConstraint(name = "slide_name_unique", columnNames = {"course_id", "delete_at", "name",}))
 @DynamicUpdate
 @DynamicInsert
 public class Slide {
@@ -27,11 +27,11 @@ public class Slide {
     private Long id;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "course_id", nullable = false)
+    @JoinColumn(name = "course_id", nullable = false, foreignKey = @ForeignKey(name = "slide_course"))
     private Course course;
 
     @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
-    @JoinColumn(name = "teacher_id", nullable = false)
+    @JoinColumn(name = "teacher_id", nullable = false, foreignKey = @ForeignKey(name = "slide_teacher"))
     private User teacher;
 
     @Enumerated(EnumType.STRING)

+ 3 - 1
src/main/java/nju/seec/helper/entity/User.java

@@ -16,7 +16,9 @@ import java.time.LocalDateTime;
 @Data
 @Accessors(chain = true)
 @Entity
-@Table(name = "user")
+@Table(name = "user",
+        uniqueConstraints = {@UniqueConstraint(name = "user_phone_unique", columnNames = "phone"),
+                @UniqueConstraint(name = "user_email_unique", columnNames = "email")})
 @DynamicUpdate
 @DynamicInsert
 public class User {

+ 12 - 0
src/main/java/nju/seec/helper/service/CourseService.java

@@ -4,6 +4,7 @@ import nju.seec.helper.dto.course.ChooseDTO;
 import nju.seec.helper.dto.course.CourseDTO;
 import nju.seec.helper.dto.user.LoginUser;
 import nju.seec.helper.vo.CourseVO;
+import nju.seec.helper.vo.UserVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -98,4 +99,15 @@ public interface CourseService {
      * @return
      */
     CourseVO getOneCourse(Long courseId);
+
+    /**
+     * 获取选课名单
+     *
+     * @param user
+     * @param courseId
+     * @param key
+     * @param pageable
+     * @return
+     */
+    Page<UserVO> getChooseStudents(LoginUser user, Long courseId, String key, Pageable pageable);
 }

+ 16 - 4
src/main/java/nju/seec/helper/service/QuizService.java

@@ -6,6 +6,7 @@ package nju.seec.helper.service;
 import nju.seec.helper.dto.quiz.QuizDTO;
 import nju.seec.helper.dto.user.LoginUser;
 import nju.seec.helper.entity.Slide;
+import nju.seec.helper.util.enums.QuizState;
 import nju.seec.helper.vo.quiz.QuizVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -45,7 +46,7 @@ public interface QuizService {
     void deleteQuiz(LoginUser user, Long quizId);
 
     /**
-     * 教师获取测试
+     * 教师基于课件获取测试
      *
      * @param user
      * @param slideId
@@ -53,10 +54,10 @@ public interface QuizService {
      * @param pageable
      * @return
      */
-    Page<QuizVO> teacherGetQuizzes(LoginUser user, Long slideId, String key, Pageable pageable);
+    Page<QuizVO> teacherGetQuizzesBySlide(LoginUser user, Long slideId, String key, Pageable pageable);
 
     /**
-     * 学生获取测试
+     * 学生基于课件获取测试
      *
      * @param user
      * @param slideId
@@ -64,7 +65,18 @@ public interface QuizService {
      * @param pageable
      * @return
      */
-    Page<QuizVO> studentGetQuizzes(LoginUser user, Long slideId, String key, Pageable pageable);
+    Page<QuizVO> studentGetQuizzesBySlide(LoginUser user, Long slideId, String key, Pageable pageable);
+
+    /**
+     * 学生基于测试状态获取测试
+     *
+     * @param user
+     * @param state
+     * @param key
+     * @param pageable
+     * @return
+     */
+    Page<QuizVO> studentGetQuizzesByState(LoginUser user, QuizState state, String key, Pageable pageable);
 
     /**
      * 获取某个测试

+ 9 - 0
src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java

@@ -15,6 +15,7 @@ import nju.seec.helper.util.EncryptUtils;
 import nju.seec.helper.util.enums.ExceptionType;
 import nju.seec.helper.util.exception.HelperException;
 import nju.seec.helper.vo.CourseVO;
+import nju.seec.helper.vo.UserVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
@@ -139,6 +140,14 @@ public class CourseServiceImpl implements CourseService {
         return new CourseVO(courseDAO.findCourseById(courseId));
     }
 
+    @Override
+    public Page<UserVO> getChooseStudents(LoginUser user, Long courseId, String key, Pageable pageable) {
+        Course course = courseDAO.findCourseById(courseId);
+        AuthUtils.checkDataAuth(user.getId(), course.getTeacher().getId(), "您无权查看该课程的选课名单");
+
+        return userDAO.findByIdIn(chooseDAO.findStudentIdsByCourseId(courseId), pageable).map(UserVO::new);
+    }
+
     private void checkSameCourseName(Long courseId, Long teacherId, String name) {
         long exists = courseDAO.count((Specification<Course>) (root, query, cb) ->
                 cb.and(cb.notEqual(root.get("id"), courseId),

+ 24 - 4
src/main/java/nju/seec/helper/service/impl/QuizServiceImpl.java

@@ -130,16 +130,26 @@ public class QuizServiceImpl implements QuizService {
 
     @Transactional(readOnly = true)
     @Override
-    public Page<QuizVO> teacherGetQuizzes(LoginUser user, Long slideId, String key, Pageable pageable) {
+    public Page<QuizVO> teacherGetQuizzesBySlide(LoginUser user, Long slideId, String key, Pageable pageable) {
         return findBySlideIdAndKey(slideId, key, pageable).map(QuizVO::new);
     }
 
-    public static final Set<QuizState> STUDENT_NOT_GET_SET = ImmutableSet.of(QuizState.NOT_STARTED);
+    public static final Set<QuizState> STATES_NOT_GET_BY_STUDENT_SET = ImmutableSet.of(QuizState.NOT_STARTED);
 
     @Transactional(readOnly = true)
     @Override
-    public Page<QuizVO> studentGetQuizzes(LoginUser user, Long slideId, String key, Pageable pageable) {
-        return findBySlideIdAndStateNotInAndKey(slideId, STUDENT_NOT_GET_SET, key, pageable).map(QuizVO::new);
+    public Page<QuizVO> studentGetQuizzesBySlide(LoginUser user, Long slideId, String key, Pageable pageable) {
+        return findBySlideIdAndStateNotInAndKey(slideId, STATES_NOT_GET_BY_STUDENT_SET, key, pageable).map(QuizVO::new);
+    }
+
+    @Transactional(readOnly = true)
+    @Override
+    public Page<QuizVO> studentGetQuizzesByState(LoginUser user, QuizState state, String key, Pageable pageable) {
+        if (STATES_NOT_GET_BY_STUDENT_SET.contains(state)) {
+            throw HelperException.of(ExceptionType.FORBIDDEN, "您暂时无法获取该状态的测试");
+        }
+        Set<Long> courseIds = chooseDAO.findCourseIdsByStudentId(user.getId());
+        return findByCourseIdInAndStateAndKey(courseIds, state, key, pageable).map(QuizVO::new);
     }
 
     @Transactional(readOnly = true)
@@ -181,6 +191,16 @@ public class QuizServiceImpl implements QuizService {
         }
     }
 
+    private Page<Quiz> findByCourseIdInAndStateAndKey(Set<Long> courseIds, QuizState state, String key, Pageable pageable) {
+        return quizDAO.findAll(
+                (Specification<Quiz>) (root, query, cb) -> cb.and(
+                        root.get("course").get("id").in(courseIds),
+                        cb.equal(root.get("deleteAt"), 0L),
+                        cb.equal(root.get("state"), state),
+                        cb.like(root.get("name"), StringUtils.keyPattern(key))),
+                pageable);
+    }
+
     private Page<Quiz> findBySlideIdAndKey(Long slideId, String key, Pageable pageable) {
         return quizDAO.findAll(
                 (Specification<Quiz>) (root, query, cb) -> cb.and(

+ 5 - 3
src/main/java/nju/seec/helper/service/impl/QuizStudentAnswerServiceImpl.java

@@ -11,7 +11,6 @@ import nju.seec.helper.entity.User;
 import nju.seec.helper.service.QuestionService;
 import nju.seec.helper.service.QuizStudentAnswerService;
 import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.enums.QuizState;
 import nju.seec.helper.util.exception.HelperException;
 import nju.seec.helper.vo.question.BaseQuestionVO;
 import nju.seec.helper.vo.quiz.QuizStudentAnswerVO;
@@ -49,8 +48,11 @@ public class QuizStudentAnswerServiceImpl implements QuizStudentAnswerService {
     public QuizStudentAnswerVO submitQuizStudentAnswer(LoginUser user, QuizStudentAnswerDTO quizStudentAnswerDTO) {
         Quiz quiz = quizDAO.findQuizById(quizStudentAnswerDTO.getQuizId());
 
-        if (quiz.getState() == QuizState.CLOSED) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, "测试已关闭,无法提交");
+        switch (quiz.getState()) {
+            case NOT_STARTED:
+                throw HelperException.of(ExceptionType.FORBIDDEN, "测试暂未开始");
+            case CLOSED:
+                throw HelperException.of(ExceptionType.FORBIDDEN, "测试已关闭,无法提交");
         }
 
         User student = userDAO.findUserById(user.getId());

+ 2 - 2
src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java

@@ -219,7 +219,7 @@ public class SlideServiceImpl implements SlideService {
         return findByCourseIdAndTeacherIdAndKey(courseId, teacher.getId(), key, pageable).map(SlideVO::new);
     }
 
-    private static final Set<SlideState> STUDENT_NOT_GET_SET = ImmutableSet.of(SlideState.DRAFT);
+    private static final Set<SlideState> STATES_NOT_GET_BY_STUDENT_SET = ImmutableSet.of(SlideState.DRAFT);
 
     @Transactional(readOnly = true)
     @Override
@@ -228,7 +228,7 @@ public class SlideServiceImpl implements SlideService {
             throw HelperException.of(ExceptionType.FORBIDDEN, "你无权查看该课程下的课件");
         }
 
-        return findByCourseIdAndKeyAndStateNotInAndKey(courseId, STUDENT_NOT_GET_SET, key, pageable).map(SlideVO::new);
+        return findByCourseIdAndKeyAndStateNotInAndKey(courseId, STATES_NOT_GET_BY_STUDENT_SET, key, pageable).map(SlideVO::new);
     }
 
     @Transactional(readOnly = true)