工具类:
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;
}