mirror of https://gitee.com/stylefeng/roses
【7.6.0】【sys】【menu】完善获取应用列表信息接口
parent
2df2af575e
commit
ed9fceddc6
|
@ -3,6 +3,7 @@ package cn.stylefeng.roses.kernel.sys.modular.app.service;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.entity.SysApp;
|
import cn.stylefeng.roses.kernel.sys.modular.app.entity.SysApp;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.pojo.request.SysAppRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.app.pojo.request.SysAppRequest;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.response.AppGroupDetail;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -79,4 +80,12 @@ public interface SysAppService extends IService<SysApp> {
|
||||||
*/
|
*/
|
||||||
PageResult<SysApp> findPage(SysAppRequest sysAppRequest);
|
PageResult<SysApp> findPage(SysAppRequest sysAppRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取启用的应用列表(用在给菜单界面用)
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/6/14 21:48
|
||||||
|
*/
|
||||||
|
List<AppGroupDetail> getAppList();
|
||||||
|
|
||||||
}
|
}
|
|
@ -7,12 +7,14 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
||||||
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.enums.StatusEnum;
|
||||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.entity.SysApp;
|
import cn.stylefeng.roses.kernel.sys.modular.app.entity.SysApp;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.enums.SysAppExceptionEnum;
|
import cn.stylefeng.roses.kernel.sys.modular.app.enums.SysAppExceptionEnum;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.mapper.SysAppMapper;
|
import cn.stylefeng.roses.kernel.sys.modular.app.mapper.SysAppMapper;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.pojo.request.SysAppRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.app.pojo.request.SysAppRequest;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService;
|
import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.response.AppGroupDetail;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
@ -21,6 +23,7 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -99,6 +102,29 @@ public class SysAppServiceImpl extends ServiceImpl<SysAppMapper, SysApp> impleme
|
||||||
return PageResultFactory.createPageResult(sysAppPage);
|
return PageResultFactory.createPageResult(sysAppPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AppGroupDetail> getAppList() {
|
||||||
|
|
||||||
|
LambdaQueryWrapper<SysApp> wrapper = this.createWrapper(new SysAppRequest());
|
||||||
|
|
||||||
|
// 只查询启用的
|
||||||
|
wrapper.eq(SysApp::getStatusFlag, StatusEnum.ENABLE.getCode());
|
||||||
|
|
||||||
|
// 查询有效字段
|
||||||
|
wrapper.select(SysApp::getAppId, SysApp::getAppName, SysApp::getAppIcon, SysApp::getRemark);
|
||||||
|
|
||||||
|
List<SysApp> appList = this.list(wrapper);
|
||||||
|
|
||||||
|
// 结果转化为指定格式
|
||||||
|
ArrayList<AppGroupDetail> appGroupDetails = new ArrayList<>();
|
||||||
|
for (SysApp sysApp : appList) {
|
||||||
|
AppGroupDetail appGroupDetail = new AppGroupDetail(sysApp.getAppId(), sysApp.getAppName(), sysApp.getAppIcon(), sysApp.getRemark());
|
||||||
|
appGroupDetails.add(appGroupDetail);
|
||||||
|
}
|
||||||
|
|
||||||
|
return appGroupDetails;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SysApp> findList(SysAppRequest sysAppRequest) {
|
public List<SysApp> findList(SysAppRequest sysAppRequest) {
|
||||||
LambdaQueryWrapper<SysApp> wrapper = this.createWrapper(sysAppRequest);
|
LambdaQueryWrapper<SysApp> wrapper = this.createWrapper(sysAppRequest);
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
package cn.stylefeng.roses.kernel.sys.modular.menu.factory;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 菜单信息组装工厂
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/6/14 22:05
|
||||||
|
*/
|
||||||
|
public class MenuFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定参数的菜单集合,缺失的所有的父级菜单id
|
||||||
|
* <p>
|
||||||
|
* 此方法用在菜单管理界面,带搜索条件查询时,组装菜单树使用
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/6/14 22:05
|
||||||
|
*/
|
||||||
|
public static Set<Long> getMenuParentIds(List<SysMenu> sysMenus) {
|
||||||
|
|
||||||
|
// 已经有的菜单id集合
|
||||||
|
Set<Long> alreadyMenuIdList = sysMenus.stream().map(SysMenu::getMenuId).collect(Collectors.toSet());
|
||||||
|
|
||||||
|
// 需要补全的父级id集合
|
||||||
|
Set<Long> needToAddResult = new HashSet<>();
|
||||||
|
|
||||||
|
// 遍历菜单,找到所有的菜单父级集合
|
||||||
|
for (SysMenu sysMenu : sysMenus) {
|
||||||
|
String menuPidsStr = sysMenu.getMenuPids();
|
||||||
|
|
||||||
|
// 去掉中括号符号
|
||||||
|
menuPidsStr = menuPidsStr.replaceAll("\\[", "");
|
||||||
|
menuPidsStr = menuPidsStr.replaceAll("]", "");
|
||||||
|
|
||||||
|
// 获取所有上级id列表
|
||||||
|
String[] menuParentIdList = menuPidsStr.split(",");
|
||||||
|
|
||||||
|
// 查找到缺失的父级id
|
||||||
|
for (String parentMenuIdItem : menuParentIdList) {
|
||||||
|
Long menuId = Long.valueOf(parentMenuIdItem);
|
||||||
|
if (!alreadyMenuIdList.contains(menuId)) {
|
||||||
|
if (!parentMenuIdItem.equals(TreeConstants.DEFAULT_PARENT_ID.toString())) {
|
||||||
|
needToAddResult.add(menuId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return needToAddResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -40,4 +40,13 @@ public class AppGroupDetail {
|
||||||
*/
|
*/
|
||||||
private List<MenuItemDetail> menuList;
|
private List<MenuItemDetail> menuList;
|
||||||
|
|
||||||
|
public AppGroupDetail() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public AppGroupDetail(Long appId, String appName, Long appIcon, String remark) {
|
||||||
|
this.appId = appId;
|
||||||
|
this.appName = appName;
|
||||||
|
this.appIcon = appIcon;
|
||||||
|
this.remark = remark;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,10 @@ import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.enums.SysMenuExceptionEnum;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.enums.SysMenuExceptionEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.factory.MenuFactory;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.mapper.SysMenuMapper;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.mapper.SysMenuMapper;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.request.SysMenuRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.request.SysMenuRequest;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.response.AppGroupDetail;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.response.AppGroupDetail;
|
||||||
|
@ -14,9 +16,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统菜单业务实现层
|
* 系统菜单业务实现层
|
||||||
|
@ -27,6 +31,9 @@ import java.util.Set;
|
||||||
@Service
|
@Service
|
||||||
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
|
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysAppService sysAppService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(SysMenuRequest sysMenuRequest) {
|
public void add(SysMenuRequest sysMenuRequest) {
|
||||||
SysMenu sysMenu = new SysMenu();
|
SysMenu sysMenu = new SysMenu();
|
||||||
|
@ -78,7 +85,39 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AppGroupDetail> getAppMenuGroupDetail(SysMenuRequest sysMenuRequest) {
|
public List<AppGroupDetail> getAppMenuGroupDetail(SysMenuRequest sysMenuRequest) {
|
||||||
|
|
||||||
|
// 1. 获取所有应用列表
|
||||||
|
List<AppGroupDetail> appList = sysAppService.getAppList();
|
||||||
|
if (ObjectUtil.isEmpty(appList)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 所有的应用id
|
||||||
|
Set<Long> totalAppIds = appList.stream().map(AppGroupDetail::getAppId).collect(Collectors.toSet());
|
||||||
|
|
||||||
|
// 2. 获取应用对应的所有菜单
|
||||||
LambdaQueryWrapper<SysMenu> wrapper = this.createWrapper(sysMenuRequest);
|
LambdaQueryWrapper<SysMenu> wrapper = this.createWrapper(sysMenuRequest);
|
||||||
|
wrapper.in(SysMenu::getAppId, totalAppIds);
|
||||||
|
wrapper.select(SysMenu::getMenuId, SysMenu::getMenuParentId, SysMenu::getMenuPids, SysMenu::getMenuName, SysMenu::getAppId, SysMenu::getMenuType);
|
||||||
|
List<SysMenu> sysMenuList = this.list(wrapper);
|
||||||
|
if (ObjectUtil.isEmpty(sysMenuList)) {
|
||||||
|
return appList;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2.1 如果查询条件不为空,则需要补全被查询菜单的父级结构,否则组不成树结构
|
||||||
|
if (StrUtil.isNotBlank(sysMenuRequest.getSearchText())) {
|
||||||
|
Set<Long> menuParentIds = MenuFactory.getMenuParentIds(sysMenuList);
|
||||||
|
if (ObjectUtil.isNotEmpty(menuParentIds)) {
|
||||||
|
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.in(SysMenu::getMenuId, menuParentIds);
|
||||||
|
queryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuParentId, SysMenu::getMenuPids, SysMenu::getMenuName, SysMenu::getAppId, SysMenu::getMenuType);
|
||||||
|
queryWrapper.orderByAsc(SysMenu::getMenuSort);
|
||||||
|
List<SysMenu> parentMenus = this.list(queryWrapper);
|
||||||
|
sysMenuList.addAll(parentMenus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 组装应用信息和菜单信息
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,6 +153,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
||||||
queryWrapper.or().like(SysMenu::getAntdvComponent, searchText);
|
queryWrapper.or().like(SysMenu::getAntdvComponent, searchText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据顺序排序
|
||||||
|
queryWrapper.orderByAsc(SysMenu::getMenuSort);
|
||||||
|
|
||||||
return queryWrapper;
|
return queryWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue