package com.xiaopeng.account.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.account.mapper.SysGroupMenuMapper; import com.xiaopeng.account.service.ISysGroupMenuService; import com.xiaopeng.api.model.account.SysGroupMenu; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** *

* 角色和菜单关联表 服务实现类 *

* * @author mitao * @since 2026-02-03 */ @Service public class SysGroupMenuServiceImpl extends ServiceImpl implements ISysGroupMenuService { /** * 根据权限组ID查询菜单ID列表 * * @param groupId 权限组ID * @return 菜单ID列表 */ @Override public List selectMenuIdsByGroupId(Long groupId) { if (groupId == null) { return new ArrayList<>(); } // 使用 MyBatis-Plus 的 LambdaQueryWrapper 查询 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysGroupMenu::getGroupId, groupId); List groupMenus = this.list(queryWrapper); return groupMenus.stream() .map(SysGroupMenu::getMenuId) .filter(Objects::nonNull) .collect(Collectors.toList()); } /** * 批量保存权限组菜单关联 * * @param groupId 权限组ID * @param menuIds 菜单ID列表 */ @Override public void saveGroupMenus(Long groupId, List menuIds) { if (groupId == null || menuIds == null || menuIds.isEmpty()) { return; } List list = this.list(new LambdaQueryWrapper().eq(SysGroupMenu::getGroupId, groupId)); List deleteMenuIds = new ArrayList<>(); List addMenuIds = new ArrayList<>(); //查找需要删除的数据 for (SysGroupMenu sysGroupMenu : list) { if(!menuIds.contains(sysGroupMenu.getMenuId())){ deleteMenuIds.add(sysGroupMenu.getMenuId()); } } //查找需要添加的数据 List collect = list.stream().map(SysGroupMenu::getMenuId).collect(Collectors.toList()); for (Long menuId : menuIds) { if(!collect.contains(menuId)){ addMenuIds.add(menuId); } } // 构建批量插入的数据 List groupMenus = addMenuIds.stream() .filter(Objects::nonNull) .map(menuId -> { SysGroupMenu groupMenu = new SysGroupMenu(); groupMenu.setGroupId(groupId); groupMenu.setMenuId(menuId); return groupMenu; }) .collect(Collectors.toList()); // 批量保存 if (!groupMenus.isEmpty()) { this.saveBatch(groupMenus); } if(!deleteMenuIds.isEmpty()){ this.remove(new LambdaQueryWrapper().eq(SysGroupMenu::getGroupId, groupId).in(SysGroupMenu::getMenuId, deleteMenuIds)); } } /** * 删除权限组的所有菜单关联 * * @param groupId 权限组ID */ @Override public void deleteByGroupId(Long groupId) { if (groupId == null) { return; } // 使用 MyBatis-Plus 的 LambdaQueryWrapper 删除 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysGroupMenu::getGroupId, groupId); this.remove(queryWrapper); } }