递归遍历树结构-已解决(java)

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

表结构:

 

 
  1. /**

  2. * 递归获取菜单

  3. *

  4. * @param roleKey

  5. * @param systemCode

  6. * @return

  7. */

  8. public String getSysMenuJson(String roleIds, String menu_pid)

  9. throws Exception {

  10. List<Map<String, Object>> list = null;

  11. if (roleIds == null || roleIds.equals(""))

  12. return null;

  13. String[] roles = roleIds.split(",");

  14. List<Map<String, Object>> dicList = new ArrayList<Map<String, Object>>();

  15. //当前节点信息

  16. //dicList = SysMenuListById(roleIds, menu_pid);

  17. //调用递归子集节点信息

  18. getChridNavIds(roleIds, menu_pid, dicList);

  19. return JSONArray.fromObject(dicList).toString();

  20. }

  21. /**

  22. * 递归获取系统导航菜单

  23. * @param roleIds 角色iD

  24. * @param parentid 父级菜单ID

  25. * @param dicList

  26. */

  27. private void getChridNavIds(String roleIds, String parentid,List dicList){

  28. List<Map<String, Object>> dataDictionaryList= SysMenuListByPid(roleIds, parentid);

  29.  
  30. for(Map nav:dataDictionaryList){

  31. List<Map<String, Object>> childList = new ArrayList<Map<String, Object>> ();

  32. if(nav!=null){

  33. Map<String, Object> map = new HashMap<String, Object>();// 每个一级菜单对应的map

  34. map.put("id", NullHelper.convertNullToNothingnull(nav.get("menu_id")));

  35. map.put("name", NullHelper.convertNullToNothingnull(nav.get("menu_name")));

  36. String url = NullHelper.convertNullToNothingnull(nav.get("menu_url"));

  37. if(StringUtils.isNotBlank(url)){

  38. map.put("url", url);

  39. }

  40. map.put("icon", NullHelper.convertNullToNothingnull(nav.get("menu_img")));

  41. getChridNavIds(roleIds,nav.get("menu_id").toString(),childList);

  42. //将同级代码存入childList中

  43. map.put("menuitem", childList);

  44. dicList.add(map);

  45. }

  46. }

  47. }

  48.  
  49. /**

  50. * 用PID递归获取父级菜单的所有子集菜单

  51. * @param roleIds

  52. * @param menu_pid

  53. * @param bResult

  54. * @return

  55. */

  56. private List<Map<String, Object>> SysMenuListByPid(String roleIds, String menu_pid) {

  57. StringBuffer menuSql = new StringBuffer();

  58. 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 ");

  59. 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)+") ");

  60. 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 ");

  61. menuSql.append("order by m.menu_seq asc ");

  62. return jdbcTemplate.queryForList(menuSql.toString());

  63. }

生成json串:

 

 
  1. [

  2. {

  3. "id": "8a929b985da6b83f015da6bbe2620001",

  4. "icon": "s-n-t-icon5.png",

  5. "name": "制证管理",

  6. "menuitem": [

  7. {

  8. "id": "8a92e1475da5c3a3015da80915080007",

  9. "icon": "",

  10. "name": "证照生成",

  11. "menuitem": [ ],

  12. "url": "license/manageList"

  13. },

  14. {

  15. "id": "8a92e1475dbc8d86015dbc91ed990002",

  16. "icon": "",

  17. "name": "证照审核",

  18. "menuitem": [ ],

  19. "url": "storage/auditList"

  20. },

  21. {

  22. "id": "8a929cee5da76049015da764fd980001",

  23. "icon": "",

  24. "name": "制证签发",

  25. "menuitem": [ ],

  26. "url": "storage/signDataList"

  27. },

  28. {

  29. "id": "8a929cee5da76049015da7743ae600a0",

  30. "icon": "",

  31. "name": "打证管理",

  32. "menuitem": [ ],

  33. "url": "storage/printDataList"

  34. }

  35. ],

  36. "url": "license/manageList"

  37. },

  38. {

  39. "id": "8a929b1a5da632c3015da6347edd0001",

  40. "icon": "s-n-t-icon2.png",

  41. "name": "证照维护",

  42. "menuitem": [

  43. {

  44. "id": "8a92e3fd5dea5abd015dea6e6f7b0001",

  45. "icon": "",

  46. "name": "证照年检",

  47. "menuitem": [ ],

  48. "url": "licensemaintain/licenseAnnualSurveyList"

  49. },

  50. {

  51. "id": "8a929b1a5da632c3015da6368e5a002b",

  52. "icon": "",

  53. "name": "证照变更",

  54. "menuitem": [ ],

  55. "url": "licensemaintain/licenseChangeList"

  56. },

  57. {

  58. "id": "297e4d0b5dbb4a09015dbc25eb7c0003",

  59. "icon": "",

  60. "name": "证照注销",

  61. "menuitem": [ ],

  62. "url": "licensemaintain/licensezhuxiao"

  63. },

  64. {

  65. "id": "297e4d0b5dbb4a09015dbc2defb700a4",

  66. "icon": "",

  67. "name": "证照作废",

  68. "menuitem": [ ],

  69. "url": "licensemaintain/licensezuofei"

  70. },

  71. {

  72. "id": "297e4d0b5dbb4a09015dbc3122e500f6",

  73. "icon": "",

  74. "name": "证照挂失",

  75. "menuitem": [ ],

  76. "url": "licensemaintain/licenseguashi"

  77. },

  78. {

  79. "id": "297e4d0b5dbb4a09015dbc32dbc60149",

  80. "icon": "",

  81. "name": "维护审核",

  82. "menuitem": [ ],

  83. "url": "licensemaintain/licenseshenhe"

  84. },

  85. {

  86. "id": "8a92e0f65dc5c003015dc5c58ca60001",

  87. "icon": "",

  88. "name": "版本管理",

  89. "menuitem": [ ],

  90. "url": "licensemaintain/versionManagement"

  91. },

  92. {

  93. "id": "8a92e0f65dc5c003015dc5c88df30002",

  94. "icon": "",

  95. "name": "有效期管理",

  96. "menuitem": [ ],

  97. "url": "licensemaintain/termOfValidityManagement"

  98. }

  99. ]

  100. },

  101. {

  102. "id": "8a92e3165e177bec015e1786a9a20002",

  103. "icon": "s-n-t-icon1.png",

  104. "name": "证照查询",

  105. "menuitem": [ ],

  106. "url": "querylicenses/querManageList"

  107. }

  108. ]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值