package com.rabbiter.market.service.system.menu.impl; import com.rabbiter.market.domain.system.menu.Menu; import com.rabbiter.market.mapper.system.menu.MenuMapper; import com.rabbiter.market.qo.system.MenuQuery; import com.rabbiter.market.service.system.menu.IMenuService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.util.*; @Service public class MenuServiceImpl extends ServiceImpl implements IMenuService { @Autowired private MenuMapper menuMapper; @Override public List findAll() { //查询目录菜单 // select * from t_menu where type='0' and state='0' QueryWrapper wrapper1 = new QueryWrapper().eq("type", Menu.TYPE_CATALOGUE).eq("state", Menu.STATE_NORMAL); List catalogs = super.list(wrapper1); if (catalogs.isEmpty()) { return null; } //得到目录下的菜单信息 for (Menu catalog : catalogs) { //select * from t_menu where type='1' and parent_id=#{id} and state='0' QueryWrapper wrapper2 = new QueryWrapper().eq("type", Menu.TYPE_MENU).eq("state", Menu.STATE_NORMAL) .eq("parent_id", catalog.getId()); List menus = super.list(wrapper2); //获取菜单下的按钮 for (Menu menu : menus) { //select * from t_menu where type='2' and parent_id=#{id} and state='0' QueryWrapper wrapper3 = new QueryWrapper().eq("type", Menu.TYPE_BUTTON).eq("state", Menu.STATE_NORMAL) .eq("parent_id", menu.getId()); List buttons = super.list(wrapper3); if (!buttons.isEmpty()) { menu.setChildren(buttons); } } catalog.setChildren(menus); } return catalogs; } @Override public List queryByRids(Set rids) { List result = menuMapper.queryByRids(rids); if (result.isEmpty()) { return null; } //目录 Set catalogs = new HashSet<>(); //菜单 Set menus = new HashSet<>(); //按钮 Set buttons = new HashSet<>(); Iterator iterator1 = result.iterator(); while (iterator1.hasNext()) { Menu item = iterator1.next(); switch (item.getType()) { case Menu.TYPE_CATALOGUE: catalogs.add(item); break; case Menu.TYPE_MENU: menus.add(item); break; case Menu.TYPE_BUTTON: buttons.add(item); break; } iterator1.remove(); } for (Menu catalog : catalogs) { catalog.setChildren(new ArrayList<>()); for (Menu menu : menus) { menu.setChildren(new ArrayList<>()); for (Menu button : buttons) { //将按钮分配到对应的菜单下 if (button.getParentId() == menu.getId()) { menu.getChildren().add(button); } } //将菜单分配到对应的目录下 if (menu.getParentId() == catalog.getId()) { catalog.getChildren().add(menu); } } } List catalogues = new ArrayList<>(); //去重 for (Menu catalog : catalogs) { catalogues.add(catalog); } return catalogues; } @Override public Page queryPageByQo(MenuQuery qo) { Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); //查询目录 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("type", Menu.TYPE_CATALOGUE); wrapper.like(StringUtils.hasText(qo.getName()), "label", qo.getName()); Page page1 = super.page(page, wrapper); //补全目录的子集 List catalogs = page1.getRecords(); if (catalogs == null || catalogs.isEmpty()) { return page1; } /*补全目录下的菜单*/ for (Menu catalog : catalogs) { QueryWrapper wrapper_menu = new QueryWrapper() .eq("type", Menu.TYPE_MENU) .eq("parent_id", catalog.getId()); List menus = super.list(wrapper_menu); if (menus == null || menus.isEmpty()) { continue; } /*补全菜单下的按钮*/ for (Menu menu : menus) { QueryWrapper wrapper_button = new QueryWrapper() .eq("type", Menu.TYPE_BUTTON) .eq("parent_id", menu.getId()); List buttons = super.list(wrapper_button); if (buttons == null || buttons.isEmpty()) { continue; } menu.setChildren(buttons); } catalog.setChildren(menus); } return page1; } @Override public List listParentByIds(List ids) { List parentIds = new ArrayList<>(); ArrayList btnIds = new ArrayList<>(); QueryWrapper wrapper = new QueryWrapper().in("id", ids); List list = super.list(wrapper); if (list==null){ return parentIds; } for (Menu menu : list) { if (Menu.TYPE_MENU.equals(menu.getType())){ //菜单 parentIds.add(menu.getParentId()); }else { //按钮 parentIds.add(menu.getParentId()); btnIds.add(menu.getId()); } } return parentIds; } }