From 680a9877fe64c40aced1f4e04ea34056fac204fc Mon Sep 17 00:00:00 2001
From: heheng <475597332@qq.com>
Date: Thu, 19 Mar 2026 14:03:30 +0800
Subject: [PATCH] 支持多部门

---
 gkhy-framework/src/main/java/com/gkhy/framework/aspectj/DataScopeAspect.java |   29 +++++++++++++++++++++++++++--
 1 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/gkhy-framework/src/main/java/com/gkhy/framework/aspectj/DataScopeAspect.java b/gkhy-framework/src/main/java/com/gkhy/framework/aspectj/DataScopeAspect.java
index 66e00f8..0c8b6fc 100644
--- a/gkhy-framework/src/main/java/com/gkhy/framework/aspectj/DataScopeAspect.java
+++ b/gkhy-framework/src/main/java/com/gkhy/framework/aspectj/DataScopeAspect.java
@@ -2,6 +2,8 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
+import cn.hutool.core.util.ObjectUtil;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
@@ -131,11 +133,34 @@
             }
             else if (DATA_SCOPE_DEPT.equals(dataScope))
             {
-                sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
+//                sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
+                if (ObjectUtil.isNotEmpty(user.getDeptIds()))
+                {
+                    sqlString.append(StringUtils.format(" OR {}.dept_id IN ({}) ", deptAlias, StringUtils.join(user.getDeptIds(), ",")));
+                }
+                else
+                {
+                    sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
+                }
             }
             else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
             {
-                sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", deptAlias, user.getDeptId(), user.getDeptId()));
+                Long[] deptIds = user.getDeptIds();
+                if (deptIds != null && deptIds.length > 0)
+                {
+                    // 多个部门时,查询这些部门及其所有子部门
+                    StringBuilder deptCondition = new StringBuilder();
+                    for (int i = 0; i < deptIds.length; i++)
+                    {
+                        if (i > 0)
+                        {
+                            deptCondition.append(" OR ");
+                        }
+                        deptCondition.append(StringUtils.format("{}.dept_id = {} OR find_in_set({}, {}.ancestors)", deptAlias, deptIds[i], deptIds[i], deptAlias));
+                    }
+                    sqlString.append(StringUtils.format(" OR ( {} )", deptCondition.toString()));
+                }
+                //sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", deptAlias, user.getDeptId(), user.getDeptId()));
             }
             else if (DATA_SCOPE_SELF.equals(dataScope))
             {

--
Gitblit v1.9.2