|
@@ -9,6 +9,7 @@ import java.util.List;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
+import com.boman.common.core.utils.obj.ObjectUtils;
|
|
import com.boman.common.core.web.domain.AjaxResult;
|
|
import com.boman.common.core.web.domain.AjaxResult;
|
|
import com.boman.system.api.domain.SysMenu;
|
|
import com.boman.system.api.domain.SysMenu;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -189,29 +190,42 @@ public class SysMenuServiceImpl implements ISysMenuService
|
|
* @return 树结构列表
|
|
* @return 树结构列表
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public List<SysMenu> buildMenuTree(List<SysMenu> menus)
|
|
|
|
- {
|
|
|
|
- List<SysMenu> returnList = new ArrayList<SysMenu>();
|
|
|
|
- List<Long> tempList = new ArrayList<Long>();
|
|
|
|
- for (SysMenu dept : menus)
|
|
|
|
- {
|
|
|
|
- tempList.add(dept.getId());
|
|
|
|
- }
|
|
|
|
- for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
|
|
|
|
- {
|
|
|
|
- SysMenu menu = (SysMenu) iterator.next();
|
|
|
|
|
|
+ public List<SysMenu> buildMenuTree(List<SysMenu> menus) {
|
|
|
|
+ List<SysMenu> returnList = new ArrayList<>();
|
|
|
|
+ List<Long> allMenuId = ObjectUtils.map(menus, SysMenu::getId);
|
|
|
|
+ for (SysMenu menu : menus) {
|
|
// 如果是顶级节点, 遍历该父节点的所有子节点
|
|
// 如果是顶级节点, 遍历该父节点的所有子节点
|
|
- if (!tempList.contains(menu.getParentId()))
|
|
|
|
- {
|
|
|
|
- recursionFn(menus, menu);
|
|
|
|
|
|
+ if (!allMenuId.contains(menu.getParentId())) {
|
|
|
|
+ recursionNotAddLeafNode(menus, menu);
|
|
returnList.add(menu);
|
|
returnList.add(menu);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if (returnList.isEmpty())
|
|
|
|
- {
|
|
|
|
- returnList = menus;
|
|
|
|
|
|
+
|
|
|
|
+ return returnList.isEmpty() ? menus : returnList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 功能描述: 递归调用,叶子节点不放到父类中
|
|
|
|
+ *
|
|
|
|
+ * @param list 所有的菜单
|
|
|
|
+ * @param menu 当前菜单
|
|
|
|
+ */
|
|
|
|
+ private void recursionNotAddLeafNode(List<SysMenu> list, SysMenu menu) {
|
|
|
|
+ // 叶子结点
|
|
|
|
+ int count = 0;
|
|
|
|
+ // 得到子节点列表
|
|
|
|
+ List<SysMenu> childList = getChildList(list, menu);
|
|
|
|
+ for (SysMenu tChild : childList) {
|
|
|
|
+ if (hasChild(list, tChild)) {
|
|
|
|
+ recursionFn(list, tChild);
|
|
|
|
+ } else {
|
|
|
|
+ // 为叶子节点
|
|
|
|
+ count++;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (count != childList.size()) {
|
|
|
|
+ menu.setChildren(childList);
|
|
}
|
|
}
|
|
- return returnList;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|