菜单树状结构实现

工具类:

package cn.cfae.bcbbs.modules.role.utils;

import cn.cfae.bcbbs.common.utils.CfaeBeanUtils;
import cn.cfae.bcbbs.modules.role.dao.entity.BcbbsAAuthorization;
import cn.cfae.bcbbs.modules.role.web.vo.Menu;
import cn.cfae.bcbbs.modules.role.web.vo.Meta;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @description:
 * @author: ljy
 * @date: 2020/11/26
 * @version: 1.0
 */
public class MenuUtils {

    /**
     * 获取树
     * @param bcbbsAAuthorizations
     * @return
     */
    public static List<Menu> treeMenuList(List<BcbbsAAuthorization> bcbbsAAuthorizations){

        List<Menu> sourceList = conversion(bcbbsAAuthorizations);

        List<Menu> targetList=new ArrayList<>();
        if (sourceList==null) {
            return null;
        }
        List<Menu> pmenus = new ArrayList<>();

        // 先统计出来所有的一级
        Iterator itr = sourceList.iterator();
        while (itr.hasNext()) {
            Menu menu = (Menu) itr.next();
            if(menu.getParentId() == 0L || menu == null){
                pmenus.add(menu);
                itr.remove();
            }
        }

        for (Menu menu: pmenus) {
            targetList.add(treeRoot(sourceList, menu));
        }
        return targetList;
    }

    /**
     * 递归获取菜单
     * treeRoot:( ). <br/>
     * @author lishang
     * @param sourceList
     * @param rootMenu
     * @return
     */
    private static Menu treeRoot(List<Menu> sourceList, Menu rootMenu) {
        if (sourceList == null) {
            return null;
        }
        List<Menu> childList=new ArrayList<Menu>();
        for (Menu menu : sourceList) {
            if(rootMenu.getId().equals(menu.getParentId())){
                Menu menuChild = treeRoot(sourceList, menu);
                childList.add(menuChild);
            }
        }
        if(childList.size()==0){
            return rootMenu;
        }
        rootMenu.setChildren(childList);
        return rootMenu;
    }

    /**
     * 装换数据
     * @param bcbbsAAuthorizations 数据库类型
     * @return 菜单类型
     */
    private static List<Menu> conversion(List<BcbbsAAuthorization> bcbbsAAuthorizations) {

        if (bcbbsAAuthorizations == null){
            return null;
        }

        List<Menu> menus = new ArrayList<>();
        for (BcbbsAAuthorization bcbbsAAuthorization : bcbbsAAuthorizations) {
            Menu menu = new Menu();
            CfaeBeanUtils.copyNotNullProperties(bcbbsAAuthorization, menu);
            menu.setPath(bcbbsAAuthorization.getResourcePath());
            menu.setHidden("1".equals(bcbbsAAuthorization.getHidden()));
            menu.setName(bcbbsAAuthorization.getResourceName());
            Meta meta = new Meta();
            meta.setTitle(bcbbsAAuthorization.getTitle());
            meta.setIcon(bcbbsAAuthorization.getIcon());
            meta.setKeepAlive("1".equals(bcbbsAAuthorization.getKeepAlive()));
            menu.setMeta(meta);
            menus.add(menu);
        }

        return menus;
    }

}

涉及实体:

package cn.xxx.modules.role.dao.entity;

import cn.cfae.bcbbs.modules.pub.Entity.BaseEntity;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 权限表实体类
 *
 * @author makejava
 * @since 2020-11-26 13:53:05
 */
@Data
public class BcbbsAAuthorization extends BaseEntity {
    /**
     * 资源名称
     */
    private String resourceName;
    /**
     * 资源访问地址
     */
    private String resourcePath;
    /**
     * 父级id
     */
    private Long parentId;

    private String hidden;

    private String component;

    private String redirect;

    private String title;

    private String icon;
    /**
     * 是否生效 1-生效 0-失效
     */
    private String status;
    /**
     * 排序
     */
    private Long sort;

    private String keepAlive;

}
package cn.xxx.modules.role.web.vo;

import lombok.Data;

/**
 * @description:
 * @author: ljy
 * @date: 2020/11/26
 * @version: 1.0
 */
@Data
public class Meta {

    private String title;
    private String icon;
    private boolean keepAlive = false;

}
package cn.xxx.modules.role.web.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Collections;
import java.util.List;

/**
 * @description:
 * @author: ljy
 * @date: 2020/11/26
 * @version: 1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Menu {

    private Long id;
    private String path = "";
    private String component = "";
    private boolean hidden;
    private String redirect = "";
    private String name = "";
    /**
     * 父级id
     */
    private Long parentId;
    private Meta meta;
    private List<Menu> children = Collections.EMPTY_LIST;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值