diff --git a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/user/entity/GetUserPageListPayload.java b/auth-center/src/main/java/com/jmsoftware/maf/authcenter/user/entity/GetUserPageListPayload.java index c3c3ef8b..93dae67f 100644 --- a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/user/entity/GetUserPageListPayload.java +++ b/auth-center/src/main/java/com/jmsoftware/maf/authcenter/user/entity/GetUserPageListPayload.java @@ -4,6 +4,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; +import java.time.LocalDateTime; + /** * Description: GetUserPageList, change description here. * @@ -13,4 +15,6 @@ @EqualsAndHashCode(callSuper = true) public class GetUserPageListPayload extends PaginationBase { private String username; + private LocalDateTime startTime; + private LocalDateTime endTime; } diff --git a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/user/service/impl/UserServiceImpl.java b/auth-center/src/main/java/com/jmsoftware/maf/authcenter/user/service/impl/UserServiceImpl.java index f6e5326f..b11d8fa2 100644 --- a/auth-center/src/main/java/com/jmsoftware/maf/authcenter/user/service/impl/UserServiceImpl.java +++ b/auth-center/src/main/java/com/jmsoftware/maf/authcenter/user/service/impl/UserServiceImpl.java @@ -114,6 +114,7 @@ public String getUserStatus(@Valid @NotNull GetUserStatusPayload payload) { @Override public PageResponseBodyBean getUserPageList(@Valid @NotNull GetUserPageListPayload payload) { + log.info("{}", payload); val page = new Page(payload.getCurrentPage(), payload.getPageSize()); val queryWrapper = Wrappers.lambdaQuery(User.class); if (StrUtil.isNotBlank(payload.getUsername())) { diff --git a/common/src/main/java/com/jmsoftware/maf/common/bean/PaginationBase.java b/common/src/main/java/com/jmsoftware/maf/common/bean/PaginationBase.java index 3717b9ee..78d767e0 100644 --- a/common/src/main/java/com/jmsoftware/maf/common/bean/PaginationBase.java +++ b/common/src/main/java/com/jmsoftware/maf/common/bean/PaginationBase.java @@ -25,14 +25,14 @@ public class PaginationBase { */ @JsonIgnore @NotNull(message = "The current page is required!") - @Min(value = 1, message = "The current page is not less then 1!") + @Min(value = 1L, message = "The current page is not less then 1!") private Integer currentPage = 1; /** * The page size. Default: 10 */ @JsonIgnore @NotNull(message = "The page size is required!") - @Range(min = 10, max = 100, message = "The rage of page size: 10 <= page size <= 100!") + @Range(min = 10L, max = 100L, message = "The rage of page size: 10 <= page size <= 100!") private Integer pageSize = 10; /** * The order-by. (for table's field) diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/MafAutoConfiguration.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/MafAutoConfiguration.java index 542bf3c6..c49fea53 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/MafAutoConfiguration.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/MafAutoConfiguration.java @@ -63,7 +63,8 @@ AsyncConfiguration.class, RabbitmqConfiguration.class, MinioConfiguration.class, - LocalDateTimeSerializerConfiguration.class + JacksonConfiguration.class, + TypeConversionConfiguration.class }) public class MafAutoConfiguration { @PostConstruct diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/LocalDateTimeSerializerConfiguration.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/JacksonConfiguration.java similarity index 62% rename from spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/LocalDateTimeSerializerConfiguration.java rename to spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/JacksonConfiguration.java index 4d1d675c..d3e08463 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/LocalDateTimeSerializerConfiguration.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/JacksonConfiguration.java @@ -1,8 +1,11 @@ package com.jmsoftware.maf.springcloudstarter.configuration; import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import lombok.RequiredArgsConstructor; +import lombok.val; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.autoconfigure.jackson.JacksonProperties; import org.springframework.context.annotation.Bean; @@ -16,7 +19,7 @@ * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 6/27/2021 3:57 PM **/ @RequiredArgsConstructor -public class LocalDateTimeSerializerConfiguration { +public class JacksonConfiguration { public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; private final JacksonProperties jacksonProperties; @@ -31,6 +34,14 @@ public LocalDateTimeSerializer localDateTimeSerializer() { @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer(LocalDateTimeSerializer localDateTimeSerializer) { - return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeSerializer); + var pattern = DEFAULT_DATE_FORMAT; + if (StrUtil.isNotBlank(jacksonProperties.getDateFormat())) { + pattern = jacksonProperties.getDateFormat(); + } + val localDateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(pattern)); + return jackson2ObjectMapperBuilder -> jackson2ObjectMapperBuilder + .serializerByType(LocalDateTime.class, localDateTimeSerializer) + .deserializerByType(LocalDateTime.class, localDateTimeDeserializer) + .serializerByType(Long.class, ToStringSerializer.instance); } } diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/TypeConversionConfiguration.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/TypeConversionConfiguration.java new file mode 100644 index 00000000..bdbdb7d0 --- /dev/null +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/configuration/TypeConversionConfiguration.java @@ -0,0 +1,62 @@ +package com.jmsoftware.maf.springcloudstarter.configuration; + +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.util.StrUtil; +import com.jmsoftware.maf.springcloudstarter.constant.UniversalDateTime; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.context.annotation.Bean; +import org.springframework.core.convert.converter.Converter; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + +/** + * Description: TypeConvesionConfiguration, change description here. + * + * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 6/27/2021 9:36 PM + **/ +@Slf4j +public class TypeConversionConfiguration { + @Bean + public StringToLocalDateConverter localDateConverter() { + return source -> { + if (StrUtil.isBlank(source)) { + return null; + } + return LocalDateTimeUtil.parseDate(source, UniversalDateTime.DATE_FORMAT); + }; + } + + @Bean + public StringToLocalTimeConverter localTimeConverter() { + return source -> { + if (StrUtil.isBlank(source)) { + return null; + } + return LocalTime.parse(source, DateTimeFormatter.ofPattern(UniversalDateTime.TIME_FORMAT)); + }; + } + + @Bean + @ConditionalOnBean(name = "requestMappingHandlerAdapter") + public StringToLocalDateTimeConverter localDateTimeConverter() { + return source -> { + if (StrUtil.isBlank(source)) { + return null; + } + return LocalDateTimeUtil.parse(source, UniversalDateTime.DATE_TIME_FORMAT); + }; + } + + interface StringToLocalDateConverter extends Converter { + } + + interface StringToLocalTimeConverter extends Converter { + } + + interface StringToLocalDateTimeConverter extends Converter { + } +} diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/constant/UniversalDateTime.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/constant/UniversalDateTime.java new file mode 100644 index 00000000..cba46a7c --- /dev/null +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/constant/UniversalDateTime.java @@ -0,0 +1,12 @@ +package com.jmsoftware.maf.springcloudstarter.constant; + +/** + * Description: UniversalDateTime, change description here. + * + * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 6/27/2021 9:42 PM + **/ +public interface UniversalDateTime { + String DATE_FORMAT = "yyyy-MM-dd"; + String TIME_FORMAT = "HH:mm:ss"; + String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; +} diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/controller/ControllerBase.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/controller/ControllerBase.java new file mode 100644 index 00000000..7963dd0d --- /dev/null +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/controller/ControllerBase.java @@ -0,0 +1,22 @@ +package com.jmsoftware.maf.springcloudstarter.controller; + +import org.springframework.beans.propertyeditors.CustomDateEditor; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Description: ControllerBase, change description here. + * + * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 6/27/2021 9:20 PM + **/ +public class ControllerBase { +// @InitBinder +// public void initBinder(WebDataBinder binder) { +// final SimpleDateFormat dateFormat = new SimpleDateFormat(DateTimeUniversalFormat.DATE_TIME_PATTERN); +// dateFormat.setLenient(false); +// binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); +// } +}