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.sys.modular.app.entity.SysApp;
|
||||
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 java.util.List;
|
||||
|
@ -79,4 +80,12 @@ public interface SysAppService extends IService<SysApp> {
|
|||
*/
|
||||
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.pojo.entity.BaseEntity;
|
||||
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.sys.modular.app.entity.SysApp;
|
||||
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.pojo.request.SysAppRequest;
|
||||
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
@ -21,6 +23,7 @@ import org.springframework.stereotype.Service;
|
|||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -99,6 +102,29 @@ public class SysAppServiceImpl extends ServiceImpl<SysAppMapper, SysApp> impleme
|
|||
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
|
||||
public List<SysApp> findList(SysAppRequest 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;
|
||||
|
||||
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.StrUtil;
|
||||
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.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.pojo.request.SysMenuRequest;
|
||||
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 org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 系统菜单业务实现层
|
||||
|
@ -27,6 +31,9 @@ import java.util.Set;
|
|||
@Service
|
||||
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
|
||||
|
||||
@Resource
|
||||
private SysAppService sysAppService;
|
||||
|
||||
@Override
|
||||
public void add(SysMenuRequest sysMenuRequest) {
|
||||
SysMenu sysMenu = new SysMenu();
|
||||
|
@ -78,7 +85,39 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
|
||||
@Override
|
||||
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);
|
||||
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<>();
|
||||
}
|
||||
|
||||
|
@ -114,6 +153,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
queryWrapper.or().like(SysMenu::getAntdvComponent, searchText);
|
||||
}
|
||||
|
||||
// 根据顺序排序
|
||||
queryWrapper.orderByAsc(SysMenu::getMenuSort);
|
||||
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue