递归遍历树结构-已解决

在项目中用到导航树结构,所以就用递归写了一个遍历导航树的功能。

表结构:

 

/**
	 * 递归获取菜单
	 * 
	 * @param roleKey
	 * @param systemCode
	 * @return
	 */
	public String getSysMenuJson(String roleIds, String menu_pid)
			throws Exception {
		List<Map<String, Object>> list = null;
		if (roleIds == null || roleIds.equals(""))
			return null;
		String[] roles = roleIds.split(",");
		List<Map<String, Object>> dicList = new ArrayList<Map<String, Object>>();
		//当前节点信息
		//dicList = SysMenuListById(roleIds, menu_pid);
		//调用递归子集节点信息
		getChridNavIds(roleIds, menu_pid, dicList);
		return JSONArray.fromObject(dicList).toString();
	}
	/**
	 * 递归获取系统导航菜单
	 * @param roleIds   角色iD
	 * @param parentid  父级菜单ID
	 * @param dicList   
	 */
	private void getChridNavIds(String roleIds, String parentid,List dicList){
		List<Map<String, Object>>  dataDictionaryList= SysMenuListByPid(roleIds, parentid);
		
		for(Map nav:dataDictionaryList){
			List<Map<String, Object>>  childList = new ArrayList<Map<String, Object>> ();
			if(nav!=null){
				Map<String, Object> map = new HashMap<String, Object>();// 每个一级菜单对应的map
				map.put("id", NullHelper.convertNullToNothingnull(nav.get("menu_id")));
				map.put("name", NullHelper.convertNullToNothingnull(nav.get("menu_name")));
				String url = NullHelper.convertNullToNothingnull(nav.get("menu_url"));
				if(StringUtils.isNotBlank(url)){
					map.put("url", url);
				}
				map.put("icon", NullHelper.convertNullToNothingnull(nav.get("menu_img")));
				getChridNavIds(roleIds,nav.get("menu_id").toString(),childList);
				//将同级代码存入childList中
				map.put("menuitem", childList);
				dicList.add(map);
			}
		}
	}
	
	/**
	 * 用PID递归获取父级菜单的所有子集菜单
	 * @param roleIds
	 * @param menu_pid
	 * @param bResult
	 * @return
	 */
	private List<Map<String, Object>> SysMenuListByPid(String roleIds, String menu_pid) {
		StringBuffer menuSql = new StringBuffer();
		menuSql.append("select m.menu_id,m.parent_menu_id,m.menu_name,m.menu_url,m.menu_img,m.is_treenode from sys_menu m ");
		menuSql.append("inner join sys_role_menu_rel rm on rm.menu_id=m.menu_id and m.parent_menu_id in ("+splitRoleId(menu_pid)+") and m.menu_state='1' and rm.role_id in ("+splitRoleId(roleIds)+") ");
		menuSql.append("where 1=1" + " group by m.menu_id,m.parent_menu_id,m.menu_name,m.menu_url,m.menu_img,m.is_treenode,m.menu_seq ");
		menuSql.append("order by m.menu_seq asc ");
		return jdbcTemplate.queryForList(menuSql.toString());
	}

生成json串:

 

[
    {
        "id": "8a929b985da6b83f015da6bbe2620001", 
        "icon": "s-n-t-icon5.png", 
        "name": "制证管理", 
        "menuitem": [
            {
                "id": "8a92e1475da5c3a3015da80915080007", 
                "icon": "", 
                "name": "证照生成", 
                "menuitem": [ ], 
                "url": "license/manageList"
            }, 
            {
                "id": "8a92e1475dbc8d86015dbc91ed990002", 
                "icon": "", 
                "name": "证照审核", 
                "menuitem": [ ], 
                "url": "storage/auditList"
            }, 
            {
                "id": "8a929cee5da76049015da764fd980001", 
                "icon": "", 
                "name": "制证签发", 
                "menuitem": [ ], 
                "url": "storage/signDataList"
            }, 
            {
                "id": "8a929cee5da76049015da7743ae600a0", 
                "icon": "", 
                "name": "打证管理", 
                "menuitem": [ ], 
                "url": "storage/printDataList"
            }
        ], 
        "url": "license/manageList"
    }, 
    {
        "id": "8a929b1a5da632c3015da6347edd0001", 
        "icon": "s-n-t-icon2.png", 
        "name": "证照维护", 
        "menuitem": [
            {
                "id": "8a92e3fd5dea5abd015dea6e6f7b0001", 
                "icon": "", 
                "name": "证照年检", 
                "menuitem": [ ], 
                "url": "licensemaintain/licenseAnnualSurveyList"
            }, 
            {
                "id": "8a929b1a5da632c3015da6368e5a002b", 
                "icon": "", 
                "name": "证照变更", 
                "menuitem": [ ], 
                "url": "licensemaintain/licenseChangeList"
            }, 
            {
                "id": "297e4d0b5dbb4a09015dbc25eb7c0003", 
                "icon": "", 
                "name": "证照注销", 
                "menuitem": [ ], 
                "url": "licensemaintain/licensezhuxiao"
            }, 
            {
                "id": "297e4d0b5dbb4a09015dbc2defb700a4", 
                "icon": "", 
                "name": "证照作废", 
                "menuitem": [ ], 
                "url": "licensemaintain/licensezuofei"
            }, 
            {
                "id": "297e4d0b5dbb4a09015dbc3122e500f6", 
                "icon": "", 
                "name": "证照挂失", 
                "menuitem": [ ], 
                "url": "licensemaintain/licenseguashi"
            }, 
            {
                "id": "297e4d0b5dbb4a09015dbc32dbc60149", 
                "icon": "", 
                "name": "维护审核", 
                "menuitem": [ ], 
                "url": "licensemaintain/licenseshenhe"
            }, 
            {
                "id": "8a92e0f65dc5c003015dc5c58ca60001", 
                "icon": "", 
                "name": "版本管理", 
                "menuitem": [ ], 
                "url": "licensemaintain/versionManagement"
            }, 
            {
                "id": "8a92e0f65dc5c003015dc5c88df30002", 
                "icon": "", 
                "name": "有效期管理", 
                "menuitem": [ ], 
                "url": "licensemaintain/termOfValidityManagement"
            }
        ]
    }, 
    {
        "id": "8a92e3165e177bec015e1786a9a20002", 
        "icon": "s-n-t-icon1.png", 
        "name": "证照查询", 
        "menuitem": [ ], 
        "url": "querylicenses/querManageList"
    }
]

请关注我微信公众号:

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值