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

---
 multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysMenuController.java |   22 +++++++++++
 multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysUserServiceImpl.java   |   40 +++++++++++++++-----
 multi-common/src/main/java/com/gkhy/exam/common/domain/entity/SysUser.java             |    5 ++
 multi-common/src/main/java/com/gkhy/exam/common/domain/model/LoginUserDetails.java     |    1 
 multi-system/src/main/resources/mapper/system/SysUserMapper.xml                        |   14 ++++++
 multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysRoleController.java |   34 +++++++++++++++++
 6 files changed, 105 insertions(+), 11 deletions(-)

diff --git a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysMenuController.java b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysMenuController.java
index 7311532..d9d3655 100644
--- a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysMenuController.java
+++ b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysMenuController.java
@@ -7,6 +7,10 @@
 import com.gkhy.exam.common.domain.entity.SysMenu;
 import com.gkhy.exam.common.utils.StringUtils;
 import com.gkhy.exam.system.service.ISysMenuService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -24,6 +28,7 @@
  * 
  * @author expert
  */
+@Api(tags = "菜单信息")
 @RestController
 @RequestMapping("/system/menu")
 public class SysMenuController
@@ -35,6 +40,7 @@
      * 获取菜单列表
      */
     //@PreAuthorize("hasAnyAuthority('system:menu:list')")
+    @ApiOperation(value = "获取菜单列表")
     @GetMapping("/list")
     public CommonResult list(SysMenu menu)
     {
@@ -46,6 +52,10 @@
      * 根据菜单编号获取详细信息
      */
     //@PreAuthorize("hasAnyAuthority('system:menu:query')")
+    @ApiOperation(value = "根据菜单编号获取详细信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "menuId", dataType = "int", required = true, value = "menuId"),
+    })
     @GetMapping(value = "/{menuId}")
     public CommonResult getInfo(@PathVariable Long menuId)
     {
@@ -56,6 +66,7 @@
      * 获取菜单下拉树列表
      */
     @GetMapping("/treeselect")
+    @ApiOperation(value = "获取菜单下拉树列表")
     public CommonResult treeselect(SysMenu menu)
     {
         List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
@@ -65,6 +76,10 @@
     /**
      * 加载对应角色菜单列表树
      */
+    @ApiOperation(value = "加载对应角色菜单列表树")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "roleId", dataType = "int", required = true, value = "roleId"),
+    })
     @GetMapping(value = "/roleMenuTreeselect/{roleId}")
     public CommonResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
     {
@@ -79,6 +94,7 @@
      * 新增菜单
      */
     //@PreAuthorize("hasAnyAuthority('system:menu:add')")
+    @ApiOperation(value = "新增菜单")
     @PostMapping
     public CommonResult add(@Validated @RequestBody SysMenu menu)
     {
@@ -100,6 +116,7 @@
     //@PreAuthorize("hasAnyAuthority('system:menu:edit')")
 
     @PutMapping
+    @ApiOperation(value = "修改菜单")
     public CommonResult edit(@Validated @RequestBody SysMenu menu)
     {
         if (!menuService.checkMenuNameUnique(menu))
@@ -122,7 +139,12 @@
      * 删除菜单
      */
     //@PreAuthorize("hasAnyAuthority('system:menu:remove')")
+    @ApiOperation(value = "删除菜单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "menuId", dataType = "int", required = true, value = "menuId"),
+    })
     @DeleteMapping("/{menuId}")
+
     public CommonResult remove(@PathVariable("menuId") Long menuId)
     {
         if (menuService.hasChildByMenuId(menuId))
diff --git a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysRoleController.java b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysRoleController.java
index 97bcde3..cb34f51 100644
--- a/multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysRoleController.java
+++ b/multi-admin/src/main/java/com/gkhy/exam/admin/controller/system/SysRoleController.java
@@ -16,6 +16,10 @@
 import com.gkhy.exam.system.domain.SysUserRole;
 import com.gkhy.exam.system.service.ISysRoleService;
 import com.gkhy.exam.system.service.SysUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -35,6 +39,7 @@
  * 
  * @author expert
  */
+@Api(tags = "角色信息")
 @RestController
 @RequestMapping("/system/role")
 public class SysRoleController
@@ -56,6 +61,7 @@
 
     // @PreAuthorize("hasAnyAuthority('system:role:list')")
     @GetMapping("/list")
+    @ApiOperation(value = "获取角色列表")
     public CommonResult list(SysRole role)
     {
 
@@ -76,7 +82,11 @@
      * 根据角色编号获取详细信息
      */
     //@PreAuthorize("hasAnyAuthority('system:role:query')")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "roleId", dataType = "int", required = true, value = "roleId"),
+    })
     @GetMapping(value = "/{roleId}")
+    @ApiOperation(value = "根据角色编号获取详细信息")
     public CommonResult getInfo(@PathVariable Long roleId)
     {
         roleService.checkRoleDataScope(roleId);
@@ -89,6 +99,7 @@
     //@PreAuthorize("hasAnyAuthority('system:role:add')")
     //@Log(title = "角色管理", businessType = BusinessType.INSERT)
     @PostMapping
+    @ApiOperation(value = "新增角色")
     public CommonResult add(@Validated @RequestBody SysRole role)
     {
         if (!roleService.checkRoleNameUnique(role))
@@ -110,6 +121,7 @@
     //@PreAuthorize("hasAnyAuthority('system:role:edit')")
     //@Log(title = "角色管理", businessType = BusinessType.UPDATE)
     @PutMapping
+    @ApiOperation(value = "修改保存角色")
     public CommonResult edit(@Validated @RequestBody SysRole role)
     {
         roleService.checkRoleAllowed(role);
@@ -146,6 +158,7 @@
     //@PreAuthorize("hasAnyAuthority('system:role:edit')")
     //@Log(title = "角色管理", businessType = BusinessType.UPDATE)
     @PutMapping("/dataScope")
+    @ApiOperation(value = "修改保存数据权限")
     public CommonResult dataScope(@RequestBody SysRole role)
     {
         roleService.checkRoleAllowed(role);
@@ -159,6 +172,7 @@
     //@PreAuthorize("hasAnyAuthority('system:role:edit')")
     // @Log(title = "角色管理", businessType = BusinessType.UPDATE)
     @PutMapping("/changeStatus")
+    @ApiOperation(value = "状态修改")
     public CommonResult changeStatus(@RequestBody SysRole role)
     {
         roleService.checkRoleAllowed(role);
@@ -172,6 +186,10 @@
      */
     //@PreAuthorize("hasAnyAuthority('system:role:remove')")
     @Log(title = "角色管理", businessType = BusinessType.DELETE)
+    @ApiOperation(value = "删除角色")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "roleIds", dataType = "array", required = true, value = "roleIds"),
+    })
     @DeleteMapping("/{roleIds}")
     public CommonResult remove(@PathVariable Long[] roleIds)
     {
@@ -182,6 +200,7 @@
      * 获取角色选择框列表
      */
     //@PreAuthorize("hasAnyAuthority('system:role:query')")
+    @ApiOperation(value = "获取角色选择框列表")
     @GetMapping("/optionselect")
     public CommonResult optionselect()
     {
@@ -192,6 +211,7 @@
      * 查询已分配用户角色列表
      */
     //@PreAuthorize("hasAnyAuthority('system:role:list')")
+    @ApiOperation(value = "查询已分配用户角色列表")
     @GetMapping("/authUser/allocatedList")
     public CommonResult allocatedList(SysUser user)
     {
@@ -205,6 +225,8 @@
      */
     //@PreAuthorize("hasAnyAuthority('system:role:list')")
     @GetMapping("/authUser/unallocatedList")
+    @ApiOperation(value = "查询未分配用户角色列表")
+
     public CommonResult unallocatedList(SysUser user)
     {
         startPage();
@@ -218,6 +240,7 @@
     //@PreAuthorize("hasAnyAuthority('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
     @PutMapping("/authUser/cancel")
+    @ApiOperation(value = "取消授权用户")
     public CommonResult cancelAuthUser(@RequestBody SysUserRole userRole)
     {
         return CommonResult.success(roleService.deleteAuthUser(userRole));
@@ -229,6 +252,11 @@
     //@PreAuthorize("hasAnyAuthority('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
     @PutMapping("/authUser/cancelAll")
+    @ApiOperation(value = "批量取消授权用户")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "userIds", dataType = "array", required = true, value = "用户id数组"),
+            @ApiImplicitParam(paramType = "query", name = "roleId", dataType = "int", required = true, value = "角色id"),
+    })
     public CommonResult cancelAuthUserAll(Long roleId, Long[] userIds)
     {
         return CommonResult.success(roleService.deleteAuthUsers(roleId, userIds));
@@ -240,6 +268,11 @@
     //@PreAuthorize("hasAnyAuthority('system:role:edit')")
     @Log(title = "角色管理", businessType = BusinessType.GRANT)
     @PutMapping("/authUser/selectAll")
+    @ApiOperation(value = "批量选择用户授权")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "userIds", dataType = "array", required = true, value = "用户id数组"),
+            @ApiImplicitParam(paramType = "query", name = "roleId", dataType = "int", required = true, value = "角色id"),
+    })
     public CommonResult selectAuthUserAll(Long roleId, Long[] userIds)
     {
         roleService.checkRoleDataScope(roleId);
@@ -251,6 +284,7 @@
      */
     //@PreAuthorize("hasAnyAuthority('system:role:query')")
     @GetMapping(value = "/deptTree/{roleId}")
+    @ApiOperation(value = "获取对应角色部门树列表")
     public CommonResult deptTree(@PathVariable("roleId") Long roleId)
     {
         Map<String,Object> ajax = new HashMap<>();
diff --git a/multi-common/src/main/java/com/gkhy/exam/common/domain/entity/SysUser.java b/multi-common/src/main/java/com/gkhy/exam/common/domain/entity/SysUser.java
index 89c1576..d0878a5 100644
--- a/multi-common/src/main/java/com/gkhy/exam/common/domain/entity/SysUser.java
+++ b/multi-common/src/main/java/com/gkhy/exam/common/domain/entity/SysUser.java
@@ -16,6 +16,7 @@
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Set;
 
 import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
 
@@ -164,4 +165,8 @@
     @TableField(exist = false)
     private List<SysRole> roles;
 
+//    @TableField(exist = false)
+//    @ApiModelProperty("角色ids")
+//    private Set<Long> roleIds;
+
 }
diff --git a/multi-common/src/main/java/com/gkhy/exam/common/domain/model/LoginUserDetails.java b/multi-common/src/main/java/com/gkhy/exam/common/domain/model/LoginUserDetails.java
index 8d255f7..645597a 100644
--- a/multi-common/src/main/java/com/gkhy/exam/common/domain/model/LoginUserDetails.java
+++ b/multi-common/src/main/java/com/gkhy/exam/common/domain/model/LoginUserDetails.java
@@ -24,6 +24,7 @@
 
     private List<GrantedAuthority> authorities;
 
+
     public LoginUserDetails(SysUser user,List<GrantedAuthority> authorities) {
         this.user = user;
         this.authorities=authorities;
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 bd08a00..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;
@@ -26,10 +27,7 @@
 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;
 
 
@@ -153,12 +151,8 @@
         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);
 
@@ -168,6 +162,30 @@
         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
     public int updateUser(SysUser user) {
         checkRequestData(user);
@@ -175,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("更新用户信息失败");
         }
diff --git a/multi-system/src/main/resources/mapper/system/SysUserMapper.xml b/multi-system/src/main/resources/mapper/system/SysUserMapper.xml
index de62190..4c0eb6f 100644
--- a/multi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/multi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -39,6 +39,12 @@
 
     </resultMap>
 
+    <resultMap id="SysUserVoResult" type="com.gkhy.exam.common.domain.entity.SysUser" extends="SysUserResult">
+        <collection property="roles" ofType="com.gkhy.exam.common.domain.entity.SysRole" column="userId = id" select="getReponseData">
+            <result     property="roleId"     column="role_id"     />
+            <result property="roleName"     column="role_name"     />
+        </collection>
+    </resultMap>
 
 
     <delete id="deleteUserById" parameterType="java.lang.Long">
@@ -51,7 +57,12 @@
         where username=#{username} and del_flag=0 limit 1
     </select>
 
-    <select id="userList"  resultMap="SysUserResult">
+    <select id="getReponseData" resultType="com.gkhy.exam.common.domain.entity.SysRole">
+        select r.role_name,r.role_id from  sys_user_role ur
+        left join sys_role r on r.role_id=ur.role_id
+        where ur.user_id = #{userId}
+    </select>
+    <select id="userList"  resultMap="SysUserVoResult">
         select u.id,u.username,u.name,u.user_type,u.phone,u.parent_id,u.company_id,u.sex,u.status,u.del_flag,u.version,
                u.login_ip,u.login_date,u.create_by,u.create_time,u.remark,c.name as company_name,su.name as parent_name,
                 u.dept_id,d.dept_name,u.duty,u.post,u.id_card,u.entry_time,u.resign_time,u.person_type,u.age,u.positional
@@ -59,6 +70,7 @@
         left join sys_company c on c.id=u.company_id
         left join sys_user su on su.id=u.parent_id and u.parent_id!=0
         left join sys_dept  d on d.dept_id=u.dept_id
+
         <where>
             and u.del_flag = 0
             <if test="username != null and username != ''">

--
Gitblit v1.9.2