From f99cfc5b3f40104749b0eff219b19dae26c1aaab Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期三, 07 一月 2026 16:18:27 +0800
Subject: [PATCH] 提交切面

---
 ruoyi-common/src/main/java/com/ruoyi/common/aspectj/SetOrgIdAspect.java |  159 +++++++++++++++++++++++++++++++++++++++
 ruoyi-common/src/main/java/com/ruoyi/common/annotation/AddOrgId.java    |   40 ++++++++++
 2 files changed, 199 insertions(+), 0 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/AddOrgId.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/AddOrgId.java
new file mode 100644
index 0000000..6a1b610
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/AddOrgId.java
@@ -0,0 +1,40 @@
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 璁剧疆鏈烘瀯ID娉ㄨВ
+ * 鐢ㄤ簬鑷姩灏嗗綋鍓嶇櫥褰曠敤鎴风殑鏈烘瀯ID璁剧疆鍒板疄浣撳璞′腑
+ *
+ * @author ls
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface AddOrgId
+{
+    /**
+     * 瀹炰綋绫讳腑鏈烘瀯ID瀛楁鐨勫悕绉帮紝榛樿涓�"orgid"
+     */
+    String field() default "orgid";
+
+    /**
+     * 瀹炰綋鍙傛暟鐨勭储寮曚綅缃紝榛樿涓�0锛堢涓�涓弬鏁帮級
+     */
+    int paramIndex() default 0;
+
+    /**
+     * 褰撳瓧娈靛凡缁忔湁鍊兼椂鏄惁璺宠繃璁剧疆锛岄粯璁や负true锛堝鏋滃凡鏈夊�煎垯涓嶈鐩栵級
+     */
+    boolean skipIfPresent() default true;
+
+    /**
+     * 瀹炰綋绫讳腑闄㈠尯ID瀛楁鐨勫悕绉帮紝榛樿涓�"campusid"
+     */
+    String campusField() default "campusid";
+
+    /**
+     * 鏄惁鍚屾椂璁剧疆闄㈠尯ID锛岄粯璁や负true
+     */
+    boolean withCampusId() default true;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/aspectj/SetOrgIdAspect.java b/ruoyi-common/src/main/java/com/ruoyi/common/aspectj/SetOrgIdAspect.java
new file mode 100644
index 0000000..354ceeb
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/aspectj/SetOrgIdAspect.java
@@ -0,0 +1,159 @@
+package com.ruoyi.common.aspectj;
+
+import com.ruoyi.common.annotation.AddOrgId;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.utils.SecurityUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * 璁剧疆鏈烘瀯ID
+ *
+ * @author ls
+ */
+@Aspect
+@Component
+public class SetOrgIdAspect
+{
+    private static final Logger log = LoggerFactory.getLogger(SetOrgIdAspect.class);
+
+    @Before("@annotation(setOrgId)")
+    public void setOrgId(JoinPoint joinPoint, AddOrgId setOrgId) throws Throwable
+    {
+        if (setOrgId != null)
+        {
+            // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+            LoginUser loginUser = SecurityUtils.getLoginUser();
+            if (loginUser != null && loginUser.getUser() != null)
+            {
+                String orgid = loginUser.getUser().getOrgid();
+                String campusid = loginUser.getUser().getCampusid();
+                
+                // 鑾峰彇鏂规硶鍙傛暟
+                Object[] args = joinPoint.getArgs();
+                int paramIndex = setOrgId.paramIndex();
+                if (paramIndex >= 0 && paramIndex < args.length)
+                {
+                    Object param = args[paramIndex];
+                    if (param != null)
+                    {
+                        // 璁剧疆orgid
+                        if (orgid != null)
+                        {
+                            // 鑾峰彇瀛楁鍚嶇О
+                            String fieldName = setOrgId.field();
+
+                            // 妫�鏌ュ瓧娈垫槸鍚﹀凡缁忔湁鍊硷紝濡傛灉鏈変笖skipIfPresent涓簍rue锛屽垯璺宠繃璁剧疆
+                            Object currentValue = getFieldValue(param, fieldName);
+                            if (setOrgId.skipIfPresent() && currentValue != null && !currentValue.toString().isEmpty()) {
+                                // 濡傛灉瀛楁宸茬粡鏈夊�间笖skipIfPresent涓簍rue锛屽垯璺宠繃璁剧疆
+                                log.debug("瀛楁 {} 宸叉湁鍊�: {}锛岃烦杩囪缃�", fieldName, currentValue);
+                            } else {
+                                setFieldValue(param, fieldName, orgid);
+                            }
+                        }
+                        
+                        // 濡傛灉闇�瑕佸悓鏃惰缃甤ampusid
+                        if (setOrgId.withCampusId() && campusid != null)
+                        {
+                            String campusFieldName = setOrgId.campusField();
+                            
+                            // 妫�鏌ュ瓧娈垫槸鍚﹀凡缁忔湁鍊硷紝濡傛灉鏈変笖skipIfPresent涓簍rue锛屽垯璺宠繃璁剧疆
+                            Object currentValueCampus = getFieldValue(param, campusFieldName);
+                            if (setOrgId.skipIfPresent() && currentValueCampus != null && !currentValueCampus.toString().isEmpty()) {
+                                // 濡傛灉瀛楁宸茬粡鏈夊�间笖skipIfPresent涓簍rue锛屽垯璺宠繃璁剧疆
+                                log.debug("瀛楁 {} 宸叉湁鍊�: {}锛岃烦杩囪缃�", campusFieldName, currentValueCampus);
+                            } else {
+                                setFieldValue(param, campusFieldName, campusid);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 鑾峰彇娉ㄨВ
+     */
+    private AddOrgId getAnnotationLog(JoinPoint joinPoint) throws Exception
+    {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+        if (method != null)
+        {
+            return method.getAnnotation(AddOrgId.class);
+        }
+        return null;
+    }
+
+    /**
+     * 鑾峰彇瀵硅薄瀛楁鐨勫��
+     */
+    private Object getFieldValue(Object obj, String fieldName) throws Exception
+    {
+        Class<?> clazz = obj.getClass();
+        Field field = null;
+
+        // 鏌ユ壘瀛楁锛屽寘鎷埗绫讳腑鐨勫瓧娈�
+        while (clazz != null && field == null)
+        {
+            try
+            {
+                field = clazz.getDeclaredField(fieldName);
+            }
+            catch (NoSuchFieldException e)
+            {
+                clazz = clazz.getSuperclass();
+            }
+        }
+
+        if (field != null)
+        {
+            field.setAccessible(true);
+            return field.get(obj);
+        }
+
+        return null;
+    }
+
+    /**
+     * 璁剧疆瀵硅薄瀛楁鐨勫��
+     */
+    private void setFieldValue(Object obj, String fieldName, Object value) throws Exception
+    {
+        Class<?> clazz = obj.getClass();
+        Field field = null;
+
+        // 鏌ユ壘瀛楁锛屽寘鎷埗绫讳腑鐨勫瓧娈�
+        while (clazz != null && field == null)
+        {
+            try
+            {
+                field = clazz.getDeclaredField(fieldName);
+            }
+            catch (NoSuchFieldException e)
+            {
+                clazz = clazz.getSuperclass();
+            }
+        }
+
+        if (field != null)
+        {
+            field.setAccessible(true);
+            field.set(obj, value);
+        }
+        else
+        {
+            log.warn("鏈壘鍒板瓧娈�: {} 鍦ㄧ被: {} 鍙婂叾鐖剁被涓�", fieldName, obj.getClass().getName());
+        }
+    }
+}

--
Gitblit v1.9.3