/** * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com). *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springblade.system.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import org.springblade.core.tool.node.ForestNodeMerger; import org.springblade.core.tool.utils.Func; import org.springblade.system.dto.MenuDTO; import org.springblade.system.entity.Menu; import org.springblade.system.entity.RoleMenu; import org.springblade.system.mapper.MenuMapper; import org.springblade.system.service.IMenuService; import org.springblade.system.service.IRoleMenuService; import org.springblade.system.vo.MenuVO; import org.springblade.system.wrapper.MenuWrapper; import org.springframework.stereotype.Service; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; /** * 服务实现类 * * @author Chill * @since 2018-12-24 */ @Service @AllArgsConstructor public class MenuServiceImpl extends ServiceImpl implements IMenuService { IRoleMenuService roleMenuService; @Override public IPage selectMenuPage(IPage page, MenuVO menu) { return page.setRecords(baseMapper.selectMenuPage(page, menu)); } @Override public List routes(String roleId) { List

allMenus = baseMapper.allMenu(); List roleMenus = baseMapper.roleMenu(Func.toIntList(roleId)); List routes = new LinkedList<>(roleMenus); roleMenus.forEach(roleMenu -> recursion(allMenus, routes, roleMenu)); routes.sort(Comparator.comparing(Menu::getSort)); MenuWrapper menuWrapper = new MenuWrapper(); List collect = routes.stream().filter(x -> Func.equals(x.getCategory(), 1)).collect(Collectors.toList()); return menuWrapper.listNodeVO(collect); } public void recursion(List allMenus, List routes, Menu roleMenu) { Optional menu = allMenus.stream().filter(x -> Func.equals(x.getId(), roleMenu.getParentId())).findFirst(); if (menu.isPresent() && !routes.contains(menu.get())) { routes.add(menu.get()); recursion(allMenus, routes, menu.get()); } } @Override public List buttons(String roleId) { List buttons = baseMapper.buttons(Func.toIntList(roleId)); MenuWrapper menuWrapper = new MenuWrapper(); return menuWrapper.listNodeVO(buttons); } @Override public List tree() { return ForestNodeMerger.merge(baseMapper.tree()); } @Override public List grantTree() { return ForestNodeMerger.merge(baseMapper.grantTree()); } @Override public List roleTreeKeys(String roleIds) { List roleMenus = roleMenuService.list(Wrappers.query().lambda().in(RoleMenu::getRoleId, Func.toIntList(roleIds))); return roleMenus.stream().map(roleMenu -> Func.toStr(roleMenu.getMenuId())).collect(Collectors.toList()); } @Override public List authRoutes(List roleIds) { return baseMapper.authRoutes(roleIds); } }