From 0ab9dfd8f122195e4e9f09bd50c59e0a47450bec Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 19 三月 2025 15:50:03 +0800
Subject: [PATCH] fix: resolve merge conflicts in .gitignore

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java |  121 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 121 insertions(+), 0 deletions(-)

diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java
new file mode 100644
index 0000000..57a4ff0
--- /dev/null
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/interceptor/MybatisInterceptor.java
@@ -0,0 +1,121 @@
+package com.ruoyi.web.controller.interceptor;
+
+import com.ruoyi.framework.web.service.TokenService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlCommandType;
+import org.apache.ibatis.plugin.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+@Slf4j
+@Component
+@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) })
+public class MybatisInterceptor implements Interceptor {
+
+    @Autowired
+    private TokenService tokenService;
+
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
+        log.debug("{}:"+mappedStatement);
+        log.debug("------sqlId------" + mappedStatement.getId());
+        if("com.ruoyi.system.mapper.SysLogininforMapper.insertLogininfor".equals(mappedStatement.getId())){
+            return invocation.proceed();
+        }
+        // sql类型:insert、update、select、delete
+        SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
+        Object parameter = invocation.getArgs()[1];
+        log.debug("------sqlCommandType------" + sqlCommandType);
+ 
+        if (parameter == null) {
+            return invocation.proceed();
+        }
+ 
+        // 当sql为新增或更新类型时,自动填充操作人相关信息
+        if (SqlCommandType.INSERT == sqlCommandType) {
+
+            Field[] fields = getAllFields(parameter);
+            for (Field field : fields) {
+                try {
+                    // 注入创建人
+                    if ("createBy".equals(field.getName())) {
+                        // 获取当前登录用户信息
+                        if(Objects.nonNull(tokenService.getLoginUser())){
+                            String userName = tokenService.getLoginUser().getUser().getUserName();
+                            field.setAccessible(true);
+                            field.set(parameter, userName);
+                            field.setAccessible(false);
+                        }
+                    }
+                    //注入创建时间
+                    if ("createTime".equals(field.getName())) {
+                        field.setAccessible(true);
+//                        field.set(parameter, new Date());
+                        field.setAccessible(false);
+                    } 
+                } catch (Exception e) {
+                    log.error("failed to insert data, exception = ", e);
+                }
+            }
+        }
+        if (SqlCommandType.UPDATE == sqlCommandType) {
+            Field[] fields = getAllFields(parameter);
+            for (Field field : fields) {
+                try {
+                    if ("updateBy".equals(field.getName())) {
+                        // 获取当前登录用户信息
+                        if(Objects.nonNull(tokenService.getLoginUser())){
+                            String userName = tokenService.getLoginUser().getUser().getUserName();
+                            field.setAccessible(true);
+                            field.set(parameter, userName);
+                            field.setAccessible(false);
+                        }
+                    }
+                    if ("updateTime".equals(field.getName())) {
+                        field.setAccessible(true);
+//                        field.set(parameter, new Date());
+                        field.setAccessible(false);
+                    }
+                } catch (Exception e) {
+                    log.error("failed to update data, exception = ", e);
+                }
+            }
+        }
+        return invocation.proceed();
+    }
+ 
+    @Override
+    public Object plugin(Object target) {
+        return Plugin.wrap(target, this);
+    }
+ 
+    @Override
+    public void setProperties(Properties properties) {
+        // TODO Auto-generated method stub
+    }
+ 
+    /**
+     * 获取类的所有属性,包括父类
+     *
+     * @param object
+     * @return
+     */
+    private Field[] getAllFields(Object object) {
+        Class<?> clazz = object.getClass();
+        List<Field> fieldList = new ArrayList<>();
+        while (clazz != null) {
+            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
+            clazz = clazz.getSuperclass();
+        }
+        Field[] fields = new Field[fieldList.size()];
+        fieldList.toArray(fields);
+        return fields;
+    }
+ 
+}
\ No newline at end of file

--
Gitblit v1.7.1