From 0b3ff378a9faaf9d7a4831b7f0de67378fe0dfea Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期二, 30 五月 2023 12:20:15 +0800
Subject: [PATCH] optimize 统计

---
 java110-db/src/main/resources/mapper/report/ReportAttendanceServiceDaoImplMapper.xml |   58 ++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/java110-db/src/main/resources/mapper/report/ReportAttendanceServiceDaoImplMapper.xml b/java110-db/src/main/resources/mapper/report/ReportAttendanceServiceDaoImplMapper.xml
index 00c41c8..8d414e6 100755
--- a/java110-db/src/main/resources/mapper/report/ReportAttendanceServiceDaoImplMapper.xml
+++ b/java110-db/src/main/resources/mapper/report/ReportAttendanceServiceDaoImplMapper.xml
@@ -6,36 +6,35 @@
 
     <!-- 鏌ヨ瀹炴敹閲戦 -->
     <select id="getMonthAttendanceCount" parameterType="Map" resultType="Map">
-        select count(1) count from (
-        select distinct t.staff_id
-        from attendance_classes_task t
-        left join u_user s on t.staff_id = s.user_id and s.status_cd = '0'
-        left join u_org_staff_rel uosr on uosr.staff_id = s.user_id and uosr.status_cd = '0'
-        left join u_org uo on uosr.org_id = uo.org_id and uo.status_cd = '0'
-        where 1 =1
-        and t.status_cd = '0'
+        select count(1) count from
+        attendance_classes_staff t
+        INNER JOIN attendance_classes ac ON t.classes_id = ac.classes_id
+        AND ac.status_cd = '0'
+        LEFT JOIN u_user s ON t.staff_id = s.user_id
+        AND s.status_cd = '0'
+        <if test="departmentId !=null and departmentId != ''">
+            LEFT JOIN u_org_staff_rel uosr ON uosr.staff_id = s.user_id
+            AND uosr.status_cd = '0'
+            LEFT JOIN u_org uo ON uosr.org_id = uo.org_id
+            AND uo.status_cd = '0'
+        </if>
+        WHERE
+        t.status_cd = '0'
         <if test="staffName !=null and staffName != ''">
-            and s.staff_name like concat('%',#{staffName},'%')
+            and t.staff_name like concat('%',#{staffName},'%')
         </if>
         <if test="departmentId !=null and departmentId != ''">
             and uo.org_id = #{departmentId}
         </if>
-        <if test="taskId !=null and taskId != ''">
-            and t.task_id= #{taskId}
-        </if>
         <if test="classId !=null and classId != ''">
-            and t.class_id= #{classId}
+            and t.classes_id= #{classId}
         </if>
         <if test="staffId !=null and staffId != ''">
             and t.staff_id= #{staffId}
         </if>
-        <if test="taskYear !=null and taskYear != ''">
-            and t.task_year= #{taskYear}
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id = #{storeId}
         </if>
-        <if test="taskMonth !=null and taskMonth != ''">
-            and t.task_month= #{taskMonth}
-        </if>
-        ) tt
     </select>
 
     <!-- 鏌ヨ鎴垮眿涓暟 add by wuxw 2018-07-03 -->
@@ -43,7 +42,6 @@
         SELECT
         t.staff_name staffName,
         t.staff_id staffId,
-        uo.org_name departmentName,
         t.classes_id classesId,
         ac.classes_name classesName,
         (
@@ -56,6 +54,7 @@
         ac.classes_id = act.class_id
         AND act.status_cd = '0'
         AND act.task_id = b.task_id
+        and act.staff_id = t.staff_id
         AND b.state = '10000'
         and b.value &lt; now()
         <if test="taskYear !=null and taskYear != ''">
@@ -75,7 +74,8 @@
         ac.classes_id = act.class_id
         AND act.status_cd = '0'
         AND act.task_id = b.task_id
-        AND b.state = '30000'
+        and act.staff_id = t.staff_id
+        AND b.state in ('30000','70000')
         <if test="taskYear !=null and taskYear != ''">
             and act.task_year= #{taskYear}
         </if>
@@ -93,6 +93,7 @@
         ac.classes_id = act.class_id
         AND act.status_cd = '0'
         AND act.task_id = b.task_id
+        and act.staff_id = t.staff_id
         AND b.state = '40000'
         <if test="taskYear !=null and taskYear != ''">
             and act.task_year= #{taskYear}
@@ -111,6 +112,7 @@
         ac.classes_id = act.class_id
         AND act.status_cd = '0'
         AND act.task_id = b.task_id
+        and act.staff_id = t.staff_id
         AND b.state = '50000'
         <if test="taskYear !=null and taskYear != ''">
             and act.task_year= #{taskYear}
@@ -129,6 +131,7 @@
         ac.classes_id = act.class_id
         AND act.status_cd = '0'
         AND act.task_id = b.task_id
+        and act.staff_id = t.staff_id
         AND b.state = '60000'
         <if test="taskYear !=null and taskYear != ''">
             and act.task_year= #{taskYear}
@@ -143,10 +146,12 @@
         AND ac.status_cd = '0'
         LEFT JOIN u_user s ON t.staff_id = s.user_id
         AND s.status_cd = '0'
-        LEFT JOIN u_org_staff_rel uosr ON uosr.staff_id = s.user_id
-        AND uosr.status_cd = '0'
-        LEFT JOIN u_org uo ON uosr.org_id = uo.org_id
-        AND uo.status_cd = '0'
+        <if test="departmentId !=null and departmentId != ''">
+            LEFT JOIN u_org_staff_rel uosr ON uosr.staff_id = s.user_id
+            AND uosr.status_cd = '0'
+            LEFT JOIN u_org uo ON uosr.org_id = uo.org_id
+            AND uo.status_cd = '0'
+        </if>
         WHERE
         t.status_cd = '0'
         <if test="staffName !=null and staffName != ''">
@@ -170,7 +175,8 @@
     </select>
 
     <select id="getMonthAttendanceDetail" parameterType="Map" resultType="Map">
-        select t.detail_id detailId,t.spec_cd specCd,t.`value`,t.check_time checkTime,t.state,t.face_path facePath,t.create_time createTime,act.task_day  taskDay,td.`name` stateName
+        select t.detail_id detailId,t.spec_cd specCd,t.`value`,t.check_time checkTime,t.state,t.face_path facePath,t.create_time createTime,act.task_day  taskDay,
+        td.`name` stateName,act.staff_id staffId
         from attendance_classes_task_detail t
         left join attendance_classes_task act on t.task_id = act.task_id and act.status_cd = '0'
         left join t_dict td on t.state = td.status_cd and td.table_name = 'attendance_classes_task_detail' and td.table_columns = 'state'

--
Gitblit v1.8.0