diff --git a/src/main/java/com/youlai/system/common/util/DateUtils.java b/src/main/java/com/youlai/system/common/util/DateUtils.java index 4ed7adfd..2a685e84 100644 --- a/src/main/java/com/youlai/system/common/util/DateUtils.java +++ b/src/main/java/com/youlai/system/common/util/DateUtils.java @@ -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 formatDateRange(List 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)); } } } diff --git a/src/main/java/com/youlai/system/model/query/UserPageQuery.java b/src/main/java/com/youlai/system/model/query/UserPageQuery.java index f275ef7f..5bf78a33 100644 --- a/src/main/java/com/youlai/system/model/query/UserPageQuery.java +++ b/src/main/java/com/youlai/system/model/query/UserPageQuery.java @@ -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 createTimeRange; + @Schema(description="创建时间-开始时间") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private String startTime; + @Schema(description="创建时间-结束时间") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private String endTime; } diff --git a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java index e2341887..cef68c8a 100644 --- a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java @@ -74,9 +74,8 @@ public class SysUserServiceImpl extends ServiceImpl impl int pageSize = queryParams.getPageSize(); Page page = new Page<>(pageNum, pageSize); - // 时间范围参数处理 - List createTimeRange = DateUtils.formatDateRange(queryParams.getCreateTimeRange()); - queryParams.setCreateTimeRange(createTimeRange); + // 日期格式化为数据库日期格式,避免日期比较使用函数导致索引失效 + DateUtils.formatDateTimeForDatabase(queryParams, "startTime", "endTime"); // 查询数据 Page userPage = this.baseMapper.getUserPage(page, queryParams); diff --git a/src/main/resources/mapper/SysUserMapper.xml b/src/main/resources/mapper/SysUserMapper.xml index d1bdee0d..df1b698b 100644 --- a/src/main/resources/mapper/SysUserMapper.xml +++ b/src/main/resources/mapper/SysUserMapper.xml @@ -37,16 +37,12 @@ AND concat(',',concat(d.tree_path,',',d.id),',') like concat('%,',#{queryParams.deptId},',%') - - - - AND u.create_time >= #{queryParams.createTimeRange[0]} - - - AND u.create_time <= #{queryParams.createTimeRange[1]} - + + AND u.create_time >= #{queryParams.startTime} + + + AND u.create_time <= #{queryParams.endTime} - GROUP BY u.id