Browse Source

优化维度查询条件

zhou-hao 4 years ago
parent
commit
d68a455a5b

+ 26 - 3
hsweb-system/hsweb-system-authorization/hsweb-system-authorization-default/src/main/java/org/hswebframework/web/system/authorization/defaults/service/terms/UserDimensionTerm.java

@@ -10,6 +10,13 @@ import org.hswebframework.ezorm.rdb.operator.builder.fragments.term.AbstractTerm
 import java.util.List;
 import java.util.stream.Collectors;
 
+/**
+ * 查询和用户维度绑定的数据,如: 查询机构下的用户
+ * where id$in-dimension$org = orgId
+ *
+ * @author zhouhao
+ * @since 4.0.10
+ */
 public class UserDimensionTerm extends AbstractTermFragmentBuilder {
     public UserDimensionTerm() {
         super("in-dimension", "在维度中的用户数据");
@@ -24,11 +31,27 @@ public class UserDimensionTerm extends AbstractTermFragmentBuilder {
         }
 
         PrepareSqlFragments fragments = PrepareSqlFragments.of();
+        List<String> options = term.getOptions();
 
-        fragments.addSql("exists(select 1 from s_dimension_user d where d.user_id =", columnFullName, "and d.dimension_id in(",
-                values.stream().map(r -> "?").collect(Collectors.joining(",")), "))")
-                .addParameter(values);
+        if (options.contains("not")) {
+            fragments.addSql("not");
+        }
+
+        fragments.addSql("exists(select 1 from s_dimension_user d where d.user_id =", columnFullName);
 
+        if (options.size() > 0) {
+            String typeId = options.get(0);
+            if (!"not".equals(typeId) && !"any".equals(typeId)) {
+                fragments.addSql("and d.dimension_type_id = ?").addParameter(typeId);
+            }
+        }
+
+        if (!options.contains("any")) {
+            fragments.addSql("and d.dimension_id in(",
+                             values.stream().map(r -> "?").collect(Collectors.joining(",")), ")")
+                     .addParameter(values);
+        }
+        fragments.addSql(")");
 
         return fragments;
     }