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