package com.moral.api.pojo.vo.login; import com.fasterxml.jackson.annotation.JsonInclude; import com.moral.api.entity.ManageAccount; import com.moral.api.entity.ManageMenu; import com.moral.api.entity.ManageRole; import com.moral.api.pojo.dto.login.AccountInfoDTO; import lombok.Data; import org.springframework.util.ObjectUtils; import java.util.*; /** * @ClassName AccountInfoVO * @Description TODO * @Author 陈凯裕 * @Date 2021/3/13 16:11 * @Version TODO **/ @Data @JsonInclude(JsonInclude.Include.NON_EMPTY) public class AccountInfoVO { /* * 用户Id * */ private Integer accountId; /* * 用户名称 * */ private String userName; /* * 用户角色 * */ private List roleNames; /* * 用户菜单 * */ private List menus; /** * @Description: DTO转换VO * @Param: [dto] * @return: com.moral.api.pojo.vo.login.AccountInfoVO * @Author: 陈凯裕 * @Date: 2021/3/13 */ public static AccountInfoVO convert(AccountInfoDTO dto) { AccountInfoVO vo = new AccountInfoVO(); ManageAccount account = dto.getAccount(); List menus = dto.getMenus(); List roles = dto.getRoles(); //封装roleNames ArrayList roleNames = new ArrayList<>(); if (!ObjectUtils.isEmpty(roles)) { roles.forEach(role -> roleNames.add(role.getName())); } /*过滤menu无用属性*/ if (!ObjectUtils.isEmpty(menus)) { for (ManageMenu menu : menus) { removeAttribute(menu); } } //menu进行排序 if (!ObjectUtils.isEmpty(menus)) { orderRootMenu(menus); } vo.setAccountId(account.getId()); vo.setUserName(account.getUserName()); vo.setMenus(menus); vo.setRoleNames(roleNames); return vo; } public static void removeAttribute(ManageMenu menu) { menu.setCreateTime(null); menu.setIsDelete(null); menu.setUpdateTime(null); menu.setParentId(null); if (ObjectUtils.isEmpty(menu.getChildren())) return; List children = menu.getChildren(); for (ManageMenu child : children) { removeAttribute(child); } } /** * @Description: 对根菜单进行排序 * @Param: [menus] * @return: void * @Author: 陈凯裕 * @Date: 2021/6/8 */ public static void orderRootMenu(List menus){ menus.sort(Comparator.comparing(ManageMenu::getOrder)); for (ManageMenu menu : menus) { orderMenu(menu); } } /** * @Description: 对非根菜单进行排序 * @Param: [menu] * @return: void * @Author: 陈凯裕 * @Date: 2021/6/8 */ public static void orderMenu(ManageMenu menu){ List children = menu.getChildren(); if(!ObjectUtils.isEmpty(children)){ children.sort(Comparator.comparing(ManageMenu::getOrder)); for (ManageMenu child : children) { orderMenu(child); } }else{ return; } } }