From 826976ff37a83fc8fec64aeb19727d69afc6fcfa Mon Sep 17 00:00:00 2001
From: heheng <475597332@qq.com>
Date: 星期四, 31 七月 2025 16:05:24 +0800
Subject: [PATCH] 修改人员角色绑定

---
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysUserServiceImpl.java |   79 ++++++++++++++++++++++++++++++---------
 1 files changed, 60 insertions(+), 19 deletions(-)

diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysUserServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysUserServiceImpl.java
index 31c246a..04d642e 100644
--- a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysUserServiceImpl.java
+++ b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysUserServiceImpl.java
@@ -7,6 +7,7 @@
 import com.gkhy.exam.common.api.CommonPage;
 import com.gkhy.exam.common.constant.CacheConstant;
 import com.gkhy.exam.common.constant.UserConstant;
+import com.gkhy.exam.common.domain.entity.SysRole;
 import com.gkhy.exam.common.domain.entity.SysUser;
 import com.gkhy.exam.common.enums.UserTypeEnum;
 import com.gkhy.exam.common.exception.ApiException;
@@ -14,19 +15,19 @@
 import com.gkhy.exam.common.utils.RedisUtils;
 import com.gkhy.exam.common.utils.SecurityUtils;
 import com.gkhy.exam.common.utils.StringUtils;
+import com.gkhy.exam.system.domain.ExStudent;
 import com.gkhy.exam.system.domain.SysUserRole;
 import com.gkhy.exam.system.mapper.SysUserMapper;
 import com.gkhy.exam.system.mapper.SysUserRoleMapper;
+import com.gkhy.exam.system.service.ExStudentService;
 import com.gkhy.exam.system.service.SysConfigService;
 import com.gkhy.exam.system.service.SysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.validation.Validator;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 
@@ -50,6 +51,9 @@
     @Autowired
     private SysUserRoleMapper userRoleMapper;
 
+    @Autowired
+    private ExStudentService exStudentService;
+
     @Override
     public CommonPage<SysUser> selectUserList(SysUser user) {
         SysUser currentUser=SecurityUtils.getLoginUser().getUser();
@@ -58,7 +62,7 @@
             if(!currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())){
                 user.setCompanyId(currentUser.getCompanyId());
                 Map<String,Object> paramsMap=new HashMap<>();
-                paramsMap.put("userType",currentUser.getUserType());
+//                paramsMap.put("userType",currentUser.getUserType());
                 user.setParams(paramsMap);
             }
             PageUtils.startPage();
@@ -124,28 +128,62 @@
     @Override
     public int deleteUserById(Long userId) {
         SysUser user=checkUserDataScope(userId);
+        if (user.getId().toString().equals("1")){
+            throw new ApiException("管理员用户不能被删除");
+        }
         delCacheByUsername(user.getUsername());
         return baseMapper.deleteUserById(userId);
     }
 
     @Override
+    @Transactional(rollbackFor = RuntimeException.class)
     public int addUser(SysUser user) {
+        ExStudent exStudent = new ExStudent();
+        exStudent.setCompanyId(user.getCompanyId());
+        exStudent.setName(user.getName());
+        exStudent.setPassword(user.getPassword());
+        exStudent.setDeptId(user.getDeptId());
+        exStudent.setDuty(user.getDuty());
+        exStudent.setSex(user.getSex());
+        exStudent.setPhone(user.getPhone());
         checkRequestData(user);
         checkUserAllowed(user);
         user.setCreateBy(SecurityUtils.getUsername());
         user.setPassword(SecurityUtils.encryptPassword(Base64.decodeStr(user.getPassword())));
         int row=baseMapper.insert(user);
-        List<SysUserRole> userRoleList = new ArrayList<>();
-        SysUserRole sysUserRole = new SysUserRole();
-        sysUserRole.setUserId(user.getId());
-        sysUserRole.setRoleId(2L);
-        userRoleList.add(sysUserRole);
-        userRoleMapper.batchUserRole(userRoleList);
+
+        batchSaveRole(user.getRoles(),user.getId(),false);
+
+        exStudentService.insertStudent(exStudent);
 
         if(row<1){
             throw new ApiException("新增用户失败");
         }
         return row;
+    }
+
+    public void batchSaveRole(List<SysRole> roleIds, Long userId, boolean isUpdate){
+
+        if (isUpdate){
+            userRoleMapper.deleteUserRoleByUserId(userId);
+        }
+
+        List<SysUserRole> userRoleList = new ArrayList<>();
+        if(roleIds != null && !roleIds.isEmpty()){
+
+            for (SysRole roleId : roleIds) {
+                SysUserRole sysUserRole = new SysUserRole();
+                sysUserRole.setUserId(userId);
+                sysUserRole.setRoleId(roleId.getRoleId());
+                userRoleList.add(sysUserRole);
+            }
+        }else {
+            SysUserRole sysUserRole = new SysUserRole();
+            sysUserRole.setUserId(userId);
+            sysUserRole.setRoleId(2L);
+            userRoleList.add(sysUserRole);
+        }
+        userRoleMapper.batchUserRole(userRoleList);
     }
 
     @Override
@@ -155,6 +193,8 @@
         user.setUpdateBy(SecurityUtils.getUsername());
         user.setPassword(null);
         int row=baseMapper.updateById(user);
+        batchSaveRole(user.getRoles(),user.getId(),true);
+
         if(row<1){
             throw new ApiException("更新用户信息失败");
         }
@@ -227,23 +267,24 @@
         Integer currentUserType=currentUser.getUserType();
         Integer userType=user.getUserType();
         //校验权限,规则:上一级用户可以增加下一级用户类型的用户
-        if(currentUserType.equals(UserTypeEnum.SYSTEM_USER.getCode())){
+//        if(currentUserType.equals(UserTypeEnum.SYSTEM_USER.getCode())){
 //            if( !userType.equals(UserTypeEnum.SYSTEM_USER.getCode())&&!userType.equals(UserTypeEnum.OTHER_USER.getCode()) &&!userType.equals(UserTypeEnum.COMPANY_USER.getCode())){
 //                throw new ApiException("管理员只能操作管理员、企业级和其他类型的用户");
 //            }
-            if (user.getId().toString().equals("1")){
-                throw new ApiException("管理员用户不能被删除");
-            }
-        }else{
+//            if (user.getId().toString().equals("1")){
+//                throw new ApiException("管理员用户不能被删除");
+//            }
+//        }else{
+        if(!currentUserType.equals(UserTypeEnum.SYSTEM_USER.getCode())){
             if(userType.equals(UserTypeEnum.OTHER_USER.getCode())){
                 throw new ApiException("没有权限操作或者更新上级用户类型的用户");
             }
-            if(currentUserType.equals(UserTypeEnum.OTHER_USER.getCode())){
-                if(userType<=UserTypeEnum.COMPANY_USER.getCode()){
+            if(currentUserType.equals(UserTypeEnum.OTHER_USER.getCode()) || currentUserType.equals(UserTypeEnum.COMPANY_ADMIN.getCode())){
+                if(userType<=UserTypeEnum.COMPANY_USER.getCode() && !currentUserType.equals(UserTypeEnum.COMPANY_ADMIN.getCode())){
                     throw new ApiException("没有权限操作或者更新上级用户类型的用户");
                 }
             }else{
-                if(userType<=currentUserType){
+                if(userType<currentUserType){
                     throw new ApiException("没有权限操作或者更新上级用户类型的用户");
                 }
             }

--
Gitblit v1.9.2