diff --git a/plusone-system/plusone-system-application/src/main/java/xyz/zhouxy/plusone/system/application/service/MenuManagementService.java b/plusone-system/plusone-system-application/src/main/java/xyz/zhouxy/plusone/system/application/service/MenuManagementService.java index 84f4f09..ee19a46 100644 --- a/plusone-system/plusone-system-application/src/main/java/xyz/zhouxy/plusone/system/application/service/MenuManagementService.java +++ b/plusone-system/plusone-system-application/src/main/java/xyz/zhouxy/plusone/system/application/service/MenuManagementService.java @@ -1,7 +1,6 @@ package xyz.zhouxy.plusone.system.application.service; -import java.util.Comparator; -import java.util.HashMap; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; @@ -13,8 +12,8 @@ import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import xyz.zhouxy.plusone.commons.util.MoreCollections; import xyz.zhouxy.plusone.constant.EntityStatus; -import xyz.zhouxy.plusone.domain.IWithOrderNumber; import xyz.zhouxy.plusone.exception.DataNotExistException; import xyz.zhouxy.plusone.system.application.common.exception.UnsupportedMenuTypeException; import xyz.zhouxy.plusone.system.application.query.result.MenuViewObject; @@ -108,7 +107,7 @@ public class MenuManagementService { command.getIcon(), command.getHidden(), command.getOrderNumber(), - EntityStatus.of(command.getStatus()), + EntityStatus.of(command.getStatus()), command.getComponent(), command.getResource(), command.getCache(), @@ -139,38 +138,33 @@ public class MenuManagementService { @Transactional(propagation = Propagation.SUPPORTS) public List buildMenuTree(List menus) { - List rootMenus = menus - .stream() - .filter(menu -> Objects.equals(menu.getParentId(), 0L)) - .toList(); - - Map allMenus = new HashMap<>(); - for (var item : menus) { - allMenus.put(item.getId(), item); - } - + // 创建并填充 Map + final Map menuMap = MoreCollections.toHashMap(menus, MenuViewObject::getId); for (MenuViewObject menu : menus) { long parentId = menu.getParentId(); - while (parentId != 0 && !allMenus.containsKey(parentId)) { - MenuViewObject parent = findById(parentId); - if (parent == null) { - break; + if (parentId != 0L) { + while (!menuMap.containsKey(parentId)) { + MenuViewObject parent = findById(parentId); + if (parent == null) { + break; + } + menuMap.put(parent.getId(), parent); + parentId = parent.getParentId(); } - allMenus.put(parent.getId(), parent); - parentId = parent.getParentId(); } } - for (var menu : allMenus.values()) { - var parent = allMenus.getOrDefault(menu.getParentId(), null); + Collection allMenus = menuMap.values(); + for (var menu : allMenus) { + var parent = menuMap.get(menu.getParentId()); if (parent != null) { parent.addChild(menu); } } - return rootMenus - .stream() - .sorted(Comparator.comparing(IWithOrderNumber::getOrderNumber)) + return allMenus.stream() + .filter(menu -> (menu != null) && Objects.equals(menu.getParentId(), 0L)) + .sorted() .toList(); } }