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; }