From 7cd3c1becd2679cf72887fed1bd370195a24082b Mon Sep 17 00:00:00 2001
From: fengshuonan <sn93@qq.com>
Date: Mon, 26 Jun 2023 21:52:56 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=907.6.0=E3=80=91=E3=80=90sys=E3=80=91?=
 =?UTF-8?q?=E3=80=90menu=E3=80=91=E8=B0=83=E6=95=B4api=E4=BD=8D=E7=BD=AE?=
 =?UTF-8?q?=EF=BC=9A=E8=8E=B7=E5=8F=96=E8=8F=9C=E5=8D=95=E5=AF=B9=E5=BA=94?=
 =?UTF-8?q?=E7=9A=84=E5=BA=94=E7=94=A8id=EF=BC=88=E5=8F=AF=E4=BB=A5?=
 =?UTF-8?q?=E6=89=B9=E9=87=8F=E8=8E=B7=E5=8F=96=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../kernel/sys/api/SysMenuServiceApi.java     | 10 ++++
 .../modular/menu/service/SysMenuService.java  | 11 +----
 .../impl/SysMenuOptionsServiceImpl.java       |  5 +-
 .../menu/service/impl/SysMenuServiceImpl.java | 49 ++++++++++++-------
 .../service/impl/SysRoleMenuServiceImpl.java  |  5 +-
 5 files changed, 50 insertions(+), 30 deletions(-)

diff --git a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysMenuServiceApi.java b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysMenuServiceApi.java
index e5da05a87..92fe0c180 100644
--- a/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysMenuServiceApi.java
+++ b/kernel-s-sys/sys-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysMenuServiceApi.java
@@ -27,6 +27,7 @@ package cn.stylefeng.roses.kernel.sys.api;
 import cn.stylefeng.roses.kernel.sys.api.pojo.menu.UserAppMenuInfo;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -47,4 +48,13 @@ public interface SysMenuServiceApi {
      */
     List<UserAppMenuInfo> getUserAppMenuDetailList(Set<Long> menuIdList);
 
+    /**
+     * 获取菜单对应的应用id(可以批量获取)
+     *
+     * @return key是菜单id,value是应用id
+     * @author fengshuonan
+     * @since 2023/6/26 21:47
+     */
+    Map<Long, Long> getMenuAppId(List<Long> menuIdList);
+
 }
diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java
index fdf7318a5..53336c5da 100644
--- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java
+++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java
@@ -1,5 +1,6 @@
 package cn.stylefeng.roses.kernel.sys.modular.menu.service;
 
+import cn.stylefeng.roses.kernel.sys.api.SysMenuServiceApi;
 import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
 import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.request.SysMenuRequest;
 import cn.stylefeng.roses.kernel.sys.modular.menu.pojo.response.AppGroupDetail;
@@ -14,7 +15,7 @@ import java.util.Set;
  * @author fengshuonan
  * @date 2023/06/10 21:28
  */
-public interface SysMenuService extends IService<SysMenu> {
+public interface SysMenuService extends IService<SysMenu>, SysMenuServiceApi {
 
     /**
      * 新增
@@ -69,14 +70,6 @@ public interface SysMenuService extends IService<SysMenu> {
      */
     boolean validateMenuBindApp(Set<Long> appIdList);
 
-    /**
-     * 获取菜单的所属appId
-     *
-     * @author fengshuonan
-     * @since 2023/6/13 22:49
-     */
-    Long getMenuAppId(Long menuId);
-
     /**
      * 获取所有的菜单信息,用在角色绑定权限界面
      *
diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java
index 69f73ae23..2cd64883b 100644
--- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java
+++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuOptionsServiceImpl.java
@@ -1,6 +1,7 @@
 package cn.stylefeng.roses.kernel.sys.modular.menu.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
 import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
@@ -24,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -53,7 +55,8 @@ public class SysMenuOptionsServiceImpl extends ServiceImpl<SysMenuOptionsMapper,
         BeanUtil.copyProperties(sysMenuOptionsRequest, sysMenuOptions);
 
         // 获取菜单的应用id
-        Long appId = sysMenuService.getMenuAppId(sysMenuOptionsRequest.getMenuId());
+        Map<Long, Long> menuAppId = sysMenuService.getMenuAppId(ListUtil.list(false, sysMenuOptionsRequest.getMenuId()));
+        Long appId = menuAppId.get(sysMenuOptionsRequest.getMenuId());
         sysMenuOptions.setAppId(appId);
 
         this.save(sysMenuOptions);
diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java
index 5f6240f8b..c9d0178b3 100644
--- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java
+++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java
@@ -9,7 +9,6 @@ import cn.stylefeng.roses.kernel.rule.constants.SymbolConstant;
 import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
 import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
 import cn.stylefeng.roses.kernel.rule.tree.buildpids.PidStructureBuildUtil;
-import cn.stylefeng.roses.kernel.sys.api.SysMenuServiceApi;
 import cn.stylefeng.roses.kernel.sys.api.callback.RemoveMenuCallbackApi;
 import cn.stylefeng.roses.kernel.sys.api.pojo.menu.UserAppMenuInfo;
 import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService;
@@ -28,10 +27,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -41,7 +37,7 @@ import java.util.stream.Collectors;
  * @date 2023/06/10 21:28
  */
 @Service
-public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService, SysMenuServiceApi {
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
 
     @Resource
     private SysAppService sysAppService;
@@ -127,19 +123,6 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
         return count > 0;
     }
 
-    @Override
-    public Long getMenuAppId(Long menuId) {
-        LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(SysMenu::getMenuId, menuId);
-        queryWrapper.select(SysMenu::getAppId);
-        SysMenu one = this.getOne(queryWrapper, false);
-        if (one != null) {
-            return one.getAppId();
-        } else {
-            return null;
-        }
-    }
-
     @Override
     public List<SysMenu> getTotalMenus() {
         LambdaQueryWrapper<SysMenu> menuLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -281,6 +264,34 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
         return result;
     }
 
+    @Override
+    public Map<Long, Long> getMenuAppId(List<Long> menuIdList) {
+
+        // 定义返回结果
+        HashMap<Long, Long> menuIdAppIdMap = new HashMap<>();
+
+        if (ObjectUtil.isEmpty(menuIdList)) {
+            return menuIdAppIdMap;
+        }
+
+        // 查询数据库菜单id对应的应用id集合
+        LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(SysMenu::getMenuId, menuIdList);
+        queryWrapper.select(SysMenu::getAppId);
+        List<SysMenu> queryList = this.list(queryWrapper);
+
+        if (ObjectUtil.isEmpty(queryList)) {
+            return menuIdAppIdMap;
+        }
+
+        // 制作映射关系
+        for (SysMenu sysMenu : queryList) {
+            menuIdAppIdMap.put(sysMenu.getMenuId(), sysMenu.getAppId());
+        }
+
+        return menuIdAppIdMap;
+    }
+
     /**
      * 获取信息
      *
diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleMenuServiceImpl.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleMenuServiceImpl.java
index e1575c230..aac8b51b1 100644
--- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleMenuServiceImpl.java
+++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleMenuServiceImpl.java
@@ -1,6 +1,7 @@
 package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
 import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
@@ -32,6 +33,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -169,7 +171,8 @@ public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuMapper, SysRo
         SysRoleMenu sysRoleMenu = new SysRoleMenu();
         sysRoleMenu.setRoleId(roleId);
         sysRoleMenu.setMenuId(menuId);
-        Long appId = sysMenuService.getMenuAppId(menuId);
+        Map<Long, Long> menuAppIdMap = sysMenuService.getMenuAppId(ListUtil.list(false, menuId));
+        Long appId = menuAppIdMap.get(menuId);
         sysRoleMenu.setAppId(appId);
 
         // 2. 查询菜单下所有的菜单功能