diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/factory/PermissionAssignFactory.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/factory/PermissionAssignFactory.java
new file mode 100644
index 000000000..681132336
--- /dev/null
+++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/factory/PermissionAssignFactory.java
@@ -0,0 +1,69 @@
+package cn.stylefeng.roses.kernel.sys.modular.role.factory;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
+import cn.stylefeng.roses.kernel.sys.modular.role.enums.PermissionNodeTypeEnum;
+import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionItem;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 权限分配相关的实体创建
+ *
+ * @author fengshuonan
+ * @since 2023/6/13 16:30
+ */
+public class PermissionAssignFactory {
+
+ /**
+ * 创建权限绑定的菜单列表
+ *
+ * 注意: 菜单必须是最子节点,也就是叶子节点
+ *
+ * @author fengshuonan
+ * @since 2023/6/13 16:32
+ */
+ public static List createPermissionMenus(List sysMenus) {
+
+ if (ObjectUtil.isEmpty(sysMenus)) {
+ return new ArrayList<>();
+ }
+
+ // 搜集所有的父级菜单id
+ Set totalParentMenuId = sysMenus.stream().map(SysMenu::getMenuParentId).collect(Collectors.toSet());
+
+ // 通过父级菜单,筛选出来所有的叶子节点(如果菜单不存在父级菜单里,则代表是叶子节点)
+ Set leafMenus = sysMenus.stream().filter(item -> !totalParentMenuId.contains(item)).collect(Collectors.toSet());
+
+ // 叶子节点转化为RoleBindPermissionItem结构
+ ArrayList roleBindPermissionItems = new ArrayList<>();
+
+ for (SysMenu leafMenu : leafMenus) {
+ RoleBindPermissionItem roleBindPermissionItem = new RoleBindPermissionItem();
+
+ // 设置节点id和名称为菜单id和菜单名称
+ roleBindPermissionItem.setNodeId(leafMenu.getMenuId());
+ roleBindPermissionItem.setNodeName(leafMenu.getMenuName());
+
+ // 设置节点类型为2-菜单
+ roleBindPermissionItem.setPermissionNodeType(PermissionNodeTypeEnum.MENU.getCode());
+
+ // 父级id是应用id
+ roleBindPermissionItem.setNodeParentId(leafMenu.getAppId());
+
+ // 默认未选中
+ roleBindPermissionItem.setChecked(false);
+
+ // 设置空子集
+ roleBindPermissionItem.setChildren(new ArrayList<>());
+
+ roleBindPermissionItems.add(roleBindPermissionItem);
+ }
+
+ return roleBindPermissionItems;
+ }
+
+}
diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/PermissionAssignServiceImpl.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/PermissionAssignServiceImpl.java
index 1327f5a12..cd3cdb42c 100644
--- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/PermissionAssignServiceImpl.java
+++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/PermissionAssignServiceImpl.java
@@ -1,8 +1,20 @@
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
+import cn.stylefeng.roses.kernel.sys.modular.app.entity.SysApp;
+import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService;
+import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
+import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService;
+import cn.stylefeng.roses.kernel.sys.modular.role.factory.PermissionAssignFactory;
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
+import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionItem;
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse;
import cn.stylefeng.roses.kernel.sys.modular.role.service.PermissionAssignService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
/**
* 角色权限绑定相关的接口
@@ -12,6 +24,11 @@ import cn.stylefeng.roses.kernel.sys.modular.role.service.PermissionAssignServic
*/
public class PermissionAssignServiceImpl implements PermissionAssignService {
+ @Resource
+ private SysMenuService sysMenuService;
+
+ @Resource
+ private SysAppService sysAppService;
@Override
public RoleBindPermissionResponse getRoleBindPermission(RoleBindPermissionRequest roleBindPermissionRequest) {
@@ -28,6 +45,36 @@ public class PermissionAssignServiceImpl implements PermissionAssignService {
@Override
public RoleBindPermissionResponse createSelectTreeStructure() {
+
+ // 最顶层,代表是否全选
+ RoleBindPermissionResponse roleBindPermissionResponse = new RoleBindPermissionResponse();
+ roleBindPermissionResponse.setChecked(false);
+
+ // 获取所有的菜单
+ LambdaQueryWrapper menuLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ menuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuName, SysMenu::getMenuParentId, SysMenu::getAppId);
+ menuLambdaQueryWrapper.orderByAsc(SysMenu::getMenuSort);
+ List totalMenus = this.sysMenuService.list(menuLambdaQueryWrapper);
+
+ // 组装所有的叶子节点菜单
+ List totalResultMenus = PermissionAssignFactory.createPermissionMenus(totalMenus);
+
+ // 查询菜单对应的所有应用
+ Set appIdList = totalResultMenus.stream().map(RoleBindPermissionItem::getNodeParentId).collect(Collectors.toSet());
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.select(SysApp::getAppId, SysApp::getAppName);
+ List totalAppList = sysAppService.list(queryWrapper);
+
+ // 组装所有的应用节点信息
+
+
+
+ // 获取所有的菜单上的功能
+
+
+ // 获取菜单对应的应用
+
+
return null;
}