package com.moral.api.pojo.vo.menu;
|
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
import com.moral.api.entity.Menu;
|
import com.moral.api.pojo.dto.menu.MenuDTO;
|
import com.moral.api.pojo.dto.menu.MenuQueryDTO;
|
import com.moral.constant.ResponseCodeEnum;
|
import lombok.Data;
|
import org.springframework.util.ObjectUtils;
|
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.List;
|
|
/**
|
* @ClassName MenuQueryVO
|
* @Description TODO
|
* @Author 陈凯裕
|
* @Date 2021/4/25 10:02
|
* @Version TODO
|
**/
|
@Data
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
public class MenuQueryVO {
|
|
List<MenuVO> menus;
|
|
public static MenuQueryVO convert(MenuQueryDTO dto) {
|
if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
|
return null;
|
MenuQueryVO vo = new MenuQueryVO();
|
List<MenuDTO> dtos = dto.getDtos();
|
List<MenuVO> vos = new ArrayList<>();
|
for (MenuDTO menuDTO : dtos) {
|
MenuVO menuVO = convertToQueryPage(menuDTO);
|
vos.add(menuVO);
|
}
|
//对根目录进行排序
|
Collections.sort(vos, new Comparator<MenuVO>() {
|
@Override
|
public int compare(MenuVO o1, MenuVO o2) {
|
return o1.getOrder() - o2.getOrder();
|
}
|
});
|
vo.setMenus(vos);
|
return vo;
|
}
|
|
private static MenuVO convertToQueryPage(MenuDTO dto) {
|
Menu menu = dto.getMenu();
|
MenuVO menuVO = convertToQueryPage(menu);
|
return menuVO;
|
}
|
|
private static MenuVO convertToQueryPage(Menu menu) {
|
MenuVO vo = new MenuVO();
|
vo.setId(menu.getId());
|
vo.setParentId(menu.getParentId());
|
vo.setUrl(menu.getUrl());
|
vo.setIcon(menu.getIcon());
|
vo.setName(menu.getName());
|
vo.setOrder(menu.getOrder());
|
List<MenuVO> vos = new ArrayList<>();
|
List<Menu> children = menu.getChildren();
|
if (!ObjectUtils.isEmpty(children)) {
|
//对children进行排序,按照order字段
|
Collections.sort(children, new Comparator<Menu>() {
|
@Override
|
public int compare(Menu o1, Menu o2) {
|
return o1.getOrder() - o2.getOrder();
|
}
|
});
|
for (Menu child : children) {
|
MenuVO menuVO = convertToQueryPage(child);
|
vos.add(menuVO);
|
}
|
vo.setChildren(vos);
|
}
|
return vo;
|
}
|
|
}
|