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