浏览代码

挂起时长计算

wanglt 2 月之前
父节点
当前提交
30c4fb535e

+ 6 - 2
ygtx-gxt/src/main/resources/mapper/gxt/GxtRepairOrderMapper.xml

@@ -699,7 +699,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN (
         SELECT
             rop.user_id,
-            SUM((TIMESTAMPDIFF( SECOND, ro.real_start_time, ro.real_end_time ) - IFNULL(gq.total_in_work_suspend_seconds, 0))) / 3600 AS wxgs
+            SUM (CASE WHEN ro.real_end_time>ro.real_start_time
+                        THEN TIMESTAMPDIFF( SECOND, ro.real_start_time, ro.real_end_time ) - IFNULL(gq.total_in_work_suspend_seconds, 0)
+                    ELSE 0 END ) / 3600 AS wxgs
         FROM
             gxt_repair_order_person rop
                 LEFT JOIN gxt_repair_order ro ON rop.order_id = ro.id
@@ -714,7 +716,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN (
         SELECT
             wop.user_id,
-            SUM((TIMESTAMPDIFF( SECOND, wo.real_start_time, wo.real_end_time ) - IFNULL(gq.total_in_work_suspend_seconds, 0))) / 3600 AS wbgs
+            SUM(CASE WHEN wo.real_end_time>wo.real_start_time
+                        THEN TIMESTAMPDIFF( SECOND, wo.real_start_time, wo.real_end_time ) - IFNULL(gq.total_in_work_suspend_seconds, 0)
+                    ELSE 0 END ) / 3600 AS wbgs
         FROM
             gxt_work_order_person wop
                 LEFT JOIN gxt_work_order wo ON wop.order_id = wo.id

+ 52 - 14
ygtx-gxt/src/main/resources/mapper/gxt/gxtOrderPersonMapper.xml

@@ -123,7 +123,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM gxt_repair_order_flow f
                  LEFT JOIN gxt_repair_order ro
                            ON ro.id = f.order_id
-        WHERE f.action_type IN ('approved', 'resume', 'auto_suspend', 'auto_resume')
+        WHERE ro.work_order_status IN ('completed','archived')
+          AND ro.real_start_time IS NOT NULL AND ro.real_end_time IS NOT NULL
+          AND f.action_type IN ('approved', 'resume', 'auto_suspend', 'auto_resume')
         ) t
     </select>
 
@@ -148,7 +150,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM gxt_repair_order_flow f
                  LEFT JOIN gxt_repair_order ro
                            ON ro.id = f.order_id
-        WHERE f.action_type IN ('approved', 'resume', 'auto_suspend', 'auto_resume')
+        WHERE ro.work_order_status IN ('completed','archived')
+          AND ro.real_start_time IS NOT NULL AND ro.real_end_time IS NOT NULL
+          AND f.action_type IN ('approved', 'resume', 'auto_suspend', 'auto_resume')
         ORDER BY f.order_id, f.action_time
     </insert>
 
@@ -165,14 +169,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT
             t0.order_id,
             COALESCE(SUM(CASE
-                             WHEN t1.action_time <![CDATA[<]]> t1.real_start_time
+                             WHEN wo0.real_start_time>t2.action_time AND wo0.real_end_time>wo0.real_start_time
                                  THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
+                             WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time
+                                 THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_start_time)
                              ELSE 0
                 END), 0) AS total_before_start_suspend_seconds,
 
             COALESCE(SUM(CASE
-                             WHEN t1.action_time >= t1.real_start_time
+                             WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
                                  THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
+                             WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
+                                 THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, t2.action_time)
+                             WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time AND wo0.real_end_time>=t1.action_time
+                                 THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_end_time)
+                             WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
+                                 THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, wo0.real_end_time)
                              ELSE 0
                 END), 0) AS total_in_work_suspend_seconds,
             COALESCE(SUM(CASE
@@ -183,36 +195,60 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
             CONCAT(
                     FLOOR(COALESCE(SUM(CASE
-                                           WHEN t1.action_time <![CDATA[<]]> t1.real_start_time
+                                           WHEN wo0.real_start_time>t2.action_time AND wo0.real_end_time>wo0.real_start_time
                                                THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
+                                           WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time
+                                               THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_start_time)
                                            ELSE 0
                         END), 0) / 3600), '小时',
                     FLOOR(MOD(COALESCE(SUM(CASE
-                                               WHEN t1.action_time <![CDATA[<]]> t1.real_start_time
+                                               WHEN wo0.real_start_time>t2.action_time AND wo0.real_end_time>wo0.real_start_time
                                                    THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
+                                               WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time
+                                                   THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_start_time)
                                                ELSE 0
                         END), 0), 3600) / 60), '分钟',
                     MOD(COALESCE(SUM(CASE
-                                         WHEN t1.action_time <![CDATA[<]]> t1.real_start_time
+                                         WHEN wo0.real_start_time>t2.action_time AND wo0.real_end_time>wo0.real_start_time
                                              THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
+                                         WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time
+                                             THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_start_time)
                                          ELSE 0
                         END), 0), 60), '秒'
                 ) AS before_start_suspend_format,
 
             CONCAT(
                     FLOOR(COALESCE(SUM(CASE
-                                           WHEN t1.action_time >= t1.real_start_time
+                                           WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
                                                THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
+                                           WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
+                                               THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, t2.action_time)
+                                           WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time AND wo0.real_end_time>=t1.action_time
+                                               THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_end_time)
+                                           WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
+                                               THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, wo0.real_end_time)
                                            ELSE 0
                         END), 0) / 3600), '小时',
                     FLOOR(MOD(COALESCE(SUM(CASE
-                                               WHEN t1.action_time >= t1.real_start_time
+                                               WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
                                                    THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
+                                               WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
+                                                   THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, t2.action_time)
+                                               WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time AND wo0.real_end_time>=t1.action_time
+                                                   THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_end_time)
+                                               WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
+                                                   THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, wo0.real_end_time)
                                                ELSE 0
                         END), 0), 3600) / 60), '分钟',
                     MOD(COALESCE(SUM(CASE
-                                         WHEN t1.action_time >= t1.real_start_time
+                                         WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
                                              THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
+                                         WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
+                                             THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, t2.action_time)
+                                         WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time AND wo0.real_end_time>=t1.action_time
+                                             THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_end_time)
+                                         WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
+                                             THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, wo0.real_end_time)
                                          ELSE 0
                         END), 0), 60), '秒'
                 ) AS in_work_suspend_format,
@@ -252,6 +288,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                AND t4.order_seq = t3.order_seq + 1
                                AND t3.action_type = 'auto_suspend'
                                AND t4.action_type IN ('resume','auto_resume')
+                 LEFT JOIN gxt_repair_order wo0
+                           ON t0.order_id = wo0.id
         GROUP BY t0.order_id
         ORDER BY t0.order_id
     </insert>
@@ -332,7 +370,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                  THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
                              WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
                                  THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, t2.action_time)
-                             WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
+                             WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time AND wo0.real_end_time>=t1.action_time
                                  THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_end_time)
                              WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
                                  THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, wo0.real_end_time)
@@ -375,7 +413,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                                THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
                                            WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
                                                THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, t2.action_time)
-                                           WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
+                                           WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time AND wo0.real_end_time>=t1.action_time
                                                THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_end_time)
                                            WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
                                                THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, wo0.real_end_time)
@@ -386,7 +424,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                                    THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
                                                WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
                                                    THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, t2.action_time)
-                                               WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
+                                               WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time AND wo0.real_end_time>=t1.action_time
                                                    THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_end_time)
                                                WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
                                                    THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, wo0.real_end_time)
@@ -397,7 +435,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                                              THEN TIMESTAMPDIFF(SECOND, t1.action_time, t2.action_time)
                                          WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND wo0.real_end_time>=t2.action_time
                                              THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, t2.action_time)
-                                         WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
+                                         WHEN t1.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time AND wo0.real_end_time>=t1.action_time
                                              THEN TIMESTAMPDIFF(SECOND, t1.action_time, wo0.real_end_time)
                                          WHEN wo0.real_start_time>t1.action_time AND t2.action_time>wo0.real_start_time AND wo0.real_end_time>wo0.real_start_time AND t2.action_time>wo0.real_end_time
                                              THEN TIMESTAMPDIFF(SECOND, wo0.real_start_time, wo0.real_end_time)