java 组织机构树的拼装--递归算法

递归算法的应用-树形结构数据的拼装

树对象:

package com.qkkj.hardwaremgmt.database.resultmap;

import java.util.List;

import com.qkkj.hardwaremgmt.database.beans.SysMenu;

/**

 * 

 * @Title: SysMenuResultMap.java  

 * @Package com.qkkj.usrmgmt.database.resultmap  

 * @Description: TODO(用于显示主菜单树)  

 * @author wangfudong 

 * @date 2018年5月3日 下午5:30

 * @version V1.0

 */

public class SysMenuTreeResultMap extends SysMenu {

private static final long serialVersionUID = -4114812291607390605L;

//主键

private String menuId;

//父级菜单id

private String parentMenuId;

//排序

private Integer menuSort;

//菜单名称

    private String menuName;

    

    //菜单路径

    private String menuUrl;

//子菜单list

private List<SysMenuTreeResultMap> children;

public String getMenuName() {

return menuName;

}

public void setMenuName(String menuName) {

this.menuName = menuName;

}

public String getMenuUrl() {

return menuUrl;

}

public void setMenuUrl(String menuUrl) {

this.menuUrl = menuUrl;

}

public List<SysMenuTreeResultMap> getChildren() {

return children;

}

public void setChildren(List<SysMenuTreeResultMap> children) {

this.children = children;

}

public String getParentMenuId() {

return parentMenuId;

}

public void setParentMenuId(String parentMenuId) {

this.parentMenuId = parentMenuId;

}

public Integer getMenuSort() {

return menuSort;

}

public void setMenuSort(Integer menuSort) {

this.menuSort = menuSort;

}

public String getMenuId() {

return menuId;

}

public void setMenuId(String menuId) {

this.menuId = menuId;

}

}

递归拼装树:

package com.qkkj.hardwaremgmt.database.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.cache.Cache;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.qkkj.hardwaremgmt.database.beans.SysUser;
import com.qkkj.hardwaremgmt.database.mapper.SysMenuMapper;
import com.qkkj.hardwaremgmt.database.mapper.SysUserMapper;
import com.qkkj.hardwaremgmt.database.mapper.SysUserRoleMapper;
import com.qkkj.hardwaremgmt.database.resultmap.SysMenuTreeResultMap;
import com.qkkj.hardwaremgmt.database.service.IMenuService;
import com.qkkj.hardwaremgmt.framework.config.SysConstants;

@Service(“menuService”)
public class MenuServiceImpl implements IMenuService {
 
@Autowired
private SysUserRoleMapper sysUserRoleMapper;

@Autowired
private SysMenuMapper sysMenuMapper;

@Autowired
private SysUserMapper sysUserMapper;

@Autowired
private EhCacheManager ehCacheManager;


/**
* 根据用户权限集合、
* @author wangfd
* @param userId 用户表主键
*/
@Override
public List<SysMenuTreeResultMap> selectMenuTree(Map<String,Object> param) {

// 根据权限集合、应用id查询一级菜单目录
param.put(“parentMenuId”, “0”);
param.put(“userState”, 0);
List<SysMenuTreeResultMap> resultMenuTree = sysMenuMapper.selectMenuTreeByPermissionIds(param);

// 节点为空直接返回、
if (null == resultMenuTree || resultMenuTree.size() == 0) {
return new ArrayList<SysMenuTreeResultMap>();
}

// 根据一级菜单目录、根据权限集合、应用id 层层查找子集放入到children属性中
resultMenuTree = setMenuChildren(param, resultMenuTree);

return resultMenuTree;
}

/**
* 根据用户id查询用户所有菜单权限返回list集合
* @author wangfd
* @param param 
*/
@Override
public List<String> selectPermissionIds(Map<String,Object> param) {
return sysMenuMapper.selectPermissionIds(param);
}

/**
* 根据一级菜单目录、用户id、应用id 层层查找子集放入到children属性中(内调方法)
* @author wangfd
* @param userId 用户表主键、根节点主页菜单集合
*/
public List<SysMenuTreeResultMap> setMenuChildren(Map<String,Object> param,List<SysMenuTreeResultMap> resultMenuTree){

for (int i = 0; i < resultMenuTree.size(); i++) {
SysMenuTreeResultMap item = resultMenuTree.get(i);
String parentMenuId = item.getMenuId();
param.put(“parentMenuId”, parentMenuId);
List<SysMenuTreeResultMap> resultMenuChildren = sysMenuMapper.selectMenuTreeByPermissionIds(param);
if (null != resultMenuChildren && resultMenuChildren.size() > 0) {
// 递归
resultMenuChildren = setMenuChildren(param, resultMenuChildren);
// 设置子集
item.setChildren(resultMenuChildren);
resultMenuTree.set(i, item);
}
}

return resultMenuTree;
}
   
}

    原文作者:递归算法
    原文地址: https://blog.csdn.net/dongchengxuyuan/article/details/80461145
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞