xieb
2023-10-19 1dd5d8f8a616f5cf3caa7828d46989c7d3dcafc4
skjcmanager/skjcmanager-service/skjcmanager-system/src/main/java/cn/gistack/system/service/impl/MenuServiceImpl.java
@@ -17,6 +17,8 @@
package cn.gistack.system.service.impl;
import cn.gistack.system.entity.*;
import cn.gistack.system.vo.Meta;
import cn.gistack.system.vo.WebMenuVO;
import cn.gistack.system.wrapper.MenuWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -68,6 +70,10 @@
   public List<MenuVO> lazyList(Long parentId, Map<String, Object> param) {
      if (Func.isEmpty(Func.toStr(param.get(PARENT_ID)))) {
         parentId = null;
      }
      // 如果不是超级管理员
      if (!AuthUtil.isAdministrator()){
         param.put("super",1);
      }
      return baseMapper.lazyList(parentId, param);
   }
@@ -144,7 +150,12 @@
   @Override
   public List<TreeNode> grantTree(BladeUser user) {
      List<TreeNode> menuTree = user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTree() : baseMapper.grantTreeByRole(Func.toLongList(user.getRoleId()));
      Map<String, Object> param = new HashMap<>(1);
      // 如果不是超级管理员
      if(!AuthUtil.isAdministrator()){
         return ForestNodeMerger.merge(tenantPackageTree(baseMapper.grantTreeNew(), user.getTenantId()));
      }
      List<TreeNode> menuTree = user.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? baseMapper.grantTree(param) : baseMapper.grantTreeByRole(Func.toLongList(user.getRoleId()));
      return ForestNodeMerger.merge(tenantPackageTree(menuTree, user.getTenantId()));
   }
@@ -278,9 +289,10 @@
         );
      }
      Long cnt = baseMapper.selectCount(menuQueryWrapper);
      if (cnt > 0L) {
         throw new ServiceException("菜单名或编号已存在!");
      }
      //控制不允许重复菜单名
//      if (cnt > 0L) {
//         throw new ServiceException("菜单名或编号已存在!");
//      }
      if (menu.getParentId() == null && menu.getId() == null) {
         menu.setParentId(BladeConstant.TOP_PARENT_ID);
      }
@@ -294,4 +306,68 @@
      return saveOrUpdate(menu);
   }
   @Override
   public List<MenuVO> getAppMenu(String roleId) {
      String[] ids = roleId.split(",");
      return baseMapper.selectAppMenu(ids);
   }
   @Override
   public List<WebMenuVO> getWebMenu(String roleId) {
      List<MenuVO> routes = routes(roleId, null);
      List<MenuVO> list = routes.stream().filter(r -> Func.equals(r.getAlias(), "web")).collect(Collectors.toList());
      list.addAll(routes.stream().filter(r -> Func.equals(r.getAlias(), "newWeb")).collect(Collectors.toList()));
      list.addAll(routes.stream().filter(r -> Func.equals(r.getAlias(), "superWeb")).collect(Collectors.toList()));
      if (list.size()>0){
         MenuVO menuVO = list.get(0);
//         int level = 0;
         WebMenuVO webMenuVO = buildWebMenuVO(menuVO);
         return webMenuVO.getChildren();
      }else {
         return null;
      }
   }
   @Override
   public List<MenuVO> getButtonList(String roleId) {
      return baseMapper.getButtonList(Func.toLongList(roleId));
   }
   public WebMenuVO buildWebMenuVO(MenuVO menuVO){
      WebMenuVO webMenuVO = new WebMenuVO();
      Meta meta = new Meta();
      webMenuVO.setMeta(meta);
      webMenuVO.getMeta().setLevel(menuVO.getLevel());
//      level++;
//      final int levelTemp = level;
      //设置基础信息
      webMenuVO.setPath(menuVO.getPath());
      webMenuVO.setComponent(menuVO.getComponents());
      webMenuVO.getMeta().setIcon(menuVO.getIconPath());
      webMenuVO.getMeta().setTitle(menuVO.getName());
      webMenuVO.setComponentPath(menuVO.getComponentPath());
      if (Func.equals(menuVO.getHasSubMenu(),"1")){
         webMenuVO.getMeta().setHasSubMenu(true);
      }else {
         webMenuVO.getMeta().setHasSubMenu(false);
      }
      if (menuVO.getChildren().size()>0){
         //有子菜单
         List<WebMenuVO> list = new ArrayList<>();
         menuVO.getChildren().forEach(menu->{
            WebMenuVO webMenuVO1 = buildWebMenuVO(menu);
            list.add(webMenuVO1);
         });
         webMenuVO.setChildren(list);
      }
      return webMenuVO;
   }
}