From d79f279310016aa919543fa5151637a2f834f52b Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Sat, 23 Aug 2025 10:06:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor(oa):=20=E4=BC=98=E5=8C=96=E8=80=83?= =?UTF-8?q?=E5=8B=A4=E8=AE=B0=E5=BD=95=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改了 calcTime 和 relationMonth 的处理逻辑,提高了查询的准确性和效率- 优化了对不同月份情况的处理,确保正确查询指定月份的考勤记录 -调整了 SQL 语句的格式,提高了可读性 --- .../mapper/oa/SysOaAttendanceMapper.xml | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml index 0f99efc..53aa2f1 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaAttendanceMapper.xml @@ -316,17 +316,19 @@ AND oas.project_id = #{projectId} AND oas.del_flag = 0 AND ( - - (#{calcTime} IS NOT NULL AND( -- 如果 calcTime 和 oas.create_time 为同月,查询当月的记录 - (DATE_FORMAT(#{calcTime}, '%Y-%m') = DATE_FORMAT(oas.create_time, '%Y-%m') + + (#{calcTime} IS NOT NULL AND ( + + (DATE_FORMAT(#{calcTime}, '%Y-%m') = DATE_FORMAT(#{relationMonth}, '%Y-%m') AND oas.create_time BETWEEN DATE_FORMAT(#{relationMonth}, '%Y-%m-01') AND #{calcTime}) - -- 如果 calcTime 和 oas.create_time 不为同月,查询整个 relationMonth 的记录 - OR DATE_FORMAT(#{calcTime}, '%Y-%m') != DATE_FORMAT(oas.create_time, '%Y-%m') + + OR (DATE_FORMAT(#{calcTime}, '%Y-%m') != DATE_FORMAT(#{relationMonth}, '%Y-%m') AND oas.create_time BETWEEN DATE_FORMAT(#{relationMonth}, '%Y-%m-01') - AND LAST_DAY(STR_TO_DATE(#{relationMonth}, '%Y-%m-01')))) + AND DATE_ADD(DATE_FORMAT(#{relationMonth}, '%Y-%m-01'), INTERVAL 1 MONTH) - INTERVAL 1 DAY) + )) OR ( #{calcTime} IS NULL AND ( - -- 如果 relationMonth 是当前月,则查询本月最晚的记录 + (DATE_FORMAT(#{relationMonth}, '%Y-%m') = DATE_FORMAT(CURRENT_DATE, '%Y-%m') AND oas.create_time BETWEEN DATE_FORMAT(#{relationMonth}, '%Y-%m-01') AND ( @@ -334,17 +336,17 @@ FROM oa_attendance_record oar WHERE oar.user_id = #{userId} AND oar.del_flag = 0 - ) - -- 如果 relationMonth 不是当前月,则查询整个 relationMonth 的记录 - OR oas.create_time BETWEEN + )) + + OR (DATE_FORMAT(#{relationMonth}, '%Y-%m') != DATE_FORMAT(CURRENT_DATE, '%Y-%m') + AND oas.create_time BETWEEN DATE_FORMAT(#{relationMonth}, '%Y-%m-01') - AND LAST_DAY(STR_TO_DATE(#{relationMonth}, '%Y-%m-01')) + AND DATE_ADD(DATE_FORMAT(#{relationMonth}, '%Y-%m-01'), INTERVAL 1 MONTH) - INTERVAL 1 DAY) + )) ) - ) - ) - ) - + +