mirror of https://gitee.com/stylefeng/roses
【8.1.1】【db】更新数据范围子查询过滤
parent
74ac5a88b9
commit
d2f06333f5
|
@ -16,8 +16,8 @@ import net.sf.jsqlparser.expression.operators.relational.InExpression;
|
||||||
import net.sf.jsqlparser.expression.operators.relational.LikeExpression;
|
import net.sf.jsqlparser.expression.operators.relational.LikeExpression;
|
||||||
import net.sf.jsqlparser.schema.Column;
|
import net.sf.jsqlparser.schema.Column;
|
||||||
import net.sf.jsqlparser.schema.Table;
|
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.PlainSelect;
|
||||||
|
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
|
||||||
import net.sf.jsqlparser.statement.select.SubSelect;
|
import net.sf.jsqlparser.statement.select.SubSelect;
|
||||||
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -208,6 +208,8 @@ public class ProjectDataScopeHandler implements MultiDataPermissionHandler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取本部门及以下
|
* 获取本部门及以下
|
||||||
|
* <p>
|
||||||
|
* 拼接条件最终效果如下:org_id in (select org_id from sys_hr_organization where org_pids like "%[id]%" or org_id = id)
|
||||||
*
|
*
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @since 2024-02-29 20:14
|
* @since 2024-02-29 20:14
|
||||||
|
@ -217,10 +219,10 @@ public class ProjectDataScopeHandler implements MultiDataPermissionHandler {
|
||||||
// 创建 org_id 列
|
// 创建 org_id 列
|
||||||
Column orgIdColumn = new Column(dataScopeConfig.getOrgIdFieldName());
|
Column orgIdColumn = new Column(dataScopeConfig.getOrgIdFieldName());
|
||||||
|
|
||||||
// 创建子查询
|
// 创建子查询 select 部分
|
||||||
SubSelect subSelect = new SubSelect();
|
SubSelect subSelect = new SubSelect();
|
||||||
PlainSelect selectBody = new PlainSelect();
|
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"));
|
selectBody.setFromItem(new Table("sys_hr_organization"));
|
||||||
|
|
||||||
// 创建 LIKE 表达式
|
// 创建 LIKE 表达式
|
||||||
|
@ -228,23 +230,19 @@ public class ProjectDataScopeHandler implements MultiDataPermissionHandler {
|
||||||
likeExpression.setLeftExpression(new Column("org_pids"));
|
likeExpression.setLeftExpression(new Column("org_pids"));
|
||||||
likeExpression.setRightExpression(new StringValue("%[" + deptOrCompanyId + "]%"));
|
likeExpression.setRightExpression(new StringValue("%[" + deptOrCompanyId + "]%"));
|
||||||
|
|
||||||
// 设置子查询的 WHERE 条件
|
// 设置等于表达式
|
||||||
selectBody.setWhere(likeExpression);
|
|
||||||
subSelect.setSelectBody(selectBody);
|
|
||||||
|
|
||||||
// 创建 IN 表达式
|
|
||||||
InExpression inExpression = new InExpression(orgIdColumn, subSelect);
|
|
||||||
|
|
||||||
// 创建等于表达式
|
|
||||||
EqualsTo equalsTo = new EqualsTo();
|
EqualsTo equalsTo = new EqualsTo();
|
||||||
equalsTo.setLeftExpression(orgIdColumn);
|
equalsTo.setLeftExpression(orgIdColumn);
|
||||||
equalsTo.setRightExpression(new LongValue(deptOrCompanyId));
|
equalsTo.setRightExpression(new LongValue(deptOrCompanyId));
|
||||||
|
|
||||||
// 创建 OR 表达式
|
// 创建 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue