Parcourir la source

重构sys接口

tsurumure il y a 9 mois
Parent
commit
6378ec7c22

+ 1 - 4
src/main/java/com/backendsys/modules/system/controller/SysUserRoleModuleV2Controller.java

@@ -19,14 +19,11 @@ public class SysUserRoleModuleV2Controller {
     @Autowired
     private SysUserRoleModuleV2Service sysUserRoleModuleV2Service;
 
-    @Operation(summary = "获系统用户角色模块列表")
+    @Operation(summary = "获系统用户角色模块列表")
     @PreAuthorize("@ss.hasPermi('4.1.5')")
     @GetMapping("/api/v2/system/user/getUserRoleModule")
     public Result getUserRoleModule() {
         return Result.success().put("data", sysUserRoleModuleV2Service.getUserRoleModule());
     }
 
-
-
-
 }

+ 34 - 12
src/main/java/com/backendsys/modules/system/controller/SysUserRoleV2Controller.java

@@ -1,17 +1,15 @@
 package com.backendsys.modules.system.controller;
 
-import com.backendsys.aspect.QueryNullCheck;
-import com.backendsys.aspect.QueryNullCheckAspect;
-import com.backendsys.entity.PageDTO;
+import com.backendsys.exception.CustException;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.entity.System.SysUserRoleDTO;
 import com.backendsys.modules.system.service.SysUserRoleV2Service;
-import com.backendsys.service.System.SysUserRoleService;
+import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import java.util.Arrays;
 
 /**
  * 系统用户角色
@@ -23,17 +21,41 @@ public class SysUserRoleV2Controller {
     @Autowired
     private SysUserRoleV2Service sysUserRoleV2Service;
 
+    @Operation(summary = "获取系统用户角色列表")
     @PreAuthorize("@ss.hasPermi('4.1')")
     @GetMapping("/api/v2/system/user/getUserRole")
     public Result getUserRole(@Validated SysUserRoleDTO sysUserRoleDTO) {
         return Result.success().put("data", sysUserRoleV2Service.getUserRole(sysUserRoleDTO));
     }
 
-//    @PreAuthorize("@ss.hasPermi('4.1.1')")
-//    @QueryNullCheck(serviceClass = SysUserRoleService.class, serviceMethod = "queryUserRoleDetail", argField = "role_id", message = "用户角色不存在")
-//    @GetMapping("/api/system/user/getUserRoleDetail")
-//    public com.backendsys.utils.response.Result getUserRoleDetail(@Validated(SysUserRoleDTO.Detail.class) SysUserRoleDTO sysUserRoleDTO) {
-//        return com.backendsys.utils.response.Result.success(QueryNullCheckAspect.getQueryResult());
-//    }
+    @Operation(summary = "获取系统用户角色详情")
+    @PreAuthorize("@ss.hasPermi('4.1.1')")
+    @GetMapping("/api/v2/system/user/getUserRoleDetail")
+    public Result getUserRoleDetail(@Validated(SysUserRoleDTO.Detail.class) SysUserRoleDTO sysUserRoleDTO) {
+        return Result.success().put("data", sysUserRoleV2Service.getUserRoleDetail(sysUserRoleDTO));
+    }
+
+    @Operation(summary = "创建系统用户角色")
+    @PreAuthorize("@ss.hasPermi('4.1.2')")
+    @PostMapping("/api/v2/system/user/createUserRole")
+    public Result createUserRole(@Validated(SysUserRoleDTO.Create.class) @RequestBody SysUserRoleDTO sysUserRoleDTO) {
+        return Result.success().put("data", sysUserRoleV2Service.insertUserRole(sysUserRoleDTO));
+    }
+
+    @Operation(summary = "更新系统用户角色")
+    @PreAuthorize("@ss.hasPermi('4.1.3')")
+    @PutMapping("/api/v2/system/user/updateUserRole")
+    public Result updateUserRole(@Validated(SysUserRoleDTO.Update.class) @RequestBody SysUserRoleDTO sysUserRoleDTO) {
+        return Result.success().put("data", sysUserRoleV2Service.updateUserRole(sysUserRoleDTO));
+    }
+
+    @Operation(summary = "删除系统用户角色")
+    @PreAuthorize("@ss.hasPermi('4.1.4')")
+    @DeleteMapping("/api/v2/system/user/deleteUserRole")
+    public Result deleteUserRole(@Validated(SysUserRoleDTO.Delete.class) @RequestBody SysUserRoleDTO sysUserRoleDTO) {
+        // 不可删除 角色ID: (1管理员, 2游客)
+        if (Arrays.asList(1L, 2L).contains(sysUserRoleDTO.getRole_id())) throw new CustException("该角色不可删除");
+        return Result.success().put("data", sysUserRoleV2Service.deleteUserRole(sysUserRoleDTO));
+    }
 
 }

+ 4 - 4
src/main/java/com/backendsys/modules/system/controller/SysUserV2Controller.java

@@ -30,13 +30,13 @@ public class SysUserV2Controller {
     @Autowired
     private SysUserV2Service sysUserV2Service;
 
-    @Operation(summary = "获系统用户列表")
+    @Operation(summary = "获系统用户列表")
     @PreAuthorize("@sr.hasPermission('3.2')")
     @GetMapping("/api/v2/system/user/getUserList")
     public Result getUserList(SysUserDTO sysUserDTO) {
         return Result.success().put("data", sysUserV2Service.selectUserList(sysUserDTO));
     }
-    @Operation(summary = "获系统用户列表 (在线的)")
+    @Operation(summary = "获系统用户列表 (在线的)")
     @PreAuthorize("@ss.hasPermi('3.1')")
     @GetMapping("/api/v2/system/user/getUserOnlineList")
     public Result getUserOnlineList(SysUserDTO sysUserDTO) {
@@ -48,7 +48,7 @@ public class SysUserV2Controller {
      * - 查询用户信息 (3.2.1)
      * - 查询他人用户信息 (3.2.1.2)
      */
-    @Operation(summary = "获系统用户详情")
+    @Operation(summary = "获系统用户详情")
     @PreAuthorize("@sr.hasPermission('3.2.1')")
     @GetMapping("/api/v2/system/user/getUserDetail")
     public Result getUserDetail(@Parameter(description = "用户ID") Long user_id) {
@@ -70,7 +70,7 @@ public class SysUserV2Controller {
      * - 查询用户信息权限 (3.4.1)
      * - 查询他人用户信息权限 (3.4.1.2)
      */
-    @Operation(summary = "获系统用户权限列表")
+    @Operation(summary = "获系统用户权限列表")
     @PreAuthorize("@sr.hasPermission('3.4.1')")
     @GetMapping("/api/v2/system/user/getUserPermission")
     public Result getUserPermission(@Parameter(description = "用户ID") Long user_id) {

+ 8 - 1
src/main/java/com/backendsys/modules/system/dao/SysUserRoleDao.java

@@ -14,6 +14,13 @@ public interface SysUserRoleDao extends BaseMapper<SysUserRole> {
 
     List<SysUserRole> selectUserRoleList(SysUserRoleDTO sysUserRoleDTO);
 
-    // 获得用户角色
+    // 获得用户角色 (部分字段)
     List<Map<String, Object>> selectRoleByUserId(Long user_id);
+
+    int insertUserRole(SysUserRoleDTO sysUserRoleDTO);
+    int insertUserRoleModuleRelation(SysUserRoleDTO sysUserRoleDTO);
+
+    int updateUserRole(SysUserRoleDTO sysUserRoleDTO);
+    int updateUserRoleModuleRelation(SysUserRoleDTO sysUserRoleDTO);
+
 }

+ 5 - 1
src/main/java/com/backendsys/modules/system/entity/SysUser/SysUserRole.java

@@ -11,10 +11,14 @@ import lombok.Data;
 public class SysUserRole {
     @TableId(type = IdType.AUTO)
     private Long id;
-    @TableField(exist = false)
+    @TableField("id")
     private Long role_id;
     private String role_name;
     private String role_description;
+
+    @TableField(exist = false)
+    private Integer user_count;
+
     private Integer sort;
     private Integer status;
 }

+ 5 - 0
src/main/java/com/backendsys/modules/system/service/SysUserRoleV2Service.java

@@ -6,9 +6,14 @@ import com.backendsys.utils.response.PageEntity;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
+import java.util.Map;
 
 public interface SysUserRoleV2Service extends IService<SysUserRole> {
 
     PageEntity getUserRole(SysUserRoleDTO sysUserRoleDTO);
+    SysUserRole getUserRoleDetail(SysUserRoleDTO sysUserRoleDTO);
+    Map<String, Object> insertUserRole(SysUserRoleDTO sysUserRoleDTO);
+    Map<String, Object> updateUserRole(SysUserRoleDTO sysUserRoleDTO);
+    Map<String, Object> deleteUserRole(SysUserRoleDTO sysUserRoleDTO);
 
 }

+ 4 - 4
src/main/java/com/backendsys/modules/system/service/SysUserV2Service.java

@@ -11,13 +11,13 @@ import java.util.Map;
 
 public interface SysUserV2Service extends IService<SysUser> {
 
-    // 获系统用户列表
+    // 获系统用户列表
     PageEntity selectUserList(SysUserDTO sysUserDTO);
-    // 获系统用户列表 (在线的)
+    // 获系统用户列表 (在线的)
     PageEntity selectUserOnlineList(SysUserDTO sysUserDTO);
-    // 获系统用户详情
+    // 获系统用户详情
     SysUserInfo selectUserInfo(Long user_id);
-    // 获系统用户权限
+    // 获系统用户权限
     List<String> selectUserModule(Long user_id);
     // 创建系统用户
     Map<String, Object> insertUser(SysUserDTO sysUserDTO);

+ 0 - 5
src/main/java/com/backendsys/modules/system/service/impl/SysUserRoleModuleV2ServiceImpl.java

@@ -20,11 +20,6 @@ public class SysUserRoleModuleV2ServiceImpl extends ServiceImpl<SysUserRoleModul
 
     @Override
     public List<Map<String, Object>> getUserRoleModule() {
-
-//        QueryWrapper<SysUserRoleModule> queryWrapper = new QueryWrapper<>();
-//        queryWrapper.orderByAsc("sort");
-//        sysUserRoleModuleDao.selectList(queryWrapper));
-
         return sysUserRoleModuleDao.getUserRoleModule();
     }
 

+ 92 - 4
src/main/java/com/backendsys/modules/system/service/impl/SysUserRoleV2ServiceImpl.java

@@ -1,32 +1,120 @@
 package com.backendsys.modules.system.service.impl;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.collection.CollUtil;
 import com.backendsys.entity.System.SysUserRoleDTO;
+import com.backendsys.exception.CustException;
 import com.backendsys.modules.system.dao.SysUserRoleDao;
-import com.backendsys.modules.system.entity.SysUser.SysUserInfo;
+import com.backendsys.modules.system.dao.SysUserRoleModuleRelationDao;
+import com.backendsys.modules.system.dao.SysUserRoleRelationDao;
 import com.backendsys.modules.system.entity.SysUser.SysUserRole;
+import com.backendsys.modules.system.entity.SysUser.SysUserRoleModuleRelation;
+import com.backendsys.modules.system.entity.SysUser.SysUserRoleRelation;
 import com.backendsys.modules.system.service.SysUserRoleV2Service;
 import com.backendsys.utils.response.PageEntity;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
+import java.util.*;
 
 @Service
 public class SysUserRoleV2ServiceImpl extends ServiceImpl<SysUserRoleDao, SysUserRole> implements SysUserRoleV2Service {
 
     @Autowired
     private SysUserRoleDao sysUserRoleDao;
+    @Autowired
+    private SysUserRoleRelationDao sysUserRoleRelationDao;
+    @Autowired
+    private SysUserRoleModuleRelationDao sysUserRoleModuleRelationDao;
 
     @Override
     public PageEntity getUserRole(SysUserRoleDTO sysUserRoleDTO) {
-        // 分页
-        PageUtils.startPage();
+        PageUtils.startPage();  // 分页
         List<SysUserRole> list = sysUserRoleDao.selectUserRoleList(sysUserRoleDTO);
         return new PageInfoResult(list).toEntity();
     }
 
+    @Override
+    public SysUserRole getUserRoleDetail(SysUserRoleDTO sysUserRoleDTO) {
+
+        Long role_id = sysUserRoleDTO.getRole_id();
+        SysUserRole roleDetail = sysUserRoleDao.selectById(role_id);
+        if (roleDetail == null) throw new CustException("系统用户角色不存在");
+
+        // 查询绑定人数
+        LambdaQueryWrapper<SysUserRoleRelation> queryWrapper = new LambdaQueryWrapper<SysUserRoleRelation>().eq(SysUserRoleRelation::getRole_id, role_id);
+        Long count = sysUserRoleRelationDao.selectCount(queryWrapper);
+        roleDetail.setUser_count(Convert.toInt(count));
+
+        return roleDetail;
+    }
+
+    @Override
+    @Transactional
+    public Map<String, Object> insertUserRole(SysUserRoleDTO sysUserRoleDTO) {
+
+        // 判断 modules 是否重复
+        List<String> modulesIds = sysUserRoleDTO.getModules();
+        if (CollUtil.isNotEmpty(modulesIds) && modulesIds.size() != CollUtil.distinct(modulesIds).size()) {
+            throw new CustException("模块ID出现重复值");
+        }
+
+        // 创建角色
+        sysUserRoleDao.insertUserRole(sysUserRoleDTO);
+        // 创建角色与模块关系
+        sysUserRoleDao.insertUserRoleModuleRelation(sysUserRoleDTO);
+
+        return Map.of("role_id", sysUserRoleDTO.getId());
+    }
+
+    @Override
+    @Transactional
+    public Map<String, Object> updateUserRole(SysUserRoleDTO sysUserRoleDTO) {
+
+        // 判断 modules 是否重复
+        List<String> modulesIds = sysUserRoleDTO.getModules();
+        if (CollUtil.isNotEmpty(modulesIds) && modulesIds.size() != CollUtil.distinct(modulesIds).size()) {
+            throw new CustException("模块ID出现重复值");
+        }
+
+        SysUserRole detail = sysUserRoleDao.selectById(sysUserRoleDTO.getRole_id());
+        if (detail == null) throw new CustException("系统用户角色不存在");
+
+        // 更新角色
+        sysUserRoleDao.updateUserRole(sysUserRoleDTO);
+        // 更新角色与模块关系 (需要先删除全部,再重新插入)
+        sysUserRoleDao.updateUserRoleModuleRelation(sysUserRoleDTO);
+
+        return Map.of("role_id", sysUserRoleDTO.getRole_id());
+    }
+
+    @Override
+    @Transactional
+    public Map<String, Object> deleteUserRole(SysUserRoleDTO sysUserRoleDTO) {
+
+        Long role_id = sysUserRoleDTO.getRole_id();
+
+        SysUserRole roleDetail = getUserRoleDetail(sysUserRoleDTO);
+        if (roleDetail == null) throw new CustException("系统用户角色不存在");
+
+        Integer user_count = roleDetail.getUser_count();
+        if (user_count > 0) throw new CustException("角色已关联 " + user_count + " 个用户,请解除关联后再删除");
+
+        // 删除角色
+        sysUserRoleDao.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getRole_id, role_id));
+        // 删除角色与模块关系
+        sysUserRoleModuleRelationDao.delete(new LambdaQueryWrapper<SysUserRoleModuleRelation>().eq(SysUserRoleModuleRelation::getRole_id, role_id));
+
+        return Map.of("role_id", sysUserRoleDTO.getRole_id());
+    }
+
 }

+ 6 - 8
src/main/java/com/backendsys/modules/system/service/impl/SysUserV2ServiceImpl.java

@@ -53,23 +53,21 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
     private SysUserRoleModuleRelationDao sysUserRoleModuleRelationDao;
 
     /**
-     * 获系统用户列表
+     * 获系统用户列表
      */
     @Override
     public PageEntity selectUserList(SysUserDTO sysUserDTO) {
-        // 分页
-        PageUtils.startPage();
+        PageUtils.startPage();  // 分页
         List<SysUserInfo> list = sysUserInfoDao.selectUserList(sysUserDTO);
         return new PageInfoResult(list).toEntity();
     }
 
     /**
-     * 获系统用户列表 (在线的)
+     * 获系统用户列表 (在线的)
      */
     @Override
     public PageEntity selectUserOnlineList(SysUserDTO sysUserDTO) {
-        // 分页
-        PageUtils.startPage();
+        PageUtils.startPage();  // 分页
         // 获得 用户最后登录的 tokenUUID
         Collection<String> redisKeys = redisUtil.keys("token:*");
         List<String> last_login_uuids = redisKeys.stream().map(e -> String.valueOf(e).replace("token:id:", "")).collect(Collectors.toList());
@@ -78,7 +76,7 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
     }
 
     /**
-     * 获系统用户详情
+     * 获系统用户详情
      */
     @Override
     public SysUserInfo selectUserInfo(Long user_id) {
@@ -110,7 +108,7 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
 
 
     /**
-     * 获系统用户权限
+     * 获系统用户权限
      */
     @Override
     public List<String> selectUserModule(Long user_id) {

+ 52 - 5
src/main/resources/mapper/system/SysUserRoleDao.xml

@@ -10,7 +10,7 @@
         ur.sort sort,
         ur.status status
     </sql>
-    <resultMap id="resultMapUserRoleList" type="java.util.LinkedHashMap">
+    <resultMap id="resultMapUserRole" type="java.util.LinkedHashMap">
         <id property="id" column="id" jdbcType="BIGINT" />
         <result property="role_id" column="role_id" javaType="java.lang.Long"/>
         <result property="role_name" column="role_name" />
@@ -19,7 +19,7 @@
         <result property="sort" column="sort" />
         <result property="status" column="status" javaType="java.lang.Integer"/>
     </resultMap>
-    <select id="selectUserRoleList" resultMap="resultMapUserRoleList">
+    <select id="selectUserRoleList" resultMap="resultMapUserRole">
         SELECT <include refid="includeUserRole" />, COUNT(us.id) user_count
         FROM sys_user_role ur
         LEFT JOIN sys_user_role_relation urr ON ur.id = urr.role_id
@@ -36,12 +36,12 @@
         ORDER BY ur.sort ASC
     </select>
 
-
-    <resultMap id="resultMapUserRole" type="java.util.LinkedHashMap">
+    <!-- 获得用户角色 (部分字段) -->
+    <resultMap id="resultMapUserRoleSimple" type="java.util.LinkedHashMap">
         <result property="role_id" column="role_id" javaType="java.lang.Long" />
         <result property="role_name" column="role_name" />
     </resultMap>
-    <select id="selectRoleByUserId" resultMap="resultMapUserRole">
+    <select id="selectRoleByUserId" resultMap="resultMapUserRoleSimple">
         SELECT
             surr.role_id role_id,
             sur.role_name role_name
@@ -50,4 +50,51 @@
         WHERE user_id = #{user_id}
     </select>
 
+
+    <!-- 创建 用户角色 -->
+    <insert id="insertUserRole" parameterType="com.backendsys.entity.System.SysUserRoleDTO" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO sys_user_role (role_name
+            <if test="role_description != null">, role_description</if>
+            <if test="sort != null">, sort</if>
+            <if test="status != null">, status</if>
+        ) VALUES (#{role_name}
+            <if test="role_description != null">, #{role_description}</if>
+            <if test="sort != null">, #{sort}</if>
+            <if test="status != null">, #{status}</if>
+        )
+    </insert>
+    <!-- 创建 用户角色 对应的 模块关系 -->
+    <insert id="insertUserRoleModuleRelation" parameterType="com.backendsys.entity.System.SysUserRoleDTO">
+        INSERT INTO sys_user_role_module_relation (role_id, module_id)
+        VALUES
+        <foreach collection="modules" item="module_id" separator=",">
+            (#{id}, #{module_id})
+        </foreach>
+    </insert>
+
+    <!-- 编辑 用户角色 -->
+    <update id="updateUserRole" parameterType="com.backendsys.entity.System.SysUserRoleDTO">
+        UPDATE sys_user_role SET
+        <trim suffixOverrides="," suffix=" ">
+            <if test="role_name != null and role_name != ''">role_name = #{role_name},</if>
+            <if test="role_description != null and role_description != ''">role_description = #{role_description},</if>
+            <if test="sort != null and sort != ''">sort = #{sort},</if>
+            <if test="status != null and status != ''">status = #{status},</if>
+        </trim>
+        WHERE id = #{role_id}
+    </update>
+    <!-- 编辑 用户角色 对应的 模块关系-->
+    <update id="updateUserRoleModuleRelation" parameterType="com.backendsys.entity.System.SysUserRoleDTO">
+        <!--删除符合条件的数据-->
+        DELETE FROM sys_user_role_module_relation WHERE role_id = #{role_id};
+        <!--判断是否有新的数据需要插入-->
+        <if test="modules != null and modules.size() > 0">
+            INSERT INTO sys_user_role_module_relation (role_id, module_id)
+            VALUES
+            <foreach collection="modules" item="module_id" separator=",">
+                (#{role_id}, #{module_id})
+            </foreach>
+        </if>
+    </update>
+
 </mapper>