菜单绑定

This commit is contained in:
2025-10-09 11:11:14 +08:00
parent 1064560f29
commit 047bf39842
19 changed files with 1526 additions and 59 deletions

View File

@@ -1,10 +1,8 @@
package org.xyzh.api.system.menu;
import java.util.List;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.menu.TbSysMenu;
import org.xyzh.common.dto.menu.TbSysMenuPermission;
/**
* @description MenuRemoteService.java文件描述 菜单远程服务接口
@@ -23,6 +21,15 @@ public interface MenuService {
*/
ResultDomain<TbSysMenu> getAllMenus();
/**
* @description 查询菜单列表
* @param filter 过滤条件
* @return ResultDomain<TbSysMenu> 菜单列表
* @author yslg
* @since 2025-09-28
*/
ResultDomain<TbSysMenu> getMenuList(TbSysMenu filter);
/**
* @description 根据菜单ID查询菜单
* @param menuId 菜单ID
@@ -124,5 +131,12 @@ public interface MenuService {
*/
ResultDomain<TbSysMenu> changeMenuVisibility(String menuId, Boolean visible);
/**
* @description 查询菜单权限
* @param menuId 菜单ID
* @return ResultDomain<TbSysMenuPermission> 菜单权限信息
* @author yslg
* @since 2025-09-28
*/
ResultDomain<TbSysMenuPermission> getMenuPermission(String menuId);
}

View File

@@ -7,6 +7,7 @@ import java.util.List;
import org.xyzh.common.dto.BaseDTO;
import org.xyzh.common.dto.menu.TbSysMenu;
import org.xyzh.common.dto.permission.TbSysPermission;
public class PermissionVO extends BaseDTO{
@@ -82,6 +83,13 @@ public class PermissionVO extends BaseDTO{
*/
private List<TbSysRole> roles;
/**
* @description 绑定权限
* @author yslg
* @since 2024-06
*/
private List<TbSysPermission> permissions;
/**
* @description 更新人名称
* @author yslg
@@ -177,6 +185,12 @@ public class PermissionVO extends BaseDTO{
this.roles = roles;
}
public List<TbSysPermission> getPermissions() {
return permissions;
}
public void setPermissions(List<TbSysPermission> permissions) {
this.permissions = permissions;
}
}

View File

@@ -0,0 +1,111 @@
package org.xyzh.system.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.xyzh.api.system.menu.MenuService;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.menu.TbSysMenu;
import org.xyzh.common.dto.menu.TbSysMenuPermission;
@RestController
@RequestMapping("/menus")
public class MenuController {
private static final Logger logger = LoggerFactory.getLogger(MenuController.class);
@Autowired
private MenuService menuService;
/**
* @description 查询所有菜单
* @return ResultDomain<TbSysMenu> 菜单列表
* @author yslg
* @since 2025-10-06
*/
@PostMapping("/all")
public ResultDomain<TbSysMenu> getAllMenus() {
return menuService.getAllMenus();
}
/**
* @description 查询菜单
* @param filter 过滤条件
* @return ResultDomain<TbSysMenu> 菜单列表
* @author yslg
* @since 2025-10-06
*/
@PostMapping("/list")
public ResultDomain<TbSysMenu> getMenuList(@RequestBody TbSysMenu filter) {
return menuService.getMenuList(filter);
}
/**
* @description 查询菜单
* @param menuId 菜单ID
* @return ResultDomain<TbSysMenu> 菜单信息
* @author yslg
* @since 2025-10-06
*/
@PostMapping("/id")
public ResultDomain<TbSysMenu> getMenuById(@RequestBody String menuId) {
return menuService.getMenuById(menuId);
}
/**
* @description 创建菜单
* @param menu 菜单信息
* @return ResultDomain<TbSysMenu> 菜单信息
* @author yslg
* @since 2025-10-06
*/
@PostMapping("/menu")
public ResultDomain<TbSysMenu> createMenu(@RequestBody TbSysMenu menu) {
return menuService.createMenu(menu);
}
/**
* @description 删除菜单
* @param menuId 菜单ID
* @return ResultDomain<TbSysMenu> 菜单信息
* @author yslg
* @since 2025-10-06
*/
@DeleteMapping("/menu")
public ResultDomain<TbSysMenu> deleteMenu(@RequestBody String menuId) {
return menuService.deleteMenu(menuId);
}
/**
* @description 更新菜单
* @param menu 菜单信息
* @return ResultDomain<TbSysMenu> 菜单信息
* @author yslg
* @since 2025-10-06
*/
@PutMapping("/menu")
public ResultDomain<TbSysMenu> updateMenu(@RequestBody TbSysMenu menu) {
return menuService.updateMenu(menu);
}
/**
* @description 查询菜单权限
* @param menuId 菜单ID
* @return ResultDomain<TbSysMenuPermission> 菜单权限信息
* @author yslg
* @since 2025-10-06
*/
@PostMapping("/permission")
public ResultDomain<TbSysMenuPermission> getMenuPermission(@RequestBody TbSysMenu menu) {
return menuService.getMenuPermission(menu.getMenuID());
}
}

View File

@@ -1,5 +1,9 @@
package org.xyzh.system.controller;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -13,7 +17,11 @@ import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.xyzh.api.system.permission.PermissionService;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.menu.TbSysMenu;
import org.xyzh.common.dto.menu.TbSysMenuPermission;
import org.xyzh.common.dto.permission.TbSysPermission;
import org.xyzh.common.dto.role.TbSysRole;
import org.xyzh.common.dto.role.TbSysRolePermission;
import org.xyzh.common.vo.PermissionVO;
@RestController
@@ -89,4 +97,57 @@ public class PermissionController {
public ResultDomain<PermissionVO> listPermissionBinding(@RequestBody PermissionVO permission) {
return permissionService.listPermissionBinding(permission);
}
/**
* @description 绑定菜单
* @param permission
* @author yslg
* @ since 2025-10-06
*/
@PostMapping("/bind/menu")
public ResultDomain<TbSysMenuPermission> bindMenu(@RequestBody PermissionVO permission) {
List<String> menuIds = permission.getMenus().stream().map(TbSysMenu::getMenuID).collect(Collectors.toList());
List<String> permissionIds = permission.getPermissions().stream().map(TbSysPermission::getPermissionID).collect(Collectors.toList());
return permissionService.batchBindMenuPermission(menuIds, permissionIds);
}
/**
* @description 解绑菜单
* @param permission
* @author yslg
* @ since 2025-10-06
*/
@PostMapping("/unbind/menu")
public ResultDomain<TbSysMenuPermission> unbindMenu(@RequestBody PermissionVO permission) {
List<String> menuIds = permission.getMenus().stream().map(TbSysMenu::getMenuID).collect(Collectors.toList());
List<String> permissionIds = permission.getPermissions().stream().map(TbSysPermission::getPermissionID).collect(Collectors.toList());
return permissionService.batchUnbindMenuPermission(menuIds, permissionIds);
}
/**
* @description 绑定角色
* @param permission
* @author yslg
* @ since 2025-10-06
*/
@PostMapping("/bind/role")
public ResultDomain<TbSysRolePermission> bindRole(@RequestBody PermissionVO permission) {
List<String> roleIds = permission.getRoles().stream().map(TbSysRole::getRoleID).collect(Collectors.toList());
List<String> permissionIds = permission.getPermissions().stream().map(TbSysPermission::getPermissionID).collect(Collectors.toList());
return permissionService.batchBindRolePermission(roleIds, permissionIds);
}
/**
* @description 解绑角色
* @param permission
* @author yslg
* @ since 2025-10-06
*/
@PostMapping("/unbind/role")
public ResultDomain<TbSysRolePermission> unbindRole(@RequestBody PermissionVO permission) {
List<String> roleIds = permission.getRoles().stream().map(TbSysRole::getRoleID).collect(Collectors.toList());
List<String> permissionIds = permission.getPermissions().stream().map(TbSysPermission::getPermissionID).collect(Collectors.toList());
return permissionService.batchUnbindRolePermission(roleIds, permissionIds);
}
}

View File

@@ -0,0 +1,38 @@
package org.xyzh.system.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.xyzh.api.system.role.RoleService;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.role.TbSysRole;
/**
* @description RoleController.java文件描述 角色控制器
* @filename RoleController.java
* @author yslg
* @copyright xyzh
* @ since 2025-10-09
*/
@RestController
@RequestMapping("/roles")
public class RoleController {
private static final Logger logger = LoggerFactory.getLogger(RoleController.class);
@Autowired
private RoleService roleService;
/**
* @description 获取所有角色
* @return 角色列表
* @author yslg
* @ since 2025-10-09
*/
@PostMapping("/all")
public ResultDomain<TbSysRole> all() {
return roleService.getAllRoles();
}
}

View File

@@ -17,6 +17,32 @@ import java.util.List;
@Mapper
public interface MenuMapper extends BaseMapper<TbSysMenu> {
/**
* @description 查询所有菜单
* @return List<TbSysMenu> 菜单列表
* @author yslg
* @since 2025-09-28
*/
List<TbSysMenu> selectAllMenus();
/**
* @description 查询菜单列表
* @param filter 过滤条件
* @return List<TbSysMenu> 菜单列表
* @author yslg
* @since 2025-09-28
*/
List<TbSysMenu> selectMenuList(TbSysMenu filter);
/**
* @description 查询菜单
* @param menuId 菜单ID
* @return TbSysMenu 菜单
* @author yslg
* @since 2025-09-28
*/
TbSysMenu selectMenuById(String menuId);
/**
* @description 根据用户ID查询菜单列表
* @param userId 用户ID

View File

@@ -147,7 +147,7 @@ public interface PermissionMapper extends BaseMapper<TbSysPermission> {
* @author yslg
* @since 2025-10-08
*/
List<TbSysMenu> selectPermissionBindMenu(PermissionVO permission);
List<TbSysMenu> selectPermissionBindMenu(@Param("permission") PermissionVO permission);
/**
* @description 查询权限绑定角色
@@ -156,5 +156,5 @@ public interface PermissionMapper extends BaseMapper<TbSysPermission> {
* @author yslg
* @since 2025-10-08
*/
List<TbSysRole> selectPermissionBindRole(PermissionVO permission);
List<TbSysRole> selectPermissionBindRole(@Param("permission") PermissionVO permission);
}

View File

@@ -18,6 +18,14 @@ import java.util.List;
@Mapper
public interface RoleMapper extends BaseMapper<TbSysRole> {
/**
* @description 查询所有角色
* @return List<TbSysRole> 角色列表
* @author yslg
* @since 2025-10-09
*/
List<TbSysRole> selectAllRoles();
/**
* @description 根据用户ID查询角色列表
* @param userId 用户ID

View File

@@ -1,6 +1,5 @@
package org.xyzh.system.menu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -8,8 +7,10 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.menu.TbSysMenu;
import org.xyzh.common.dto.menu.TbSysMenuPermission;
import org.xyzh.common.utils.IDUtils;
import org.xyzh.system.mapper.MenuMapper;
import org.xyzh.system.mapper.MenuPermissionMapper;
import org.xyzh.system.menu.service.SysMenuService;
import java.util.Date;
@@ -30,6 +31,9 @@ public class SysMenuServiceImpl implements SysMenuService {
@Autowired
private MenuMapper menuMapper;
@Autowired
private MenuPermissionMapper menuPermissionMapper;
@Override
public ResultDomain<TbSysMenu> getAllMenus() {
ResultDomain<TbSysMenu> resultDomain = new ResultDomain<>();
@@ -37,11 +41,7 @@ public class SysMenuServiceImpl implements SysMenuService {
try {
logger.info("开始查询所有菜单");
LambdaQueryWrapper<TbSysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TbSysMenu::getDeleted, false)
.orderByAsc(TbSysMenu::getCreateTime);
List<TbSysMenu> menus = menuMapper.selectList(queryWrapper);
List<TbSysMenu> menus = menuMapper.selectAllMenus();
logger.info("查询所有菜单完成,共找到{}个菜单", menus.size());
resultDomain.success("查询成功", menus);
@@ -54,6 +54,26 @@ public class SysMenuServiceImpl implements SysMenuService {
}
}
@Override
public ResultDomain<TbSysMenu> getMenuList(TbSysMenu filter) {
ResultDomain<TbSysMenu> resultDomain = new ResultDomain<>();
try {
logger.info("开始查询菜单列表:{}", filter);
List<TbSysMenu> menus = menuMapper.selectMenuList(filter);
logger.info("查询菜单列表完成,共找到{}个菜单", menus.size());
resultDomain.success("查询成功", menus);
return resultDomain;
} catch (Exception e) {
logger.error("查询菜单列表失败:{}", filter, e);
resultDomain.fail("查询菜单失败:" + e.getMessage());
return resultDomain;
}
}
@Override
public ResultDomain<TbSysMenu> getMenuById(String menuId) {
ResultDomain<TbSysMenu> resultDomain = new ResultDomain<>();
@@ -65,11 +85,7 @@ public class SysMenuServiceImpl implements SysMenuService {
return resultDomain;
}
LambdaQueryWrapper<TbSysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TbSysMenu::getMenuID, menuId)
.eq(TbSysMenu::getDeleted, false);
TbSysMenu menu = menuMapper.selectOne(queryWrapper);
TbSysMenu menu = menuMapper.selectMenuById(menuId);
if (menu == null) {
logger.warn("未找到菜单:{}", menuId);
@@ -445,4 +461,23 @@ public class SysMenuServiceImpl implements SysMenuService {
return resultDomain;
}
}
@Override
public ResultDomain<TbSysMenuPermission> getMenuPermission(String menuId) {
ResultDomain<TbSysMenuPermission> resultDomain = new ResultDomain<>();
try {
logger.info("开始查询菜单权限:{}", menuId);
List<TbSysMenuPermission> menuPermissions = menuPermissionMapper.selectByMenuId(menuId);
if (menuPermissions.isEmpty()) {
resultDomain.fail("未找到菜单权限");
return resultDomain;
}
resultDomain.success("查询菜单权限成功", menuPermissions);
return resultDomain;
} catch (Exception e) {
logger.error("查询菜单权限异常:{}", menuId, e);
resultDomain.fail("查询菜单权限失败:" + e.getMessage());
return resultDomain;
}
}
}

View File

@@ -39,11 +39,7 @@ public class SysRoleServiceImpl implements SysRoleService {
try {
logger.info("开始查询所有角色");
LambdaQueryWrapper<TbSysRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TbSysRole::getDeleted, false)
.orderByAsc(TbSysRole::getCreateTime);
List<TbSysRole> roles = roleMapper.selectList(queryWrapper);
List<TbSysRole> roles = roleMapper.selectAllRoles();
logger.info("查询所有角色完成,共找到{}个角色", roles.size());
resultDomain.success("查询成功", roles);

View File

@@ -39,6 +39,47 @@
</if>
</where>
</sql>
<sql id="Where_Clause_List">
<where>
m.deleted = 0
<if test="menuID != null and menuID != ''">
AND m.menu_id = #{menuID}
</if>
<if test="name != null and name != ''">
AND m.name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="type != null">
AND m.type = #{type}
</if>
</where>
</sql>
<!-- selectAllMenus -->
<select id="selectAllMenus" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM tb_sys_menu m
WHERE m.deleted = 0
ORDER BY m.menu_id, m.create_time ASC
</select>
<!-- selectMenuList -->
<select id="selectMenuList" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM tb_sys_menu m
<include refid="Where_Clause_List"/>
ORDER BY m.menu_id, m.create_time ASC
</select>
<!-- selectMenuById -->
<select id="selectMenuById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM tb_sys_menu m
WHERE m.deleted = 0 AND m.menu_id = #{menuId}
</select>
<!-- 根据用户ID查询菜单列表 -->
<select id="selectMenusByUserId" resultMap="BaseResultMap">
@@ -161,7 +202,7 @@
<if test="updater != null">updater = #{updater},</if>
update_time = NOW()
</set>
WHERE id = #{id} AND deleted = 0
WHERE menu_id = #{menuId} AND deleted = 0
</update>
<!-- 根据ID删除逻辑删除 -->
@@ -169,12 +210,12 @@
UPDATE tb_sys_menu
SET deleted = 1,
delete_time = NOW()
WHERE id = #{id} AND deleted = 0
WHERE menu_id = #{menuId} AND deleted = 0
</update>
<!-- 检查菜单是否存在 -->
<select id="checkMenuExists">
SELECT * FROM tb_sys_menu WHERE id IN
SELECT * FROM tb_sys_menu WHERE menu_id IN
<foreach collection="menuIds" item="menuId" open="(" separator="," close=")">
#{menuId}
</foreach>

View File

@@ -37,7 +37,6 @@
<id column="id" property="id" jdbcType="VARCHAR"/>
<result column="menu_id" property="menuID" jdbcType="VARCHAR"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="description" property="description" jdbcType="VARCHAR"/>
</resultMap>
<resultMap id="PermissionBindRole" type="org.xyzh.common.dto.role.TbSysRole">
@@ -268,12 +267,12 @@
<select id="selectPermissionBindMenu" resultMap="PermissionBindMenu">
SELECT
tsm.id, tsm.menu_id, tsm.name, tsm.description
tsm.id, tsm.menu_id, tsm.name
FROM tb_sys_menu tsm
INNER JOIN tb_sys_menu_permission tsmp ON tsmp.menu_id = tsm.id
INNER JOIN tb_sys_menu_permission tsmp ON tsmp.menu_id = tsm.menu_id
WHERE tsm.deleted = 0
AND tsmp.deleted = 0
AND tsmp.permission_id = #{permission.id}
AND tsmp.permission_id = #{permission.permissionID}
ORDER BY tsm.menu_id, tsm.create_time ASC
</select>
@@ -282,10 +281,10 @@
SELECT
tsr.id, tsr.role_id, tsr.name, tsr.description
FROM tb_sys_role tsr
INNER JOIN tb_sys_role_permission tsrp ON tsrp.role_id = tsr.id
INNER JOIN tb_sys_role_permission tsrp ON tsrp.role_id = tsr.role_id
WHERE tsr.deleted = 0
AND tsrp.deleted = 0
AND tsrp.permission_id = #{permission.id}
AND tsrp.permission_id = #{permission.permissionID}
ORDER BY tsr.role_id, tsr.create_time ASC
</select>
</mapper>

View File

@@ -39,7 +39,7 @@
</resultMap>
<!-- 基础字段 -->
<sql id="TbSysRole_Column_List">
id, dept_id, role_id, name, description, creator, updater,
id, role_id, name, description, creator, updater,
create_time, update_time, delete_time, deleted
</sql>
<sql id="TbSysDeptRole_Column_List">
@@ -70,6 +70,16 @@
</where>
</sql>
<!-- selectAllRoles -->
<select id="selectAllRoles" resultMap="tbSysRoleResultMap">
SELECT
<include refid="TbSysRole_Column_List"/>
FROM tb_sys_role
WHERE deleted = 0
ORDER BY role_id, create_time ASC
</select>
<!-- 根据用户ID查询角色列表 -->
<select id="selectDeptRolesByUserId" resultMap="deptRoleVOResultMap">
SELECT