From ee438b53703fc33ce73d157b2d8afe21916d0606 Mon Sep 17 00:00:00 2001 From: hxr <1490493387@qq.com> Date: Thu, 19 Oct 2023 00:00:02 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=97=A5=E6=9C=9F=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=B8=BA=E6=95=B0=E6=8D=AE=E5=BA=93=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=A0=BC=E5=BC=8F=EF=BC=8C=E9=81=BF=E5=85=8D=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E6=AF=94=E8=BE=83=E4=BD=BF=E7=94=A8=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=B4=A2=E5=BC=95=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youlai/system/common/util/DateUtils.java | 40 ++++++++++++++----- .../system/model/query/UserPageQuery.java | 10 ++++- .../service/impl/SysUserServiceImpl.java | 5 +-- src/main/resources/mapper/SysUserMapper.xml | 14 +++---- 4 files changed, 45 insertions(+), 24 deletions(-) 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