diff --git a/agileboot-common/pom.xml b/agileboot-common/pom.xml index d4b0064..a6bf8a8 100644 --- a/agileboot-common/pom.xml +++ b/agileboot-common/pom.xml @@ -161,6 +161,19 @@ 1.6.2 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + diff --git a/agileboot-common/src/main/java/com/agileboot/common/core/base/BaseEntity.java b/agileboot-common/src/main/java/com/agileboot/common/core/base/BaseEntity.java index 77f8557..4d7e2e2 100644 --- a/agileboot-common/src/main/java/com/agileboot/common/core/base/BaseEntity.java +++ b/agileboot-common/src/main/java/com/agileboot/common/core/base/BaseEntity.java @@ -7,12 +7,14 @@ import com.baomidou.mybatisplus.extension.activerecord.Model; import io.swagger.annotations.ApiModelProperty; import java.util.Date; import lombok.Data; +import lombok.EqualsAndHashCode; /** * Entity基类 * * @author valarchie */ +@EqualsAndHashCode(callSuper = true) @Data public class BaseEntity> extends Model { diff --git a/agileboot-common/src/main/java/com/agileboot/common/core/page/PageDTO.java b/agileboot-common/src/main/java/com/agileboot/common/core/page/PageDTO.java index 72a083e..e78fcec 100644 --- a/agileboot-common/src/main/java/com/agileboot/common/core/page/PageDTO.java +++ b/agileboot-common/src/main/java/com/agileboot/common/core/page/PageDTO.java @@ -5,6 +5,7 @@ import java.util.List; import lombok.Data; /** + * 分页模型类 * @author valarchie */ @Data @@ -24,6 +25,7 @@ public class PageDTO { this.total = (long) list.size(); } + @SuppressWarnings("rawtypes") public PageDTO(Page page) { this.rows = page.getRecords(); this.total = page.getTotal(); diff --git a/agileboot-common/src/main/java/com/agileboot/common/exception/error/ErrorCodeInterface.java b/agileboot-common/src/main/java/com/agileboot/common/exception/error/ErrorCodeInterface.java index 0897c90..5eb732f 100644 --- a/agileboot-common/src/main/java/com/agileboot/common/exception/error/ErrorCodeInterface.java +++ b/agileboot-common/src/main/java/com/agileboot/common/exception/error/ErrorCodeInterface.java @@ -2,12 +2,27 @@ package com.agileboot.common.exception.error; public interface ErrorCodeInterface { + /** + * @return 返回枚举名称 + */ String name(); + /** + * 返回错误码 + * @return 错误码 + */ int code(); + /** + * + * @return 错误描述 + */ String message(); + /** + * i18n资源文件的key, 详见messages.properties文件 + * @return key + */ default String i18nKey() { return code() + "_" + name(); } diff --git a/agileboot-common/src/main/java/com/agileboot/common/utils/ip/IpRegionUtil.java b/agileboot-common/src/main/java/com/agileboot/common/utils/ip/IpRegionUtil.java index a42a2e3..cc72fb6 100644 --- a/agileboot-common/src/main/java/com/agileboot/common/utils/ip/IpRegionUtil.java +++ b/agileboot-common/src/main/java/com/agileboot/common/utils/ip/IpRegionUtil.java @@ -1,6 +1,7 @@ package com.agileboot.common.utils.ip; /** + * IP地理位置工具类 * @author valarchie */ public class IpRegionUtil { diff --git a/agileboot-common/src/main/java/com/agileboot/common/utils/jackson/JacksonException.java b/agileboot-common/src/main/java/com/agileboot/common/utils/jackson/JacksonException.java index 0f43c90..0ac0924 100644 --- a/agileboot-common/src/main/java/com/agileboot/common/utils/jackson/JacksonException.java +++ b/agileboot-common/src/main/java/com/agileboot/common/utils/jackson/JacksonException.java @@ -4,6 +4,7 @@ package com.agileboot.common.utils.jackson; * @author valarchie */ public class JacksonException extends RuntimeException { + public JacksonException() { super(); } diff --git a/agileboot-common/src/main/java/com/agileboot/common/utils/poi/CustomExcelUtil.java b/agileboot-common/src/main/java/com/agileboot/common/utils/poi/CustomExcelUtil.java index 88deb9d..9d2fc4c 100644 --- a/agileboot-common/src/main/java/com/agileboot/common/utils/poi/CustomExcelUtil.java +++ b/agileboot-common/src/main/java/com/agileboot/common/utils/poi/CustomExcelUtil.java @@ -14,6 +14,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.web.multipart.MultipartFile; /** + * 自定义Excel 导入导出工具 * @author valarchie */ public class CustomExcelUtil { diff --git a/agileboot-common/src/main/java/com/agileboot/common/utils/time/DatePickUtil.java b/agileboot-common/src/main/java/com/agileboot/common/utils/time/DatePickUtil.java new file mode 100644 index 0000000..0eb2411 --- /dev/null +++ b/agileboot-common/src/main/java/com/agileboot/common/utils/time/DatePickUtil.java @@ -0,0 +1,52 @@ +package com.agileboot.common.utils.time; + +import cn.hutool.core.date.DateUtil; +import java.util.Date; +import lombok.extern.slf4j.Slf4j; + +/** + * @author valarchie + */ +@Slf4j +public class DatePickUtil { + + /** + * 安全地获取日期的一天开始时间, date为null 则返回null + * DateUtil.beginOfDay(date) 如果传null 会NPE + * @param date + * @return + */ + public static Date getBeginOfTheDay(Date date) { + if (date == null) { + return null; + } + try { + return DateUtil.beginOfDay(date); + } catch (Exception e) { + log.error("pick begin of the day failed, due to: ", e); + } + return null; + } + + /** + * 安全地获取日期的一天结束时间, date为null 则返回null。 避免NPE + * DateUtil.endOfDay(date) 如果传null 会NPE + * @param date 23:59:59 + * @return + */ + public static Date getEndOfTheDay(Date date) { + if (date == null) { + return null; + } + + try { + return DateUtil.endOfDay(date); + } catch (Exception e) { + log.error("pick end of the day failed, due to: ", e); + } + return null; + } + + + +} diff --git a/agileboot-common/src/main/java/com/agileboot/common/utils/time/DatePicker.java b/agileboot-common/src/main/java/com/agileboot/common/utils/time/DatePicker.java deleted file mode 100644 index 6c25e2d..0000000 --- a/agileboot-common/src/main/java/com/agileboot/common/utils/time/DatePicker.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.agileboot.common.utils.time; - -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import java.util.Date; -import lombok.extern.slf4j.Slf4j; - -/** - * @author valarchie - */ -@Slf4j -public class DatePicker { - - public static Date getBeginOfTheDay(Object date) { - if (date == null) { - return null; - } - try { - DateTime parse = DateUtil.parse(date.toString()); - return DateUtil.beginOfDay(parse); - } catch (Exception e) { - log.error("pick begin of day failed, due to: ", e); - } - return null; - } - - public static Date getEndOfTheDay(Object date) { - if (date == null) { - return null; - } - try { - DateTime parse = DateUtil.parse(date.toString()); - return DateUtil.endOfDay(parse); - } catch (Exception e) { - log.error("pick end of day failed, due to: ", e); - } - return null; - } - - - -} diff --git a/agileboot-common/src/test/java/com/agileboot/common/core/exception/ApiExceptionTest.java b/agileboot-common/src/test/java/com/agileboot/common/core/exception/ApiExceptionTest.java index cc265e6..ea708ef 100644 --- a/agileboot-common/src/test/java/com/agileboot/common/core/exception/ApiExceptionTest.java +++ b/agileboot-common/src/test/java/com/agileboot/common/core/exception/ApiExceptionTest.java @@ -9,16 +9,21 @@ public class ApiExceptionTest { @Test public void testVarargsWithArrayArgs() { String errorMsg = "these parameters are null: %s, %s, %s."; - Object[] array = new Object[] { "param1" , "param2" , "param3"}; - String format1 = String.format(errorMsg, array); - String format2 = String.format(errorMsg, "param1", "param2", "param3"); + String formatWithArray = String.format(errorMsg, array); + String formatWithVarargs = String.format(errorMsg, "param1", "param2", "param3"); - System.out.println(format1); - System.out.println(format2); + Assert.assertEquals(formatWithVarargs, formatWithArray); + } - Assert.assertEquals(format1, format2); + @Test + public void testVarargsWithNullArgs() { + String errorMsg = "these parameters are null: %s, %s, %s."; + + String format = String.format(errorMsg, "param1", null, null); + + Assert.assertEquals("these parameters are null: param1, null, null.", format); } } diff --git a/agileboot-common/src/test/java/com/agileboot/common/utils/JacksonUtilTest.java b/agileboot-common/src/test/java/com/agileboot/common/utils/jackson/JacksonUtilTest.java similarity index 97% rename from agileboot-common/src/test/java/com/agileboot/common/utils/JacksonUtilTest.java rename to agileboot-common/src/test/java/com/agileboot/common/utils/jackson/JacksonUtilTest.java index 2d7647c..ece1f33 100644 --- a/agileboot-common/src/test/java/com/agileboot/common/utils/JacksonUtilTest.java +++ b/agileboot-common/src/test/java/com/agileboot/common/utils/jackson/JacksonUtilTest.java @@ -1,7 +1,6 @@ -package com.agileboot.common.utils; +package com.agileboot.common.utils.jackson; import cn.hutool.core.date.DateUtil; -import com.agileboot.common.utils.jackson.JacksonUtil; import java.math.BigDecimal; import java.math.BigInteger; import org.junit.Assert; diff --git a/agileboot-common/src/test/java/com/agileboot/common/utils/Person.java b/agileboot-common/src/test/java/com/agileboot/common/utils/jackson/Person.java similarity index 96% rename from agileboot-common/src/test/java/com/agileboot/common/utils/Person.java rename to agileboot-common/src/test/java/com/agileboot/common/utils/jackson/Person.java index dc2b4d0..0c7cb6b 100644 --- a/agileboot-common/src/test/java/com/agileboot/common/utils/Person.java +++ b/agileboot-common/src/test/java/com/agileboot/common/utils/jackson/Person.java @@ -1,4 +1,4 @@ -package com.agileboot.common.utils; +package com.agileboot.common.utils.jackson; import java.math.BigDecimal; import java.time.LocalDateTime; diff --git a/agileboot-common/src/test/java/com/agileboot/common/utils/time/DatePickUtilTest.java b/agileboot-common/src/test/java/com/agileboot/common/utils/time/DatePickUtilTest.java new file mode 100644 index 0000000..7d48468 --- /dev/null +++ b/agileboot-common/src/test/java/com/agileboot/common/utils/time/DatePickUtilTest.java @@ -0,0 +1,46 @@ +package com.agileboot.common.utils.time; + +import java.util.Calendar; +import java.util.Date; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class DatePickUtilTest { + + @Test + void testGetBeginOfTheDay() { + Date beginOfTheDay = DatePickUtil.getBeginOfTheDay(new Date()); + + Calendar instance = Calendar.getInstance(); + instance.setTime(beginOfTheDay); + + Assertions.assertEquals(0, instance.get(Calendar.HOUR)); + Assertions.assertEquals(0, instance.get(Calendar.MINUTE)); + Assertions.assertEquals(0, instance.get(Calendar.SECOND)); + } + + @Test + void testGetBeginOfTheDayWhenNull() { + Assertions.assertDoesNotThrow(() -> DatePickUtil.getBeginOfTheDay(null) + ); + } + + @Test + void testGetEndOfTheDay() { + Date endOfTheDay = DatePickUtil.getEndOfTheDay(new Date()); + + Calendar instance = Calendar.getInstance(); + instance.setTime(endOfTheDay); + + Assertions.assertEquals(23, instance.get(Calendar.HOUR_OF_DAY)); + Assertions.assertEquals(59, instance.get(Calendar.MINUTE)); + Assertions.assertEquals(59, instance.get(Calendar.SECOND)); + } + + @Test + void testGetEndOfTheDayWhenNull() { + Assertions.assertDoesNotThrow(() -> DatePickUtil.getEndOfTheDay(null) + ); + } + +} diff --git a/agileboot-infrastructure/src/test/java/com/agileboot/orm/query/AbstractQueryTest.java b/agileboot-infrastructure/src/test/java/com/agileboot/orm/query/AbstractQueryTest.java new file mode 100644 index 0000000..5161461 --- /dev/null +++ b/agileboot-infrastructure/src/test/java/com/agileboot/orm/query/AbstractQueryTest.java @@ -0,0 +1,62 @@ +package com.agileboot.orm.query; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import java.util.Date; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class AbstractQueryTest { + + private AbstractQuery query; + + @BeforeEach + public void getNewQuery() { + query = new AbstractQuery() { + @Override + public QueryWrapper toQueryWrapper() { + return null; + } + }; + } + + + @Test + void addTimeConditionWithNull() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + query.addTimeCondition(queryWrapper, "login_time"); + + String targetSql = queryWrapper.getTargetSql(); + Assertions.assertEquals("", targetSql); + } + + + @Test + void addTimeConditionWithBothValue() { + query.setBeginTime(new Date()); + query.setEndTime(new Date()); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + query.addTimeCondition(queryWrapper, "login_time"); + + String targetSql = queryWrapper.getTargetSql(); + Assertions.assertEquals("(login_time >= ? AND login_time <= ?)", targetSql); + } + + + @Test + void addTimeConditionWithBeginValueOnly() { + query.setBeginTime(new Date()); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + query.addTimeCondition(queryWrapper, "login_time"); + + String targetSql = queryWrapper.getTargetSql(); + Assertions.assertEquals("(login_time >= ?)", targetSql); + } + + + + +} diff --git a/agileboot-orm/src/main/java/com/agileboot/orm/query/AbstractQuery.java b/agileboot-orm/src/main/java/com/agileboot/orm/query/AbstractQuery.java index 7e1d7cd..43a117d 100644 --- a/agileboot-orm/src/main/java/com/agileboot/orm/query/AbstractQuery.java +++ b/agileboot-orm/src/main/java/com/agileboot/orm/query/AbstractQuery.java @@ -2,7 +2,7 @@ package com.agileboot.orm.query; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; -import com.agileboot.common.utils.time.DatePicker; +import com.agileboot.common.utils.time.DatePickUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import java.util.Date; import java.util.Map; @@ -60,10 +60,10 @@ public abstract class AbstractQuery { @SuppressWarnings("unchecked") public void addTimeCondition(QueryWrapper queryWrapper, String fieldName) { - if(queryWrapper!=null) { + if (queryWrapper != null) { queryWrapper - .ge(beginTime != null, fieldName, DatePicker.getBeginOfTheDay(beginTime)) - .le(endTime != null, fieldName, DatePicker.getEndOfTheDay(endTime)); + .ge(beginTime != null, fieldName, DatePickUtil.getBeginOfTheDay(beginTime)) + .le(endTime != null, fieldName, DatePickUtil.getEndOfTheDay(endTime)); } } diff --git a/pom.xml b/pom.xml index bcb7fa3..f0e5246 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ 2.3 0.9.1 5.7.22 - 4.13.1 + 1.18.24 3.5.2 3.5.1 @@ -212,12 +212,13 @@ ${hutool.version} - - junit - junit - ${junit.version} - test - + + + + + + + org.projectlombok