结构不多说,bean的封装很简单,直接上核心代码吧,自己根据需要把不要的属性自己过滤掉:
public List<MenuBo> getMenuByUserId(Long user_id,Long company_id) { //获取所有的菜单 List<MenuBo> rootMenu = new ArrayList<>(); rootMenu = companyFuncInfoMapper.getMenuByUserId(user_id); List<Long> func_list = companyFuncInfoMapper.getFuncCompanyIdShipByCompanyId(company_id); Iterator<MenuBo> it=rootMenu.iterator(); while(it.hasNext()){ MenuBo menuBoIt=it.next(); if(!func_list.contains(menuBoIt.getId())){ it.remove(); } } //最后的结果 List<MenuBo> menuList = new ArrayList<>(); // 先找到所有的一级菜单 for (int i = 0; i < rootMenu .size(); i++) { // 一级菜单没有parentId if (rootMenu .get(i).getPid()==0L) { // 一级菜单没有parentId menuList.add(rootMenu.get(i)); } } // 为一级菜单设置子菜单,getChild是递归调用的 for (MenuBo menu : menuList) { Meta meta = new Meta(); meta.setBreadName(menu.getBreadName()); meta.setBreadIcon(menu.getBreadIcon()); meta.setTitle(menu.getBreadName()); menu.setComponent(menu.getComponent()); menu.setMeta(meta); menu.setChildren(getChild(menu.getId(), rootMenu)); } return menuList; }
获取子菜单的方法:
private static List<MenuBo> getChild(Long id, List<MenuBo> rootMenu) { // 子菜单 List<MenuBo> childList = new ArrayList<>(); for (MenuBo menu : rootMenu) { // 遍历所有节点,将父菜单id与传过来的id比较 if (menu.getPid()!=null) { if (menu.getPid().intValue()==id.intValue()) { Meta meta = new Meta(); meta.setBreadName(menu.getBreadName()); meta.setBreadIcon(menu.getBreadIcon()); meta.setTitle(menu.getBreadName()); menu.setMeta(meta); menu.setComponent(menu.getComponent()); menu.setTitle(menu.getBreadName()); childList.add(menu); } } } // 把子菜单的子菜单再循环一遍 for (MenuBo children : childList) {// 没有url子菜单还有子菜单 if (StringUtils.isBlank(children.getPath())) { // 递归 children.setChildren(getChild(children.getId(), rootMenu)); } } // 递归退出条件 if (childList.size() == 0) { return null; } return childList; }
最终结果:
{ "code": "000000", "msg": "SUCCESS", "data": [{ "id": 119, "pid": 0, "path": "", "name": "parkManage", "breadName": "停车场管理", "component": "homePage", "breadIcon": "logo-buffer", "title": null, "func_type": "0", "children": [{ "id": 121, "pid": 119, "path": "", "name": "parkInfo", "breadName": "停车场基本信息", "component": "parkManagement/parkInfo/parkInfo", "breadIcon": "ios-cafe", "title": "停车场基本信息", "func_type": "0", "children": [{ "id": 140, "pid": 121, "path": "", "name": "parkInfoManage", "breadName": "停车场信息管理", "component": "parkManagement/parkInfo/parkInfoManage", "breadIcon": "ios-cafe", "title": "停车场信息管理", "func_type": "2", "children": null, "meta": { "breadName": "停车场信息管理", "breadIcon": "ios-cafe", "title": "停车场信息管理" } }, { "id": 146, "pid": 121, "path": "businessUser", "name": "businessUser", "breadName": "商家用户管理", "component": "parkManagement/parkInfo/businessUser", "breadIcon": "ios-cafe", "title": "商家用户管理", "func_type": "2", "children": null, "meta": { "breadName": "商家用户管理", "breadIcon": "ios-cafe", "title": "商家用户管理" } }], "meta": { "breadName": "停车场基本信息", "breadIcon": "ios-cafe", "title": "停车场基本信息" } }, { "id": 122, "pid": 119, "path": "parkConfig", "name": "parkConfig", "breadName": "停车场配置", "component": "parkManagement/parkConfig/parkConfig", "breadIcon": "ios-cafe", "title": "停车场配置", "func_type": "0", "children": null, "meta": { "breadName": "停车场配置", "breadIcon": "ios-cafe", "title": "停车场配置" } }], "meta": { "breadName": "停车场管理", "breadIcon": "logo-buffer", "title": "停车场管理" } }, { "id": 123, "pid": 0, "path": "", "name": "flowDetails", "breadName": "流水明细查询", "component": "homePage", "breadIcon": "logo-buffer", "title": null, "func_type": "0", "children": [{ "id": 124, "pid": 123, "path": "carflowInfos", "name": "carflowInfos", "breadName": "离场记录", "component": "flowDetailsQuiry/carflowInfo", "breadIcon": "ios-cafe", "title": "离场记录", "func_type": "0", "children": null, "meta": { "breadName": "离场记录", "breadIcon": "ios-cafe", "title": "离场记录" } }, { "id": 126, "pid": 123, "path": "flowingWater", "name": "flowingWater", "breadName": "在场车辆", "component": "flowDetailsQuiry/flowingWater", "breadIcon": "ios-cafe", "title": "在场车辆", "func_type": "0", "children": null, "meta": { "breadName": "在场车辆", "breadIcon": "ios-cafe", "title": "在场车辆" } }, { "id": 125, "pid": 123, "path": "payWater", "name": "payWater", "breadName": "收费流水", "component": "flowDetailsQuiry/payWater", "breadIcon": "ios-cafe", "title": "收费流水", "func_type": "0", "children": null, "meta": { "breadName": "收费流水", "breadIcon": "ios-cafe", "title": "收费流水" } }], "meta": { "breadName": "流水明细查询", "breadIcon": "logo-buffer", "title": "流水明细查询" } }, { "id": 127, "pid": 0, "path": "", "name": "reportQuery", "breadName": "报表查询", "component": "homePage", "breadIcon": "logo-buffer", "title": null, "func_type": "0", "children": [{ "id": 128, "pid": 127, "path": "chargeDailyReport", "name": "chargeDailyReport", "breadName": "收费统计日报表", "component": "reportQuery/chargeDailyReport", "breadIcon": "ios-cafe", "title": "收费统计日报表", "func_type": "0", "children": null, "meta": { "breadName": "收费统计日报表", "breadIcon": "ios-cafe", "title": "收费统计日报表" } }, { "id": 147, "pid": 127, "path": "vehicleReport", "name": "vehicleReport", "breadName": "车辆进出场报表", "component": "reportQuery/vehicleReport", "breadIcon": "ios-cafe", "title": "车辆进出场报表", "func_type": "0", "children": null, "meta": { "breadName": "车辆进出场报表", "breadIcon": "ios-cafe", "title": "车辆进出场报表" } }, { "id": 148, "pid": 127, "path": "temporaryReport", "name": "temporaryReport", "breadName": "临停收费报表", "component": "reportQuery/temporaryReport", "breadIcon": "ios-cafe", "title": "临停收费报表", "func_type": "0", "children": null, "meta": { "breadName": "临停收费报表", "breadIcon": "ios-cafe", "title": "临停收费报表" } }, { "id": 149, "pid": 127, "path": "paymentReport", "name": "paymentReport", "breadName": "支付统计报表", "component": "reportQuery/paymentReport", "breadIcon": "ios-cafe", "title": "支付统计报表", "func_type": "0", "children": null, "meta": { "breadName": "支付统计报表", "breadIcon": "ios-cafe", "title": "支付统计报表" } }], "meta": { "breadName": "报表查询", "breadIcon": "logo-buffer", "title": "报表查询" } }, { "id": 129, "pid": 0, "path": "", "name": "financialControl", "breadName": "财务管理", "component": "homePage", "breadIcon": "logo-buffer", "title": null, "func_type": "0", "children": [{ "id": 130, "pid": 129, "path": "merchant", "name": "merchant", "breadName": "商家充值", "component": "financialManage/merchant", "breadIcon": "ios-cafe", "title": "商家充值", "func_type": "0", "children": null, "meta": { "breadName": "商家充值", "breadIcon": "ios-cafe", "title": "商家充值" } }, { "id": 131, "pid": 129, "path": "vipRecharge", "name": "vipRecharge", "breadName": "VIP开通/续费", "component": "financialManage/vipRecharge", "breadIcon": "ios-cafe", "title": "VIP开通/续费", "func_type": "0", "children": null, "meta": { "breadName": "VIP开通/续费", "breadIcon": "ios-cafe", "title": "VIP开通/续费" } }, { "id": 144, "pid": 129, "path": "rechargeRule", "name": "rechargeRule", "breadName": "充值规则管理", "component": "financialManage/rechargeRule", "breadIcon": "ios-cafe", "title": "充值规则管理", "func_type": "0", "children": null, "meta": { "breadName": "充值规则管理", "breadIcon": "ios-cafe", "title": "充值规则管理" } }], "meta": { "breadName": "财务管理", "breadIcon": "logo-buffer", "title": "财务管理" } }, { "id": 132, "pid": 0, "path": "", "name": "carOwnerManagement", "breadName": "车主管理", "component": "homePage", "breadIcon": "logo-buffer", "title": null, "func_type": "0", "children": [{ "id": 133, "pid": 132, "path": "carOwner", "name": "carOwner", "breadName": "车主信息", "component": "carOwnerManagement/carowner", "breadIcon": "ios-cafe", "title": "车主信息", "func_type": "0", "children": null, "meta": { "breadName": "车主信息", "breadIcon": "ios-cafe", "title": "车主信息" } }, { "id": 134, "pid": 132, "path": "vehicle", "name": "vehicle", "breadName": "车辆管理", "component": "carOwnerManagement/vehicle/vehicle", "breadIcon": "ios-cafe", "title": "车辆管理", "func_type": "0", "children": null, "meta": { "breadName": "车辆管理", "breadIcon": "ios-cafe", "title": "车辆管理" } }, { "id": 135, "pid": 132, "path": "vipType", "name": "vipType", "breadName": "VIP类型", "component": "carOwnerManagement/vip/vip", "breadIcon": "ios-cafe", "title": "VIP类型", "func_type": "0", "children": null, "meta": { "breadName": "VIP类型", "breadIcon": "ios-cafe", "title": "VIP类型" } }], "meta": { "breadName": "车主管理", "breadIcon": "logo-buffer", "title": "车主管理" } }, { "id": 44, "pid": 0, "path": "", "name": "systemManagement", "breadName": "系统管理", "component": "homePage", "breadIcon": "logo-buffer", "title": null, "func_type": "0", "children": [{ "id": 47, "pid": 44, "path": "userManagement", "name": "userManagement", "breadName": "用户管理", "component": "systemManagement/userManagement/user", "breadIcon": "ios-cafe", "title": "用户管理", "func_type": "0", "children": null, "meta": { "breadName": "用户管理", "breadIcon": "ios-cafe", "title": "用户管理" } }, { "id": 48, "pid": 44, "path": "roleManagement", "name": "roleManagement", "breadName": "角色管理", "component": "systemManagement/roleManagement/role", "breadIcon": "ios-cafe", "title": "角色管理", "func_type": "0", "children": null, "meta": { "breadName": "角色管理", "breadIcon": "ios-cafe", "title": "角色管理" } }, { "id": 49, "pid": 44, "path": "functionalManagement", "name": "functionalManagement", "breadName": "功能管理", "component": "systemManagement/functionalManagement/functional", "breadIcon": "ios-cafe", "title": "功能管理", "func_type": "0", "children": null, "meta": { "breadName": "功能管理", "breadIcon": "ios-cafe", "title": "功能管理" } }], "meta": { "breadName": "系统管理", "breadIcon": "logo-buffer", "title": "系统管理" } }, { "id": 142, "pid": 0, "path": "/homePage", "name": "", "breadName": "首页", "component": "homePage", "breadIcon": "ios-home", "title": null, "func_type": "0", "children": [{ "id": 143, "pid": 142, "path": "", "name": "homeMain", "breadName": "控制台", "component": "homeMain/homeMain", "breadIcon": "md-settings", "title": "控制台", "func_type": "0", "children": null, "meta": { "breadName": "控制台", "breadIcon": "md-settings", "title": "控制台" } }], "meta": { "breadName": "首页", "breadIcon": "ios-home", "title": "首页" } }] }
大家看json结构自己写一下实体类就行了。