lyhzzz před 2 roky
rodič
revize
b5dc38f102

+ 1 - 0
src/main/java/com/fdkankan/manage/controller/SysMenuController.java

@@ -76,6 +76,7 @@ public class SysMenuController extends BaseController{
     public ResultData getByRoleId(@RequestParam(required = false) Long roleId){
         return ResultData.ok(menuService.getByRoleId(null,roleId));
     }
+
     @GetMapping("/getMenuIdsByRoleId")
     public ResultData getMenuIdsByRoleId(@RequestParam(required = false) Long roleId){
         return ResultData.ok(menuService.getMenuIdsByRoleId(roleId));

+ 2 - 1
src/main/java/com/fdkankan/manage/mapper/ISysRoleMenuMapper.java

@@ -1,5 +1,6 @@
 package com.fdkankan.manage.mapper;
 
+import com.fdkankan.manage.entity.SysMenu;
 import com.fdkankan.manage.entity.SysRoleMenu;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -18,5 +19,5 @@ import java.util.List;
 @Mapper
 public interface ISysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
 
-    List<Long> getButtonIdsByRoleId(@Param("roleId") Long roleId);
+    List<SysMenu> getButtonIdsByRoleId(@Param("roleId") Long roleId);
 }

+ 2 - 1
src/main/java/com/fdkankan/manage/service/ISysRoleMenuService.java

@@ -1,5 +1,6 @@
 package com.fdkankan.manage.service;
 
+import com.fdkankan.manage.entity.SysMenu;
 import com.fdkankan.manage.entity.SysRoleMenu;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -21,5 +22,5 @@ public interface ISysRoleMenuService extends IService<SysRoleMenu> {
 
     List<SysRoleMenu> getByRoleId(Long roleId);
 
-    List<Long> getButtonIdsByRoleId(Long roleId);
+    List<SysMenu> getButtonIdsByRoleId(Long roleId);
 }

+ 37 - 5
src/main/java/com/fdkankan/manage/service/impl/SysMenuServiceImpl.java

@@ -18,10 +18,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -167,6 +164,41 @@ public class SysMenuServiceImpl extends ServiceImpl<ISysMenuMapper, SysMenu> imp
 
     @Override
     public List<Long> getMenuIdsByRoleId(Long roleId) {
-        return  roleMenuService.getButtonIdsByRoleId(roleId);
+        List<SysRoleMenu> roleMenus = roleMenuService.getByRoleId(roleId);
+        if(roleMenus.size() <=0){
+            return new ArrayList<>();
+        }
+        Set<Long> menuIds = roleMenus.stream().map(SysRoleMenu::getMenuId).collect(Collectors.toSet());
+        HashMap<Long, SysMenu> menuMap = this.getByIds(new ArrayList<>(menuIds));
+
+        Set<Long> setParentIds = new HashSet<>();
+        List<Long> returnMenuIds = new ArrayList<>();
+        List<Long> delMenuIds = new ArrayList<>();
+        //如果父菜单不包含全部子菜单,将父菜单移除,不返回前端
+        for (Long menuId : menuMap.keySet()) {
+            Long parentId = menuMap.get(menuId).getParentId();
+            if(parentId != null && menuMap.containsKey(parentId) && !setParentIds.contains(parentId)){
+                setParentIds.add(parentId);
+                List<SysMenu> menuList = this.getBySonById(parentId);
+                for (SysMenu sysMenu : menuList) {
+                    if(!menuMap.containsKey(sysMenu.getId()) ){
+                        delMenuIds.add(parentId);
+                    }
+                }
+            }
+        }
+        for (Long menuId : menuIds) {
+            if(!delMenuIds.contains(menuId)){
+                returnMenuIds.add(menuId);
+            }
+        }
+
+        return returnMenuIds;
+    }
+
+    private List<SysMenu> getBySonById(Long parentId) {
+        LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysMenu::getParentId,parentId);
+        return  this.list(wrapper);
     }
 }

+ 1 - 1
src/main/java/com/fdkankan/manage/service/impl/SysRoleMenuServiceImpl.java

@@ -67,7 +67,7 @@ public class SysRoleMenuServiceImpl extends ServiceImpl<ISysRoleMenuMapper, SysR
     }
 
     @Override
-    public List<Long> getButtonIdsByRoleId(Long roleId) {
+    public List<SysMenu> getButtonIdsByRoleId(Long roleId) {
         return this.getBaseMapper().getButtonIdsByRoleId(roleId);
     }
 }

+ 2 - 2
src/main/resources/mapper/manage/SysRoleMenuMapper.xml

@@ -2,8 +2,8 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fdkankan.manage.mapper.ISysRoleMenuMapper">
 
-    <select id="getButtonIdsByRoleId" resultType="java.lang.Long">
-        select m.id from sys_menu m left join sys_role_menu r on m.id = r.menu_id
+    <select id="getButtonIdsByRoleId" resultType="com.fdkankan.manage.entity.SysMenu">
+        select m.* from sys_menu m left join sys_role_menu r on m.id = r.menu_id
         where m.type = 2 and role_id = #{roleId}
     </select>
 </mapper>