From d2f06333f5cdce778008096e63be48545b4a628b Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Fri, 1 Mar 2024 15:05:30 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.1.1=E3=80=91=E3=80=90db=E3=80=91?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE=E8=8C=83=E5=9B=B4=E5=AD=90?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mp/datascope/ProjectDataScopeHandler.java | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/datascope/ProjectDataScopeHandler.java b/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/datascope/ProjectDataScopeHandler.java index fab4fdbac..231c62e4c 100644 --- a/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/datascope/ProjectDataScopeHandler.java +++ b/kernel-d-db/db-sdk-mp/src/main/java/cn/stylefeng/roses/kernel/db/mp/datascope/ProjectDataScopeHandler.java @@ -16,8 +16,8 @@ import net.sf.jsqlparser.expression.operators.relational.InExpression; import net.sf.jsqlparser.expression.operators.relational.LikeExpression; import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.schema.Table; -import net.sf.jsqlparser.statement.select.AllColumns; import net.sf.jsqlparser.statement.select.PlainSelect; +import net.sf.jsqlparser.statement.select.SelectExpressionItem; import net.sf.jsqlparser.statement.select.SubSelect; import java.util.stream.Collectors; @@ -208,6 +208,8 @@ public class ProjectDataScopeHandler implements MultiDataPermissionHandler { /** * 获取本部门及以下 + *

+ * 拼接条件最终效果如下:org_id in (select org_id from sys_hr_organization where org_pids like "%[id]%" or org_id = id) * * @author fengshuonan * @since 2024-02-29 20:14 @@ -217,10 +219,10 @@ public class ProjectDataScopeHandler implements MultiDataPermissionHandler { // 创建 org_id 列 Column orgIdColumn = new Column(dataScopeConfig.getOrgIdFieldName()); - // 创建子查询 + // 创建子查询 select 部分 SubSelect subSelect = new SubSelect(); PlainSelect selectBody = new PlainSelect(); - selectBody.setSelectItems(java.util.Collections.singletonList(new AllColumns())); + selectBody.setSelectItems(ListUtil.of(new SelectExpressionItem(orgIdColumn))); selectBody.setFromItem(new Table("sys_hr_organization")); // 创建 LIKE 表达式 @@ -228,23 +230,19 @@ public class ProjectDataScopeHandler implements MultiDataPermissionHandler { likeExpression.setLeftExpression(new Column("org_pids")); likeExpression.setRightExpression(new StringValue("%[" + deptOrCompanyId + "]%")); - // 设置子查询的 WHERE 条件 - selectBody.setWhere(likeExpression); - subSelect.setSelectBody(selectBody); - - // 创建 IN 表达式 - InExpression inExpression = new InExpression(orgIdColumn, subSelect); - - // 创建等于表达式 + // 设置等于表达式 EqualsTo equalsTo = new EqualsTo(); equalsTo.setLeftExpression(orgIdColumn); equalsTo.setRightExpression(new LongValue(deptOrCompanyId)); // 创建 OR 表达式 - OrExpression orExpression = new OrExpression(inExpression, equalsTo); + OrExpression orExpression = new OrExpression(likeExpression, equalsTo); - System.out.println(orExpression.toString()); + // 设置子查询的 WHERE 条件 + selectBody.setWhere(orExpression); + subSelect.setSelectBody(selectBody); - return orExpression; + // 创建 IN 表达式 + return new InExpression(orgIdColumn, subSelect); } }