From 36e21c6cfeaf8cb4d5aa6d8f4008cfcdff01a209 Mon Sep 17 00:00:00 2001 From: zhuangtianxiang <2913129173@qq.com> Date: Fri, 9 May 2025 22:04:49 +0800 Subject: [PATCH] =?UTF-8?q?refactor(system):=20=E4=BC=98=E5=8C=96=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E6=9D=83=E9=99=90=E6=9B=B4=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 RoleMenuRepository 中添加 findByRoleId 方法,用于查询指定角色的菜单权限 -优化 RoleServiceImpl 中的 updateRole 方法: - 使用 selectyRole替代新建 Role 实例 - 增加对空菜单 ID 的检查 - 通过对比现有权限,仅插入不存在的菜单权限 - 这些修改减少了不必要的数据库操作,提高了系统性能 --- .../system/repo/RoleMenuRepository.java | 7 ++++ .../system/service/impl/RoleServiceImpl.java | 32 +++++++++++++------ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/zsc/edu/dify/modules/system/repo/RoleMenuRepository.java b/src/main/java/com/zsc/edu/dify/modules/system/repo/RoleMenuRepository.java index 2ae1b2d..0c8e28e 100644 --- a/src/main/java/com/zsc/edu/dify/modules/system/repo/RoleMenuRepository.java +++ b/src/main/java/com/zsc/edu/dify/modules/system/repo/RoleMenuRepository.java @@ -2,9 +2,16 @@ package com.zsc.edu.dify.modules.system.repo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zsc.edu.dify.modules.system.entity.RoleMenu; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** * @author Yao */ public interface RoleMenuRepository extends BaseMapper { + + @Select("select * from sys_role_menu where role_id = #{id}") + List findByRoleId(@Param("id") Long id); } diff --git a/src/main/java/com/zsc/edu/dify/modules/system/service/impl/RoleServiceImpl.java b/src/main/java/com/zsc/edu/dify/modules/system/service/impl/RoleServiceImpl.java index 9725eb1..e425f6c 100644 --- a/src/main/java/com/zsc/edu/dify/modules/system/service/impl/RoleServiceImpl.java +++ b/src/main/java/com/zsc/edu/dify/modules/system/service/impl/RoleServiceImpl.java @@ -14,7 +14,9 @@ import com.zsc.edu.dify.modules.system.vo.RoleVo; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; /** @@ -80,17 +82,27 @@ public class RoleServiceImpl extends ServiceImpl implement count(new LambdaQueryWrapper().eq(Role::getName, dto.getName())) > 0) { throw new ConstraintException("name", dto.getName(), "同名角色已存在"); } - Role role = new Role(); - role.setName(dto.getName()); - role.setRemark(dto.getRemark()); - updateById(role); - if (dto.getMenuIds() != null) { - roleMenuRepository.delete(new LambdaQueryWrapper().eq(RoleMenu::getRoleId, id)); - roleMenuRepository.insert( - dto.getMenuIds().stream() - .map(menuId -> new RoleMenu(id, menuId)).collect(Collectors.toList())); + selectyRole.setName(dto.getName()); + selectyRole.setRemark(dto.getRemark()); + updateById(selectyRole); + if (dto.getMenuIds() != null && !dto.getMenuIds().isEmpty()) { + // 查询当前角色已有的菜单权限 + List existingRoleMenus = roleMenuRepository.findByRoleId(id); + Set existingMenuIds = existingRoleMenus.stream() + .map(RoleMenu::getMenuId) + .collect(Collectors.toSet()); + + // 筛选出不存在的菜单ID组合进行插入 + List roleMenusToInsert = dto.getMenuIds().stream() + .filter(menuId -> !existingMenuIds.contains(menuId)) + .map(menuId -> new RoleMenu(id, menuId)) + .collect(Collectors.toList()); + + if (!roleMenusToInsert.isEmpty()) { + roleMenuRepository.insert(roleMenusToInsert); + } } - return role; + return selectyRole; }