Просмотр исходного кода

feat: 增加用户状态(审核中、正常、封禁)

ChenSiTong 6 лет назад
Родитель
Сommit
aff8a647e8
64 измененных файлов с 349 добавлено и 90 удалено
  1. 1 1
      src/main/java/nju/seec/helper/aspect/auth/Auth.java
  2. 2 2
      src/main/java/nju/seec/helper/aspect/auth/AuthAspect.java
  3. 1 1
      src/main/java/nju/seec/helper/aspect/auth/LoginUser.java
  4. 1 1
      src/main/java/nju/seec/helper/controller/CommentController.java
  5. 1 1
      src/main/java/nju/seec/helper/controller/ControllerAdvice.java
  6. 1 1
      src/main/java/nju/seec/helper/controller/CourseController.java
  7. 1 1
      src/main/java/nju/seec/helper/controller/CourseFileController.java
  8. 1 1
      src/main/java/nju/seec/helper/controller/MessageController.java
  9. 1 1
      src/main/java/nju/seec/helper/controller/NoticeController.java
  10. 1 1
      src/main/java/nju/seec/helper/controller/QuestionController.java
  11. 2 2
      src/main/java/nju/seec/helper/controller/QuizController.java
  12. 1 1
      src/main/java/nju/seec/helper/controller/ReplyController.java
  13. 1 1
      src/main/java/nju/seec/helper/controller/SlideController.java
  14. 16 2
      src/main/java/nju/seec/helper/controller/UserController.java
  15. 2 2
      src/main/java/nju/seec/helper/dao/CommentDAO.java
  16. 2 2
      src/main/java/nju/seec/helper/dao/CourseDAO.java
  17. 2 2
      src/main/java/nju/seec/helper/dao/CourseFileDAO.java
  18. 2 2
      src/main/java/nju/seec/helper/dao/NoticeDAO.java
  19. 2 2
      src/main/java/nju/seec/helper/dao/QuizDAO.java
  20. 2 2
      src/main/java/nju/seec/helper/dao/ReplyDAO.java
  21. 2 2
      src/main/java/nju/seec/helper/dao/SlideDAO.java
  22. 2 2
      src/main/java/nju/seec/helper/dao/UserDAO.java
  23. 1 1
      src/main/java/nju/seec/helper/dto/quiz/QuizDTO.java
  24. 1 1
      src/main/java/nju/seec/helper/dto/slide/SlideDTO.java
  25. 1 1
      src/main/java/nju/seec/helper/dto/slide/SlideStateDTO.java
  26. 1 1
      src/main/java/nju/seec/helper/dto/user/UserDTO.java
  27. 1 1
      src/main/java/nju/seec/helper/entity/Message.java
  28. 2 2
      src/main/java/nju/seec/helper/entity/Quiz.java
  29. 1 1
      src/main/java/nju/seec/helper/entity/Slide.java
  30. 6 1
      src/main/java/nju/seec/helper/entity/User.java
  31. 20 0
      src/main/java/nju/seec/helper/enums/ExceptionType.java
  32. 27 0
      src/main/java/nju/seec/helper/enums/MessageType.java
  33. 39 0
      src/main/java/nju/seec/helper/enums/QuestionType.java
  34. 53 0
      src/main/java/nju/seec/helper/enums/QuizState.java
  35. 39 0
      src/main/java/nju/seec/helper/enums/QuizType.java
  36. 17 0
      src/main/java/nju/seec/helper/enums/SlideState.java
  37. 8 0
      src/main/java/nju/seec/helper/enums/UserState.java
  38. 9 0
      src/main/java/nju/seec/helper/enums/UserType.java
  39. 20 0
      src/main/java/nju/seec/helper/exception/HelperException.java
  40. 1 1
      src/main/java/nju/seec/helper/service/MessageService.java
  41. 1 1
      src/main/java/nju/seec/helper/service/QuizService.java
  42. 1 1
      src/main/java/nju/seec/helper/service/impl/CommentServiceImpl.java
  43. 2 2
      src/main/java/nju/seec/helper/service/impl/CourseFileServiceImpl.java
  44. 2 2
      src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java
  45. 1 1
      src/main/java/nju/seec/helper/service/impl/MessageServiceImpl.java
  46. 1 1
      src/main/java/nju/seec/helper/service/impl/NoticeServiceImpl.java
  47. 4 4
      src/main/java/nju/seec/helper/service/impl/QuestionServiceImpl.java
  48. 2 2
      src/main/java/nju/seec/helper/service/impl/QuizServiceImpl.java
  49. 2 2
      src/main/java/nju/seec/helper/service/impl/QuizStudentAnswerServiceImpl.java
  50. 3 3
      src/main/java/nju/seec/helper/service/impl/ReplyServiceImpl.java
  51. 4 4
      src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java
  52. 6 3
      src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java
  53. 2 2
      src/main/java/nju/seec/helper/service/util/AuthUtils.java
  54. 3 3
      src/main/java/nju/seec/helper/util/BokUtil.java
  55. 2 2
      src/main/java/nju/seec/helper/util/OssUtils.java
  56. 2 2
      src/main/java/nju/seec/helper/util/SmsUtils.java
  57. 2 2
      src/main/java/nju/seec/helper/util/file/FileParserContext.java
  58. 1 1
      src/main/java/nju/seec/helper/vo/CommentVO.java
  59. 1 1
      src/main/java/nju/seec/helper/vo/SlideVO.java
  60. 6 1
      src/main/java/nju/seec/helper/vo/UserVO.java
  61. 3 3
      src/main/java/nju/seec/helper/vo/question/BaseQuestionVO.java
  62. 1 1
      src/main/java/nju/seec/helper/vo/question/ChoiceQuestionVO.java
  63. 1 1
      src/main/java/nju/seec/helper/vo/question/TrueOrFalseQuestionVO.java
  64. 2 2
      src/main/java/nju/seec/helper/vo/quiz/QuizVO.java

+ 1 - 1
src/main/java/nju/seec/helper/aspect/auth/Auth.java

@@ -1,6 +1,6 @@
 package nju.seec.helper.aspect.auth;
 
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 
 import java.lang.annotation.*;
 

+ 2 - 2
src/main/java/nju/seec/helper/aspect/auth/AuthAspect.java

@@ -1,8 +1,8 @@
 package nju.seec.helper.aspect.auth;
 
 import nju.seec.helper.util.Consts;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;

+ 1 - 1
src/main/java/nju/seec/helper/aspect/auth/LoginUser.java

@@ -2,7 +2,7 @@ package nju.seec.helper.aspect.auth;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 
 /**
  * @author cst

+ 1 - 1
src/main/java/nju/seec/helper/controller/CommentController.java

@@ -6,7 +6,7 @@ import nju.seec.helper.dto.comment.CommentDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.service.CommentService;
 import nju.seec.helper.util.JsonUtils;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 import nju.seec.helper.vo.CommentVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.web.PageableDefault;

+ 1 - 1
src/main/java/nju/seec/helper/controller/ControllerAdvice.java

@@ -2,7 +2,7 @@ package nju.seec.helper.controller;
 
 import lombok.extern.slf4j.Slf4j;
 import nju.seec.helper.controller.response.ErrorResponse;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.validation.BindException;

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

@@ -8,7 +8,7 @@ import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.service.CourseService;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 import nju.seec.helper.vo.CourseVO;
 import nju.seec.helper.vo.UserVO;
 import org.springframework.data.domain.Pageable;

+ 1 - 1
src/main/java/nju/seec/helper/controller/CourseFileController.java

@@ -5,7 +5,7 @@ import nju.seec.helper.controller.response.PageResponse;
 import nju.seec.helper.dto.course.CourseFileDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.service.CourseFileService;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 import nju.seec.helper.vo.CourseFileVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.web.PageableDefault;

+ 1 - 1
src/main/java/nju/seec/helper/controller/MessageController.java

@@ -6,7 +6,7 @@ import nju.seec.helper.dto.message.MessageDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.entity.Message;
 import nju.seec.helper.service.MessageService;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.web.PageableDefault;
 import org.springframework.validation.annotation.Validated;

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

@@ -7,7 +7,7 @@ import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.notice.NoticeDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.service.NoticeService;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 import nju.seec.helper.vo.NoticeVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.web.PageableDefault;

+ 1 - 1
src/main/java/nju/seec/helper/controller/QuestionController.java

@@ -7,7 +7,7 @@ import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.question.BaseQuestionDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.service.QuestionService;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 import nju.seec.helper.vo.question.BaseQuestionVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.web.PageableDefault;

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

@@ -9,8 +9,8 @@ import nju.seec.helper.dto.quiz.QuizStudentAnswerDTO;
 import nju.seec.helper.aspect.auth.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.enums.QuizState;
+import nju.seec.helper.enums.UserType;
 import nju.seec.helper.vo.quiz.QuizStudentAnswerVO;
 import nju.seec.helper.vo.quiz.QuizVO;
 import org.springframework.data.domain.Pageable;

+ 1 - 1
src/main/java/nju/seec/helper/controller/ReplyController.java

@@ -4,7 +4,7 @@ import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.dto.reply.ReplyDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.service.ReplyService;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 import nju.seec.helper.vo.ReplyVO;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;

+ 1 - 1
src/main/java/nju/seec/helper/controller/SlideController.java

@@ -9,7 +9,7 @@ import nju.seec.helper.dto.slide.SlideFileDTO;
 import nju.seec.helper.dto.slide.SlideStateDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.service.SlideService;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 import nju.seec.helper.vo.SlideVO;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.web.PageableDefault;

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

@@ -1,20 +1,25 @@
 package nju.seec.helper.controller;
 
+import com.google.common.collect.ImmutableMap;
 import nju.seec.helper.aspect.auth.Auth;
+import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.groups.Modify;
 import nju.seec.helper.dto.user.LoginDTO;
-import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.dto.user.ResetPasswordDTO;
 import nju.seec.helper.dto.user.UserDTO;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.enums.UserState;
+import nju.seec.helper.enums.UserType;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.service.UserService;
 import nju.seec.helper.util.Consts;
-import nju.seec.helper.util.enums.UserType;
 import nju.seec.helper.vo.UserVO;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpSession;
+import java.util.Map;
 
 /**
  * 用户
@@ -38,6 +43,11 @@ public class UserController {
         return userService.createUser(userDTO);
     }
 
+    private static final Map<UserState, String> STATE_MESSAGE_MAP = ImmutableMap.of(
+            UserState.CHECKING, "帐号审核中",
+            UserState.LOCKED, "帐号封禁中"
+    );
+
     /**
      * 邮箱登录
      */
@@ -46,6 +56,10 @@ public class UserController {
                                HttpSession session) {
         UserVO userVO = userService.getUserByEmailAndPassword(loginDTO.getUsername(), loginDTO.getPassword());
 
+        if (userVO.getState() != UserState.NORMAL) {
+            throw HelperException.of(ExceptionType.FORBIDDEN, STATE_MESSAGE_MAP.get(userVO.getState()));
+        }
+
         LoginUser user = new LoginUser()
                 .setId(userVO.getId())
                 .setName(userVO.getName())

+ 2 - 2
src/main/java/nju/seec/helper/dao/CommentDAO.java

@@ -1,8 +1,8 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Comment;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;

+ 2 - 2
src/main/java/nju/seec/helper/dao/CourseDAO.java

@@ -1,8 +1,8 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Course;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;

+ 2 - 2
src/main/java/nju/seec/helper/dao/CourseFileDAO.java

@@ -1,8 +1,8 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.CourseFile;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;

+ 2 - 2
src/main/java/nju/seec/helper/dao/NoticeDAO.java

@@ -1,8 +1,8 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Notice;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;

+ 2 - 2
src/main/java/nju/seec/helper/dao/QuizDAO.java

@@ -2,8 +2,8 @@ package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Quiz;
 import nju.seec.helper.entity.Slide;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;

+ 2 - 2
src/main/java/nju/seec/helper/dao/ReplyDAO.java

@@ -1,8 +1,8 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Reply;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 

+ 2 - 2
src/main/java/nju/seec/helper/dao/SlideDAO.java

@@ -1,8 +1,8 @@
 package nju.seec.helper.dao;
 
 import nju.seec.helper.entity.Slide;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;

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

@@ -1,8 +1,8 @@
 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 nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;

+ 1 - 1
src/main/java/nju/seec/helper/dto/quiz/QuizDTO.java

@@ -2,7 +2,7 @@ package nju.seec.helper.dto.quiz;
 
 import lombok.Data;
 import nju.seec.helper.dto.groups.Create;
-import nju.seec.helper.util.enums.QuizType;
+import nju.seec.helper.enums.QuizType;
 import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotBlank;

+ 1 - 1
src/main/java/nju/seec/helper/dto/slide/SlideDTO.java

@@ -2,7 +2,7 @@ package nju.seec.helper.dto.slide;
 
 import lombok.Data;
 import nju.seec.helper.dto.groups.Create;
-import nju.seec.helper.util.enums.SlideState;
+import nju.seec.helper.enums.SlideState;
 import org.hibernate.validator.constraints.Length;
 import org.springframework.web.multipart.MultipartFile;
 

+ 1 - 1
src/main/java/nju/seec/helper/dto/slide/SlideStateDTO.java

@@ -1,7 +1,7 @@
 package nju.seec.helper.dto.slide;
 
 import lombok.Data;
-import nju.seec.helper.util.enums.SlideState;
+import nju.seec.helper.enums.SlideState;
 
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;

+ 1 - 1
src/main/java/nju/seec/helper/dto/user/UserDTO.java

@@ -4,7 +4,7 @@ import lombok.Data;
 import nju.seec.helper.dto.groups.Create;
 import nju.seec.helper.dto.validator.phone.Phone;
 import nju.seec.helper.dto.validator.schoolemail.SchoolEmail;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.NotBlank;

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

@@ -2,7 +2,7 @@ package nju.seec.helper.entity;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
-import nju.seec.helper.util.enums.MessageType;
+import nju.seec.helper.enums.MessageType;
 import org.hibernate.annotations.CreationTimestamp;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;

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

@@ -3,8 +3,8 @@ package nju.seec.helper.entity;
 import lombok.Data;
 import lombok.experimental.Accessors;
 import nju.seec.helper.entity.converter.ListConverter;
-import nju.seec.helper.util.enums.QuizState;
-import nju.seec.helper.util.enums.QuizType;
+import nju.seec.helper.enums.QuizState;
+import nju.seec.helper.enums.QuizType;
 import org.hibernate.annotations.CreationTimestamp;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;

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

@@ -2,7 +2,7 @@ package nju.seec.helper.entity;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
-import nju.seec.helper.util.enums.SlideState;
+import nju.seec.helper.enums.SlideState;
 import org.hibernate.annotations.CreationTimestamp;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;

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

@@ -2,7 +2,8 @@ package nju.seec.helper.entity;
 
 import lombok.Data;
 import lombok.experimental.Accessors;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserState;
+import nju.seec.helper.enums.UserType;
 import org.hibernate.annotations.CreationTimestamp;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
@@ -45,4 +46,8 @@ public class User {
     @Column(name = "create_at", updatable = false, nullable = false)
     @CreationTimestamp
     private LocalDateTime createAt;
+
+    @Enumerated(EnumType.STRING)
+    @Column(nullable = false, columnDefinition = "varchar(255) default 'NORMAL' not null")
+    private UserState state;
 }

+ 20 - 0
src/main/java/nju/seec/helper/enums/ExceptionType.java

@@ -0,0 +1,20 @@
+package nju.seec.helper.enums;
+
+import lombok.Getter;
+import org.springframework.http.HttpStatus;
+
+/**
+ * @author cst
+ */
+
+@Getter
+public enum ExceptionType {
+    // http code
+    PARAM_ERROR(HttpStatus.BAD_REQUEST), NOT_LOGIN(HttpStatus.UNAUTHORIZED), FORBIDDEN(HttpStatus.FORBIDDEN), NOT_FOUND(HttpStatus.NOT_FOUND), CONFLICT(HttpStatus.CONFLICT), ERROR(HttpStatus.INTERNAL_SERVER_ERROR);
+
+    private HttpStatus status;
+
+    ExceptionType(HttpStatus status) {
+        this.status = status;
+    }
+}

+ 27 - 0
src/main/java/nju/seec/helper/enums/MessageType.java

@@ -0,0 +1,27 @@
+package nju.seec.helper.enums;
+
+/**
+ * @author cst
+ */
+public enum MessageType {
+    /**
+     * 课件开课
+     */
+    SLIDE_IN_CLASS,
+    /**
+     * 新的评论
+     */
+    COMMENT_NEW,
+    /**
+     * 评论被老师回复
+     */
+    COMMENT_REPLY,
+    /**
+     * 新公告
+     */
+    NOTICE_NEW,
+    /**
+     * 新测试
+     */
+    QUIZ_NEW
+}

+ 39 - 0
src/main/java/nju/seec/helper/enums/QuestionType.java

@@ -0,0 +1,39 @@
+package nju.seec.helper.enums;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @author cst
+ */
+public enum QuestionType {
+    /**
+     * 单选
+     */
+    CHOICE("choice"),
+    /**
+     * 判断
+     */
+    TRUE_FALSE("true_false");
+
+    private String value;
+
+    private final static Map<String, QuestionType> VALUE_TYPE_MAP =
+            Stream.of(QuestionType.values()).collect(Collectors.toMap(QuestionType::getValue, questionType -> questionType));
+
+    QuestionType(String value) {
+        this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+        return value;
+    }
+
+    public static QuestionType getQuestionType(String value) {
+        return VALUE_TYPE_MAP.get(value);
+    }
+}

+ 53 - 0
src/main/java/nju/seec/helper/enums/QuizState.java

@@ -0,0 +1,53 @@
+package nju.seec.helper.enums;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import lombok.NonNull;
+import lombok.val;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author xst
+ * <p>
+ * updated by cst
+ */
+public enum QuizState {
+    NOT_STARTED("未开始"), ONGOING("正在进行"), CLOSED("已结束");
+    private String name;
+
+    QuizState(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    private static final Map<SlideState, Map<QuizState, Set<QuizType>>> MAP = ImmutableMap.of(
+            SlideState.DRAFT, ImmutableMap.of(NOT_STARTED, ImmutableSet.of(QuizType.BEFORE_CLASS, QuizType.IN_CLASS, QuizType.AFTER_CLASS)),
+            SlideState.BEFORE_CLASS, ImmutableMap.of(NOT_STARTED, ImmutableSet.of(QuizType.IN_CLASS, QuizType.AFTER_CLASS),
+                    ONGOING, ImmutableSet.of(QuizType.BEFORE_CLASS)),
+            SlideState.IN_CLASS, ImmutableMap.of(NOT_STARTED, ImmutableSet.of(QuizType.AFTER_CLASS),
+                    ONGOING, ImmutableSet.of(QuizType.IN_CLASS),
+                    CLOSED, ImmutableSet.of(QuizType.BEFORE_CLASS)),
+            SlideState.AFTER_CLASS, ImmutableMap.of(ONGOING, ImmutableSet.of(QuizType.AFTER_CLASS),
+                    CLOSED, ImmutableSet.of(QuizType.BEFORE_CLASS, QuizType.IN_CLASS)),
+            SlideState.FINISH, ImmutableMap.of(CLOSED, ImmutableSet.of(QuizType.BEFORE_CLASS, QuizType.IN_CLASS, QuizType.AFTER_CLASS))
+    );
+
+    public static QuizState getQuizStateBySlideStateAndQuizType(@NonNull SlideState slideState, @NonNull QuizType quizType) {
+        Map<QuizState, Set<QuizType>> map = MAP.get(slideState);
+        for (val entry : map.entrySet()) {
+            if (entry.getValue().contains(quizType)) {
+                return entry.getKey();
+            }
+        }
+        return null;
+    }
+}

+ 39 - 0
src/main/java/nju/seec/helper/enums/QuizType.java

@@ -0,0 +1,39 @@
+package nju.seec.helper.enums;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import lombok.NonNull;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author cst
+ */
+public enum QuizType {
+    /**
+     * 课前测试
+     */
+    BEFORE_CLASS,
+    /**
+     * 课中测试
+     */
+    IN_CLASS,
+    /**
+     * 课后测试
+     */
+    AFTER_CLASS;
+
+    private final static Map<SlideState, Set<QuizType>> SLIDE_QUIZ_MAP = ImmutableMap.of(
+            SlideState.DRAFT, ImmutableSet.of(BEFORE_CLASS, IN_CLASS, AFTER_CLASS),
+            SlideState.BEFORE_CLASS, ImmutableSet.of(BEFORE_CLASS, IN_CLASS, AFTER_CLASS),
+            SlideState.IN_CLASS, ImmutableSet.of(IN_CLASS, AFTER_CLASS),
+            SlideState.AFTER_CLASS, ImmutableSet.of(AFTER_CLASS),
+            SlideState.FINISH, Collections.emptySet()
+    );
+
+    public static Set<QuizType> getQuizTypesBySlideState(@NonNull SlideState slideState) {
+        return SLIDE_QUIZ_MAP.get(slideState);
+    }
+}

+ 17 - 0
src/main/java/nju/seec/helper/enums/SlideState.java

@@ -0,0 +1,17 @@
+package nju.seec.helper.enums;
+
+/**
+ * @author cst
+ */
+public enum SlideState {
+    DRAFT(1), BEFORE_CLASS(2), IN_CLASS(3), AFTER_CLASS(4), FINISH(5);
+    private Integer num;
+
+    SlideState(Integer num) {
+        this.num = num;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+}

+ 8 - 0
src/main/java/nju/seec/helper/enums/UserState.java

@@ -0,0 +1,8 @@
+package nju.seec.helper.enums;
+
+/**
+ * @author cst
+ */
+public enum UserState {
+    CHECKING, NORMAL, LOCKED
+}

+ 9 - 0
src/main/java/nju/seec/helper/enums/UserType.java

@@ -0,0 +1,9 @@
+package nju.seec.helper.enums;
+
+/**
+ * @author cst
+ */
+
+public enum UserType {
+    TEACHER, STUDENT
+}

+ 20 - 0
src/main/java/nju/seec/helper/exception/HelperException.java

@@ -0,0 +1,20 @@
+package nju.seec.helper.exception;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import nju.seec.helper.enums.ExceptionType;
+
+/**
+ * @author cst
+ */
+@Getter
+@AllArgsConstructor(staticName = "of")
+public class HelperException extends RuntimeException {
+    private final ExceptionType type;
+    private final String msg;
+
+    @Override
+    public String getMessage() {
+        return msg;
+    }
+}

+ 1 - 1
src/main/java/nju/seec/helper/service/MessageService.java

@@ -3,7 +3,7 @@ package nju.seec.helper.service;
 import nju.seec.helper.dto.message.MessageDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.entity.Message;
-import nju.seec.helper.util.enums.MessageType;
+import nju.seec.helper.enums.MessageType;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 

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

@@ -6,7 +6,7 @@ package nju.seec.helper.service;
 import nju.seec.helper.dto.quiz.QuizDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.entity.Slide;
-import nju.seec.helper.util.enums.QuizState;
+import nju.seec.helper.enums.QuizState;
 import nju.seec.helper.vo.quiz.QuizVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;

+ 1 - 1
src/main/java/nju/seec/helper/service/impl/CommentServiceImpl.java

@@ -10,7 +10,7 @@ import nju.seec.helper.entity.Slide;
 import nju.seec.helper.service.CommentService;
 import nju.seec.helper.service.MessageService;
 import nju.seec.helper.service.util.AuthUtils;
-import nju.seec.helper.util.enums.MessageType;
+import nju.seec.helper.enums.MessageType;
 import nju.seec.helper.vo.CommentVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;

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

@@ -13,8 +13,8 @@ import nju.seec.helper.service.util.AuthUtils;
 import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.OssUtils;
 import nju.seec.helper.util.RedisCacheUtils;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.vo.CourseFileVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;

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

@@ -12,8 +12,8 @@ import nju.seec.helper.service.CourseService;
 import nju.seec.helper.service.util.AuthUtils;
 import nju.seec.helper.service.util.StringUtils;
 import nju.seec.helper.util.EncryptUtils;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.vo.CourseVO;
 import nju.seec.helper.vo.UserVO;
 import org.springframework.data.domain.Page;

+ 1 - 1
src/main/java/nju/seec/helper/service/impl/MessageServiceImpl.java

@@ -5,7 +5,7 @@ import nju.seec.helper.dto.message.MessageDTO;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.entity.Message;
 import nju.seec.helper.service.MessageService;
-import nju.seec.helper.util.enums.MessageType;
+import nju.seec.helper.enums.MessageType;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.scheduling.annotation.Async;

+ 1 - 1
src/main/java/nju/seec/helper/service/impl/NoticeServiceImpl.java

@@ -11,7 +11,7 @@ import nju.seec.helper.service.MessageService;
 import nju.seec.helper.service.NoticeService;
 import nju.seec.helper.service.util.AuthUtils;
 import nju.seec.helper.service.util.StringUtils;
-import nju.seec.helper.util.enums.MessageType;
+import nju.seec.helper.enums.MessageType;
 import nju.seec.helper.vo.NoticeVO;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;

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

@@ -9,10 +9,10 @@ import nju.seec.helper.entity.QuestionRecord;
 import nju.seec.helper.entity.Quiz;
 import nju.seec.helper.service.QuestionService;
 import nju.seec.helper.util.BokUtil;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.enums.QuizState;
-import nju.seec.helper.util.enums.UserType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.enums.QuizState;
+import nju.seec.helper.enums.UserType;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.vo.question.BaseQuestionVO;
 import nju.seec.helper.vo.question.BokQuestion;
 import org.springframework.beans.factory.annotation.Autowired;

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

@@ -11,8 +11,8 @@ 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.enums.*;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.vo.quiz.QuizVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;

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

@@ -10,8 +10,8 @@ import nju.seec.helper.entity.QuizStudentAnswer;
 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.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.vo.question.BaseQuestionVO;
 import nju.seec.helper.vo.quiz.QuizStudentAnswerVO;
 import org.springframework.data.domain.Page;

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

@@ -13,9 +13,9 @@ import nju.seec.helper.entity.Slide;
 import nju.seec.helper.service.MessageService;
 import nju.seec.helper.service.ReplyService;
 import nju.seec.helper.service.util.AuthUtils;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.enums.MessageType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.enums.MessageType;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.vo.ReplyVO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

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

@@ -22,10 +22,10 @@ import nju.seec.helper.service.util.StringUtils;
 import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.OssUtils;
 import nju.seec.helper.util.RedisCacheUtils;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.enums.MessageType;
-import nju.seec.helper.util.enums.SlideState;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.enums.MessageType;
+import nju.seec.helper.enums.SlideState;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.util.file.FileInfo;
 import nju.seec.helper.util.file.FileParserContext;
 import nju.seec.helper.vo.SlideVO;

+ 6 - 3
src/main/java/nju/seec/helper/service/impl/UserServiceImpl.java

@@ -5,13 +5,15 @@ import nju.seec.helper.dao.UserDAO;
 import nju.seec.helper.dto.user.ResetPasswordDTO;
 import nju.seec.helper.dto.user.UserDTO;
 import nju.seec.helper.entity.User;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.enums.UserState;
+import nju.seec.helper.enums.UserType;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.service.UserService;
 import nju.seec.helper.service.util.AuthUtils;
 import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.EncryptUtils;
 import nju.seec.helper.util.RedisCacheUtils;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
 import nju.seec.helper.vo.UserVO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -55,7 +57,8 @@ public class UserServiceImpl implements UserService {
                 .setEmail(userDTO.getEmail())
                 .setPhone(userDTO.getPhone())
                 .setPassword(EncryptUtils.encode(userDTO.getPassword()))
-                .setType(userDTO.getType());
+                .setType(userDTO.getType())
+                .setState(userDTO.getType() == UserType.TEACHER ? UserState.CHECKING : UserState.NORMAL);
 
         user = userDAO.save(user);
         cacheUtils.remove(Consts.EMAIL_CACHE_NAME, email);

+ 2 - 2
src/main/java/nju/seec/helper/service/util/AuthUtils.java

@@ -2,8 +2,8 @@ package nju.seec.helper.service.util;
 
 import lombok.NonNull;
 import lombok.experimental.UtilityClass;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 
 /**
  * @author cst

+ 3 - 3
src/main/java/nju/seec/helper/util/BokUtil.java

@@ -9,9 +9,9 @@ import lombok.extern.slf4j.Slf4j;
 import nju.seec.helper.dto.question.BaseQuestionDTO;
 import nju.seec.helper.dto.question.ChoiceQuestionDTO;
 import nju.seec.helper.dto.question.TrueOrFalseQuestionDTO;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.enums.QuestionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.enums.QuestionType;
+import nju.seec.helper.exception.HelperException;
 import nju.seec.helper.vo.question.BokQuestion;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.Page;

+ 2 - 2
src/main/java/nju/seec/helper/util/OssUtils.java

@@ -7,8 +7,8 @@ import com.aliyun.oss.OSSException;
 import com.aliyun.oss.model.PutObjectRequest;
 import lombok.extern.slf4j.Slf4j;
 import nju.seec.helper.config.properties.OssProperties;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 

+ 2 - 2
src/main/java/nju/seec/helper/util/SmsUtils.java

@@ -10,8 +10,8 @@ import com.aliyuncs.profile.DefaultProfile;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import nju.seec.helper.config.properties.SmsProperties;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.springframework.stereotype.Component;
 
 /**

+ 2 - 2
src/main/java/nju/seec/helper/util/file/FileParserContext.java

@@ -3,8 +3,8 @@ package nju.seec.helper.util.file;
 import com.google.common.collect.ImmutableMap;
 import lombok.SneakyThrows;
 import lombok.experimental.UtilityClass;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.exception.HelperException;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.poi.hslf.usermodel.HSLFSlideShow;
 import org.apache.poi.xslf.usermodel.XMLSlideShow;

+ 1 - 1
src/main/java/nju/seec/helper/vo/CommentVO.java

@@ -3,7 +3,7 @@ package nju.seec.helper.vo;
 import lombok.Data;
 import lombok.NonNull;
 import nju.seec.helper.entity.Comment;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserType;
 
 import java.time.LocalDateTime;
 

+ 1 - 1
src/main/java/nju/seec/helper/vo/SlideVO.java

@@ -3,7 +3,7 @@ package nju.seec.helper.vo;
 import lombok.Data;
 import lombok.NonNull;
 import nju.seec.helper.entity.Slide;
-import nju.seec.helper.util.enums.SlideState;
+import nju.seec.helper.enums.SlideState;
 
 import java.time.LocalDateTime;
 

+ 6 - 1
src/main/java/nju/seec/helper/vo/UserVO.java

@@ -3,7 +3,8 @@ package nju.seec.helper.vo;
 import lombok.Data;
 import lombok.NonNull;
 import nju.seec.helper.entity.User;
-import nju.seec.helper.util.enums.UserType;
+import nju.seec.helper.enums.UserState;
+import nju.seec.helper.enums.UserType;
 
 import java.time.LocalDateTime;
 
@@ -19,6 +20,8 @@ public class UserVO {
     private UserType type;
     private LocalDateTime createAt;
 
+    private UserState state;
+
     public UserVO(@NonNull User user) {
         this.id = user.getId();
         this.name = user.getName();
@@ -26,5 +29,7 @@ public class UserVO {
         this.phone = user.getPhone();
         this.type = user.getType();
         this.createAt = user.getCreateAt();
+
+        this.state = user.getState();
     }
 }

+ 3 - 3
src/main/java/nju/seec/helper/vo/question/BaseQuestionVO.java

@@ -2,9 +2,9 @@ package nju.seec.helper.vo.question;
 
 import lombok.Data;
 import lombok.NonNull;
-import nju.seec.helper.util.enums.ExceptionType;
-import nju.seec.helper.util.enums.QuestionType;
-import nju.seec.helper.util.exception.HelperException;
+import nju.seec.helper.enums.ExceptionType;
+import nju.seec.helper.enums.QuestionType;
+import nju.seec.helper.exception.HelperException;
 
 import java.util.Date;
 import java.util.Set;

+ 1 - 1
src/main/java/nju/seec/helper/vo/question/ChoiceQuestionVO.java

@@ -3,7 +3,7 @@ package nju.seec.helper.vo.question;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
-import nju.seec.helper.util.enums.QuestionType;
+import nju.seec.helper.enums.QuestionType;
 
 import java.util.Map;
 

+ 1 - 1
src/main/java/nju/seec/helper/vo/question/TrueOrFalseQuestionVO.java

@@ -3,7 +3,7 @@ package nju.seec.helper.vo.question;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NonNull;
-import nju.seec.helper.util.enums.QuestionType;
+import nju.seec.helper.enums.QuestionType;
 
 /**
  * @author xst

+ 2 - 2
src/main/java/nju/seec/helper/vo/quiz/QuizVO.java

@@ -3,8 +3,8 @@ package nju.seec.helper.vo.quiz;
 
 import lombok.*;
 import nju.seec.helper.entity.Quiz;
-import nju.seec.helper.util.enums.QuizState;
-import nju.seec.helper.util.enums.QuizType;
+import nju.seec.helper.enums.QuizState;
+import nju.seec.helper.enums.QuizType;
 
 import java.time.LocalDateTime;