From d29080af4e965ba341cb85a5bc45ecd183c06783 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 14 八月 2026 17:45:45 +0800
Subject: [PATCH] Merge branch 'dev_New_pro' into dev_pro_山西_晋和园

---
 src/main/resources/mapper/staff/PersonalShiftMapper.xml |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/src/main/resources/mapper/staff/PersonalShiftMapper.xml b/src/main/resources/mapper/staff/PersonalShiftMapper.xml
index 7d80392..b912e24 100644
--- a/src/main/resources/mapper/staff/PersonalShiftMapper.xml
+++ b/src/main/resources/mapper/staff/PersonalShiftMapper.xml
@@ -18,13 +18,16 @@
         u.id user_id
         FROM personal_shift s
         LEFT JOIN staff_on_job u ON u.id = s.staff_on_job_id
+        LEFT JOIN staff_leave sl ON sl.staff_on_job_id = u.id
         LEFT JOIN personal_attendance_location_config palc ON palc.id = s.personal_attendance_location_config_id
         <where>
+            u.id IS NOT NULL
             <if test="sysDeptId != null and sysDeptId != ''">
                 and u.sys_dept_id = #{sysDeptId}
             </if>
             <if test="time != null and time != ''">
                 and DATE_FORMAT(s.work_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m')
+                AND (u.staff_state = 1 OR (u.staff_state = 0 AND sl.leave_date IS NOT NULL AND sl.leave_date >= DATE_FORMAT(#{time}, '%Y-%m-01')))
             </if>
             <if test="userName != null and userName != ''">
                 and u.staff_name like concat('%', #{userName}, '%')
@@ -43,10 +46,12 @@
         GROUP_CONCAT(DATE_FORMAT(s.work_time, '%c'), '锛�', IFNULL(palc.shift, '') order by s.work_time SEPARATOR ';') month_str
         FROM personal_shift s
         LEFT JOIN staff_on_job u ON u.id = s.staff_on_job_id
-         LEFT JOIN personal_attendance_location_config palc ON palc.id = s.personal_attendance_location_config_id
+        LEFT JOIN staff_leave sl ON sl.staff_on_job_id = u.id
+        LEFT JOIN personal_attendance_location_config palc ON palc.id = s.personal_attendance_location_config_id
          <where>
             <if test="time != null and time != ''">
                 and DATE_FORMAT(s.work_time, '%Y') = DATE_FORMAT(#{time}, '%Y' )
+                AND (u.staff_state = 1 OR (u.staff_state = 0 AND sl.leave_date IS NOT NULL AND sl.leave_date >= DATE_FORMAT(#{time}, '%Y-01-01')))
             </if>
             <if test="userName != null and userName != ''">
                 and u.staff_name like concat('%', #{userName}, '%')
@@ -66,10 +71,12 @@
         GROUP_CONCAT(DATE_FORMAT(s.work_time, '%c'), '锛�', IFNULL(palc.shift, '') order by s.work_time SEPARATOR ';') month_str
         FROM personal_shift s
         LEFT JOIN staff_on_job u ON u.id = s.staff_on_job_id
+        LEFT JOIN staff_leave sl ON sl.staff_on_job_id = u.id
         LEFT JOIN personal_attendance_location_config palc ON palc.id = s.personal_attendance_location_config_id
        <where>
         <if test="time != null and time != ''">
             and DATE_FORMAT(s.work_time, '%Y') = DATE_FORMAT(#{time}, '%Y' )
+            AND (u.staff_state = 1 OR (u.staff_state = 0 AND sl.leave_date IS NOT NULL AND sl.leave_date >= DATE_FORMAT(#{time}, '%Y-01-01')))
         </if>
         <if test="userName != null and userName != ''">
             and u.staff_name like concat('%', #{userName}, '%')
@@ -87,10 +94,12 @@
         GROUP_CONCAT(s.work_time, '锛�', IFNULL(palc.shift, ''), '锛�', s.id order by s.work_time SEPARATOR ';') AS shift_time, u.id user_id
         FROM personal_shift s
         LEFT JOIN staff_on_job u ON u.id = s.staff_on_job_id
+        LEFT JOIN staff_leave sl ON sl.staff_on_job_id = u.id
         LEFT JOIN personal_attendance_location_config palc ON palc.id = s.personal_attendance_location_config_id
         <where>
             <if test="time != null and time != ''">
                 and DATE_FORMAT(s.work_time, '%Y-%m') = DATE_FORMAT(#{time}, '%Y-%m' )
+                AND (u.staff_state = 1 OR (u.staff_state = 0 AND sl.leave_date IS NOT NULL AND sl.leave_date >= DATE_FORMAT(#{time}, '%Y-%m-01')))
             </if>
             <if test="userName != null and userName != ''">
                 and u.staff_name like concat('%', #{userName}, '%')
@@ -103,4 +112,15 @@
         order by s.create_time
     </select>
 
+    <select id="existsAttendanceUsedByConfig" resultType="boolean">
+        SELECT EXISTS (
+            SELECT 1
+            FROM personal_shift ps
+            INNER JOIN personal_attendance_records par
+                ON par.staff_on_job_id = ps.staff_on_job_id
+               AND par.date = DATE(ps.work_time)
+            WHERE ps.personal_attendance_location_config_id = #{configId}
+        )
+    </select>
+
 </mapper>

--
Gitblit v1.9.3