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;
|
|
/**
|
* <p>
|
* 角色和菜单关联表 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2026-02-03
|
*/
|
@Service
|
public class SysGroupMenuServiceImpl extends ServiceImpl<SysGroupMenuMapper, SysGroupMenu> implements ISysGroupMenuService {
|
|
/**
|
* 根据权限组ID查询菜单ID列表
|
*
|
* @param groupId 权限组ID
|
* @return 菜单ID列表
|
*/
|
@Override
|
public List<Long> selectMenuIdsByGroupId(Long groupId) {
|
if (groupId == null) {
|
return new ArrayList<>();
|
}
|
|
// 使用 MyBatis-Plus 的 LambdaQueryWrapper 查询
|
LambdaQueryWrapper<SysGroupMenu> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(SysGroupMenu::getGroupId, groupId);
|
|
List<SysGroupMenu> 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<Long> menuIds) {
|
if (groupId == null || menuIds == null || menuIds.isEmpty()) {
|
return;
|
}
|
|
List<SysGroupMenu> list = this.list(new LambdaQueryWrapper<SysGroupMenu>().eq(SysGroupMenu::getGroupId, groupId));
|
List<Long> deleteMenuIds = new ArrayList<>();
|
List<Long> addMenuIds = new ArrayList<>();
|
//查找需要删除的数据
|
for (SysGroupMenu sysGroupMenu : list) {
|
if(!menuIds.contains(sysGroupMenu.getMenuId())){
|
deleteMenuIds.add(sysGroupMenu.getMenuId());
|
}
|
}
|
//查找需要添加的数据
|
List<Long> collect = list.stream().map(SysGroupMenu::getMenuId).collect(Collectors.toList());
|
for (Long menuId : menuIds) {
|
if(!collect.contains(menuId)){
|
addMenuIds.add(menuId);
|
}
|
}
|
|
// 构建批量插入的数据
|
List<SysGroupMenu> 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<SysGroupMenu>().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<SysGroupMenu> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(SysGroupMenu::getGroupId, groupId);
|
|
this.remove(queryWrapper);
|
}
|
}
|