From 3503c764cf15ff72a2eb97ce7ee25355baab5a87 Mon Sep 17 00:00:00 2001 From: ptapqzhfn <511003099@qq.com> Date: Tue, 29 Apr 2025 16:02:27 +0800 Subject: [PATCH] ADD file via upload --- MenuServiceImpl.java | 167 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 MenuServiceImpl.java diff --git a/MenuServiceImpl.java b/MenuServiceImpl.java new file mode 100644 index 0000000..f862484 --- /dev/null +++ b/MenuServiceImpl.java @@ -0,0 +1,167 @@ +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; + } +}