菜单递归管理

实体类

@ApiModel(description = "菜单")
public class Menu {

    @ApiModelProperty("id")
    private String id;

    @ApiModelProperty("父菜单id")
    private String parentId;

    @ApiModelProperty("菜单名称")
    private String menuName;

    @ApiModelProperty("菜单链接")
    private String menuUrl;

    @ApiModelProperty("菜单排序")
    private Integer menutSort;

    @ApiModelProperty("菜单图标")
    private String menuIcon;

    @ApiModelProperty("菜单级别")
    private Integer menuLevel;

    @ApiModelProperty("菜单状态 1、启用 2、未启用'")
    private Integer menuStatus;

    @ApiModelProperty("子菜单")
    private List<Menu> children;
 }

代码

    /**
     * 查询菜单
     * @return
     */
    public Msg<List<Menu>> selectMenu() {
        try{
            //查询所有的菜单列表
            List<Menu> menuLists = menuMapper.selectAll();
            //返回的菜单树信息
            List<Menu> menuTrees = new ArrayList<>();

            //查询一级菜单
            for (Menu menu : menuLists) {
                if (menu.getParentId().equals(FinalUtil.PARENT_ID)){
                    menuTrees.add(menu);
                }
            }
            //遍历获取子菜单
            for (Menu menuTree : menuTrees) {
                List<Menu> selectMenus = menuTree(menuTree.getId(), menuLists);
                menuTree.setChildren(selectMenus);
            }

            return Msg.sucess(menuTrees);
        }catch (Exception e){
            log.error("查询信息异常:" + e);
            return Msg.fail("查询菜单信息异常!");
        }
    }
/**
 * 递归菜单树
 * @param id 一级菜单id
 * @param menuList 所有菜单信息
 * @return 返回子菜单
 */
private List<Menu> menuTree(String id, List<Menu> menuList){
    //返回的子菜单信息
    List<Menu> childrenMenu = new ArrayList<>();
    for (Menu menu : menuList) {
        if (!menu.getParentId().equals(FinalUtil.PARENT_ID)){
            if (menu.getParentId().equals(id)){
                childrenMenu.add(menu);
            }
        }
    }
    //递归遍历
    for (Menu menu : childrenMenu) {
        List<Menu> selectMenus = menuTree(menu.getId(), menuList);
        menu.setChildren(selectMenus);
    }
    //递归出口 childrenMenu长度为0
    if (childrenMenu.size() == 0) {
        return new ArrayList<>();
    }
    return childrenMenu;
}

结果

{
  "success": true,
  "msg": "成功",
  "obj": [
    {
      "id": "274ee35807184524a4c0fe9bf0fdf65f",
      "parentId": "0",
      "menuName": "模拟器菜单",
      "menuUrl": "str111ing",
      "menutSort": 1,
      "menuIcon": "string",
      "menuLevel": 1,
      "menuStatus": 1,
      "children": [
        {
          "id": "136dbde922854533995016156d7d20d7",
          "parentId": "274ee35807184524a4c0fe9bf0fdf65f",
          "menuName": "模拟器01",
          "menuUrl": "str111ing",
          "menutSort": 1,
          "menuIcon": "string",
          "menuLevel": 2,
          "menuStatus": 1,
          "children": [
            {
              "id": "1",
              "parentId": "136dbde922854533995016156d7d20d7",
              "menuName": "3333",
              "menuUrl": "11",
              "menutSort": 1,
              "menuIcon": "",
              "menuLevel": 1,
              "menuStatus": 1,
              "children": [
                {
                  "id": "2",
                  "parentId": "1",
                  "menuName": "4444",
                  "menuUrl": "44",
                  "menutSort": 1,
                  "menuIcon": "",
                  "menuLevel": 1,
                  "menuStatus": 1,
                  "children": [
                    {
                      "id": "3",
                      "parentId": "2",
                      "menuName": "55",
                      "menuUrl": "555",
                      "menutSort": 1,
                      "menuIcon": "",
                      "menuLevel": 1,
                      "menuStatus": 1,
                      "children": []
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "8fad20e7ca614e56ad4d02cfb5552cdb",
          "parentId": "274ee35807184524a4c0fe9bf0fdf65f",
          "menuName": "模拟器02",
          "menuUrl": "str111ing",
          "menutSort": 2,
          "menuIcon": "string",
          "menuLevel": 2,
          "menuStatus": 1,
          "children": []
        }
      ]
    },
    {
      "id": "70428e2b8df34c2e9640d8223d62097b",
      "parentId": "0",
      "menuName": "仪器菜单",
      "menuUrl": "str111ing",
      "menutSort": 2,
      "menuIcon": "string",
      "menuLevel": 1,
      "menuStatus": 1,
      "children": []
    }
  ],
  "number": null
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值