浏览代码

Dev updateUserInfo

tsurumure 9 月之前
父节点
当前提交
d88ad4f14f

+ 2 - 1
db/sys_user_role_module.sql

@@ -41,9 +41,10 @@ INSERT INTO sys_user_role_module(id, parent_id, module_name, sort) VALUES
         ('3.1', '3', '系统用户-列表 (在线的)', null),
         ('3.1', '3', '系统用户-列表 (在线的)', null),
         ('3.2', '3', '系统用户-列表', null),
         ('3.2', '3', '系统用户-列表', null),
             ('3.2.1', '3.2', '查询用户信息', null),
             ('3.2.1', '3.2', '查询用户信息', null),
-            ('3.2.1.2', '3.2', '查询他人用户信息', null),
+                ('3.2.1.2', '3.2', '查询他人信息', null),
             ('3.2.2', '3.2', '系统用户-创建', null),
             ('3.2.2', '3.2', '系统用户-创建', null),
             ('3.2.3', '3.2', '系统用户-编辑', null),
             ('3.2.3', '3.2', '系统用户-编辑', null),
+                ('3.2.3.2', '3.2', '系统用户-编辑他人信息', null),
             ('3.2.4', '3.2', '系统用户-删除', null),
             ('3.2.4', '3.2', '系统用户-删除', null),
             ('3.2.5', '3.2', '系统用户-删除(批量)', null),
             ('3.2.5', '3.2', '系统用户-删除(批量)', null),
             ('3.2.6', '3.2', '系统用户-审核', null),
             ('3.2.6', '3.2', '系统用户-审核', null),

+ 1 - 1
db/sys_user_role_module_relation.sql

@@ -46,7 +46,7 @@ INSERT INTO sys_user_role_module_relation(role_id, module_id) VALUES
     (1, '3'),
     (1, '3'),
         (1, '3.1'),
         (1, '3.1'),
         (1, '3.2'),
         (1, '3.2'),
-            (1, '3.2.1'), (1, '3.2.1.2'), (1, '3.2.2'), (1, '3.2.3'), (1, '3.2.4'), (1, '3.2.5'), (1, '3.2.6'), (1, '3.2.7'),
+            (1, '3.2.1'), (1, '3.2.1.2'), (1, '3.2.2'), (1, '3.2.3'), (1, '3.2.3.2'), (1, '3.2.4'), (1, '3.2.5'), (1, '3.2.6'), (1, '3.2.7'),
         (1, '3.3'),
         (1, '3.3'),
             (1, '3.3.8'), (1, '3.3.9'), (1, '3.3.10'),
             (1, '3.3.8'), (1, '3.3.9'), (1, '3.3.10'),
 #             (1, '3.3.1'), (1, '3.3.2'), (1, '3.3.3'), (1, '3.3.4'), (1, '3.3.5'), (1, '3.3.6'), (1, '3.3.7'),
 #             (1, '3.3.1'), (1, '3.3.2'), (1, '3.3.3'), (1, '3.3.4'), (1, '3.3.5'), (1, '3.3.6'), (1, '3.3.7'),

+ 1 - 0
src/main/java/com/backendsys/aspect/LanguageAspect.java

@@ -11,6 +11,7 @@ import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Field;
+import java.util.Arrays;
 
 
 /**
 /**
  * 自动在 控制器 的实体类中加入 { lang: 'zh' } 字段
  * 自动在 控制器 的实体类中加入 { lang: 'zh' } 字段

+ 0 - 2
src/main/java/com/backendsys/exception/GlobalExceptionHandler.java

@@ -119,8 +119,6 @@ public class GlobalExceptionHandler implements ResponseBodyAdvice<Object> {
                 String createTime = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
                 String createTime = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
                 String serverName = request.getServerName();
                 String serverName = request.getServerName();
 
 
-                System.out.println("serverName = " + serverName);
-
                 // --- 向钉钉发送消息 -----------------------------------
                 // --- 向钉钉发送消息 -----------------------------------
                 // (本地环境不触发)
                 // (本地环境不触发)
                 if (!"localhost".equals(serverName)) {
                 if (!"localhost".equals(serverName)) {

+ 106 - 0
src/main/java/com/backendsys/modules/common/aspect/QueryNullCheckAspectV2.java

@@ -0,0 +1,106 @@
+package com.backendsys.modules.common.aspect;
+
+import cn.hutool.core.convert.Convert;
+import com.backendsys.modules.common.utils.Result;
+import com.backendsys.modules.common.utils.ResultEnum;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * 仅判断非空,可以使用此切面方法
+ * 
+ * 多判断,不适合此方法,比如:
+ * - 非空
+ * - 非本人
+ * - 非超级管理员
+ */
+
+@Aspect
+@Component
+public class QueryNullCheckAspectV2 {
+
+    @Autowired
+    private ApplicationContext applicationContext;
+
+    private static Map<String, Object> queryResult;
+    private static Object queryResultV2;
+
+    /**
+     * 自定注解:@QueryNullCheck
+     * 使用方法:通过ID查询记录是否存在 (适用于 详情/改/删)
+     * @QueryNullCheck(serviceClass = B2cGoodUnitService.class, serviceMethod = "queryGoodUnitDetail", argField = "good_unit_id", message = "商品单位不存在")
+     * public Result deleteGoodUnit(@Validated(B2cGoodUnitDTO.Delete.class) @RequestBody B2cGoodUnitDTO b2cGoodUnitDTO) {
+     *
+     * 注意:入参必须是实体类 (除 GET 外,POST/PUT/DELETE 需要加 @RequestBody)
+     */
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    @Around("@annotation(queryNullCheckV2)")
+    public Object handleQueryNullCheck(ProceedingJoinPoint joinPoint, QueryNullCheckV2 queryNullCheckV2) throws Throwable {
+        Object[] args = joinPoint.getArgs();
+
+        Class argDao = queryNullCheckV2.dao();
+        String argField = queryNullCheckV2.field();
+        String argMessage = queryNullCheckV2.message();
+
+
+        // 拿不到实例化后的
+
+//        Class<?> implClass = argDao.getClass();
+//        Method[] methods = implClass.getDeclaredMethods();
+//        for (Method method : methods) {
+//            System.out.println(method.getName());
+//        }
+
+
+        // 获取参数值
+        Serializable argValue = null;
+        for (Object arg : args) {
+            Field field = arg.getClass().getDeclaredField(argField);
+            field.setAccessible(true);
+            argValue = Convert.toLong(field.get(arg));
+            if (argValue != null) { break; }
+        }
+        System.out.println("argValue = " + argValue);
+        System.out.println("argValue.getClass() = " + argValue.getClass());
+
+        /**
+         * 参数为空 (例如 user_id = null) 时,校验在实体类那里进行,此处不再进行校验
+         */
+        if (argValue != null) {
+
+            // 拿不到 selectById 方法
+            // 在MyBatis-Plus中,BaseMapper<T>接口中定义的方法(如selectById)是通过MyBatis-Plus框架在运行时动态生成的代理实现的。这些方法并不是直接在DAO接口的实现类中定义的,而是在代理对象中动态创建的。因此,使用Java反射API直接在DAO接口的实现类中查找这些方法是找不到的。
+
+
+////            queryResultV2 = argDao.getClass().getMethod("selectById", argValue.getClass()).invoke(argDao, argValue);
+//            queryResultV2 = argDao.getClass().getMethod("selectById", Serializable.class).invoke(argDao, argValue);
+//            System.out.println("queryResultV2 = " + queryResultV2);
+
+
+//            // [反向代理] 执行记录非空查询的 service 方法
+//            queryResult = (Map<String, Object>) service.getClass().getMethod(serviceMethod, argValue.getClass()).invoke(service, argValue);
+//            if (queryResult == null) {
+//                return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), message);
+//            }
+        }
+
+        return joinPoint.proceed();
+    }
+
+    /**
+     * 获得该次查询的结果:
+     * QueryNullCheckAspect.getQueryResult()
+     */
+    public static Map<String, Object> getQueryResult() {
+        return queryResult;
+    }
+}

+ 14 - 0
src/main/java/com/backendsys/modules/common/aspect/QueryNullCheckV2.java

@@ -0,0 +1,14 @@
+package com.backendsys.modules.common.aspect;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface QueryNullCheckV2 {
+    Class dao();
+    String field();
+    String message() default "";
+}

+ 2 - 2
src/main/java/com/backendsys/modules/common/config/redis/utils/RedisUtil.java

@@ -78,7 +78,7 @@ public class RedisUtil {
      *
      *
      * @param key
      * @param key
      */
      */
-    public boolean deleteObject(final String key) {
+    public boolean delete(final String key) {
         return redisTemplate.delete(key);
         return redisTemplate.delete(key);
     }
     }
 
 
@@ -88,7 +88,7 @@ public class RedisUtil {
      * @param collection 多个对象
      * @param collection 多个对象
      * @return
      * @return
      */
      */
-    public long deleteObject(final Collection collection) {
+    public long delete(final Collection collection) {
         return redisTemplate.delete(collection);
         return redisTemplate.delete(collection);
     }
     }
 
 

+ 1 - 4
src/main/java/com/backendsys/modules/common/utils/Result.java

@@ -1,14 +1,11 @@
 package com.backendsys.modules.common.utils;
 package com.backendsys.modules.common.utils;
 
 
 import org.apache.http.HttpStatus;
 import org.apache.http.HttpStatus;
-
-import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
  * 返回数据
  * 返回数据
- *
  */
  */
 public class Result extends LinkedHashMap<String, Object> {
 public class Result extends LinkedHashMap<String, Object> {
 	private static final long serialVersionUID = 1L;
 	private static final long serialVersionUID = 1L;
@@ -58,7 +55,7 @@ public class Result extends LinkedHashMap<String, Object> {
 	}
 	}
 
 
 	@Override
 	@Override
-    public Result  put(String key, Object value) {
+    public Result put(String key, Object value) {
 		super.put(key, value);
 		super.put(key, value);
 		return this;
 		return this;
 	}
 	}

+ 62 - 0
src/main/java/com/backendsys/modules/common/utils/ResultEnum.java

@@ -0,0 +1,62 @@
+package com.backendsys.modules.common.utils;
+
+/**
+ * 定义API返回码枚举类
+ */
+public enum ResultEnum {
+
+    /* 成功状态码 */
+    SUCCESS(200, "成功"),
+
+    /* 错误状态码 */
+    NOT_FOUND(404, "请求的资源不存在"),
+    AUTH_ERROR(401, "授权失败!"),
+    AUTH_ROLE_ERROR(403, "该用户角色没有访问权限"),
+    AUTH_USER_ERROR(403, "该用户不可操作"),
+    /**
+     * 用户模块枚举
+     */
+
+    TOKEN_EMPTY_ERROR(401, "请先登录以获取有效的Token"),
+    INVALID_CREDENTIALS(402, "用户名或密码错误"),
+    LOCK_CREDENTIALS(4024, "错误次数过多,为账号安全,请等待1分钟后重新尝试"),
+
+    CAPTCHA_ERROR(403, "验证码错误"),
+    UNIQUE_FIELD(409, "唯一字段已存在"),
+
+    HTTP_BODY_EMPTY(420, "请求体参数不能为空"),
+    HTTP_METHOD_ERROR(421, "请求方法不支持"),
+
+    TOKEN_EXPIRED(440, "Token已过期,请重新登录"),
+    TOKEN_INVALID(441, "Token已失效,请重新登录"),
+    TOKEN_FORMAT_EXCEPTION(442, "Token格式异常"),
+    TOKEN_FORMAT_INCORRECT(443, "Token格式不正确"),
+
+
+    STATUS_ERROR(499, "资源状态暂不可用"),
+    INTERNAL_ERROR(500, "服务器内部错误"),
+    PARAMETER_EXCEPTION(6001, "参数校验异常"),
+    REMOTE_EXCEPTION(6002, "远程资源异常"),
+    NULL_POINTER(7001, "空指针异常"),
+    REFLECTION_EXCEPTION(8001, "Mybatis反射操作异常"),
+    SERVICE_EXCEPTION(502, "远程服务器错误"),
+    SERVER_BUSY(503, "服务器正忙,请稍后再试!"),
+    DATABASE_OPERATION_FAILED(504, "数据库操作失败"),
+    REDIS_ERROR(601, "Redis Error");
+
+    private int code;
+    private String message;
+
+
+    public int getCode() {
+        return this.code;
+    }
+    public String getMessage() {
+        return this.message;
+    }
+
+    ResultEnum(int code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+}

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

@@ -1,12 +1,16 @@
 package com.backendsys.modules.system.controller;
 package com.backendsys.modules.system.controller;
 
 
-import com.backendsys.entity.PageDTO;
+import com.backendsys.aspect.QueryNullCheck;
 import com.backendsys.exception.CustException;
 import com.backendsys.exception.CustException;
+import com.backendsys.modules.common.aspect.QueryNullCheckV2;
 import com.backendsys.modules.common.config.security.enums.SecurityEnum;
 import com.backendsys.modules.common.config.security.enums.SecurityEnum;
 import com.backendsys.modules.common.config.security.utils.SecurityUtil;
 import com.backendsys.modules.common.config.security.utils.SecurityUtil;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.modules.common.utils.Result;
+import com.backendsys.modules.system.dao.SysUserInfoDao;
 import com.backendsys.modules.system.entity.SysUser.SysUserDTO;
 import com.backendsys.modules.system.entity.SysUser.SysUserDTO;
+import com.backendsys.modules.system.entity.SysUser.SysUserInfo;
 import com.backendsys.modules.system.service.SysUserV2Service;
 import com.backendsys.modules.system.service.SysUserV2Service;
+import com.backendsys.service.B2c.B2cGoodUnitService;
 import com.backendsys.service.System.SysUserService;
 import com.backendsys.service.System.SysUserService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -16,6 +20,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import java.lang.reflect.Method;
+
 @Validated
 @Validated
 @RestController
 @RestController
 @Tag(name = "系统用户")
 @Tag(name = "系统用户")
@@ -66,8 +72,8 @@ public class SysUserV2Controller {
 
 
     /**
     /**
      * 权限:
      * 权限:
-     * - 查询用户权限 (3.4.1)
-     * - 查询他人用户权限 (3.4.1.2)
+     * - 查询用户信息权限 (3.4.1)
+     * - 查询他人用户信息权限 (3.4.1.2)
      */
      */
     @Operation(summary = "获得系统用户权限列表")
     @Operation(summary = "获得系统用户权限列表")
     @PreAuthorize("@sr.hasPermission('3.4.1')")
     @PreAuthorize("@sr.hasPermission('3.4.1')")
@@ -79,7 +85,7 @@ public class SysUserV2Controller {
 
 
         // 查询他人的用户信息
         // 查询他人的用户信息
         // - 查询自己 (无需权限)
         // - 查询自己 (无需权限)
-        // - 查询他人 (需要权限或超级管理员)
+        // - 查询他人 (需要权限或超级管理员)
         if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
         if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
             throw new CustException(SecurityEnum.NOAUTH);
             throw new CustException(SecurityEnum.NOAUTH);
         }
         }
@@ -93,4 +99,47 @@ public class SysUserV2Controller {
         return Result.success().put("data", sysUserV2Service.insertUser(sysUserDTO));
         return Result.success().put("data", sysUserV2Service.insertUser(sysUserDTO));
     }
     }
 
 
+
+    @Autowired
+    private SysUserInfoDao sysUserInfoDao;
+
+    /**
+     * 权限:
+     * - 编辑用户信息权限 (3.2.3)
+     * - 编辑他人用户信息权限 (3.2.3.2)
+     */
+    @Operation(summary = "编辑系统用户信息")
+    @PreAuthorize("@ss.hasPermi('3.2.3')")
+//    @QueryNullCheckV2(dao = SysUserInfoDao.class, field = "user_id", message = "用户不存在")
+//    @QueryNullCheck(serviceClass = B2cGoodUnitService.class, serviceMethod = "queryGoodUnitDetail", argField = "good_unit_id", message = "商品单位不存在")
+    @PutMapping("/api/v2/system/user/updateUserInfo")
+    public Result updateUserInfo(@Validated(SysUserDTO.Update.class) @RequestBody SysUserDTO sysUserDTO) {
+
+//        sysUserInfoDao.selectById()
+
+        // 获取SysUserInfoDao的实现类的Class对象
+//        Class<?> implClass = sysUserInfoDao.getClass();
+//        Method[] methods = implClass.getDeclaredMethods();
+//        for (Method method : methods) {
+//            System.out.println(method.getName());
+//        }
+
+        // 还是写一个方法来判断 是否存在吧?
+
+
+        // 编辑他人的用户信息
+        // - 编辑自己 (无需权限)
+        // - 编辑他人 (需要子权限或超级管理员)
+        Long user_id = sysUserDTO.getUser_id();
+        if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.2.3.2") && !SecurityUtil.isSuper()) {
+            throw new CustException(SecurityEnum.NOAUTH);
+        }
+
+        // 防止手动更新字段
+        sysUserDTO.setLast_login_time(null);
+        sysUserDTO.setLast_login_ip(null);
+
+        return Result.success().put("data", sysUserV2Service.updateUserInfo(sysUserDTO));
+    }
+
 }
 }

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

@@ -9,5 +9,6 @@ import org.apache.ibatis.annotations.Mapper;
 public interface SysUserDao extends BaseMapper<SysUser> {
 public interface SysUserDao extends BaseMapper<SysUser> {
 
 
     int insertUser(SysUserDTO sysUserDTO);
     int insertUser(SysUserDTO sysUserDTO);
+    int updateUserInfo(SysUserDTO sysUserDTO);
 
 
 }
 }

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

@@ -99,7 +99,7 @@ public class SysUserDTO {
 //  @NotEmpty(message="密钥不能为空", groups = { Register.class })
 //  @NotEmpty(message="密钥不能为空", groups = { Register.class })
   private String invite_code;
   private String invite_code;
 
 
-  @NotEmpty(message="角色不能为空", groups = { Create.class, Update.class })
+  @NotEmpty(message="角色不能为空", groups = { Create.class })
   private List<Long> role_id;
   private List<Long> role_id;
   private List<LinkedHashMap<String, Object>> roles;
   private List<LinkedHashMap<String, Object>> roles;
   private List<String> modules;
   private List<String> modules;

+ 2 - 2
src/main/java/com/backendsys/modules/system/entity/SysUser/SysUserInfo.java

@@ -17,9 +17,9 @@ import java.util.List;
 @TableName("sys_user_info")
 @TableName("sys_user_info")
 public class SysUserInfo {
 public class SysUserInfo {
 
 
-    @TableId(type = IdType.AUTO)
-    private Long id;
 
 
+    private Long id;
+    @TableId(type = IdType.AUTO)
     private Long user_id;
     private Long user_id;
 
 
     @TableField(exist = false)
     @TableField(exist = false)

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

@@ -23,5 +23,6 @@ public interface SysUserV2Service extends IService<SysUser> {
 
 
     // 创建系统用户
     // 创建系统用户
     Map<String, Object> insertUser(SysUserDTO sysUserDTO);
     Map<String, Object> insertUser(SysUserDTO sysUserDTO);
+    Map<String, Object> updateUserInfo(SysUserDTO sysUserDTO);
 
 
 }
 }

+ 28 - 1
src/main/java/com/backendsys/modules/system/service/impl/SysUserV2ServiceImpl.java

@@ -122,7 +122,9 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
         return roleModuleIds;
         return roleModuleIds;
     }
     }
 
 
-
+    /**
+     * 创建系统用户
+     */
     @Override
     @Override
     @Transactional
     @Transactional
     public Map<String, Object> insertUser(SysUserDTO sysUserDTO) {
     public Map<String, Object> insertUser(SysUserDTO sysUserDTO) {
@@ -143,5 +145,30 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
         } finally { lock.unlock(); }
         } finally { lock.unlock(); }
     }
     }
 
 
+    /**
+     * 编辑系统用户信息
+     */
+    @Override
+    @Transactional
+    public Map<String, Object> updateUserInfo(SysUserDTO sysUserDTO) {
+        RLock lock = redissonClient.getLock("updateUserInfo");
+        try { lock.tryLock(3, TimeUnit.SECONDS);
+
+            // 当 status 状态为 -1(禁用) 时,同时清除登录状态
+            Integer status = sysUserDTO.getStatus();
+            if (status != null && status == -1) {
+                String last_login_uuid = sysUserDTO.getLast_login_uuid();
+                redisUtil.delete("token:id:" + last_login_uuid);
+                sysUserDTO.setLast_login_uuid("");
+            }
+
+            sysUserDao.updateUserInfo(sysUserDTO);
+
+            return Map.of("user_id", sysUserDTO.getUser_id());
+
+        } catch (InterruptedException e) { throw new RuntimeException(e);
+        } finally { lock.unlock(); }
+    }
+
 
 
 }
 }

+ 3 - 3
src/main/java/com/backendsys/service/System/SysAuthServiceImpl.java

@@ -293,7 +293,7 @@ public class SysAuthServiceImpl implements SysAuthService {
             throw new CustException("手机号码不存在", ResultEnum.INVALID_CREDENTIALS.getCode());
             throw new CustException("手机号码不存在", ResultEnum.INVALID_CREDENTIALS.getCode());
         } else {
         } else {
             // 登录成功,销毁 smsCode
             // 登录成功,销毁 smsCode
-            redisUtil.deleteObject(redisKey);
+            redisUtil.delete(redisKey);
 
 
             // 登录成功回调
             // 登录成功回调
             sysUserDTO.setUser_id((Long) sysUserSimple.get("id"));
             sysUserDTO.setUser_id((Long) sysUserSimple.get("id"));
@@ -355,7 +355,7 @@ public class SysAuthServiceImpl implements SysAuthService {
                 // .. 待做
                 // .. 待做
 
 
                 // 注册成功,销毁 smsCode
                 // 注册成功,销毁 smsCode
-                redisUtil.deleteObject(redisKey);
+                redisUtil.delete(redisKey);
                 //
                 //
             }
             }
 
 
@@ -427,7 +427,7 @@ public class SysAuthServiceImpl implements SysAuthService {
             sysUserMapper.updateUserPassword(updateDTO);
             sysUserMapper.updateUserPassword(updateDTO);
 
 
             // 更改成功,销毁 smsCode
             // 更改成功,销毁 smsCode
-            redisUtil.deleteObject(redisKey);
+            redisUtil.delete(redisKey);
 
 
             return Map.of("user_id", updateDTO.getUser_id());
             return Map.of("user_id", updateDTO.getUser_id());
 
 

+ 3 - 3
src/main/java/com/backendsys/service/System/SysMenuServiceImpl.java

@@ -86,7 +86,7 @@ public class SysMenuServiceImpl implements SysMenuService {
     public Map<String, Object> insertMenu(SysMenuDTO sysMenuDTO) {
     public Map<String, Object> insertMenu(SysMenuDTO sysMenuDTO) {
         sysMenuMapper.insertMenu(sysMenuDTO);
         sysMenuMapper.insertMenu(sysMenuDTO);
         // 删除缓存
         // 删除缓存
-        redisUtil.deleteObject("catchSysMenu");
+        redisUtil.delete("catchSysMenu");
         //
         //
         return Map.of("menu_id", sysMenuDTO.getId());
         return Map.of("menu_id", sysMenuDTO.getId());
     }
     }
@@ -99,7 +99,7 @@ public class SysMenuServiceImpl implements SysMenuService {
     public Map<String, Object> updateMenu(SysMenuDTO sysMenuDTO) {
     public Map<String, Object> updateMenu(SysMenuDTO sysMenuDTO) {
         sysMenuMapper.updateMenu(sysMenuDTO);
         sysMenuMapper.updateMenu(sysMenuDTO);
         // 删除缓存
         // 删除缓存
-        redisUtil.deleteObject("catchSysMenu");
+        redisUtil.delete("catchSysMenu");
         //
         //
         return Map.of("menu_id", sysMenuDTO.getMenu_id());
         return Map.of("menu_id", sysMenuDTO.getMenu_id());
     }
     }
@@ -112,7 +112,7 @@ public class SysMenuServiceImpl implements SysMenuService {
     public Map<String, Object> deleteMenu(SysMenuDTO sysMenuDTO) {
     public Map<String, Object> deleteMenu(SysMenuDTO sysMenuDTO) {
         sysMenuMapper.deleteMenu(sysMenuDTO);
         sysMenuMapper.deleteMenu(sysMenuDTO);
         // 删除缓存
         // 删除缓存
-        redisUtil.deleteObject("catchSysMenu");
+        redisUtil.delete("catchSysMenu");
         //
         //
         return Map.of("menu_id", sysMenuDTO.getMenu_id());
         return Map.of("menu_id", sysMenuDTO.getMenu_id());
     }
     }

+ 4 - 4
src/main/resources/mapper/system/SysUserDao.xml

@@ -272,7 +272,7 @@
 <!--    </if>-->
 <!--    </if>-->
 
 
     <!-- 编辑 用户信息 -->
     <!-- 编辑 用户信息 -->
-    <update id="updateUserInfo" parameterType="com.backendsys.entity.System.SysUserDTO">
+    <update id="updateUserInfo" parameterType="com.backendsys.entity.System.SysUserDTO" useGeneratedKeys="true" keyProperty="id">
         UPDATE sys_user_info SET
         UPDATE sys_user_info SET
         <trim suffixOverrides="," suffix=" ">
         <trim suffixOverrides="," suffix=" ">
             <if test="nickname != null and nickname != ''">nickname = #{nickname},</if>
             <if test="nickname != null and nickname != ''">nickname = #{nickname},</if>
@@ -289,14 +289,14 @@
         WHERE user_id = #{user_id};
         WHERE user_id = #{user_id};
 
 
         <!--判断是否有新的数据需要插入-->
         <!--判断是否有新的数据需要插入-->
-        <if test="roles != null and roles.size() > 0">
+        <if test="role_id != null and role_id.size() > 0">
             <!--删除符合条件的数据-->
             <!--删除符合条件的数据-->
             DELETE FROM sys_user_role_relation WHERE user_id = #{user_id};
             DELETE FROM sys_user_role_relation WHERE user_id = #{user_id};
             <!--插入-->
             <!--插入-->
             INSERT INTO sys_user_role_relation (user_id, role_id)
             INSERT INTO sys_user_role_relation (user_id, role_id)
             VALUES
             VALUES
-            <foreach collection="roles" item="role" separator=",">
-                (#{user_id}, #{role.id})
+            <foreach collection="role_id" item="id" separator=",">
+                (#{user_id}, #{id})
             </foreach>
             </foreach>
         </if>
         </if>
     </update>
     </update>