Переглянути джерело

update: 超级用户身份相关

Arsekl 4 роки тому
батько
коміт
edd6fe941c
14 змінених файлів з 438 додано та 429 видалено
  1. 1 1
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/SuperState.java
  2. 113 115
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/SuperVO.java
  3. 6 1
      seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/UserRole.java
  4. 133 134
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/Super.java
  5. 6 6
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/User.java
  6. 5 5
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/mapper/UserMapper.java
  7. 6 6
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/SuperRepository.java
  8. 73 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/SuperService.java
  9. 0 73
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/TeacherService.java
  10. 17 17
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/AdminController.java
  11. 64 0
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/SuperController.java
  12. 0 66
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/TeacherController.java
  13. 12 3
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/UserJWTController.java
  14. 2 2
      seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/errors/CustomErrorException.java

+ 1 - 1
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/TeacherState.java → seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/SuperState.java

@@ -3,7 +3,7 @@ package cn.seecoder.seecoderportalcommon.vo;
 /**
  * @author kunduin
  */
-public enum TeacherState {
+public enum SuperState {
     /**
      * 已提交审核
      */

+ 113 - 115
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/TeacherVO.java → seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/SuperVO.java

@@ -1,115 +1,113 @@
-package cn.seecoder.seecoderportalcommon.vo;
-
-import org.springframework.data.annotation.CreatedDate;
-
-import java.time.OffsetDateTime;
-
-/**
- * @author kunduin
- */
-public class TeacherVO {
-    private Long id;
-
-    private String realName;
-
-    private String organization;
-
-    private String jobNumber;
-
-    private String certificate;
-
-    private UserVO userDetail;
-
-    private OffsetDateTime createdTime;
-
-    private TeacherState state;
-
-    private UserRole role;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getRealName() {
-        return realName;
-    }
-
-    public void setRealName(String realName) {
-        this.realName = realName;
-    }
-
-    public String getOrganization() {
-        return organization;
-    }
-
-    public void setOrganization(String organization) {
-        this.organization = organization;
-    }
-
-    public String getJobNumber() {
-        return jobNumber;
-    }
-
-    public void setJobNumber(String jobNumber) {
-        this.jobNumber = jobNumber;
-    }
-
-    public String getCertificate() {
-        return certificate;
-    }
-
-    public void setCertificate(String certificate) {
-        this.certificate = certificate;
-    }
-
-    public UserVO getUserDetail() {
-        return userDetail;
-    }
-
-    public void setUserDetail(UserVO userDetail) {
-        this.userDetail = userDetail;
-    }
-
-    public OffsetDateTime getCreatedTime() {
-        return createdTime;
-    }
-
-    public void setCreatedTime(OffsetDateTime createdTime) {
-        this.createdTime = createdTime;
-    }
-
-    public TeacherState getState() {
-        return state;
-    }
-
-    public void setState(TeacherState state) {
-        this.state = state;
-    }
-
-    public UserRole getRole() {
-        return role;
-    }
-
-    public void setRole(UserRole role) {
-        this.role = role;
-    }
-
-    @Override
-    public String toString() {
-        return "TeacherVO{" +
-                "id=" + id +
-                ", realName='" + realName + '\'' +
-                ", organization='" + organization + '\'' +
-                ", jobNumber='" + jobNumber + '\'' +
-                ", certificate='" + certificate + '\'' +
-                ", userDetail=" + userDetail +
-                ", createdTime=" + createdTime +
-                ", state=" + state +
-                ", role=" + role +
-                '}';
-    }
-}
+package cn.seecoder.seecoderportalcommon.vo;
+
+import java.time.OffsetDateTime;
+
+/**
+ * @author kunduin
+ */
+public class SuperVO {
+    private Long id;
+
+    private String realName;
+
+    private String organization;
+
+    private String jobNumber;
+
+    private String certificate;
+
+    private UserVO userDetail;
+
+    private OffsetDateTime createdTime;
+
+    private SuperState state;
+
+    private UserRole role;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getOrganization() {
+        return organization;
+    }
+
+    public void setOrganization(String organization) {
+        this.organization = organization;
+    }
+
+    public String getJobNumber() {
+        return jobNumber;
+    }
+
+    public void setJobNumber(String jobNumber) {
+        this.jobNumber = jobNumber;
+    }
+
+    public String getCertificate() {
+        return certificate;
+    }
+
+    public void setCertificate(String certificate) {
+        this.certificate = certificate;
+    }
+
+    public UserVO getUserDetail() {
+        return userDetail;
+    }
+
+    public void setUserDetail(UserVO userDetail) {
+        this.userDetail = userDetail;
+    }
+
+    public OffsetDateTime getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(OffsetDateTime createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public SuperState getState() {
+        return state;
+    }
+
+    public void setState(SuperState state) {
+        this.state = state;
+    }
+
+    public UserRole getRole() {
+        return role;
+    }
+
+    public void setRole(UserRole role) {
+        this.role = role;
+    }
+
+    @Override
+    public String toString() {
+        return "SuperVO{" +
+                "id=" + id +
+                ", realName='" + realName + '\'' +
+                ", organization='" + organization + '\'' +
+                ", jobNumber='" + jobNumber + '\'' +
+                ", certificate='" + certificate + '\'' +
+                ", userDetail=" + userDetail +
+                ", createdTime=" + createdTime +
+                ", state=" + state +
+                ", role=" + role +
+                '}';
+    }
+}

+ 6 - 1
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/UserRole.java

@@ -30,7 +30,12 @@ public enum UserRole {
     /**
      * HR身份
      */
-    HR("HR");
+    HR("HR"),
+
+    /**
+     * Super身份(Teacher or HR or Staff)
+     */
+    SUPER("SUPER");
 
     private final String role;
 

+ 133 - 134
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/Teacher.java → seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/Super.java

@@ -1,134 +1,133 @@
-package cn.seecoder.seecoderportalserver.domain;
-
-import cn.seecoder.seecoderportalcommon.vo.TeacherState;
-import cn.seecoder.seecoderportalcommon.vo.UserRole;
-import org.hibernate.annotations.CreationTimestamp;
-import org.springframework.data.annotation.CreatedDate;
-
-import javax.persistence.*;
-import java.time.OffsetDateTime;
-
-/**
- * @author Kunduin
- */
-@Entity(name = "teacher")
-@Table(name = "teacher")
-public class Teacher {
-    @Id
-    @GeneratedValue(strategy = GenerationType.AUTO)
-    private Long id;
-
-    @Column(length = 64, nullable = false)
-    private String realName;
-
-    @Column(length = 64, nullable = false)
-    private String organization = "南京大学";
-
-    @Column(length = 64, nullable = false)
-    private String jobNumber;
-
-    @Column(length = 512)
-    private String certificate = "";
-
-    @OneToOne(fetch = FetchType.EAGER)
-    @JoinColumn(name = "uid", nullable = false)
-    private User userDetail;
-
-    @Column(nullable = false)
-    @CreationTimestamp
-    private OffsetDateTime createdTime;
-
-    @Column(nullable = false)
-    @Enumerated(EnumType.STRING)
-    private TeacherState state = TeacherState.IDENTIFYING;
-
-    @Column(nullable = false)
-    private UserRole role;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getRealName() {
-        return realName;
-    }
-
-    public void setRealName(String realName) {
-        this.realName = realName;
-    }
-
-    public String getOrganization() {
-        return organization;
-    }
-
-    public void setOrganization(String organization) {
-        this.organization = organization;
-    }
-
-    public String getJobNumber() {
-        return jobNumber;
-    }
-
-    public void setJobNumber(String jobNumber) {
-        this.jobNumber = jobNumber;
-    }
-
-    public String getCertificate() {
-        return certificate;
-    }
-
-    public void setCertificate(String certificate) {
-        this.certificate = certificate;
-    }
-
-    public User getUserDetail() {
-        return userDetail;
-    }
-
-    public void setUserDetail(User userDetail) {
-        this.userDetail = userDetail;
-    }
-
-    public OffsetDateTime getCreatedTime() {
-        return createdTime;
-    }
-
-    public void setCreatedTime(OffsetDateTime createdTime) {
-        this.createdTime = createdTime;
-    }
-
-    public TeacherState getState() {
-        return state;
-    }
-
-    public void setState(TeacherState state) {
-        this.state = state;
-    }
-
-    public UserRole getRole() {
-        return role;
-    }
-
-    public void setRole(UserRole role) {
-        this.role = role;
-    }
-
-    @Override
-    public String toString() {
-        return "Teacher{" +
-                "id=" + id +
-                ", realName='" + realName + '\'' +
-                ", organization='" + organization + '\'' +
-                ", jobNumber='" + jobNumber + '\'' +
-                ", certificate='" + certificate + '\'' +
-                ", userDetail=" + userDetail +
-                ", createdTime=" + createdTime +
-                ", state=" + state +
-                ", role=" + role +
-                '}';
-    }
-}
+package cn.seecoder.seecoderportalserver.domain;
+
+import cn.seecoder.seecoderportalcommon.vo.SuperState;
+import cn.seecoder.seecoderportalcommon.vo.UserRole;
+import org.hibernate.annotations.CreationTimestamp;
+
+import javax.persistence.*;
+import java.time.OffsetDateTime;
+
+/**
+ * @author Kunduin
+ */
+@Entity(name = "teacher")
+@Table(name = "super")
+public class Super {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private Long id;
+
+    @Column(length = 64, nullable = false)
+    private String realName;
+
+    @Column(length = 64, nullable = false)
+    private String organization = "南京大学";
+
+    @Column(length = 64, nullable = false)
+    private String jobNumber;
+
+    @Column(length = 512)
+    private String certificate = "";
+
+    @OneToOne(fetch = FetchType.EAGER)
+    @JoinColumn(name = "uid", nullable = false)
+    private User userDetail;
+
+    @Column(nullable = false)
+    @CreationTimestamp
+    private OffsetDateTime createdTime;
+
+    @Column(nullable = false)
+    @Enumerated(EnumType.STRING)
+    private SuperState state = SuperState.IDENTIFYING;
+
+    @Column(nullable = false)
+    private UserRole role;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getOrganization() {
+        return organization;
+    }
+
+    public void setOrganization(String organization) {
+        this.organization = organization;
+    }
+
+    public String getJobNumber() {
+        return jobNumber;
+    }
+
+    public void setJobNumber(String jobNumber) {
+        this.jobNumber = jobNumber;
+    }
+
+    public String getCertificate() {
+        return certificate;
+    }
+
+    public void setCertificate(String certificate) {
+        this.certificate = certificate;
+    }
+
+    public User getUserDetail() {
+        return userDetail;
+    }
+
+    public void setUserDetail(User userDetail) {
+        this.userDetail = userDetail;
+    }
+
+    public OffsetDateTime getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(OffsetDateTime createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public SuperState getState() {
+        return state;
+    }
+
+    public void setState(SuperState state) {
+        this.state = state;
+    }
+
+    public UserRole getRole() {
+        return role;
+    }
+
+    public void setRole(UserRole role) {
+        this.role = role;
+    }
+
+    @Override
+    public String toString() {
+        return "Super{" +
+                "id=" + id +
+                ", realName='" + realName + '\'' +
+                ", organization='" + organization + '\'' +
+                ", jobNumber='" + jobNumber + '\'' +
+                ", certificate='" + certificate + '\'' +
+                ", userDetail=" + userDetail +
+                ", createdTime=" + createdTime +
+                ", state=" + state +
+                ", role=" + role +
+                '}';
+    }
+}

+ 6 - 6
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/User.java

@@ -70,7 +70,7 @@ public class User {
             fetch = FetchType.LAZY,
             orphanRemoval = true
     )
-    private Teacher teacherInfo;
+    private Super superInfo;
 
     @Column
     @CreationTimestamp
@@ -159,12 +159,12 @@ public class User {
         isValid = valid;
     }
 
-    public Teacher getTeacherInfo() {
-        return teacherInfo;
+    public Super getSuperInfo() {
+        return superInfo;
     }
 
-    public void setTeacherInfo(Teacher teacherInfo) {
-        this.teacherInfo = teacherInfo;
+    public void setSuperInfo(Super superInfo) {
+        this.superInfo = superInfo;
     }
 
     public String getUsername() {
@@ -187,7 +187,7 @@ public class User {
                 ", photo='" + photo + '\'' +
                 ", role=" + role +
                 ", signature='" + signature + '\'' +
-                ", teacherInfo=" + teacherInfo +
+                ", superInfo=" + superInfo +
                 ", createdTime=" + createdTime +
                 ", isValid=" + isValid +
                 '}';

+ 5 - 5
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/mapper/UserMapper.java

@@ -1,8 +1,8 @@
 package cn.seecoder.seecoderportalserver.mapper;
 
-import cn.seecoder.seecoderportalcommon.vo.TeacherVO;
+import cn.seecoder.seecoderportalcommon.vo.SuperVO;
 import cn.seecoder.seecoderportalcommon.vo.UserVO;
-import cn.seecoder.seecoderportalserver.domain.Teacher;
+import cn.seecoder.seecoderportalserver.domain.Super;
 import cn.seecoder.seecoderportalserver.domain.User;
 import cn.seecoder.seecoderportalserver.security.DomainUserDetails;
 import org.mapstruct.Mapper;
@@ -14,7 +14,7 @@ import org.mapstruct.Mapping;
 @Mapper(componentModel = "spring")
 public interface UserMapper {
 
-    @Mapping(target = "teacherInfo", ignore = true)
+    @Mapping(target = "superInfo", ignore = true)
     User userVOToUser(UserVO userVO);
 
     UserVO userToUserVO(User user);
@@ -28,7 +28,7 @@ public interface UserMapper {
     @Deprecated
     UserVO domainUserDetailToUserVO(DomainUserDetails userDetails);
 
-    TeacherVO teacherToTeacherVO(Teacher teacher);
+    SuperVO superToSuperVO(Super superRole);
 
-    Teacher teacherVOToTeacher(TeacherVO teacherVO);
+    Super superVOToSuper(SuperVO superVO);
 }

+ 6 - 6
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/TeacherRepository.java → seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/SuperRepository.java

@@ -1,7 +1,7 @@
 package cn.seecoder.seecoderportalserver.repository;
 
-import cn.seecoder.seecoderportalcommon.vo.TeacherState;
-import cn.seecoder.seecoderportalserver.domain.Teacher;
+import cn.seecoder.seecoderportalcommon.vo.SuperState;
+import cn.seecoder.seecoderportalserver.domain.Super;
 import cn.seecoder.seecoderportalserver.domain.User;
 import org.springframework.data.jpa.repository.JpaRepository;
 
@@ -11,15 +11,15 @@ import java.util.Optional;
 /**
  * @author kunduin
  */
-public interface TeacherRepository extends JpaRepository<Teacher, Long> {
+public interface SuperRepository extends JpaRepository<Super, Long> {
 
     /**
      * 通过审核状态查找教师
      *
      * @param state 状态
-     * @return 教师列表
+     * @return 超级用户列表
      */
-    List<Teacher> findAllByState(TeacherState state);
+    List<Super> findAllByState(SuperState state);
 
-    Optional<Teacher> findByUserDetail(User user);
+    Optional<Super> findByUserDetail(User user);
 }

+ 73 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/SuperService.java

@@ -0,0 +1,73 @@
+package cn.seecoder.seecoderportalserver.service;
+
+import cn.seecoder.seecoderportalcommon.vo.SuperState;
+import cn.seecoder.seecoderportalserver.domain.Super;
+import cn.seecoder.seecoderportalserver.domain.User;
+import cn.seecoder.seecoderportalserver.repository.SuperRepository;
+import cn.seecoder.seecoderportalserver.repository.UserRepository;
+import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Optional;
+
+import static cn.seecoder.seecoderportalcommon.vo.SuperState.IDENTIFIED;
+import static cn.seecoder.seecoderportalcommon.vo.UserRole.SUPER;
+
+/**
+ * @author kunduin
+ */
+@Service
+public class SuperService {
+
+    private final SuperRepository superRepository;
+
+    private final UserRepository userRepository;
+
+    public SuperService(SuperRepository superRepository, UserRepository userRepository) {
+        this.superRepository = superRepository;
+        this.userRepository = userRepository;
+    }
+
+    public List<Super> findAllByState(SuperState state) {
+        return superRepository.findAllByState(state);
+    }
+
+    @Transactional(rollbackFor = RuntimeException.class)
+    public Super updateState(Long id, SuperState state) {
+        return superRepository.findById(id)
+                .map(teacher -> {
+                    teacher.setState(state);
+
+                    User user1=teacher.getUserDetail();
+                    Long uid=user1.getId();
+                    if (state==IDENTIFIED){
+                        userRepository.findById(uid).map(user -> {
+                            user.setRole(SUPER);
+                            return userRepository.save(user);
+                        }).orElseThrow(CustomErrorException::userIdNotFound);
+                    }
+                    return superRepository.save(teacher);
+                }).orElseThrow(CustomErrorException::userIdNotFound);
+    }
+
+    public Optional<Super> findByUserId(Long userId) {
+        return userRepository.findById(userId)
+                .map(user -> Optional.ofNullable(user.getSuperInfo()))
+                .orElseThrow(CustomErrorException::userIdNotFound);
+    }
+
+    public Super apply(Super superRole) {
+        superRole.setState(SuperState.IDENTIFYING);
+        return createSuperRole(superRole);
+    }
+
+    public Super createSuperRole(Super superRole) {
+        return superRepository.save(superRole);
+    }
+
+    public Super save(Super superRole) {
+        return superRepository.save(superRole);
+    }
+}

+ 0 - 73
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/TeacherService.java

@@ -1,73 +0,0 @@
-package cn.seecoder.seecoderportalserver.service;
-
-import cn.seecoder.seecoderportalcommon.vo.TeacherState;
-import cn.seecoder.seecoderportalserver.domain.Teacher;
-import cn.seecoder.seecoderportalserver.domain.User;
-import cn.seecoder.seecoderportalserver.repository.TeacherRepository;
-import cn.seecoder.seecoderportalserver.repository.UserRepository;
-import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Optional;
-
-import static cn.seecoder.seecoderportalcommon.vo.TeacherState.IDENTIFIED;
-import static cn.seecoder.seecoderportalcommon.vo.UserRole.TEACHER;
-
-/**
- * @author kunduin
- */
-@Service
-public class TeacherService {
-
-    private final TeacherRepository teacherRepository;
-
-    private final UserRepository userRepository;
-
-    public TeacherService(TeacherRepository teacherRepository, UserRepository userRepository) {
-        this.teacherRepository = teacherRepository;
-        this.userRepository = userRepository;
-    }
-
-    public List<Teacher> findAllByState(TeacherState state) {
-        return teacherRepository.findAllByState(state);
-    }
-
-    @Transactional(rollbackFor = RuntimeException.class)
-    public Teacher updateState(Long id, TeacherState state) {
-        return teacherRepository.findById(id)
-                .map(teacher -> {
-                    teacher.setState(state);
-
-                    User user1=teacher.getUserDetail();
-                    Long uid=user1.getId();
-                    if (state==IDENTIFIED){
-                        userRepository.findById(uid).map(user -> {
-                            user.setRole(TEACHER);
-                            return userRepository.save(user);
-                        }).orElseThrow(CustomErrorException::userIdNotFound);
-                    }
-                    return teacherRepository.save(teacher);
-                }).orElseThrow(CustomErrorException::userIdNotFound);
-    }
-
-    public Optional<Teacher> findByUserId(Long userId) {
-        return userRepository.findById(userId)
-                .map(user -> Optional.ofNullable(user.getTeacherInfo()))
-                .orElseThrow(CustomErrorException::userIdNotFound);
-    }
-
-    public Teacher apply(Teacher teacher) {
-        teacher.setState(TeacherState.IDENTIFYING);
-        return createTeacher(teacher);
-    }
-
-    public Teacher createTeacher(Teacher teacher) {
-        return teacherRepository.save(teacher);
-    }
-
-    public Teacher save(Teacher teacher) {
-        return teacherRepository.save(teacher);
-    }
-}

+ 17 - 17
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/AdminController.java

@@ -1,11 +1,11 @@
 package cn.seecoder.seecoderportalserver.web.rest;
 
-import cn.seecoder.seecoderportalcommon.vo.TeacherState;
-import cn.seecoder.seecoderportalcommon.vo.TeacherVO;
+import cn.seecoder.seecoderportalcommon.vo.SuperState;
+import cn.seecoder.seecoderportalcommon.vo.SuperVO;
 import cn.seecoder.seecoderportalcommon.vo.UserRole;
 import cn.seecoder.seecoderportalcommon.vo.UserVO;
 import cn.seecoder.seecoderportalserver.mapper.UserMapper;
-import cn.seecoder.seecoderportalserver.service.TeacherService;
+import cn.seecoder.seecoderportalserver.service.SuperService;
 import cn.seecoder.seecoderportalserver.service.UserService;
 import cn.seecoder.seecoderportalserver.utility.OkResponse;
 import cn.seecoder.seecoderportalcommon.vo.dto.UpdateUserByIdDTO;
@@ -22,12 +22,12 @@ import java.util.stream.Collectors;
 @RequestMapping("/api/admin")
 public class AdminController {
 
-    private final TeacherService teacherService;
+    private final SuperService superService;
     private final UserService userService;
     private final UserMapper userMapper;
 
-    public AdminController(TeacherService teacherService, UserService userService, UserMapper userMapper) {
-        this.teacherService = teacherService;
+    public AdminController(SuperService superService, UserService userService, UserMapper userMapper) {
+        this.superService = superService;
         this.userService = userService;
         this.userMapper = userMapper;
     }
@@ -36,9 +36,9 @@ public class AdminController {
      * 获取待审批的用户列表
      */
     @GetMapping("/getApplication")
-    public OkResponse<List<TeacherVO>> getApplication() {
-        return OkResponse.of(teacherService.findAllByState(TeacherState.IDENTIFYING).stream()
-                .map(userMapper::teacherToTeacherVO)
+    public OkResponse<List<SuperVO>> getApplication() {
+        return OkResponse.of(superService.findAllByState(SuperState.IDENTIFYING).stream()
+                .map(userMapper::superToSuperVO)
                 .collect(Collectors.toList()));
     }
 
@@ -62,23 +62,23 @@ public class AdminController {
     }
 
     /**
-     * 使该【教师】通过审核
+     * 使该【超级用户】通过审核
      */
     @PostMapping("/passApplication")
-    public OkResponse<TeacherVO> passApplication(@RequestBody UpdateUserByIdDTO idDTO) {
-        return OkResponse.of(userMapper.teacherToTeacherVO(
-                teacherService.updateState(idDTO.getId(), TeacherState.IDENTIFIED)
+    public OkResponse<SuperVO> passApplication(@RequestBody UpdateUserByIdDTO idDTO) {
+        return OkResponse.of(userMapper.superToSuperVO(
+                superService.updateState(idDTO.getId(), SuperState.IDENTIFIED)
         ));
     }
 
 
     /**
-     * 使该【教师】不通过审核
+     * 使该【超级用户】不通过审核
      */
     @PostMapping("/rejectApplication")
-    public OkResponse<TeacherVO> rejectApplication(@RequestBody UpdateUserByIdDTO idDTO) {
-        return OkResponse.of(userMapper.teacherToTeacherVO(
-                teacherService.updateState(idDTO.getId(), TeacherState.REJECTED)
+    public OkResponse<SuperVO> rejectApplication(@RequestBody UpdateUserByIdDTO idDTO) {
+        return OkResponse.of(userMapper.superToSuperVO(
+                superService.updateState(idDTO.getId(), SuperState.REJECTED)
         ));
     }
 }

+ 64 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/SuperController.java

@@ -0,0 +1,64 @@
+package cn.seecoder.seecoderportalserver.web.rest;
+
+import cn.seecoder.seecoderportalcommon.vo.SuperVO;
+import cn.seecoder.seecoderportalcommon.vo.SuperState;
+import cn.seecoder.seecoderportalserver.domain.Super;
+import cn.seecoder.seecoderportalserver.mapper.UserMapper;
+import cn.seecoder.seecoderportalserver.security.DomainUserDetails;
+import cn.seecoder.seecoderportalserver.security.SecurityUtils;
+import cn.seecoder.seecoderportalserver.service.SuperService;
+import cn.seecoder.seecoderportalserver.utility.OkResponse;
+import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author kunduin
+ */
+@RestController
+@RequestMapping("/api/super")
+public class SuperController {
+    private final SuperService superService;
+    private final UserMapper userMapper;
+
+    public SuperController(SuperService superService, UserMapper userMapper) {
+        this.superService = superService;
+        this.userMapper = userMapper;
+    }
+
+    @GetMapping("/getInfo")
+    public OkResponse<SuperVO> getInfo() {
+        DomainUserDetails user = SecurityUtils.getCurrentUser();
+        return superService.findByUserId(user.getId())
+                .map(teacher -> OkResponse.of(userMapper.superToSuperVO(teacher)))
+                .orElseThrow(CustomErrorException::superRoleNotFound);
+    }
+
+    /**
+     * 申请超级用户权限
+     */
+    @PostMapping("/apply")
+    public OkResponse<Boolean> apply(@RequestBody SuperVO superVO) {
+        DomainUserDetails user = SecurityUtils.getCurrentUser();
+        Super superRole = userMapper.superVOToSuper(superVO);
+        superRole.setUserDetail(userMapper.domainToUser(user));
+        superService.apply(superRole);
+        return OkResponse.of(true);
+    }
+
+    /**
+     * 重新申请超级用户权限
+     */
+    @PostMapping("/reapply")
+    public OkResponse<Boolean> reapply(@RequestBody SuperVO superVO) {
+        DomainUserDetails user = SecurityUtils.getCurrentUser();
+        return superService.findByUserId(user.getId())
+                .map(teacher -> {
+                    teacher.setState(SuperState.IDENTIFYING);
+                    teacher.setRealName(superVO.getRealName());
+                    teacher.setJobNumber(superVO.getJobNumber());
+                    teacher.setOrganization(superVO.getOrganization());
+                    superService.save(teacher);
+                    return OkResponse.of(true);
+                }).orElseThrow(CustomErrorException::superRoleNotFound);
+    }
+}

+ 0 - 66
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/TeacherController.java

@@ -1,66 +0,0 @@
-package cn.seecoder.seecoderportalserver.web.rest;
-
-import cn.seecoder.seecoderportalcommon.vo.TeacherState;
-import cn.seecoder.seecoderportalcommon.vo.TeacherVO;
-import cn.seecoder.seecoderportalserver.domain.Teacher;
-import cn.seecoder.seecoderportalserver.mapper.UserMapper;
-import cn.seecoder.seecoderportalserver.security.DomainUserDetails;
-import cn.seecoder.seecoderportalserver.security.SecurityUtils;
-import cn.seecoder.seecoderportalserver.service.TeacherService;
-import cn.seecoder.seecoderportalserver.utility.OkResponse;
-import cn.seecoder.seecoderportalserver.web.rest.errors.CustomErrorException;
-import org.springframework.web.bind.annotation.*;
-
-import java.security.Principal;
-
-/**
- * @author kunduin
- */
-@RestController
-@RequestMapping("/api/teacher")
-public class TeacherController {
-    private final TeacherService teacherService;
-    private final UserMapper userMapper;
-
-    public TeacherController(TeacherService teacherService, UserMapper userMapper) {
-        this.teacherService = teacherService;
-        this.userMapper = userMapper;
-    }
-
-    @GetMapping("/getInfo")
-    public OkResponse<TeacherVO> getInfo() {
-        DomainUserDetails user = SecurityUtils.getCurrentUser();
-        return teacherService.findByUserId(user.getId())
-                .map(teacher -> OkResponse.of(userMapper.teacherToTeacherVO(teacher)))
-                .orElseThrow(CustomErrorException::teacherNotFound);
-    }
-
-    /**
-     * 申请教师权限
-     */
-    @PostMapping("/apply")
-    public OkResponse<Boolean> apply(@RequestBody TeacherVO teacherVO) {
-        DomainUserDetails user = SecurityUtils.getCurrentUser();
-        Teacher teacher = userMapper.teacherVOToTeacher(teacherVO);
-        teacher.setUserDetail(userMapper.domainToUser(user));
-        teacherService.apply(teacher);
-        return OkResponse.of(true);
-    }
-
-    /**
-     * 重新申请教师权限
-     */
-    @PostMapping("/reapply")
-    public OkResponse<Boolean> reapply(@RequestBody TeacherVO teacherVO) {
-        DomainUserDetails user = SecurityUtils.getCurrentUser();
-        return teacherService.findByUserId(user.getId())
-                .map(teacher -> {
-                    teacher.setState(TeacherState.IDENTIFYING);
-                    teacher.setRealName(teacherVO.getRealName());
-                    teacher.setJobNumber(teacherVO.getJobNumber());
-                    teacher.setOrganization(teacherVO.getOrganization());
-                    teacherService.save(teacher);
-                    return OkResponse.of(true);
-                }).orElseThrow(CustomErrorException::teacherNotFound);
-    }
-}

+ 12 - 3
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/UserJWTController.java

@@ -2,10 +2,13 @@ package cn.seecoder.seecoderportalserver.web.rest;
 
 import cn.seecoder.seecoderportalcommon.vo.LoginVO;
 import cn.seecoder.seecoderportalcommon.vo.TokenVO;
+import cn.seecoder.seecoderportalcommon.vo.UserRole;
+import cn.seecoder.seecoderportalcommon.vo.UserVO;
 import cn.seecoder.seecoderportalserver.mapper.UserMapper;
 import cn.seecoder.seecoderportalserver.security.DomainUserDetails;
 import cn.seecoder.seecoderportalserver.security.SecurityUtils;
 import cn.seecoder.seecoderportalserver.security.jwt.TokenProvider;
+import cn.seecoder.seecoderportalserver.service.SuperService;
 import cn.seecoder.seecoderportalserver.utility.OkResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -15,7 +18,6 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 
@@ -39,12 +41,15 @@ public class UserJWTController {
 
     private final UserMapper userMapper;
 
+    private final SuperService superService;
+
     public UserJWTController(
             TokenProvider tokenProvider,
-            AuthenticationManagerBuilder authenticationManagerBuilder, UserMapper userMapper) {
+            AuthenticationManagerBuilder authenticationManagerBuilder, UserMapper userMapper, SuperService superService) {
         this.tokenProvider = tokenProvider;
         this.authenticationManagerBuilder = authenticationManagerBuilder;
         this.userMapper = userMapper;
+        this.superService = superService;
     }
 
     @PostMapping("/user/login")
@@ -65,7 +70,11 @@ public class UserJWTController {
         tokenVO.setRedirectUri(redirectUri);
         DomainUserDetails currentUser = SecurityUtils.getCurrentUser();
         tokenVO.setName(currentUser.getName());
-        tokenVO.setUser(userMapper.domainToUserVO(currentUser));
+        UserVO userVO = userMapper.domainToUserVO(currentUser);
+        if (userVO.getRole().equals(UserRole.SUPER)) {
+            userVO.setRole(superService.findByUserId(currentUser.getId()).get().getRole());
+        }
+        tokenVO.setUser(userVO);
         return OkResponse.of(tokenVO);
     }
 }

+ 2 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/errors/CustomErrorException.java

@@ -28,8 +28,8 @@ public class CustomErrorException extends RuntimeException {
         return new CustomErrorException("用户id不存在");
     }
 
-    public static CustomErrorException teacherNotFound() {
-        return new CustomErrorException("教师或申请不存在");
+    public static CustomErrorException superRoleNotFound() {
+        return new CustomErrorException("超级用户或申请不存在");
     }
 
     public static CustomErrorException phoneVerificationNotMatch() {