refactor: 日期格式化为数据库日期格式,避免日期比较使用函数导致索引失效
This commit is contained in:
@@ -2,7 +2,13 @@
|
|||||||
package com.youlai.system.common.util;
|
package com.youlai.system.common.util;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
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;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -15,18 +21,32 @@ public class DateUtils {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 格式化日期范围
|
* 将日期格式化为数据库日期格式 (yyyy-MM-dd HH:mm:ss) 并更新对象中指定的起始时间字段和结束时间字段。
|
||||||
*
|
*
|
||||||
* @param createTimeRange
|
* @param obj 要处理的对象
|
||||||
* @return
|
* @param startTimeFieldName 起始时间字段名
|
||||||
|
* @param endTimeFieldName 结束时间字段名
|
||||||
*/
|
*/
|
||||||
public static List<String> formatDateRange(List<String> createTimeRange) {
|
public static void formatDateTimeForDatabase(Object obj, String startTimeFieldName, String endTimeFieldName) {
|
||||||
if (CollectionUtil.isNotEmpty(createTimeRange) && createTimeRange.size() == 2) {
|
Field startTimeField = ReflectUtil.getField(obj.getClass(), startTimeFieldName);
|
||||||
createTimeRange.set(0, createTimeRange.get(0) + " 00:00:00");
|
Field endTimeField = ReflectUtil.getField(obj.getClass(), endTimeFieldName);
|
||||||
createTimeRange.set(1, createTimeRange.get(1) + " 23:59:59");
|
|
||||||
return createTimeRange;
|
if (startTimeField != null) {
|
||||||
} else {
|
processDateTimeField(obj, startTimeField, startTimeFieldName, "yyyy-MM-dd 00:00:00");
|
||||||
return null;
|
}
|
||||||
|
|
||||||
|
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 com.youlai.system.common.base.BasePageQuery;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -25,7 +27,11 @@ public class UserPageQuery extends BasePageQuery {
|
|||||||
@Schema(description="部门ID")
|
@Schema(description="部门ID")
|
||||||
private Long deptId;
|
private Long deptId;
|
||||||
|
|
||||||
@Schema(description="创建时间范围")
|
@Schema(description="创建时间-开始时间")
|
||||||
private List<String> createTimeRange;
|
@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();
|
int pageSize = queryParams.getPageSize();
|
||||||
Page<UserBO> page = new Page<>(pageNum, pageSize);
|
Page<UserBO> page = new Page<>(pageNum, pageSize);
|
||||||
|
|
||||||
// 时间范围参数处理
|
// 日期格式化为数据库日期格式,避免日期比较使用函数导致索引失效
|
||||||
List<String> createTimeRange = DateUtils.formatDateRange(queryParams.getCreateTimeRange());
|
DateUtils.formatDateTimeForDatabase(queryParams, "startTime", "endTime");
|
||||||
queryParams.setCreateTimeRange(createTimeRange);
|
|
||||||
|
|
||||||
// 查询数据
|
// 查询数据
|
||||||
Page<UserBO> userPage = this.baseMapper.getUserPage(page, queryParams);
|
Page<UserBO> userPage = this.baseMapper.getUserPage(page, queryParams);
|
||||||
|
|||||||
@@ -37,16 +37,12 @@
|
|||||||
<if test='queryParams.deptId!=null'>
|
<if test='queryParams.deptId!=null'>
|
||||||
AND concat(',',concat(d.tree_path,',',d.id),',') like concat('%,',#{queryParams.deptId},',%')
|
AND concat(',',concat(d.tree_path,',',d.id),',') like concat('%,',#{queryParams.deptId},',%')
|
||||||
</if>
|
</if>
|
||||||
|
<if test="queryParams.startTime != null">
|
||||||
<if test="queryParams.createTimeRange != null and queryParams.createTimeRange.size() == 2 ">
|
AND u.create_time >= #{queryParams.startTime}
|
||||||
<if test="queryParams.createTimeRange[0] != null and queryParams.createTimeRange[0].trim() neq ''">
|
</if>
|
||||||
AND u.create_time >= #{queryParams.createTimeRange[0]}
|
<if test="queryParams.endTime != null">
|
||||||
</if>
|
AND u.create_time <= #{queryParams.endTime}
|
||||||
<if test="queryParams.createTimeRange[1] != null and queryParams.createTimeRange[1].trim() neq ''">
|
|
||||||
AND u.create_time <= #{queryParams.createTimeRange[1]}
|
|
||||||
</if>
|
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
|
|
||||||
</where>
|
</where>
|
||||||
GROUP BY u.id
|
GROUP BY u.id
|
||||||
|
|||||||
Reference in New Issue
Block a user