Skip to content

Commit 2259335

Browse files
committed
fix Filter
1 parent e33afcc commit 2259335

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/query/QueryRequest.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public <T> List<Order> getOrder(Root<T> root, CriteriaBuilder criteriaBuilder) {
7676

7777
private <T> Predicate toPredicate(Filter filter, CriteriaBuilder criteriaBuilder, Root<T> root, List<String> properties) {
7878
String key = filter.getKey();
79-
if (filter.isOr() || properties.contains(key)) {
79+
if (filter.isAddFilters() || filter.isOrFilters() || properties.contains(key)) {
8080

8181
if (filter.isEqual()) {
8282
return criteriaBuilder.equal(root.get(key), filter.getValue()[0]);
@@ -164,7 +164,7 @@ private <T> Predicate toPredicate(Filter filter, CriteriaBuilder criteriaBuilder
164164
return in;
165165
}
166166

167-
if (filter.isOr()) {
167+
if (filter.isOrFilters()) {
168168
Filter[] orFilters = (Filter[]) filter.getValue();
169169
List<Predicate> orPredicates = new ArrayList<>();
170170
for (Filter orFilter : orFilters) {
@@ -175,6 +175,18 @@ private <T> Predicate toPredicate(Filter filter, CriteriaBuilder criteriaBuilder
175175
}
176176
return criteriaBuilder.or(orPredicates.toArray(new Predicate[0]));
177177
}
178+
179+
if (filter.isAddFilters()) {
180+
Filter[] orFilters = (Filter[]) filter.getValue();
181+
List<Predicate> addPredicates = new ArrayList<>();
182+
for (Filter orFilter : orFilters) {
183+
Predicate predicate = toPredicate(orFilter, criteriaBuilder, root, properties);
184+
if (predicate != null) {
185+
addPredicates.add(predicate);
186+
}
187+
}
188+
return criteriaBuilder.and(addPredicates.toArray(new Predicate[0]));
189+
}
178190
}
179191
return null;
180192
}

springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/Filter.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
@Getter
88
public class Filter {
99

10+
public static final String FILTER_OR_KEY = "FILTER_OR_KEY";
11+
public static final String FILTER_ADD_KEY = "FILTER_ADD_KEY";
12+
1013
private String key;
1114
private Object[] value;
1215
private Relation relation;
@@ -21,8 +24,8 @@ public Filter(String key, Object... value) {
2124
this(key, Relation.EQUAL, value);
2225
}
2326

24-
public Filter(Filter... value) {
25-
this(null, null, value);
27+
public Filter(String key, Filter... value) {
28+
this(key, null, value);
2629
}
2730

2831
public static Filter as(String key, Relation relation, Object... value) {
@@ -33,8 +36,12 @@ public static Filter as(String key, Object... value) {
3336
return new Filter(key, value);
3437
}
3538

36-
public static Filter as(Filter... value) {
37-
return new Filter(value);
39+
public static Filter and(Filter... value) {
40+
return new Filter(FILTER_ADD_KEY, value);
41+
}
42+
43+
public static Filter or(Filter... value) {
44+
return new Filter(FILTER_OR_KEY, value);
3845
}
3946

4047
public boolean isEqual() {
@@ -53,8 +60,12 @@ public boolean isIn() {
5360
return relation == Relation.IN;
5461
}
5562

56-
public boolean isOr() {
57-
return value != null && value.length > 0 && value[0] instanceof Filter;
63+
public boolean isOrFilters() {
64+
return FILTER_OR_KEY.equals(key);
65+
}
66+
67+
public boolean isAddFilters() {
68+
return FILTER_ADD_KEY.equals(key);
5869
}
5970

6071
public boolean isGreaterThan() {

springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,13 @@ public RequestFilter addFilter(String key, Object... value) {
2020
return this;
2121
}
2222

23+
public RequestFilter addFilters(Filter... value) {
24+
this.pushFilter(new Filter(Filter.FILTER_ADD_KEY, value));
25+
return this;
26+
}
27+
2328
public RequestFilter orFilters(Filter... value) {
24-
this.pushFilter(new Filter(value));
29+
this.pushFilter(new Filter(Filter.FILTER_OR_KEY, value));
2530
return this;
2631
}
2732

0 commit comments

Comments
 (0)