Преглед изворни кода

feat:用户角色权限管理完成

wangzaijun пре 7 месеци
родитељ
комит
663ab08769
27 измењених фајлова са 742 додато и 62 уклоњено
  1. 1 1
      service-base/src/main/java/com/simuwang/base/components/UserAuthService.java
  2. 0 9
      service-base/src/main/java/com/simuwang/base/mapper/SysRoleMapper.java
  3. 1 1
      service-base/src/main/java/com/simuwang/base/mapper/SysMenuMapper.java
  4. 27 0
      service-base/src/main/java/com/simuwang/base/mapper/system/SysRoleMapper.java
  5. 4 4
      service-base/src/main/java/com/simuwang/base/mapper/SysUserMapper.java
  6. 67 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/sys/MenuAddCmd.java
  7. 70 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/sys/MenuEditCmd.java
  8. 19 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/sys/MenuQuery.java
  9. 42 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleAddCmd.java
  10. 49 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleEditCmd.java
  11. 30 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleMenuAssignCmd.java
  12. 19 0
      service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleQuery.java
  13. 1 1
      service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleUserPageQuery.java
  14. 1 1
      service-base/src/main/java/com/simuwang/base/pojo/dto/sys/UserPageQuery.java
  15. 14 0
      service-base/src/main/resources/mapper/system/SysRoleMapper.xml
  16. 3 3
      service-base/src/main/resources/mapper/SysUserMapper.xml
  17. 3 1
      service-deploy/src/main/java/com/simuwang/deploy/components/ErrorInfoBuilder.java
  18. 1 3
      service-manage/src/main/java/com/simuwang/manage/api/LoginController.java
  19. 0 30
      service-manage/src/main/java/com/simuwang/manage/api/TestController.java
  20. 80 0
      service-manage/src/main/java/com/simuwang/manage/api/system/SysMenuController.java
  21. 92 0
      service-manage/src/main/java/com/simuwang/manage/api/system/SysRoleController.java
  22. 3 5
      service-manage/src/main/java/com/simuwang/manage/api/system/SysUserController.java
  23. 83 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysMenuServiceImpl.java
  24. 95 0
      service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysRoleServiceImpl.java
  25. 3 3
      service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysUserServiceImpl.java
  26. 14 0
      service-manage/src/main/java/com/simuwang/manage/service/system/SysMenuService.java
  27. 20 0
      service-manage/src/main/java/com/simuwang/manage/service/system/SysRoleService.java

+ 1 - 1
service-base/src/main/java/com/simuwang/base/components/UserAuthService.java

@@ -2,7 +2,7 @@ package com.simuwang.base.components;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.simuwang.base.mapper.SysUserMapper;
+import com.simuwang.base.mapper.system.SysUserMapper;
 import com.simuwang.base.pojo.dos.sys.SysMenuDO;
 import com.simuwang.base.pojo.dos.sys.SysRoleDO;
 import com.simuwang.base.pojo.dos.sys.SysUserDO;

+ 0 - 9
service-base/src/main/java/com/simuwang/base/mapper/SysRoleMapper.java

@@ -1,9 +0,0 @@
-package com.simuwang.base.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.simuwang.base.pojo.dos.sys.SysRoleDO;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface SysRoleMapper extends BaseMapper<SysRoleDO> {
-}

+ 1 - 1
service-base/src/main/java/com/simuwang/base/mapper/SysMenuMapper.java

@@ -1,4 +1,4 @@
-package com.simuwang.base.mapper;
+package com.simuwang.base.mapper.system;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.simuwang.base.pojo.dos.sys.SysMenuDO;

+ 27 - 0
service-base/src/main/java/com/simuwang/base/mapper/system/SysRoleMapper.java

@@ -0,0 +1,27 @@
+package com.simuwang.base.mapper.system;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.simuwang.base.pojo.dos.sys.SysRoleDO;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface SysRoleMapper extends BaseMapper<SysRoleDO> {
+    /**
+     * 删除某个角色的所有权限关系(用物理删)
+     *
+     * @param roleId 角色id
+     * @return /
+     */
+    int delRoleMenuByUserId(Integer roleId);
+
+    /**
+     * 批量新增角色与权限的关系
+     *
+     * @param roleId  角色id
+     * @param menuIds 权限id集合
+     * @return /
+     */
+    int batchRoleMenus(Integer roleId, List<Integer> menuIds);
+}

+ 4 - 4
service-base/src/main/java/com/simuwang/base/mapper/SysUserMapper.java

@@ -1,11 +1,11 @@
-package com.simuwang.base.mapper;
+package com.simuwang.base.mapper.system;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.simuwang.base.pojo.dos.sys.SysMenuDO;
 import com.simuwang.base.pojo.dos.sys.SysRoleDO;
 import com.simuwang.base.pojo.dos.sys.SysRoleUserDO;
 import com.simuwang.base.pojo.dos.sys.SysUserDO;
-import com.simuwang.base.pojo.dto.sys.RoleUserPageQuery;
+import com.simuwang.base.pojo.dto.sys.RoleUserQuery;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -48,7 +48,7 @@ public interface SysUserMapper extends BaseMapper<SysUserDO> {
      * @param query 分页参数
      * @return /
      */
-    List<SysRoleUserDO> roleUserPage(RoleUserPageQuery query);
+    List<SysRoleUserDO> roleUserPage(RoleUserQuery query);
 
     /**
      * 角色用户关联的总数
@@ -56,7 +56,7 @@ public interface SysUserMapper extends BaseMapper<SysUserDO> {
      * @param query 查询参数
      * @return /
      */
-    long countRoleUser(RoleUserPageQuery query);
+    long countRoleUser(RoleUserQuery query);
 
     /**
      * 删除某个用户的所有角色关系(用物理删)

+ 67 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/sys/MenuAddCmd.java

@@ -0,0 +1,67 @@
+package com.simuwang.base.pojo.dto.sys;
+
+import com.simuwang.base.common.support.command.BaseAddCmd;
+import com.simuwang.base.pojo.dos.sys.SysMenuDO;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 17:26
+ * @description 新增菜单的接口请求参数
+ */
+@Setter
+@Getter
+public class MenuAddCmd extends BaseAddCmd<SysMenuDO> {
+    /**
+     * 上级菜单
+     */
+    @NotNull(message = "上级菜单不能为空")
+    private Integer parentId;
+    /**
+     * 菜单名称
+     */
+    @NotBlank(message = "菜单名称不能为空")
+    private String menuName;
+    /**
+     * 权限标识
+     */
+    @NotBlank(message = "权限标识不能为空")
+    private String perms;
+    /**
+     * 类型(M目录 C菜单 F按钮)
+     */
+    private String menuType;
+    /**
+     * 路由地址
+     */
+    private String path;
+    /**
+     * 组件路径
+     */
+    private String component;
+    /**
+     * 显示状态(0显示 1隐藏)
+     */
+    private Integer visible;
+    /**
+     * 菜单状态
+     */
+    private Integer status;
+
+    @Override
+    public SysMenuDO toEntity() {
+        SysMenuDO entity = new SysMenuDO();
+        entity.setParentId(this.parentId);
+        entity.setMenuName(this.menuName);
+        entity.setMenuType(this.menuType);
+        entity.setPerms(this.perms);
+        entity.setPath(this.path);
+        entity.setComponent(this.component);
+        entity.setVisible(this.visible);
+        entity.setStatus(this.status);
+        return entity;
+    }
+}

+ 70 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/sys/MenuEditCmd.java

@@ -0,0 +1,70 @@
+package com.simuwang.base.pojo.dto.sys;
+
+import com.simuwang.base.common.support.command.BaseEditCmd;
+import com.simuwang.base.pojo.dos.sys.SysMenuDO;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 17:26
+ * @description 编辑菜单的接口请求参数
+ */
+@Setter
+@Getter
+public class MenuEditCmd extends BaseEditCmd<SysMenuDO> {
+    /**
+     * 菜单id
+     */
+    @NotNull(message = "菜单id不能为空")
+    private Integer menuId;
+    /**
+     * 上级菜单
+     */
+    @NotNull(message = "上级菜单不能为空")
+    private Integer parentId;
+    /**
+     * 菜单名称
+     */
+    private String menuName;
+    /**
+     * 权限标识
+     */
+    private String perms;
+    /**
+     * 类型(M目录 C菜单 F按钮)
+     */
+    private String menuType;
+    /**
+     * 路由地址
+     */
+    private String path;
+    /**
+     * 组件路径
+     */
+    private String component;
+    /**
+     * 显示状态(0显示 1隐藏)
+     */
+    private Integer visible;
+    /**
+     * 菜单状态
+     */
+    private Integer status;
+
+    @Override
+    public SysMenuDO toEntity() {
+        SysMenuDO entity = new SysMenuDO();
+        entity.setMenuId(this.menuId);
+        entity.setParentId(this.parentId);
+        entity.setMenuName(this.menuName);
+        entity.setMenuType(this.menuType);
+        entity.setPath(this.path);
+        entity.setPerms(this.perms);
+        entity.setComponent(this.component);
+        entity.setVisible(this.visible);
+        entity.setStatus(this.status);
+        return entity;
+    }
+}

+ 19 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/sys/MenuQuery.java

@@ -0,0 +1,19 @@
+package com.simuwang.base.pojo.dto.sys;
+
+import com.simuwang.base.common.support.query.PageQuery;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:38
+ * @description 菜单列表分页接口请求参数
+ */
+@Setter
+@Getter
+public class MenuQuery extends PageQuery {
+    /**
+     * 状态
+     */
+    private Integer status;
+}

+ 42 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleAddCmd.java

@@ -0,0 +1,42 @@
+package com.simuwang.base.pojo.dto.sys;
+
+import com.simuwang.base.common.support.command.BaseAddCmd;
+import com.simuwang.base.pojo.dos.sys.SysRoleDO;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 17:26
+ * @description 新增角色的接口请求参数
+ */
+@Setter
+@Getter
+public class RoleAddCmd extends BaseAddCmd<SysRoleDO> {
+    /**
+     * 角色名称
+     */
+    @NotBlank(message = "角色名称不能为空")
+    private String roleName;
+    /**
+     * 角色权限
+     */
+    private String roleKey;
+    /**
+     * 角色排序
+     */
+    private Integer roleSort;
+
+    private Integer status;
+
+    @Override
+    public SysRoleDO toEntity() {
+        SysRoleDO entity = new SysRoleDO();
+        entity.setRoleName(this.roleName);
+        entity.setRoleKey(this.roleKey);
+        entity.setRoleSort(this.roleSort);
+        entity.setStatus(this.status);
+        return entity;
+    }
+}

+ 49 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleEditCmd.java

@@ -0,0 +1,49 @@
+package com.simuwang.base.pojo.dto.sys;
+
+import com.simuwang.base.common.support.command.BaseEditCmd;
+import com.simuwang.base.pojo.dos.sys.SysRoleDO;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 17:26
+ * @description 编辑角色的接口请求参数
+ */
+@Setter
+@Getter
+public class RoleEditCmd extends BaseEditCmd<SysRoleDO> {
+    /**
+     * 角色id
+     */
+    @NotNull(message = "角色id不能为空")
+    private Integer roleId;
+    /**
+     * 角色名称
+     */
+    @NotBlank(message = "角色名称不能为空")
+    private String roleName;
+    /**
+     * 角色权限
+     */
+    private String roleKey;
+    /**
+     * 角色排序
+     */
+    private Integer roleSort;
+
+    private Integer status;
+
+    @Override
+    public SysRoleDO toEntity() {
+        SysRoleDO entity = new SysRoleDO();
+        entity.setRoleId(this.roleId);
+        entity.setRoleName(this.roleName);
+        entity.setRoleKey(this.roleKey);
+        entity.setRoleSort(this.roleSort);
+        entity.setStatus(this.status);
+        return entity;
+    }
+}

+ 30 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleMenuAssignCmd.java

@@ -0,0 +1,30 @@
+package com.simuwang.base.pojo.dto.sys;
+
+import com.simuwang.base.common.support.command.BaseCmd;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 20:01
+ * @description 角色权限分配接口请求参数
+ */
+@Setter
+@Getter
+public class RoleMenuAssignCmd extends BaseCmd {
+    /**
+     * 待分配权限的角色id
+     */
+    @NotNull(message = "待分配的角色不能为空")
+    private Integer roleId;
+
+    /**
+     * 分配的权限
+     */
+    @Size(message = "分配的权限不能为空", min = 1)
+    private List<Integer> menuIds;
+}

+ 19 - 0
service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleQuery.java

@@ -0,0 +1,19 @@
+package com.simuwang.base.pojo.dto.sys;
+
+import com.simuwang.base.common.support.query.PageQuery;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 13:38
+ * @description 角色分页接口请求参数
+ */
+@Setter
+@Getter
+public class RoleQuery extends PageQuery {
+    /**
+     * 状态
+     */
+    private Integer status;
+}

+ 1 - 1
service-base/src/main/java/com/simuwang/base/pojo/dto/sys/RoleUserPageQuery.java

@@ -7,6 +7,6 @@ import com.simuwang.base.common.support.query.PageQuery;
  * @date 2024/9/13 13:38
  * @description 角色用户关联的分页接口请求参数
  */
-public class RoleUserPageQuery extends PageQuery {
+public class RoleUserQuery extends PageQuery {
 
 }

+ 1 - 1
service-base/src/main/java/com/simuwang/base/pojo/dto/sys/UserPageQuery.java

@@ -11,7 +11,7 @@ import lombok.Setter;
  */
 @Setter
 @Getter
-public class UserPageQuery extends PageQuery {
+public class UserQuery extends PageQuery {
     /**
      * 邮箱
      */

+ 14 - 0
service-base/src/main/resources/mapper/system/SysRoleMapper.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.simuwang.base.mapper.system.SysRoleMapper">
+    <delete id="delRoleMenuByUserId" parameterType="int">
+        delete from sys_role_menu where role_id =#{roleId}
+    </delete>
+
+    <insert id="batchRoleMenus">
+        insert into sys_role_menu(role_id, menu_id) values
+        <foreach collection="menuIds" item="menuId" separator=",">
+            (#{roleId}, #{menuId})
+        </foreach>
+    </insert>
+</mapper>

+ 3 - 3
service-base/src/main/resources/mapper/SysUserMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.simuwang.base.mapper.SysUserMapper">
+<mapper namespace="com.simuwang.base.mapper.system.SysUserMapper">
     <select id="selectRoleByUserId" resultType="com.simuwang.base.pojo.dos.sys.SysRoleDO">
         select t.role_id    as roleId,
                t.role_name  as roleName,
@@ -94,7 +94,7 @@
     </select>
 
     <select id="roleUserPage" resultType="com.simuwang.base.pojo.dos.sys.SysRoleUserDO"
-            parameterType="com.simuwang.base.pojo.dto.sys.RoleUserPageQuery">
+            parameterType="com.simuwang.base.pojo.dto.sys.RoleUserQuery">
         select t.role_id    as roleId,
                t.role_name  as roleName,
                t.role_key   as roleKey,
@@ -143,7 +143,7 @@
         limit #{offset}, #{pageSize}
     </select>
 
-    <select id="countRoleUser" parameterType="com.simuwang.base.pojo.dto.sys.RoleUserPageQuery">
+    <select id="countRoleUser" parameterType="com.simuwang.base.pojo.dto.sys.RoleUserQuery">
         select count(t.role_id)
         from sys_role t
                  join sys_user_role t1 on t.role_id = t1.role_id

+ 3 - 1
service-deploy/src/main/java/com/simuwang/deploy/components/ErrorInfoBuilder.java

@@ -73,6 +73,7 @@ public class ErrorInfoBuilder implements HandlerExceptionResolver, Ordered {
         errorInfo.setTime(LocalDateTime.now().toString());
         errorInfo.setUrl(url);
         String msg;
+        int code = getHttpStatus(request).value();
         if (error instanceof NoResourceFoundException) {
             msg = "请求资源找不到";
         } else if (error instanceof UnauthorizedException) {
@@ -83,6 +84,7 @@ public class ErrorInfoBuilder implements HandlerExceptionResolver, Ordered {
             msg = "登录认证失败";
         } else if (error instanceof APIException e) {
             msg = e.getMsg();
+            code = e.getCode();
         } else if (error instanceof UnauthenticatedException e) {
             msg = e.getMessage();
         } else if (error instanceof HttpMessageNotReadableException || error instanceof BindValidationException) {
@@ -98,7 +100,7 @@ public class ErrorInfoBuilder implements HandlerExceptionResolver, Ordered {
             msg = "未知的错误";
         }
         errorInfo.setError(msg);
-        errorInfo.setStatusCode(getHttpStatus(request).value());
+        errorInfo.setStatusCode(code);
         errorInfo.setReasonPhrase(getHttpStatus(request).getReasonPhrase());
         errorInfo.setStackTrace(ExceptionUtil.stacktraceToString(error));
         logger.error(StrUtil.format("{} 接口请求错误:{}", url, errorInfo.getStackTrace()));

+ 1 - 3
service-manage/src/main/java/com/simuwang/manage/api/LoginController.java

@@ -19,9 +19,7 @@ import org.springframework.web.bind.annotation.*;
 import java.util.Map;
 
 /**
- * @author wangzaijun
- * @date 2024/9/13 9:04
- * @description 登录相关接口
+ * 登录相关接口
  */
 @RestController
 @RequestMapping("/v1")

+ 0 - 30
service-manage/src/main/java/com/simuwang/manage/api/TestController.java

@@ -1,30 +0,0 @@
-package com.simuwang.manage.api;
-
-import cn.hutool.crypto.asymmetric.KeyType;
-import cn.hutool.crypto.asymmetric.RSA;
-import com.simuwang.base.config.DaqProperties;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/test")
-public class TestController {
-    private final DaqProperties properties;
-
-    public TestController(DaqProperties properties) {
-        this.properties = properties;
-    }
-
-    @GetMapping("hello")
-    public boolean test() {
-        return false;
-    }
-
-    @GetMapping("pwd-rsa")
-    public String rsa(@RequestParam("str") String str) {
-        String publicKey = this.properties.getSecurityRsa().getPublicKey();
-        return new RSA(null, publicKey).encryptBase64(str, KeyType.PublicKey);
-    }
-}

+ 80 - 0
service-manage/src/main/java/com/simuwang/manage/api/system/SysMenuController.java

@@ -0,0 +1,80 @@
+package com.simuwang.manage.api.system;
+
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.pojo.dto.DeleteByIdCmd;
+import com.simuwang.base.pojo.dto.UpdateStatusCmd;
+import com.simuwang.base.pojo.dto.sys.MenuAddCmd;
+import com.simuwang.base.pojo.dto.sys.MenuEditCmd;
+import com.simuwang.base.pojo.dto.sys.MenuQuery;
+import com.simuwang.base.pojo.vo.sys.SysMenuVO;
+import com.simuwang.manage.service.system.SysMenuService;
+import jakarta.validation.Valid;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 菜单管理相关接口
+ */
+@RestController
+@RequestMapping("/v1/sys/menu")
+public class SysMenuController {
+    private final SysMenuService service;
+
+    public SysMenuController(SysMenuService service) {
+        this.service = service;
+    }
+
+    /**
+     * 分页接口
+     *
+     * @param query 菜单列表分页请求参数
+     * @return /
+     */
+    @GetMapping("page")
+    public MybatisPage<SysMenuVO> page(MenuQuery query) {
+        return this.service.findPage(query);
+    }
+
+    /**
+     * 新增菜单
+     *
+     * @param command 菜单信息
+     */
+    @PostMapping("save")
+    public boolean save(@Valid @RequestBody MenuAddCmd command) {
+        this.service.insert(command);
+        return true;
+    }
+
+    /**
+     * 更新菜单
+     *
+     * @param command 菜单id+菜单信息
+     */
+    @PostMapping("update")
+    public boolean update(@Valid @RequestBody MenuEditCmd command) {
+        this.service.update(command);
+        return true;
+    }
+
+    /**
+     * 更新菜单状态接口
+     *
+     * @param command 菜单id+状态对象
+     */
+    @PostMapping("update-status")
+    public boolean updateStatus(@Valid @RequestBody UpdateStatusCmd command) {
+        this.service.updateStatus(command);
+        return true;
+    }
+
+    /**
+     * 根据id删除菜单信息接口
+     *
+     * @param command 菜单id对象
+     */
+    @PostMapping("del")
+    public boolean deleteById(@Valid @RequestBody DeleteByIdCmd command) {
+        this.service.delete(command);
+        return true;
+    }
+}

+ 92 - 0
service-manage/src/main/java/com/simuwang/manage/api/system/SysRoleController.java

@@ -0,0 +1,92 @@
+package com.simuwang.manage.api.system;
+
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.pojo.dto.DeleteByIdCmd;
+import com.simuwang.base.pojo.dto.UpdateStatusCmd;
+import com.simuwang.base.pojo.dto.sys.RoleAddCmd;
+import com.simuwang.base.pojo.dto.sys.RoleEditCmd;
+import com.simuwang.base.pojo.dto.sys.RoleMenuAssignCmd;
+import com.simuwang.base.pojo.dto.sys.RoleQuery;
+import com.simuwang.base.pojo.vo.sys.SysRoleVO;
+import com.simuwang.manage.service.system.SysRoleService;
+import jakarta.validation.Valid;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 角色管理相关接口
+ */
+@RestController
+@RequestMapping("/v1/sys/role")
+public class SysRoleController {
+    private final SysRoleService service;
+
+    public SysRoleController(SysRoleService service) {
+        this.service = service;
+    }
+
+    /**
+     * 分页接口
+     *
+     * @param query 角色列表分页请求参数
+     * @return /
+     */
+    @GetMapping("page")
+    public MybatisPage<SysRoleVO> page(RoleQuery query) {
+        return this.service.findPage(query);
+    }
+
+    /**
+     * 新增角色
+     *
+     * @param command 角色信息
+     */
+    @PostMapping("save")
+    public boolean save(@Valid @RequestBody RoleAddCmd command) {
+        this.service.insert(command);
+        return true;
+    }
+
+    /**
+     * 更新角色
+     *
+     * @param command 角色id+角色信息
+     */
+    @PostMapping("update")
+    public boolean update(@Valid @RequestBody RoleEditCmd command) {
+        this.service.update(command);
+        return true;
+    }
+
+    /**
+     * 更新角色状态接口
+     *
+     * @param command 角色id+状态对象
+     */
+    @PostMapping("update-status")
+    public boolean updateStatus(@Valid @RequestBody UpdateStatusCmd command) {
+        this.service.updateStatus(command);
+        return true;
+    }
+
+    /**
+     * 根据id删除角色信息接口
+     *
+     * @param command 角色id对象
+     */
+    @PostMapping("del")
+    public boolean deleteById(@Valid @RequestBody DeleteByIdCmd command) {
+        this.service.delete(command);
+        return true;
+    }
+
+    /**
+     * 给角色分配权限
+     *
+     * @param command 角色id对象
+     */
+    @PostMapping("assign-perms")
+    public boolean assignPermissions(@Valid @RequestBody RoleMenuAssignCmd command) {
+        this.service.assignPerms(command);
+        return true;
+    }
+}

+ 3 - 5
service-manage/src/main/java/com/simuwang/manage/api/system/SysUserController.java

@@ -11,9 +11,7 @@ import jakarta.validation.Valid;
 import org.springframework.web.bind.annotation.*;
 
 /**
- * @author wangzaijun
- * @date 2024/9/13 13:37
- * @description 用户管理相关接口
+ * 用户管理相关接口
  */
 @RestController
 @RequestMapping("/v1/sys/user")
@@ -31,7 +29,7 @@ public class SysUserController {
      * @return /
      */
     @GetMapping("page")
-    public MybatisPage<SysUserVO> page(UserPageQuery query) {
+    public MybatisPage<SysUserVO> page(UserQuery query) {
         return this.service.findPage(query);
     }
 
@@ -42,7 +40,7 @@ public class SysUserController {
      * @return /
      */
     @GetMapping("multi-join-page")
-    public MybatisPage<SysRoleUserVO> multiJoinPage(RoleUserPageQuery query) {
+    public MybatisPage<SysRoleUserVO> multiJoinPage(RoleUserQuery query) {
         return this.service.findMultiPage(query);
     }
 

+ 83 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysMenuServiceImpl.java

@@ -0,0 +1,83 @@
+package com.simuwang.manage.service.impl.system;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.simuwang.base.common.support.BaseService;
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.common.support.command.BaseAddCmd;
+import com.simuwang.base.common.support.command.BaseEditCmd;
+import com.simuwang.base.common.support.command.BaseIdCmd;
+import com.simuwang.base.common.support.command.BaseIdStatusCmd;
+import com.simuwang.base.common.support.query.PageQuery;
+import com.simuwang.base.mapper.system.SysMenuMapper;
+import com.simuwang.base.pojo.dos.sys.SysMenuDO;
+import com.simuwang.base.pojo.dto.sys.MenuAddCmd;
+import com.simuwang.base.pojo.dto.sys.MenuEditCmd;
+import com.simuwang.base.pojo.dto.sys.MenuQuery;
+import com.simuwang.base.pojo.vo.sys.SysMenuVO;
+import com.simuwang.manage.service.system.SysMenuService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysMenuServiceImpl implements SysMenuService {
+    private final SysMenuMapper mapper;
+
+    public SysMenuServiceImpl(SysMenuMapper mapper) {
+        this.mapper = mapper;
+    }
+
+    @Override
+    public String[] selectColumns() {
+        return BaseService.extColumns(DEFAULT_SELECT_COLUMNS,
+                "menu_id", "menu_name", "parent_id", "order_num", "path", "component",
+                "query", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon");
+    }
+
+    @Override
+    public <Q extends PageQuery> void wrapQuery(QueryWrapper<SysMenuDO> wrapper, Q query) {
+        MenuQuery params = (MenuQuery) query;
+        String keyword = params.getKeyword();
+        if (StrUtil.isNotBlank(keyword)) {
+            wrapper.like("menu_name", keyword);
+        }
+        if (params.getStatus() != null) {
+            wrapper.eq("status", params.getStatus());
+        }
+    }
+
+    @Override
+    public MybatisPage<SysMenuVO> convertPage(Page<SysMenuDO> page, QueryWrapper<SysMenuDO> wrapper) {
+        IPage<SysMenuDO> entityPage = this.mapper.selectPage(page, wrapper);
+        return MybatisPage.ofList(entityPage, SysMenuDO::toVo);
+    }
+
+    @Override
+    public <C extends BaseAddCmd<SysMenuDO>> void insert(C command) {
+        MenuAddCmd cmd = (MenuAddCmd) command;
+        SysMenuDO entity = cmd.toEntity();
+        this.mapper.insert(entity);
+    }
+
+    @Override
+    public <C extends BaseEditCmd<SysMenuDO>> void update(C command) {
+        MenuEditCmd cmd = (MenuEditCmd) command;
+        SysMenuDO entity = cmd.toEntity();
+        this.mapper.updateById(entity);
+    }
+
+    @Override
+    public <C extends BaseIdStatusCmd> void updateStatus(C command) {
+        SysMenuDO entity = new SysMenuDO();
+        entity.setMenuId(command.getId());
+        entity.setStatus(command.getStatus());
+        this.mapper.updateById(entity);
+    }
+
+    @Override
+    public <C extends BaseIdCmd> void delete(C command) {
+        Integer id = command.getId();
+        this.mapper.deleteById(id);
+    }
+}

+ 95 - 0
service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysRoleServiceImpl.java

@@ -0,0 +1,95 @@
+package com.simuwang.manage.service.impl.system;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.simuwang.base.common.support.BaseService;
+import com.simuwang.base.common.support.MybatisPage;
+import com.simuwang.base.common.support.command.BaseAddCmd;
+import com.simuwang.base.common.support.command.BaseEditCmd;
+import com.simuwang.base.common.support.command.BaseIdCmd;
+import com.simuwang.base.common.support.command.BaseIdStatusCmd;
+import com.simuwang.base.common.support.query.PageQuery;
+import com.simuwang.base.mapper.system.SysRoleMapper;
+import com.simuwang.base.pojo.dos.sys.SysRoleDO;
+import com.simuwang.base.pojo.dto.sys.RoleAddCmd;
+import com.simuwang.base.pojo.dto.sys.RoleEditCmd;
+import com.simuwang.base.pojo.dto.sys.RoleMenuAssignCmd;
+import com.simuwang.base.pojo.dto.sys.RoleQuery;
+import com.simuwang.base.pojo.vo.sys.SysRoleVO;
+import com.simuwang.manage.service.system.SysRoleService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysRoleServiceImpl implements SysRoleService {
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+    private final SysRoleMapper mapper;
+
+    public SysRoleServiceImpl(SysRoleMapper mapper) {
+        this.mapper = mapper;
+    }
+
+    @Override
+    public String[] selectColumns() {
+        return BaseService.extColumns(DEFAULT_SELECT_COLUMNS, "role_id", "role_name", "role_sort", "role_key");
+    }
+
+    @Override
+    public <Q extends PageQuery> void wrapQuery(QueryWrapper<SysRoleDO> wrapper, Q query) {
+        RoleQuery params = (RoleQuery) query;
+        String keyword = params.getKeyword();
+        if (StrUtil.isNotBlank(keyword)) {
+            wrapper.like("role_name", keyword);
+        }
+        if (params.getStatus() != null) {
+            wrapper.eq("status", params.getStatus());
+        }
+    }
+
+    @Override
+    public MybatisPage<SysRoleVO> convertPage(Page<SysRoleDO> page, QueryWrapper<SysRoleDO> wrapper) {
+        IPage<SysRoleDO> entityPage = this.mapper.selectPage(page, wrapper);
+        return MybatisPage.ofList(entityPage, SysRoleDO::toVo);
+    }
+
+    @Override
+    public <C extends BaseAddCmd<SysRoleDO>> void insert(C command) {
+        RoleAddCmd cmd = (RoleAddCmd) command;
+        SysRoleDO entity = cmd.toEntity();
+        this.mapper.insert(entity);
+    }
+
+    @Override
+    public <C extends BaseEditCmd<SysRoleDO>> void update(C command) {
+        RoleEditCmd cmd = (RoleEditCmd) command;
+        SysRoleDO entity = cmd.toEntity();
+        this.mapper.updateById(entity);
+    }
+
+    @Override
+    public <C extends BaseIdStatusCmd> void updateStatus(C command) {
+        SysRoleDO entity = new SysRoleDO();
+        entity.setRoleId(command.getId());
+        entity.setStatus(command.getStatus());
+        this.mapper.updateById(entity);
+    }
+
+    @Override
+    public <C extends BaseIdCmd> void delete(C command) {
+        Integer id = command.getId();
+        this.mapper.deleteById(id);
+    }
+
+    @Override
+    public void assignPerms(RoleMenuAssignCmd command) {
+        Integer roleId = command.getRoleId();
+        int i = this.mapper.delRoleMenuByUserId(roleId);
+        int j = this.mapper.batchRoleMenus(roleId, command.getMenuIds());
+        if (this.logger.isInfoEnabled()) {
+            this.logger.info("给{}角色分配权限时删除了{}条记录,新增{}条记录", roleId, i, j);
+        }
+    }
+}

+ 3 - 3
service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysUserServiceImpl.java

@@ -14,7 +14,7 @@ import com.simuwang.base.common.support.command.BaseIdCmd;
 import com.simuwang.base.common.support.command.BaseIdStatusCmd;
 import com.simuwang.base.common.support.query.PageQuery;
 import com.simuwang.base.config.DaqProperties;
-import com.simuwang.base.mapper.SysUserMapper;
+import com.simuwang.base.mapper.system.SysUserMapper;
 import com.simuwang.base.pojo.dos.sys.SysRoleUserDO;
 import com.simuwang.base.pojo.dos.sys.SysUserDO;
 import com.simuwang.base.pojo.dto.sys.*;
@@ -49,7 +49,7 @@ public class SysUserServiceImpl implements SysUserService {
 
     @Override
     public <Q extends PageQuery> void wrapQuery(QueryWrapper<SysUserDO> wrapper, Q query) {
-        UserPageQuery params = (UserPageQuery) query;
+        UserQuery params = (UserQuery) query;
         String keyword = params.getKeyword();
         if (StrUtil.isNotBlank(keyword)) {
             wrapper.like("user_name", keyword);
@@ -73,7 +73,7 @@ public class SysUserServiceImpl implements SysUserService {
 
     @Override
     public <Q extends PageQuery> MybatisPage<SysRoleUserVO> findMultiPage(Q query) {
-        RoleUserPageQuery params = (RoleUserPageQuery) query;
+        RoleUserQuery params = (RoleUserQuery) query;
         List<SysRoleUserDO> dataList = this.mapper.roleUserPage(params);
         List<SysRoleUserVO> records = dataList.stream().map(SysRoleUserDO::toVo).collect(Collectors.toList());
         long count = this.mapper.countRoleUser(params);

+ 14 - 0
service-manage/src/main/java/com/simuwang/manage/service/system/SysMenuService.java

@@ -0,0 +1,14 @@
+package com.simuwang.manage.service.system;
+
+import com.simuwang.base.common.support.BaseService;
+import com.simuwang.base.pojo.dos.sys.SysMenuDO;
+import com.simuwang.base.pojo.vo.sys.SysMenuVO;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 19:43
+ * @description 系统菜单服务
+ */
+public interface SysMenuService extends BaseService<SysMenuVO, SysMenuDO> {
+
+}

+ 20 - 0
service-manage/src/main/java/com/simuwang/manage/service/system/SysRoleService.java

@@ -0,0 +1,20 @@
+package com.simuwang.manage.service.system;
+
+import com.simuwang.base.common.support.BaseService;
+import com.simuwang.base.pojo.dos.sys.SysRoleDO;
+import com.simuwang.base.pojo.dto.sys.RoleMenuAssignCmd;
+import com.simuwang.base.pojo.vo.sys.SysRoleVO;
+
+/**
+ * @author wangzaijun
+ * @date 2024/9/13 19:43
+ * @description 系统角色服务
+ */
+public interface SysRoleService extends BaseService<SysRoleVO, SysRoleDO> {
+    /**
+     * 给角色分配权限
+     *
+     * @param command 参数
+     */
+    void assignPerms(RoleMenuAssignCmd command);
+}