|
|
@ -9,6 +9,7 @@ import java.time.Instant; |
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.time.ZoneOffset; |
|
|
|
import java.util.Arrays; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
/** |
|
|
|
* QueryWrapper工具类 |
|
|
@ -31,56 +32,81 @@ public class QueryWrapperUtils { |
|
|
|
if(column == null || column.isEmpty() || condition.getValue() == null || condition.getValue().isEmpty() || condition.getAction() == null || condition.getAction().isEmpty()) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, column); |
|
|
|
switch (condition.getAction()) { |
|
|
|
case "==" : |
|
|
|
queryWrapper.eq(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "!=" : |
|
|
|
queryWrapper.ne(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case ">" : |
|
|
|
queryWrapper.gt(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "<" : |
|
|
|
queryWrapper.lt(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case ">=" : |
|
|
|
queryWrapper.ge(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "<=" : |
|
|
|
queryWrapper.le(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "like" : |
|
|
|
queryWrapper.like(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "in" : |
|
|
|
String[] strs = condition.getValue().split(","); |
|
|
|
queryWrapper.in(column, Arrays.asList(strs)); |
|
|
|
break; |
|
|
|
case "notin" : |
|
|
|
strs = condition.getValue().split(","); |
|
|
|
queryWrapper.notIn(column, Arrays.asList(strs)); |
|
|
|
break; |
|
|
|
case "betweeen" : |
|
|
|
strs = condition.getValue().split(","); |
|
|
|
if(strs.length != 2) { |
|
|
|
break; |
|
|
|
} |
|
|
|
LocalDateTime localDateTime1 = Instant.ofEpochMilli(Long.parseLong(strs[0])).atZone(ZoneOffset.ofHours(8)).toLocalDateTime(); |
|
|
|
LocalDateTime localDateTime2 = Instant.ofEpochMilli(Long.parseLong(strs[1])).atZone(ZoneOffset.ofHours(8)).toLocalDateTime(); |
|
|
|
queryWrapper.between(column, localDateTime1, localDateTime2); |
|
|
|
break; |
|
|
|
case "isNull" : |
|
|
|
queryWrapper.isNull(column); |
|
|
|
break; |
|
|
|
case "isNotNull" : |
|
|
|
queryWrapper.isNotNull(column); |
|
|
|
break; |
|
|
|
default: |
|
|
|
break; |
|
|
|
dealCondition(queryWrapper, condition, column); |
|
|
|
} |
|
|
|
return queryWrapper; |
|
|
|
} |
|
|
|
|
|
|
|
public static <T> QueryWrapper<T> structureFilter(CustomConditions customConditions, List<String> excludeConditions) { |
|
|
|
QueryWrapper<T> queryWrapper = new QueryWrapper<>(); |
|
|
|
if(CollectionUtils.isAnyEmpty(customConditions.getFilters())) { |
|
|
|
return queryWrapper; |
|
|
|
} |
|
|
|
for(CustomConditions.Condition condition : customConditions.getFilters()) { |
|
|
|
String column = condition.getColumn(); |
|
|
|
if(column == null || column.isEmpty() || condition.getValue() == null || condition.getValue().isEmpty() || condition.getAction() == null || condition.getAction().isEmpty()) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
if(excludeConditions != null && excludeConditions.size() > 0){ |
|
|
|
if(excludeConditions.contains(column)){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
dealCondition(queryWrapper, condition, column); |
|
|
|
} |
|
|
|
return queryWrapper; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static <T> void dealCondition(QueryWrapper<T> queryWrapper, CustomConditions.Condition condition, String column) { |
|
|
|
column = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, column); |
|
|
|
switch (condition.getAction()) { |
|
|
|
case "==" : |
|
|
|
queryWrapper.eq(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "!=" : |
|
|
|
queryWrapper.ne(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case ">" : |
|
|
|
queryWrapper.gt(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "<" : |
|
|
|
queryWrapper.lt(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case ">=" : |
|
|
|
queryWrapper.ge(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "<=" : |
|
|
|
queryWrapper.le(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "like" : |
|
|
|
queryWrapper.like(column, condition.getValue()); |
|
|
|
break; |
|
|
|
case "in" : |
|
|
|
String[] strs = condition.getValue().split(","); |
|
|
|
queryWrapper.in(column, Arrays.asList(strs)); |
|
|
|
break; |
|
|
|
case "notin" : |
|
|
|
strs = condition.getValue().split(","); |
|
|
|
queryWrapper.notIn(column, Arrays.asList(strs)); |
|
|
|
break; |
|
|
|
case "betweeen" : |
|
|
|
strs = condition.getValue().split(","); |
|
|
|
if(strs.length != 2) { |
|
|
|
break; |
|
|
|
} |
|
|
|
LocalDateTime localDateTime1 = Instant.ofEpochMilli(Long.parseLong(strs[0])).atZone(ZoneOffset.ofHours(8)).toLocalDateTime(); |
|
|
|
LocalDateTime localDateTime2 = Instant.ofEpochMilli(Long.parseLong(strs[1])).atZone(ZoneOffset.ofHours(8)).toLocalDateTime(); |
|
|
|
queryWrapper.between(column, localDateTime1, localDateTime2); |
|
|
|
break; |
|
|
|
case "isNull" : |
|
|
|
queryWrapper.isNull(column); |
|
|
|
break; |
|
|
|
case "isNotNull" : |
|
|
|
queryWrapper.isNotNull(column); |
|
|
|
break; |
|
|
|
default: |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|