refactor: 日期格式化为数据库日期格式,避免日期比较使用函数导致索引失效
This commit is contained in:
@@ -2,7 +2,13 @@
|
||||
package com.youlai.system.common.util;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -15,18 +21,32 @@ public class DateUtils {
|
||||
|
||||
|
||||
/**
|
||||
* 格式化日期范围
|
||||
* 将日期格式化为数据库日期格式 (yyyy-MM-dd HH:mm:ss) 并更新对象中指定的起始时间字段和结束时间字段。
|
||||
*
|
||||
* @param createTimeRange
|
||||
* @return
|
||||
* @param obj 要处理的对象
|
||||
* @param startTimeFieldName 起始时间字段名
|
||||
* @param endTimeFieldName 结束时间字段名
|
||||
*/
|
||||
public static List<String> formatDateRange(List<String> createTimeRange) {
|
||||
if (CollectionUtil.isNotEmpty(createTimeRange) && createTimeRange.size() == 2) {
|
||||
createTimeRange.set(0, createTimeRange.get(0) + " 00:00:00");
|
||||
createTimeRange.set(1, createTimeRange.get(1) + " 23:59:59");
|
||||
return createTimeRange;
|
||||
} else {
|
||||
return null;
|
||||
public static void formatDateTimeForDatabase(Object obj, String startTimeFieldName, String endTimeFieldName) {
|
||||
Field startTimeField = ReflectUtil.getField(obj.getClass(), startTimeFieldName);
|
||||
Field endTimeField = ReflectUtil.getField(obj.getClass(), endTimeFieldName);
|
||||
|
||||
if (startTimeField != null) {
|
||||
processDateTimeField(obj, startTimeField, startTimeFieldName, "yyyy-MM-dd 00:00:00");
|
||||
}
|
||||
|
||||
if (endTimeField != null) {
|
||||
processDateTimeField(obj, endTimeField, endTimeFieldName, "yyyy-MM-dd 23:59:59");
|
||||
}
|
||||
}
|
||||
|
||||
private static void processDateTimeField(Object obj, Field field, String fieldName, String targetPattern) {
|
||||
Object fieldValue = ReflectUtil.getFieldValue(obj, fieldName);
|
||||
if (fieldValue != null) {
|
||||
String pattern = field.isAnnotationPresent(DateTimeFormat.class) ?
|
||||
field.getAnnotation(DateTimeFormat.class).pattern() : "yyyy-MM-dd";
|
||||
DateTime dateTime = DateUtil.parse(StrUtil.toString(fieldValue), pattern);
|
||||
ReflectUtil.setFieldValue(obj, fieldName, dateTime.toString(targetPattern));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@ package com.youlai.system.model.query;
|
||||
import com.youlai.system.common.base.BasePageQuery;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -25,7 +27,11 @@ public class UserPageQuery extends BasePageQuery {
|
||||
@Schema(description="部门ID")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description="创建时间范围")
|
||||
private List<String> createTimeRange;
|
||||
@Schema(description="创建时间-开始时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private String startTime;
|
||||
|
||||
@Schema(description="创建时间-结束时间")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
private String endTime;
|
||||
}
|
||||
|
||||
@@ -74,9 +74,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
int pageSize = queryParams.getPageSize();
|
||||
Page<UserBO> page = new Page<>(pageNum, pageSize);
|
||||
|
||||
// 时间范围参数处理
|
||||
List<String> createTimeRange = DateUtils.formatDateRange(queryParams.getCreateTimeRange());
|
||||
queryParams.setCreateTimeRange(createTimeRange);
|
||||
// 日期格式化为数据库日期格式,避免日期比较使用函数导致索引失效
|
||||
DateUtils.formatDateTimeForDatabase(queryParams, "startTime", "endTime");
|
||||
|
||||
// 查询数据
|
||||
Page<UserBO> userPage = this.baseMapper.getUserPage(page, queryParams);
|
||||
|
||||
Reference in New Issue
Block a user