Sfoglia il codice sorgente

feat: 角色添加菜单

wanggaokun 3 settimane fa
parent
commit
cb44552999

+ 21 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/controller/role/RoleController.java

@@ -9,11 +9,16 @@ package org.eco.vip.nexus.core.controller.role;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import jakarta.annotation.Resource;
 import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotEmpty;
 import org.eco.vip.core.pojo.CommonResult;
 import org.eco.vip.core.pojo.PageResult;
 import org.eco.vip.nexus.core.domain.role.pojo.RoleBO;
+import org.eco.vip.nexus.core.domain.role.pojo.RoleMenuBO;
+import org.eco.vip.nexus.core.domain.role.pojo.RoleMenuVO;
 import org.eco.vip.nexus.core.domain.role.pojo.RoleVO;
+import org.eco.vip.nexus.core.domain.user.pojo.UserRoleBO;
+import org.eco.vip.nexus.core.domain.user.pojo.UserRoleVO;
 import org.eco.vip.nexus.core.service.role.IRoleService;
 import org.eco.vip.security.annotation.PermissionsResource;
 import org.springframework.validation.annotation.Validated;
@@ -80,4 +85,20 @@ public class RoleController {
         }
         return success();
     }
+
+
+    @GetMapping("/menu/{id}")
+    public CommonResult<RoleMenuVO> getMenu(@PathVariable("id") @Valid @NotBlank(message = "roleId不能为空") String id) {
+        return success(roleService.selectMenuByRoleId(id));
+    }
+
+    @PutMapping("/menu/add")
+    @SaCheckPermission("system:user:addMenu")
+    public CommonResult<String> setMenus(@RequestBody @Valid RoleMenuBO roleMenuBO) {
+        boolean result = roleService.setMenus(roleMenuBO);
+        if (!result) {
+            return fail("设置菜单失败!");
+        }
+        return success();
+    }
 }

+ 1 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/menu/pojo/MenuVO.java

@@ -6,6 +6,7 @@
 package org.eco.vip.nexus.core.domain.menu.pojo;
 
 
+import com.mybatisflex.annotation.RelationOneToOne;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 34 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/role/pojo/RoleMenuBO.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.role.pojo;
+
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description RoleMenuBO
+ *
+ * @author GaoKunW
+ * @date 2025/7/20 03:24
+ */
+@Data
+public class RoleMenuBO implements Serializable {
+    /**
+     * roleId
+     */
+    @NotBlank(message = "roleId不能为空")
+    private String roleId;
+
+    /**
+     * menuIds
+     */
+    @NotEmpty(message = "菜单id不能为空")
+    private List<String> menuIds;
+}

+ 29 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/role/pojo/RoleMenuVO.java

@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.role.pojo;
+
+
+import cn.hutool.core.lang.tree.Tree;
+import lombok.Builder;
+import lombok.Data;
+import org.eco.vip.nexus.core.domain.menu.pojo.MenuVO;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description RoleMenuVO
+ *
+ * @author GaoKunW
+ * @date 2025/7/20 03:24
+ */
+@Data
+@Builder
+public class RoleMenuVO implements Serializable {
+
+    private List<MenuVO> allMenus;
+    private List<Tree<String>> treeMenus;
+    private List<String> hasMenus;
+}

+ 34 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/role/pojo/RolePermBO.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.role.pojo;
+
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description RolePermBO
+ *
+ * @author GaoKunW
+ * @date 2025/7/20 03:24
+ */
+@Data
+public class RolePermBO implements Serializable {
+    /**
+     * roleId
+     */
+    @NotBlank(message = "roleId不能为空")
+    private String roleId;
+
+    /**
+     * permissionIds
+     */
+    @NotEmpty(message = "权限id不能为空")
+    private List<String> permissionIds;
+}

+ 28 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/domain/role/pojo/RolePermVO.java

@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ */
+
+package org.eco.vip.nexus.core.domain.role.pojo;
+
+
+import lombok.Builder;
+import lombok.Data;
+import org.eco.vip.nexus.core.domain.menu.pojo.MenuVO;
+import org.eco.vip.nexus.core.domain.permission.pojo.PermissionVO;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @description RolePermVO
+ *
+ * @author GaoKunW
+ * @date 2025/7/20 03:24
+ */
+@Data
+@Builder
+public class RolePermVO implements Serializable {
+
+    private List<PermissionVO> allPermissions;
+    private List<String> hasPermissions;
+}

+ 6 - 14
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/menu/MenuService.java

@@ -14,21 +14,19 @@ import cn.hutool.json.JSONUtil;
 import com.mybatisflex.core.query.QueryMethods;
 import com.mybatisflex.core.query.QueryWrapper;
 import jakarta.annotation.Resource;
-import org.eco.vip.nexus.core.domain.menu.Menu;
-import org.eco.vip.nexus.core.domain.menu.pojo.MenuBO;
-import org.eco.vip.nexus.core.domain.menu.pojo.MenuVO;
-import org.eco.vip.nexus.core.mapper.MenuMapper;
-import org.eco.vip.nexus.core.mapper.RoleMenuMapper;
-import org.eco.vip.nexus.core.service.role.IRoleService;
-import org.eco.vip.nexus.core.service.user.IUserService;
 import org.eco.vip.core.constant.Constants;
 import org.eco.vip.core.enums.MenuTypeEnum;
 import org.eco.vip.core.pojo.PageResult;
-import org.eco.vip.orm.service.BaseService;
 import org.eco.vip.core.utils.JsonUtils;
 import org.eco.vip.core.utils.MapstructUtils;
 import org.eco.vip.core.utils.StrUtils;
 import org.eco.vip.core.utils.TreeUtils;
+import org.eco.vip.nexus.core.domain.menu.Menu;
+import org.eco.vip.nexus.core.domain.menu.pojo.MenuBO;
+import org.eco.vip.nexus.core.domain.menu.pojo.MenuVO;
+import org.eco.vip.nexus.core.mapper.MenuMapper;
+import org.eco.vip.nexus.core.mapper.RoleMenuMapper;
+import org.eco.vip.orm.service.BaseService;
 import org.eco.vip.security.utils.LoginHelper;
 import org.springframework.stereotype.Service;
 
@@ -53,12 +51,6 @@ public class MenuService extends BaseService<MenuMapper, Menu> implements IMenuS
     @Resource
     private RoleMenuMapper roleMenuMapper;
 
-    @Resource
-    private IRoleService roleService;
-
-    @Resource
-    private IUserService userService;
-
     private QueryWrapper buildQueryWrapper(MenuBO menuBO) {
         return super.buildBaseQueryWrapper()
                 .and(MENU.NAME.eq(menuBO.getName()))

+ 20 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/role/IRoleService.java

@@ -10,8 +10,12 @@ import org.eco.vip.nexus.core.domain.role.Role;
 import org.eco.vip.nexus.core.domain.role.RoleMenu;
 import org.eco.vip.nexus.core.domain.role.RolePerm;
 import org.eco.vip.nexus.core.domain.role.pojo.RoleBO;
+import org.eco.vip.nexus.core.domain.role.pojo.RoleMenuBO;
+import org.eco.vip.nexus.core.domain.role.pojo.RoleMenuVO;
 import org.eco.vip.nexus.core.domain.role.pojo.RoleVO;
 import org.eco.vip.core.pojo.PageResult;
+import org.eco.vip.nexus.core.domain.user.pojo.UserRoleBO;
+import org.eco.vip.nexus.core.domain.user.pojo.UserRoleVO;
 import org.eco.vip.orm.service.IBaseService;
 
 import java.util.List;
@@ -104,6 +108,22 @@ public interface IRoleService extends IBaseService<Role> {
      */
     List<String> selectRoleCodesByUserId(String userId);
 
+    /**
+     * 根据ID查询信息
+     *
+     * @param id ID
+     * @return 结果
+     */
+    RoleMenuVO selectMenuByRoleId(String id);
+
+    /**
+     * 设置菜单信息
+     *
+     * @param roleMenuBO roleMenuBO
+     * @return 结果
+     */
+    boolean setMenus(RoleMenuBO roleMenuBO);
+
     /**
      * 根据角色IDS查询角色菜单权限
      *

+ 32 - 3
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/role/RoleService.java

@@ -6,24 +6,30 @@
 package org.eco.vip.nexus.core.service.role;
 
 
+import cn.hutool.core.lang.tree.Tree;
 import com.mybatisflex.core.paginate.Page;
 import com.mybatisflex.core.query.QueryMethods;
 import com.mybatisflex.core.query.QueryWrapper;
+import com.mybatisflex.core.update.UpdateChain;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import org.eco.vip.core.pojo.PageResult;
+import org.eco.vip.core.utils.CollUtils;
+import org.eco.vip.core.utils.MapstructUtils;
+import org.eco.vip.nexus.core.domain.menu.pojo.MenuVO;
 import org.eco.vip.nexus.core.domain.role.Role;
 import org.eco.vip.nexus.core.domain.role.RoleMenu;
 import org.eco.vip.nexus.core.domain.role.RolePerm;
 import org.eco.vip.nexus.core.domain.role.pojo.RoleBO;
+import org.eco.vip.nexus.core.domain.role.pojo.RoleMenuBO;
+import org.eco.vip.nexus.core.domain.role.pojo.RoleMenuVO;
 import org.eco.vip.nexus.core.domain.role.pojo.RoleVO;
 import org.eco.vip.nexus.core.mapper.RoleMapper;
 import org.eco.vip.nexus.core.mapper.RoleMenuMapper;
 import org.eco.vip.nexus.core.mapper.RolePermMapper;
+import org.eco.vip.nexus.core.service.menu.IMenuService;
 import org.eco.vip.orm.domain.PageQuery;
-import org.eco.vip.core.pojo.PageResult;
 import org.eco.vip.orm.service.BaseService;
-import org.eco.vip.core.utils.CollUtils;
-import org.eco.vip.core.utils.MapstructUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -54,6 +60,9 @@ public class RoleService extends BaseService<RoleMapper, Role> implements IRoleS
     @Resource
     private RoleMapper roleMapper;
 
+    @Resource
+    private IMenuService menuService;
+
     private QueryWrapper buildQueryWrapper(RoleBO roleBO) {
         return super.buildBaseQueryWrapper()
                 .and(ROLE.ORG_ID.eq(roleBO.getOrgId()))
@@ -139,6 +148,26 @@ public class RoleService extends BaseService<RoleMapper, Role> implements IRoleS
         return this.listAs(queryWrapper, String.class);
     }
 
+    @Override
+    public RoleMenuVO selectMenuByRoleId(String id) {
+        List<String> menuIds = roleMenuMapper.selectListWithRelationsByQueryAs(query().select(ROLE_MENU.MENU_ID).and(ROLE_MENU.ROLE_ID.eq(id)), String.class);
+        List<MenuVO> menuVOList = menuService.listAs(query(), MenuVO.class);
+        List<Tree<String>> tree = menuService.tree();
+        return RoleMenuVO.builder().hasMenus(menuIds).allMenus(menuVOList).treeMenus(tree).build();
+    }
+
+    @Override
+    public boolean setMenus(RoleMenuBO roleMenuBO) {
+        UpdateChain.of(roleMenuMapper).eq(RoleMenu::getRoleId, roleMenuBO.getRoleId()).remove();
+        List<RoleMenu> list = roleMenuBO.getMenuIds().stream().map(menuId -> {
+            RoleMenu roleMenu = new RoleMenu();
+            roleMenu.setRoleId(roleMenuBO.getRoleId());
+            roleMenu.setMenuId(menuId);
+            return roleMenu;
+        }).toList();
+        return roleMenuMapper.insertBatch(list) > 0;
+    }
+
     @Override
     public List<String> selectMenuIdsByRoleIds(List<String> ids) {
         QueryWrapper queryWrapper = QueryWrapper.create()

+ 1 - 0
eco-nexus-core/nexus-core-biz/src/main/java/org/eco/vip/nexus/core/service/user/IUserService.java

@@ -89,6 +89,7 @@ public interface IUserService extends IBaseService<User> {
      * @return 结果
      */
     UserRoleVO selectRoleByUserId(String id);
+
     /**
      * 设置角色信息
      *