From c50e176c4a6b9331d2d1c0520bafb18f54f0dee6 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期五, 08 三月 2024 17:35:10 +0800
Subject: [PATCH] 部门增加管理员
---
src/main/java/com/mindskip/xzs/domain/enums/DeptAdminEnum.java | 23 ++++
src/main/java/com/mindskip/xzs/domain/enums/RoleEnum.java | 3
src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java | 26 ++--
src/main/resources/mapper/DepartmentMapper.xml | 9 +
src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java | 3
src/main/java/com/mindskip/xzs/domain/User.java | 158 +------------------------------
src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java | 45 +++++++-
src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java | 2
src/main/java/com/mindskip/xzs/domain/vo/UpdateDeptAdminVO.java | 2
src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java | 2
src/main/java/com/mindskip/xzs/repository/UserMapper.java | 7 +
src/main/resources/mapper/UserMapper.xml | 14 ++
12 files changed, 116 insertions(+), 178 deletions(-)
diff --git a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java
index 495d408..fd508d2 100644
--- a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java
+++ b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java
@@ -2,10 +2,13 @@
import com.mindskip.xzs.context.WebContext;
+import com.mindskip.xzs.domain.enums.DeptAdminEnum;
import com.mindskip.xzs.domain.enums.RoleEnum;
import com.mindskip.xzs.domain.enums.UserStatusEnum;
+import com.mindskip.xzs.repository.DepartmentMapper;
import com.mindskip.xzs.service.AuthenticationService;
import com.mindskip.xzs.service.UserService;
+import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException;
@@ -29,25 +32,13 @@
* @date 2021/12/25 9:45
*/
@Component
+@RequiredArgsConstructor
public class RestAuthenticationProvider implements AuthenticationProvider {
private final AuthenticationService authenticationService;
private final UserService userService;
private final WebContext webContext;
-
- /**
- * Instantiates a new Rest authentication provider.
- *
- * @param authenticationService the authentication service
- * @param userService the user service
- * @param webContext the web context
- */
- @Autowired
- public RestAuthenticationProvider(AuthenticationService authenticationService, UserService userService, WebContext webContext) {
- this.authenticationService = authenticationService;
- this.userService = userService;
- this.webContext = webContext;
- }
+ private final DepartmentMapper departmentMapper;
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
@@ -69,7 +60,14 @@
throw new LockedException("鐢ㄦ埛琚鐢�");
}
+// // 鏌ヨ璇ョ敤鎴锋槸涓嶆槸閮ㄩ棬绠$悊鍛�
+// Integer num = departmentMapper.countByAdminId(user.getId());
+
ArrayList<GrantedAuthority> grantedAuthorities = new ArrayList<>();
+ // 璧嬩簣閮ㄩ棬绠$悊鍛樿鑹�
+ if (DeptAdminEnum.YES.getValue().equals(user.getDeptAdmin())) {
+ grantedAuthorities.add(new SimpleGrantedAuthority(RoleEnum.DEPT_ADMIN.getRoleName()));
+ }
grantedAuthorities.add(new SimpleGrantedAuthority(RoleEnum.fromCode(user.getRole()).getRoleName()));
User authUser = new User(user.getUserName(), user.getPassword(), grantedAuthorities);
diff --git a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java
index b696ad6..69948e8 100644
--- a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java
+++ b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationSuccessHandler.java
@@ -55,6 +55,8 @@
com.mindskip.xzs.domain.User newUser = new com.mindskip.xzs.domain.User();
newUser.setUserName(user.getUserName());
newUser.setImagePath(user.getImagePath());
+ // 杩斿洖鏄惁閮ㄩ棬绠$悊鍛樼殑鏍囪瘑
+ newUser.setDeptAdmin(user.getDeptAdmin());
RestUtil.response(response, SystemCode.OK.getCode(), SystemCode.OK.getMessage(), newUser);
}
} else {
diff --git a/src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java b/src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java
index a3db86f..62b472d 100644
--- a/src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java
+++ b/src/main/java/com/mindskip/xzs/configuration/spring/security/SecurityConfigurer.java
@@ -80,7 +80,8 @@
.authorizeRequests()
.antMatchers(securityIgnoreUrls.toArray(ignores)).permitAll()
.antMatchers("/api/admin/department/list", "/api/admin/video/getList","/api/admin/user/conversion","/api/admin/examPaperGrade/updates").permitAll()
- .antMatchers("/api/admin/**").hasRole(RoleEnum.ADMIN.getName())
+ // todo 璁剧疆閮ㄩ棬绠$悊鍛樺彲浠ョ湅鐨勮姹�
+ .antMatchers("/api/admin/**").hasAnyRole(RoleEnum.ADMIN.getName(), RoleEnum.DEPT_ADMIN.getName())
.antMatchers("/api/student/**").hasRole(RoleEnum.STUDENT.getName())
.anyRequest().permitAll()
.and().exceptionHandling().accessDeniedHandler(restAccessDeniedHandler)
diff --git a/src/main/java/com/mindskip/xzs/domain/User.java b/src/main/java/com/mindskip/xzs/domain/User.java
index cce1041..6f1628a 100644
--- a/src/main/java/com/mindskip/xzs/domain/User.java
+++ b/src/main/java/com/mindskip/xzs/domain/User.java
@@ -1,8 +1,11 @@
package com.mindskip.xzs.domain;
+import lombok.Data;
+
import java.io.Serializable;
import java.util.Date;
+@Data
public class User implements Serializable {
private static final long serialVersionUID = -7797183521247423117L;
@@ -71,155 +74,8 @@
private String wxOpenId;
private String deptIds;
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getUserUuid() {
- return userUuid;
- }
-
- public void setUserUuid(String userUuid) {
- this.userUuid = userUuid == null ? null : userUuid.trim();
- }
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName == null ? null : userName.trim();
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password == null ? null : password.trim();
- }
-
- public String getRealName() {
- return realName;
- }
-
- public void setRealName(String realName) {
- this.realName = realName == null ? null : realName.trim();
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- public Integer getSex() {
- return sex;
- }
-
- public void setSex(Integer sex) {
- this.sex = sex;
- }
-
- public Date getBirthDay() {
- return birthDay;
- }
-
- public void setBirthDay(Date birthDay) {
- this.birthDay = birthDay;
- }
-
- public Integer getUserLevel() {
- return userLevel;
- }
-
- public void setUserLevel(Integer userLevel) {
- this.userLevel = userLevel;
- }
-
- public String getPhone() {
- return phone;
- }
-
- public void setPhone(String phone) {
- this.phone = phone == null ? null : phone.trim();
- }
-
- public Integer getRole() {
- return role;
- }
-
- public void setRole(Integer role) {
- this.role = role;
- }
-
- public Integer getStatus() {
- return status;
- }
-
- public void setStatus(Integer status) {
- this.status = status;
- }
-
- public String getImagePath() {
- return imagePath;
- }
-
- public void setImagePath(String imagePath) {
- this.imagePath = imagePath == null ? null : imagePath.trim();
- }
-
- public Date getCreateTime() {
- return createTime;
- }
-
- public void setCreateTime(Date createTime) {
- this.createTime = createTime;
- }
-
- public Date getModifyTime() {
- return modifyTime;
- }
-
- public void setModifyTime(Date modifyTime) {
- this.modifyTime = modifyTime;
- }
-
- public Date getLastActiveTime() {
- return lastActiveTime;
- }
-
- public void setLastActiveTime(Date lastActiveTime) {
- this.lastActiveTime = lastActiveTime;
- }
-
- public Boolean getDeleted() {
- return deleted;
- }
-
- public void setDeleted(Boolean deleted) {
- this.deleted = deleted;
- }
-
- public String getWxOpenId() {
- return wxOpenId;
- }
-
- public void setWxOpenId(String wxOpenId) {
- this.wxOpenId = wxOpenId == null ? null : wxOpenId.trim();
- }
-
- public String getDeptIds() {
- return deptIds;
- }
-
- public void setDeptIds(String deptIds) {
- this.deptIds = deptIds;
- }
+ /**
+ * 鏄惁閮ㄩ棬绠$悊鍛�
+ */
+ private String deptAdmin;
}
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/DeptAdminEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/DeptAdminEnum.java
new file mode 100644
index 0000000..f460f74
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/enums/DeptAdminEnum.java
@@ -0,0 +1,23 @@
+package com.mindskip.xzs.domain.enums;
+
+import lombok.Getter;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/3/8 15:37
+ */
+@Getter
+public enum DeptAdminEnum {
+ NO("0", "涓嶆槸"),
+ YES("1", "鏄�"),
+ ;
+
+ private final String value;
+
+ private final String desc;
+
+ DeptAdminEnum(String value, String desc) {
+ this.value = value;
+ this.desc = desc;
+ }
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/RoleEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/RoleEnum.java
index a5fa365..eddee89 100644
--- a/src/main/java/com/mindskip/xzs/domain/enums/RoleEnum.java
+++ b/src/main/java/com/mindskip/xzs/domain/enums/RoleEnum.java
@@ -7,7 +7,8 @@
public enum RoleEnum {
STUDENT(1, "STUDENT"),
- ADMIN(3, "ADMIN");
+ ADMIN(3, "ADMIN"),
+ DEPT_ADMIN(-1, "DEPT_ADMIN");
int code;
String name;
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/UpdateDeptAdminVO.java b/src/main/java/com/mindskip/xzs/domain/vo/UpdateDeptAdminVO.java
index 166d9a1..7cfcd66 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/UpdateDeptAdminVO.java
+++ b/src/main/java/com/mindskip/xzs/domain/vo/UpdateDeptAdminVO.java
@@ -24,6 +24,6 @@
* 绠$悊鍛橈紝userId
*/
@NotNull(message = "閮ㄩ棬绠$悊鍛樹笉鑳戒负绌�")
- private Integer deptAdmin;
+ private Integer adminId;
}
diff --git a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
index 2e92684..b951949 100644
--- a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java
@@ -20,4 +20,6 @@
Department getName(String name);
Department getById(Integer id);
+
+ List<Integer> selectByAdminId(Integer id);
}
diff --git a/src/main/java/com/mindskip/xzs/repository/UserMapper.java b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
index 695001c..89aaf6f 100644
--- a/src/main/java/com/mindskip/xzs/repository/UserMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
@@ -135,4 +135,11 @@
List<User> getUserByLevel(@Param("userLevel") Integer userLevel);
User getUserByRealName(@Param("realName") String realName);
+
+ /**
+ * 淇敼閮ㄩ棬绠$悊鍛樻爣璇�
+ * @param id
+ * @param deptAdmin
+ */
+ void updateDeptAdmin(Integer id, String deptAdmin);
}
diff --git a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
index 0c737eb..d138d98 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/DepartmentServiceImpl.java
@@ -5,11 +5,13 @@
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.domain.Department;
import com.mindskip.xzs.domain.UserDepartment;
+import com.mindskip.xzs.domain.enums.DeptAdminEnum;
import com.mindskip.xzs.domain.vo.BaseSelect;
import com.mindskip.xzs.domain.vo.UpdateDeptAdminVO;
import com.mindskip.xzs.repository.BaseMapper;
import com.mindskip.xzs.repository.DepartmentMapper;
import com.mindskip.xzs.repository.UserDepartmentMapper;
+import com.mindskip.xzs.repository.UserMapper;
import com.mindskip.xzs.service.DepartmentService;
import com.mindskip.xzs.utility.ModelMapperSingle;
import com.mindskip.xzs.viewmodel.admin.department.DepartmentResponseVM;
@@ -27,11 +29,13 @@
private final DepartmentMapper departmentMapper;
private final UserDepartmentMapper userDepartmentMapper;
+ private final UserMapper userMapper;
- public DepartmentServiceImpl(BaseMapper<Department> baseMapper, DepartmentMapper departmentMapper, UserDepartmentMapper userDepartmentMapper) {
+ public DepartmentServiceImpl(BaseMapper<Department> baseMapper, DepartmentMapper departmentMapper, UserDepartmentMapper userDepartmentMapper, UserMapper userMapper) {
super(baseMapper);
this.departmentMapper = departmentMapper;
this.userDepartmentMapper = userDepartmentMapper;
+ this.userMapper = userMapper;
}
@Override
@@ -54,7 +58,24 @@
@Override
public Integer update(Department department) {
// userDepartmentMapper.removeByDepartmentId(department.getId());
- return departmentMapper.update(department);
+ Department entity = departmentMapper.getById(department.getId());
+ if (Objects.isNull(entity)) {
+ throw new RuntimeException("璇ラ儴闂ㄤ笉瀛樺湪");
+ }
+ if (Objects.nonNull(department.getAdminId())) {
+ if (! Objects.equals(entity.getAdminId(), department.getAdminId())) {
+ // 鍙栨秷鍘熷厛鐨勭鐞嗗憳鏍囪瘑
+ List<Integer> depIds = departmentMapper.selectByAdminId(entity.getAdminId());
+ depIds.remove(department.getId());
+ if (depIds.size() < 1) {
+ userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
+ }
+ }
+ // 鏍囪瘑閮ㄩ棬绠$悊鍛�
+ userMapper.updateDeptAdmin(department.getAdminId(), DeptAdminEnum.YES.getValue());
+ }
+ Integer update = departmentMapper.update(department);
+ return update;
}
@Override
@@ -91,11 +112,23 @@
@Override
public void updateAdmin(UpdateDeptAdminVO form) {
- Department department = departmentMapper.getById(form.getId());
- if (Objects.isNull(department)) {
+ Department entity = departmentMapper.getById(form.getId());
+ if (Objects.isNull(form)) {
throw new RuntimeException("璇ラ儴闂ㄤ笉瀛樺湪");
}
- department.setAdminId(form.getDeptAdmin());
- departmentMapper.update(department);
+ if (Objects.nonNull(form.getAdminId())) {
+ if (! Objects.equals(entity.getAdminId(), form.getAdminId())) {
+ // 鍙栨秷鍘熷厛鐨勭鐞嗗憳鏍囪瘑
+ List<Integer> depIds = departmentMapper.selectByAdminId(entity.getAdminId());
+ depIds.remove(form.getId());
+ if (depIds.size() < 1) {
+ userMapper.updateDeptAdmin(entity.getAdminId(), DeptAdminEnum.NO.getValue());
+ }
+ }
+ // 鏍囪瘑閮ㄩ棬绠$悊鍛�
+ userMapper.updateDeptAdmin(form.getAdminId(), DeptAdminEnum.YES.getValue());
+ }
+ entity.setAdminId(form.getAdminId());
+ departmentMapper.update(entity);
}
}
diff --git a/src/main/resources/mapper/DepartmentMapper.xml b/src/main/resources/mapper/DepartmentMapper.xml
index 5eee8cd..5d54e83 100644
--- a/src/main/resources/mapper/DepartmentMapper.xml
+++ b/src/main/resources/mapper/DepartmentMapper.xml
@@ -13,8 +13,8 @@
</sql>
<insert id="add" parameterType="com.mindskip.xzs.domain.Department" useGeneratedKeys="true" keyProperty="id">
- insert into t_department (name, admin_id, deleted)
- values (#{name,jdbcType=VARCHAR}, {#{adminId}, #{deleted,jdbcType=VARCHAR})
+ insert into t_department (name, deleted)
+ values (#{name,jdbcType=VARCHAR}, #{deleted,jdbcType=VARCHAR})
</insert>
<update id="update" parameterType="com.mindskip.xzs.domain.Department">
@@ -93,4 +93,9 @@
WHERE
td.name = #{name} AND td.deleted = 0
</select>
+
+ <select id="selectByAdminId" resultType="integer">
+ SELECT id FROM t_department WHERE admin_id = #{id} AND deleted = 0
+ </select>
+
</mapper>
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index 2579dda..2afc008 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -23,7 +23,7 @@
</resultMap>
<sql id="Base_Column_List">
id, user_uuid, user_name, password, real_name, age, sex, birth_day, user_level, phone,
- role, status, image_path, create_time, modify_time, last_active_time, deleted, wx_open_id
+ role, status, image_path, create_time, modify_time, last_active_time, deleted, wx_open_id, dept_admin
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
@@ -220,6 +220,9 @@
<if test="wxOpenId != null">
wx_open_id = #{wxOpenId,jdbcType=VARCHAR},
</if>
+ <if test="deptAdmin != null">
+ dept_admin = #{deptAdmin},
+ </if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
@@ -241,7 +244,8 @@
modify_time = #{modifyTime,jdbcType=TIMESTAMP},
last_active_time = #{lastActiveTime,jdbcType=TIMESTAMP},
deleted = #{deleted,jdbcType=BIT},
- wx_open_id = #{wxOpenId,jdbcType=VARCHAR}
+ wx_open_id = #{wxOpenId,jdbcType=VARCHAR},
+ dept_admin = #{deptAdmin}
where id = #{id,jdbcType=INTEGER}
</update>
@@ -434,4 +438,10 @@
</if>
</where>
</select>
+
+
+ <update id="updateDeptAdmin">
+ UPDATE t_user SET dept_admin = #{deptAdmin} WHERE id = #{id} AND deleted = 0
+ </update>
+
</mapper>
--
Gitblit v1.8.0