【7.6.0】【sys】【menu】完善获取应用列表信息接口

pull/55/MERGE
fengshuonan 2023-06-14 22:15:37 +08:00
parent 2df2af575e
commit ed9fceddc6
5 changed files with 146 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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

View File

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