refactor(oa): 优化考勤记录查询逻辑
- 修改了 calcTime 和 relationMonth 的处理逻辑,提高了查询的准确性和效率- 优化了对不同月份情况的处理,确保正确查询指定月份的考勤记录 -调整了 SQL 语句的格式,提高了可读性
This commit is contained in:
@@ -316,17 +316,19 @@
|
|||||||
AND oas.project_id = #{projectId}
|
AND oas.project_id = #{projectId}
|
||||||
AND oas.del_flag = 0
|
AND oas.del_flag = 0
|
||||||
AND (
|
AND (
|
||||||
<!-- 如果 calcTime 不为空,查询 calcTime 对应的出勤记录 -->
|
<!-- 如果 calcTime 不为空 -->
|
||||||
(#{calcTime} IS NOT NULL AND( -- 如果 calcTime 和 oas.create_time 为同月,查询当月的记录
|
(#{calcTime} IS NOT NULL AND (
|
||||||
(DATE_FORMAT(#{calcTime}, '%Y-%m') = DATE_FORMAT(oas.create_time, '%Y-%m')
|
<!-- 如果 calcTime 和 relationMonth 在同一个月,查询从月初到 calcTime 的记录 -->
|
||||||
|
(DATE_FORMAT(#{calcTime}, '%Y-%m') = DATE_FORMAT(#{relationMonth}, '%Y-%m')
|
||||||
AND oas.create_time BETWEEN DATE_FORMAT(#{relationMonth}, '%Y-%m-01') AND #{calcTime})
|
AND oas.create_time BETWEEN DATE_FORMAT(#{relationMonth}, '%Y-%m-01') AND #{calcTime})
|
||||||
-- 如果 calcTime 和 oas.create_time 不为同月,查询整个 relationMonth 的记录
|
<!-- 如果 calcTime 和 relationMonth 不在同一个月,查询整个 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 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 (
|
OR (
|
||||||
#{calcTime} IS NULL AND (
|
#{calcTime} IS NULL AND (
|
||||||
-- 如果 relationMonth 是当前月,则查询本月最晚的记录
|
<!-- 如果 relationMonth 是当前月,则查询本月最晚的记录 -->
|
||||||
(DATE_FORMAT(#{relationMonth}, '%Y-%m') = DATE_FORMAT(CURRENT_DATE, '%Y-%m')
|
(DATE_FORMAT(#{relationMonth}, '%Y-%m') = DATE_FORMAT(CURRENT_DATE, '%Y-%m')
|
||||||
AND oas.create_time BETWEEN DATE_FORMAT(#{relationMonth}, '%Y-%m-01')
|
AND oas.create_time BETWEEN DATE_FORMAT(#{relationMonth}, '%Y-%m-01')
|
||||||
AND (
|
AND (
|
||||||
@@ -334,17 +336,17 @@
|
|||||||
FROM oa_attendance_record oar
|
FROM oa_attendance_record oar
|
||||||
WHERE oar.user_id = #{userId}
|
WHERE oar.user_id = #{userId}
|
||||||
AND oar.del_flag = 0
|
AND oar.del_flag = 0
|
||||||
)
|
))
|
||||||
-- 如果 relationMonth 不是当前月,则查询整个 relationMonth 的记录
|
<!-- 如果 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')
|
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)
|
||||||
|
))
|
||||||
)
|
)
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user