tsurumure 9 meses atrás
pai
commit
ae416632c6

+ 12 - 0
src/main/java/com/backendsys/aspect/QueryNullCheckAspect.java

@@ -10,6 +10,7 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Component;
 
 import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.util.Map;
 
 /**
@@ -64,6 +65,17 @@ public class QueryNullCheckAspect {
          * 参数为空 (例如 user_id = null) 时,校验在实体类那里进行,此处不再进行校验
          */
         if (argValue != null) {
+
+            System.out.println("---");
+            for(Method method : service.getClass().getMethods()) {
+                System.out.println("method = " + method);
+            }
+            System.out.println("---");
+
+            System.out.println("service.getClass() = " + service.getClass());
+            System.out.println("serviceMethod = " + serviceMethod);
+            System.out.println("argValue.getClass() = " + argValue.getClass());
+
             // [反向代理] 执行记录非空查询的 service 方法
             queryResult = (Map<String, Object>) service.getClass().getMethod(serviceMethod, argValue.getClass()).invoke(service, argValue);
             // System.out.println("queryResult = " + queryResult);

+ 18 - 24
src/main/java/com/backendsys/modules/common/aspect/QueryNullCheckAspectV2.java

@@ -7,6 +7,7 @@ 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.boot.web.reactive.context.AnnotationConfigReactiveWebApplicationContext;
 import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Component;
 
@@ -24,6 +25,9 @@ import java.util.Map;
  * - 非超级管理员
  */
 
+/**
+ * 待弃用
+ */
 @Aspect
 @Component
 public class QueryNullCheckAspectV2 {
@@ -47,19 +51,10 @@ public class QueryNullCheckAspectV2 {
     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());
-//        }
+        Object service = applicationContext.getBean(queryNullCheckV2.service());
 
+        String argField = queryNullCheckV2.field();
+        String message = queryNullCheckV2.message();
 
         // 获取参数值
         Serializable argValue = null;
@@ -69,8 +64,6 @@ public class QueryNullCheckAspectV2 {
             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) 时,校验在实体类那里进行,此处不再进行校验
@@ -80,17 +73,18 @@ public class QueryNullCheckAspectV2 {
             // 拿不到 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);
+//            System.out.println(argService);
+//            System.out.println(argService.getClass());
+//            System.out.println(argService.getClass().getMethods());
+//            for (Method method : argService.getClass().getMethods()) {
+//                System.out.println("method: " + method);
 //            }
+
+            queryResultV2 = service.getClass().getMethod("selectById", argValue.getClass()).invoke(service, argValue);
+            if (queryResult == null) {
+                return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), message);
+            }
+            System.out.println(queryResultV2);
         }
 
         return joinPoint.proceed();

+ 4 - 1
src/main/java/com/backendsys/modules/common/aspect/QueryNullCheckV2.java

@@ -5,10 +5,13 @@ 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();
+    Class service();
     String field();
     String message() default "";
 }

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

@@ -100,9 +100,6 @@ public class SysUserV2Controller {
     }
 
 
-    @Autowired
-    private SysUserInfoDao sysUserInfoDao;
-
     /**
      * 权限:
      * - 编辑用户信息权限 (3.2.3)
@@ -110,22 +107,17 @@ public class SysUserV2Controller {
      */
     @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 = "商品单位不存在")
+//    @QueryNullCheck(serviceClass = SysUserService.class, serviceMethod = "queryUserById", argField = "user_id", message = "用户不存在")
+
+    // 拿不到 dao,没意义,待弃用
+    @QueryNullCheckV2(service = SysUserV2Service.class, field = "user_id", message = "用户不存在")
+//    @QueryNullCheckV2(service = SysUserInfoDao.class, field = "user_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());
-//        }
-
-        // 还是写一个方法来判断 是否存在吧?
-
+        // 还是写一个工具类方法吧,能调用 dao selectById 的方法
 
         // 编辑他人的用户信息
         // - 编辑自己 (无需权限)

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

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

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

@@ -72,6 +72,11 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
         return new PageInfoResult(list).toEntity();
     }
 
+//    @Override
+//    public SysUserInfo selectById(Long user_id) {
+////        return sysUserInfoDao.selectOne(new QueryWrapper<SysUserInfo>().eq("user_id", user_id));
+//        return sysUserInfoDao.selectById(user_id);
+//    }
 
     /**
      * 获得系统用户详情
@@ -103,6 +108,7 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
         return sysUserInfo;
     }
 
+
     /**
      * 获得系统用户权限
      */