Selaa lähdekoodia

根据菜单id拿到所有所有的叶子结点

shiqian 4 vuotta sitten
vanhempi
commit
9c494d09be

+ 7 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/domain/SysMenu.java

@@ -19,6 +19,13 @@ public class SysMenu extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
+    /** 目录*/
+    public static final String DICTIONARY = "M";
+    /** 菜单*/
+    public static final String MENU = "C";
+    /** 按钮*/
+    public static final String BUTTON = "F";
+
     /** 菜单ID */
     private Long id;
 

+ 7 - 2
boman-modules/boman-system/src/main/java/com/boman/system/controller/SysMenuController.java

@@ -72,8 +72,8 @@ public class SysMenuController extends BaseController
     /**
      * 加载对应角色菜单列表树, 不包含叶子结点 不包含叶子结点 不包含叶子结点 重要的事情说三遍
      */
-    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
-    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
+    @GetMapping(value = "/treeMenuNotAddLeafNode/{roleId}")
+    public AjaxResult treeMenuNotAddLeafNode(@PathVariable("roleId") Long roleId)
     {
         Long userId = SecurityUtils.getUserId();
         List<SysMenu> menus = menuService.selectMenuList(userId);
@@ -83,6 +83,11 @@ public class SysMenuController extends BaseController
         return ajax;
     }
 
+    @GetMapping(value = "/allLeafNodeById/{menuId}")
+    public AjaxResult allLeafNodeById(@PathVariable("menuId") Long menuId) {
+        return AjaxResult.success(menuService.allLeafNodeById(menuId));
+    }
+
     /**
      * 新增菜单
      */

+ 9 - 0
boman-modules/boman-system/src/main/java/com/boman/system/domain/SysRoleData.java

@@ -13,6 +13,15 @@ public class SysRoleData extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)5 :仅本人数据
+     */
+    public static final String ALL_DATA = "1";
+    public static final String DIY_DATA = "2";
+    public static final String SELF_DEPT_DATA = "3";
+    public static final String ALL_DEPT_DATA = "4";
+    public static final String MYSELF_DATA = "5";
+
     /** 角色权限id */
     private Long id;
 

+ 8 - 0
boman-modules/boman-system/src/main/java/com/boman/system/service/ISysMenuService.java

@@ -49,6 +49,14 @@ public interface ISysMenuService
      */
     public List<SysMenu> selectMenuTreeById(Long id);
 
+    /**
+     * 根据用户ID查询菜单树信息
+     *
+     * @param menuId menuId
+     * @return 菜单列表
+     */
+    List<SysMenu> allLeafNodeById(Long menuId);
+
     /**
      * 根据角色ID查询菜单树信息
      * 

+ 37 - 8
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysMenuServiceImpl.java

@@ -1,17 +1,12 @@
 package com.boman.system.service.impl;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import com.boman.common.core.utils.obj.ObjectUtils;
 import com.boman.common.core.web.domain.AjaxResult;
 import com.boman.system.api.domain.SysMenu;
+import com.google.common.collect.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.boman.common.core.constant.UserConstants;
@@ -123,6 +118,40 @@ public class SysMenuServiceImpl implements ISysMenuService
         return getChildPerms(menus, 0);
     }
 
+    /**
+     * 根据用户ID查询菜单树信息
+     *
+     * @param menuId menuId
+     * @return 菜单列表
+     */
+    @Override
+    public List<SysMenu> allLeafNodeById(Long menuId) {
+        List<SysMenu> tempList = Lists.newArrayListWithCapacity(16);
+        SysMenu menu = selectMenuById(menuId);
+        List<SysMenu> menus = menuMapper.selectMenuList(new SysMenu());
+        List<SysMenu> sysMenus = recursionList(menus, menu, tempList);
+        return ObjectUtils.filter(sysMenus, menu1 -> SysMenu.BUTTON.equals(menu1.getMenuType()));
+    }
+
+    private List<SysMenu> recursionList(List<SysMenu> menus, SysMenu menu, List<SysMenu> tempList) {
+        int child = 0;
+        // 得到子节点列表
+        List<SysMenu> childList = getChildList(menus, menu);
+        for (SysMenu tChild : childList) {
+            if (hasChild(menus, tChild)) {
+                recursionList(menus, tChild, tempList);
+            } else {
+                child++;
+            }
+        }
+
+        if (child == childList.size() && childList.size() != 0) {
+            tempList.addAll(childList);
+        }
+
+        return tempList;
+    }
+
     /**
      * 根据角色ID查询菜单树信息
      * 
@@ -521,6 +550,6 @@ public class SysMenuServiceImpl implements ISysMenuService
      */
     private boolean hasChild(List<SysMenu> list, SysMenu t)
     {
-        return getChildList(list, t).size() > 0 ? true : false;
+        return getChildList(list, t).size() > 0;
     }
 }

+ 1 - 1
boman-modules/boman-system/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -83,7 +83,7 @@
 			 left join sys_user_role ur on rm.role_id = ur.role_id
 			 left join sys_role ro on ur.role_id = ro.id
 			 left join sys_user u on ur.user_id = u.id
-		where u.id = #id} and m.menu_type in ('M', 'C') and m.status = 0  AND ro.status = 0
+		where u.id = #{id} and m.menu_type in ('M', 'C') and m.status = 0  AND ro.status = 0
 		order by m.parent_id, m.order_num
 	</select>
 	

+ 0 - 3
boman-web-core/src/main/java/com/boman/web/core/controller/ObjController.java

@@ -138,7 +138,6 @@ public class ObjController {
     /**
      * 功能描述: 获取表单查询字段、按钮、表头
      * 注意: 都是从redis中拿的,如果数据库和redis不一致,则需刷新一下redis
-     * 刷新的入口为 {@link MyController#loadTable(GenTable)}
      *
      *                    eg:{
      *                          "table": "sys_config"
@@ -156,7 +155,6 @@ public class ObjController {
     /**
      * 功能描述: 获取表单查询字段
      * 注意: 都是从redis中拿的,如果数据库和redis不一致,则需刷新一下redis
-     * 刷新的入口为 {@link MyController#loadTable(GenTable)}
      *
      *                    eg:{
      *                          "table": "sys_config"
@@ -193,7 +191,6 @@ public class ObjController {
     /**
      * 功能描述: 获取表单按钮
      * 注意: 都是从redis中拿的,如果数据库和redis不一致,则需刷新一下redis
-     * 刷新的入口为 {@link MyController#loadTable(GenTable)}
      *
      *                    eg:{
      *                          "table": "sys_config"