diff --git a/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java b/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java index 96609e2..0104cbb 100644 --- a/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java +++ b/src/main/java/com/lanyuanxiaoyao/service/template/service/SimpleServiceSupport.java @@ -11,6 +11,8 @@ import jakarta.persistence.criteria.Path; import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Root; import jakarta.transaction.Transactional; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -87,6 +89,7 @@ import org.springframework.data.domain.Sort; */ @Slf4j public abstract class SimpleServiceSupport implements SimpleService { + private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private static final Integer DEFAULT_PAGE_INDEX = 1; private static final Integer DEFAULT_PAGE_SIZE = 10; protected final SimpleRepository repository; @@ -213,6 +216,8 @@ public abstract class SimpleServiceSupport implemen } else { throw new IllegalArgumentException("枚举类型字段需要 String 类型的值"); } + } else if (javaType.isAssignableFrom(LocalDateTime.class)) { + return LocalDateTime.parse(String.valueOf(value), DATE_TIME_FORMATTER); } return value; } @@ -328,28 +333,28 @@ public abstract class SimpleServiceSupport implemen queryable.getGreat().forEach((column, value) -> { var path = this.>column(root, column); checkComparable(path, value, column); - predicates.add(builder.greaterThan(path, (Comparable) value)); + predicates.add(builder.greaterThan(path, (Comparable) value(path, value))); }); } if (ObjectHelper.isNotEmpty(queryable.getLess())) { queryable.getLess().forEach((column, value) -> { var path = this.>column(root, column); checkComparable(path, value, column); - predicates.add(builder.lessThan(path, (Comparable) value)); + predicates.add(builder.lessThan(path, (Comparable) value(path, value))); }); } if (ObjectHelper.isNotEmpty(queryable.getGreatEqual())) { queryable.getGreatEqual().forEach((column, value) -> { var path = this.>column(root, column); checkComparable(path, value, column); - predicates.add(builder.greaterThanOrEqualTo(path, (Comparable) value)); + predicates.add(builder.greaterThanOrEqualTo(path, (Comparable) value(path, value))); }); } if (ObjectHelper.isNotEmpty(queryable.getLessEqual())) { queryable.getLessEqual().forEach((column, value) -> { var path = this.>column(root, column); checkComparable(path, value, column); - predicates.add(builder.lessThanOrEqualTo(path, (Comparable) value)); + predicates.add(builder.lessThanOrEqualTo(path, (Comparable) value(path, value))); }); } if (ObjectHelper.isNotEmpty(queryable.getInside())) { @@ -362,14 +367,14 @@ public abstract class SimpleServiceSupport implemen queryable.getBetween().forEach((column, value) -> { var path = this.>column(root, column); checkComparable(path, value, column); - predicates.add(builder.between(column(root, column), (Comparable) value.getStart(), (Comparable) value.getEnd())); + predicates.add(builder.between(column(root, column), (Comparable) value(path, value.getStart()), (Comparable) value(path, value.getEnd()))); }); } if (ObjectHelper.isNotEmpty(queryable.getNotBetween())) { queryable.getNotBetween().forEach((column, value) -> { var path = this.>column(root, column); checkComparable(path, value, column); - predicates.add(builder.between(column(root, column), (Comparable) value.getStart(), (Comparable) value.getEnd()).not()); + predicates.add(builder.between(column(root, column), (Comparable) value(path, value.getStart()), (Comparable) value(path, value.getEnd())).not()); }); }