Ver código fonte

新增v2:创建系统用户接口

tsurumure 9 meses atrás
pai
commit
de1b575ad1

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

@@ -83,8 +83,14 @@ public class SysUserV2Controller {
         if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
             throw new CustException(SecurityEnum.NOAUTH);
         }
-
         return Result.success().put("data", sysUserV2Service.selectUserModule(user_id));
     }
 
+    @Operation(summary = "创建系统用户")
+    @PreAuthorize("@ss.hasPermi('3.2.2')")
+    @PostMapping("/api/v2/system/user/createUser")
+    public Result createUser(@Validated(SysUserDTO.Create.class) @RequestBody SysUserDTO sysUserDTO) {
+        return Result.success().put("data", sysUserV2Service.insertUser(sysUserDTO));
+    }
+
 }

+ 4 - 0
src/main/java/com/backendsys/modules/system/dao/SysUserDao.java

@@ -1,9 +1,13 @@
 package com.backendsys.modules.system.dao;
 
 import com.backendsys.modules.system.entity.SysUser.SysUser;
+import com.backendsys.modules.system.entity.SysUser.SysUserDTO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
 public interface SysUserDao extends BaseMapper<SysUser> {
+
+    int insertUser(SysUserDTO sysUserDTO);
+
 }

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

@@ -8,6 +8,7 @@ import com.backendsys.utils.response.PageInfoResult;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
+import java.util.Map;
 
 public interface SysUserV2Service extends IService<SysUser> {
 
@@ -15,12 +16,12 @@ public interface SysUserV2Service extends IService<SysUser> {
     PageEntity selectUserList(SysUserDTO sysUserDTO);
     // 获得系统用户列表 (在线的)
     PageEntity selectUserOnlineList(SysUserDTO sysUserDTO);
-
     // 获得系统用户详情
     SysUserInfo selectUserInfo(Long user_id);
-//    SysUserDTO selectUserDetail(Long user_id);
-
     // 获得系统用户权限
     List<String> selectUserModule(Long user_id);
 
+    // 创建系统用户
+    Map<String, Object> insertUser(SysUserDTO sysUserDTO);
+
 }

+ 33 - 11
src/main/java/com/backendsys/modules/system/service/impl/SysUserV2ServiceImpl.java

@@ -13,17 +13,29 @@ import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 @Service
 public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> implements SysUserV2Service {
 
+    @Lazy
+    @Autowired
+    RedissonClient redissonClient;
+    @Autowired
+    private RedisUtil redisUtil;
+
     @Autowired
     private SysUserDao sysUserDao;
     @Autowired
@@ -35,12 +47,6 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
     @Autowired
     private SysUserRoleModuleRelationDao sysUserRoleModuleRelationDao;
 
-    @Autowired
-    private RedisTemplate redisTemplate;
-
-    @Autowired
-    private RedisUtil redisUtil;
-    
     /**
      * 获得系统用户列表
      */
@@ -97,11 +103,6 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
         return sysUserInfo;
     }
 
-//    @Override
-//    public SysUserDTO selectUserDetail(Long user_id) {
-//        return sysUserInfoDao.selectUserDetail(user_id);
-//    }
-
     /**
      * 获得系统用户权限
      */
@@ -122,4 +123,25 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
     }
 
 
+    @Override
+    @Transactional
+    public Map<String, Object> insertUser(SysUserDTO sysUserDTO) {
+        RLock lock = redissonClient.getLock("insertUser");
+        try { lock.tryLock(3, TimeUnit.SECONDS);
+
+            // 密码二次加密
+            String password = sysUserDTO.getPassword();
+            BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+            String encodedPassword = encoder.encode(password);
+            sysUserDTO.setPassword(encodedPassword);
+
+            sysUserDao.insertUser(sysUserDTO);
+
+            return Map.of("user_id", sysUserDTO.getId());
+
+        } catch (InterruptedException e) { throw new RuntimeException(e);
+        } finally { lock.unlock(); }
+    }
+
+
 }

+ 32 - 27
src/main/resources/mapper/system/SysUserDao.xml

@@ -225,47 +225,52 @@
     </select>
 
     <!-- 创建用户 -->
-    <insert id="insertUser" parameterType="com.backendsys.entity.System.SysUserDTO"
-            useGeneratedKeys="true" keyProperty="id">
-        INSERT INTO sys_user (
-        password
-        <if test="username != null and username != ''">, username</if>
-        <if test="phone != null and phone != ''">, phone</if>
-        <if test="phone_area_code != null and phone_area_code != ''">, phone_area_code</if>
+    <insert id="insertUser" parameterType="com.backendsys.entity.System.SysUserDTO" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO sys_user (password
+            <if test="username != null and username != ''">, username</if>
+            <if test="phone != null and phone != ''">, phone</if>
+            <if test="phone_area_code != null and phone_area_code != ''">, phone_area_code</if>
         )
-        VALUES (
-        #{password}
-        <if test="username != null and username != ''">, #{username}</if>
-        <if test="phone != null and phone != ''">, #{phone}</if>
-        <if test="phone_area_code != null and phone_area_code != ''">, #{phone_area_code}</if>
+        VALUES (#{password}
+            <if test="username != null and username != ''">, #{username}</if>
+            <if test="phone != null and phone != ''">, #{phone}</if>
+            <if test="phone_area_code != null and phone_area_code != ''">, #{phone_area_code}</if>
         );
         SET @last_user_id = LAST_INSERT_ID();
 
         INSERT INTO sys_user_info (user_id
-        <if test="nickname != null and nickname != ''">, nickname</if>
-        <if test="email != null and email != ''">, email</if>
-        <if test="gender != null and gender != ''">, gender</if>
-        <if test="avatar != null and avatar != ''">, avatar</if>
-        <if test="status != null and status != ''">, status</if>
-        <if test="invite_code != null and invite_code != ''">, invite_code</if>
+            <if test="nickname != null and nickname != ''">, nickname</if>
+            <if test="email != null and email != ''">, email</if>
+            <if test="gender != null and gender != ''">, gender</if>
+            <if test="avatar != null and avatar != ''">, avatar</if>
+            <if test="status != null and status != ''">, status</if>
+            <if test="invite_code != null and invite_code != ''">, invite_code</if>
         ) VALUES (@last_user_id
-        <if test="nickname != null and nickname != ''">, #{nickname}</if>
-        <if test="email != null and email != ''">, #{email}</if>
-        <if test="gender != null and gender != ''">, #{gender}</if>
-        <if test="avatar != null and avatar != ''">, #{avatar}</if>
-        <if test="status != null and status != ''">, #{status}</if>
-        <if test="invite_code != null and invite_code != ''">, #{invite_code}</if>
+            <if test="nickname != null and nickname != ''">, #{nickname}</if>
+            <if test="email != null and email != ''">, #{email}</if>
+            <if test="gender != null and gender != ''">, #{gender}</if>
+            <if test="avatar != null and avatar != ''">, #{avatar}</if>
+            <if test="status != null and status != ''">, #{status}</if>
+            <if test="invite_code != null and invite_code != ''">, #{invite_code}</if>
         );
 
-        <if test="roles != null and roles.size() > 0">
+        <if test="role_id != null and role_id.size() > 0">
             INSERT INTO sys_user_role_relation (user_id, role_id)
             VALUES
-            <foreach collection="roles" item="role" separator=",">
-                (@last_user_id, #{role.id})
+            <foreach collection="role_id" item="id" separator=",">
+                (@last_user_id, #{id})
             </foreach>
         </if>
     </insert>
 
+<!--    <if test="roles != null and roles.size() > 0">-->
+<!--        INSERT INTO sys_user_role_relation (user_id, role_id)-->
+<!--        VALUES-->
+<!--        <foreach collection="roles" item="role" separator=",">-->
+<!--            (@last_user_id, #{role.id})-->
+<!--        </foreach>-->
+<!--    </if>-->
+
     <!-- 编辑 用户信息 -->
     <update id="updateUserInfo" parameterType="com.backendsys.entity.System.SysUserDTO">
         UPDATE sys_user_info SET