From 8052785b8f8c423b3ba62b2c546d628b801b18dc Mon Sep 17 00:00:00 2001
From: 于杰 <1210123631@qq.com>
Date: 星期二, 30 十二月 2025 08:41:31 +0800
Subject: [PATCH] 新增 动态补片功能

---
 north-glass-erp/src/main/resources/mapper/pp/Report.xml |  418 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 407 insertions(+), 11 deletions(-)

diff --git a/north-glass-erp/src/main/resources/mapper/pp/Report.xml b/north-glass-erp/src/main/resources/mapper/pp/Report.xml
index 3fac30d..64b23dc 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/Report.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/Report.xml
@@ -1844,7 +1844,7 @@
         AND rw.reviewed_state >= 0
         AND rwd.completed_quantity > 0
         AND rw.reporting_work_time &gt;= #{selectTime1}
-        AND rw.reporting_work_time &lt;  #{selectTime2}
+        AND rw.reporting_work_time &lt;=  #{selectTime2}
         <choose>
             <!-- 鏈変紶宸ュ簭锛氱簿纭尮閰� -->
             <when test="selectProcesses != null and selectProcesses != ''">
@@ -1906,7 +1906,7 @@
         ) t
         WHERE 1 = 1
         <if test="teamOutputDTO.workProcessName != null and teamOutputDTO.workProcessName != ''">
-            AND t.workProcessName REGEXP #{teamOutputDTO.workProcessName}
+            and t.workProcessName like concat('%', #{teamOutputDTO.workProcessName}, '%')
         </if>
         HAVING 1 = 1
         <if test="teamOutputDTO.thicknessSum != null and teamOutputDTO.thicknessSum != ''">
@@ -1991,7 +1991,7 @@
         AND rw.reviewed_state >= 0
         AND rwd.completed_quantity > 0
         AND rw.reporting_work_time &gt;= #{date[0]}
-        AND rw.reporting_work_time &lt;  #{date[1]}
+        AND rw.reporting_work_time &lt;=  #{date[1]}
         <choose>
             <!-- 鏈変紶宸ュ簭锛氱簿纭尮閰� -->
             <when test="process != null and process != ''">
@@ -3651,10 +3651,12 @@
         SELECT g.*
         ,GROUP_CONCAT(g.glass_child SEPARATOR '+')  as childName
         from( SELECT f.*,
-        e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num as quantity,
-        (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)*f.area as glassArea
+        if(e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num-f.termination_quantity&lt;0,
+        0,e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num-f.termination_quantity) as quantity,
+        round(if(e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num-f.termination_quantity&lt;0,0,
+        e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num-f.termination_quantity)*f.area/1000000,2) as glassArea
         from (SELECT a.order_id,
-        a.project,
+        if(a.batch!="",CONCAT(a.project,'(',a.batch,')'),a.project) as project,
         C.product_id,
         b.order_number,
         b.process_id,
@@ -3663,9 +3665,10 @@
         d.`group` ,
         b.broken_num,
         b.id,
-        c.area,
+        d.child_width * d.child_height as area,
         d.glass_child,
-        ifnull(cb.patchNumSum,0) as patchNumSum
+        ifnull(cb.patchNumSum,0) as patchNumSum,
+        fc.termination_quantity
 
         FROM sd.`order` as a
         LEFT JOIN sd.order_process_detail as b
@@ -3698,17 +3701,18 @@
         and fc.technology_number = d.technology_number
         where a.processing_card>0
         and a.warehousing!=2
-        <if test="terminationVal != '1' and terminationVal != 1">
+        <if test=" terminationVal != '1' and terminationVal != 1">
             and termination_status !=1
         </if>
-        and (c.quantity-b.reporting_work_num_count)>0
         GROUP BY  b.process_id, b.order_number,
         b.technology_number) as f
         LEFT JOIN sd.order_process_detail as e
         on e.id=(f.id-1) and e.process_id = f.process_id and e.order_number = f.order_number and e.technology_number =f.technology_number
         where
         e.id is not null
-        and (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)>0 ) as g
+        and (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)>0 group by f.process_id, f.order_number,
+        f.technology_number ORDER BY f.process_id, f.order_number,
+        f.technology_number) as g
         <choose>
             <when test="laminating == 'stepB'">
                 GROUP BY g.process_id, g.order_number, g.technology_number
@@ -3726,6 +3730,7 @@
 
 
         ) as h
+        where h.quantity >0
         <choose>
             <when test="inputVal == 1">
                 GROUP BY thisProcess
@@ -4009,4 +4014,395 @@
         GROUP BY
             t.this_process
     </select>
+
+    <select id="TeamOutputSummaryMp">
+        SELECT
+        t.this_process,
+        t.teams_groups_name,
+        t.workProcessName,
+
+        -- 鏁伴噺姹囨��
+        SUM(t.completed_quantity) AS completed_quantity,
+
+        -- 闈㈢Н姹囨��
+        ROUND(SUM(t.area), 2) AS area
+        FROM
+        (
+        /* ================= 鍐呭眰瀛愭煡璇紙淇濇寔涓嶅彉锛� ================= */
+        SELECT
+        rw.reporting_work_time,
+        rw.this_process,
+        rw.teams_groups_name,
+        o.project,
+        o.order_id,
+        rw.process_id,
+        fc.order_number,
+        MAX(ogd.child_width)  AS width,
+        MAX(ogd.child_height) AS height,
+        od.edging_type,
+        rwd.completed_quantity AS completed_quantity,
+        ROUND(
+        MAX(ogd.child_width) * MAX(ogd.child_height)
+        * rwd.completed_quantity / 1000000,
+        2
+        ) AS area,
+        od.product_name,
+        JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S01')) AS code,
+        rw.reviewed,
+        rw.examine_time,
+        rw.device_name,
+        o.order_type,
+        CASE
+        WHEN LOCATE('step', #{laminating}) > 0
+        THEN GROUP_CONCAT(ogd.glass_child SEPARATOR '+')
+        ELSE MAX(ogd.glass_child)
+        END AS workProcessName,
+        o.batch
+        FROM
+        pp.reporting_work AS rw
+        LEFT JOIN pp.reporting_work_detail AS rwd
+        ON rwd.reporting_work_id = rw.reporting_work_id
+        LEFT JOIN pp.flow_card AS fc
+        ON fc.order_id = rw.order_id
+        AND fc.process_id = rw.process_id
+        AND fc.order_number = rwd.order_number
+        AND fc.technology_number = rwd.technology_number
+        LEFT JOIN sd.order_glass_detail AS ogd
+        ON ogd.order_id = fc.order_id
+        AND ogd.order_number = fc.order_number
+        AND ogd.technology_number = fc.technology_number
+        LEFT JOIN sd.order_detail AS od
+        ON od.order_id = ogd.order_id
+        AND od.order_number = ogd.order_number
+        LEFT JOIN sd.`order` AS o
+        ON o.order_id = od.order_id
+        WHERE
+        o.create_order > 0
+        AND rw.reviewed_state >= 0
+        AND rwd.completed_quantity > 0
+        AND rw.reporting_work_time >= #{selectTime1}
+        AND rw.reporting_work_time &lt;= #{selectTime2}
+
+        <choose>
+            <!-- 鏈変紶宸ュ簭锛氱簿纭尮閰� -->
+            <when test="selectProcesses != null and selectProcesses != ''">
+                AND rw.this_process = #{selectProcesses}
+            </when>
+            <!-- 鏈紶宸ュ簭锛氫笉鍔犻檺鍒讹紝鏌ユ墍鏈夛級 -->
+            <otherwise></otherwise>
+        </choose>
+
+        <if test="teamOutputDTO.thisProcess != null and teamOutputDTO.thisProcess != ''">
+            AND rw.this_process REGEXP #{teamOutputDTO.thisProcess}
+        </if>
+        <if test="teamOutputDTO.teamsGroupsName != null and teamOutputDTO.teamsGroupsName != ''">
+            AND rw.teams_groups_name LIKE CONCAT('%', #{teamOutputDTO.teamsGroupsName}, '%')
+        </if>
+        <if test="teamOutputDTO.project != null and teamOutputDTO.project != ''">
+            AND o.project REGEXP #{teamOutputDTO.project}
+        </if>
+        <if test="teamOutputDTO.processId != null and teamOutputDTO.processId != ''">
+            AND rw.process_id REGEXP #{teamOutputDTO.processId}
+        </if>
+        <if test="teamOutputDTO.edgingType != null and teamOutputDTO.edgingType != ''">
+            AND od.edging_type REGEXP #{teamOutputDTO.edgingType}
+        </if>
+        <if test="teamOutputDTO.deviceName != null and teamOutputDTO.deviceName != ''">
+            AND rw.device_name REGEXP #{teamOutputDTO.deviceName}
+        </if>
+        <if test="teamOutputDTO.batch != null and teamOutputDTO.batch != ''">
+            AND o.batch REGEXP #{teamOutputDTO.batch}
+        </if>
+
+        <choose>
+            <when test="laminating == ''">
+                GROUP BY
+                rw.reporting_work_id,
+                rw.process_id,
+                rw.this_process,
+                rw.teams_groups_name,
+                rwd.order_number,
+                rwd.technology_number
+            </when>
+            <otherwise>
+                GROUP BY
+                <if test="laminating == 'stepA' || laminating == 'stepC'">
+                    ogd.`group`,
+                </if>
+                rw.reporting_work_id,
+                rw.process_id,
+                rw.this_process,
+                rw.teams_groups_name,
+                rwd.order_number
+            </otherwise>
+        </choose>
+        ) t
+        WHERE 1 = 1
+        <if test="teamOutputDTO.workProcessName != null and teamOutputDTO.workProcessName != ''">
+            and t.workProcessName like concat('%', #{teamOutputDTO.workProcessName}, '%')
+        </if>
+        GROUP BY
+        t.this_process,
+        t.teams_groups_name,
+        t.workProcessName
+
+        ORDER BY
+        t.this_process,
+        t.teams_groups_name,
+        t.workProcessName
+        LIMIT #{offset}, #{pageSize};
+    </select>
+
+    <select id="teamOutputSummaryPageTotal">
+
+        select CEILING(COUNT(*) / #{pageSize}) AS pageTotal,
+        COUNT(*) AS total FROM(
+        SELECT
+        t.this_process,
+        t.teams_groups_name,
+        t.workProcessName,
+
+        -- 鏁伴噺姹囨��
+        SUM(t.completed_quantity) AS completed_quantity,
+
+        -- 闈㈢Н姹囨��
+        ROUND(SUM(t.area), 2) AS area
+        FROM
+        (
+        /* ================= 鍐呭眰瀛愭煡璇紙淇濇寔涓嶅彉锛� ================= */
+        SELECT
+        rw.reporting_work_time,
+        rw.this_process,
+        rw.teams_groups_name,
+        o.project,
+        o.order_id,
+        rw.process_id,
+        fc.order_number,
+        MAX(ogd.child_width)  AS width,
+        MAX(ogd.child_height) AS height,
+        od.edging_type,
+        rwd.completed_quantity AS completed_quantity,
+        ROUND(
+        MAX(ogd.child_width) * MAX(ogd.child_height)
+        * rwd.completed_quantity / 1000000,
+        2
+        ) AS area,
+        od.product_name,
+        JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S01')) AS code,
+        rw.reviewed,
+        rw.examine_time,
+        rw.device_name,
+        o.order_type,
+        CASE
+        WHEN LOCATE('step', #{laminating}) > 0
+        THEN GROUP_CONCAT(ogd.glass_child SEPARATOR '+')
+        ELSE MAX(ogd.glass_child)
+        END AS workProcessName,
+        o.batch
+        FROM
+        pp.reporting_work AS rw
+        LEFT JOIN pp.reporting_work_detail AS rwd
+        ON rwd.reporting_work_id = rw.reporting_work_id
+        LEFT JOIN pp.flow_card AS fc
+        ON fc.order_id = rw.order_id
+        AND fc.process_id = rw.process_id
+        AND fc.order_number = rwd.order_number
+        AND fc.technology_number = rwd.technology_number
+        LEFT JOIN sd.order_glass_detail AS ogd
+        ON ogd.order_id = fc.order_id
+        AND ogd.order_number = fc.order_number
+        AND ogd.technology_number = fc.technology_number
+        LEFT JOIN sd.order_detail AS od
+        ON od.order_id = ogd.order_id
+        AND od.order_number = ogd.order_number
+        LEFT JOIN sd.`order` AS o
+        ON o.order_id = od.order_id
+        WHERE
+        o.create_order > 0
+        AND rw.reviewed_state >= 0
+        AND rwd.completed_quantity > 0
+        AND rw.reporting_work_time >= #{selectTime1}
+        AND rw.reporting_work_time &lt;= #{selectTime2}
+
+        <choose>
+            <!-- 鏈変紶宸ュ簭锛氱簿纭尮閰� -->
+            <when test="selectProcesses != null and selectProcesses != ''">
+                AND rw.this_process = #{selectProcesses}
+            </when>
+            <!-- 鏈紶宸ュ簭锛氫笉鍔犻檺鍒讹紝鏌ユ墍鏈夛級 -->
+            <otherwise></otherwise>
+        </choose>
+
+        <if test="teamOutputDTO.thisProcess != null and teamOutputDTO.thisProcess != ''">
+            AND rw.this_process REGEXP #{teamOutputDTO.thisProcess}
+        </if>
+        <if test="teamOutputDTO.teamsGroupsName != null and teamOutputDTO.teamsGroupsName != ''">
+            AND rw.teams_groups_name LIKE CONCAT('%', #{teamOutputDTO.teamsGroupsName}, '%')
+        </if>
+        <if test="teamOutputDTO.project != null and teamOutputDTO.project != ''">
+            AND o.project REGEXP #{teamOutputDTO.project}
+        </if>
+        <if test="teamOutputDTO.processId != null and teamOutputDTO.processId != ''">
+            AND rw.process_id REGEXP #{teamOutputDTO.processId}
+        </if>
+        <if test="teamOutputDTO.edgingType != null and teamOutputDTO.edgingType != ''">
+            AND od.edging_type REGEXP #{teamOutputDTO.edgingType}
+        </if>
+        <if test="teamOutputDTO.deviceName != null and teamOutputDTO.deviceName != ''">
+            AND rw.device_name REGEXP #{teamOutputDTO.deviceName}
+        </if>
+        <if test="teamOutputDTO.batch != null and teamOutputDTO.batch != ''">
+            AND o.batch REGEXP #{teamOutputDTO.batch}
+        </if>
+
+        <choose>
+            <when test="laminating == ''">
+                GROUP BY
+                rw.reporting_work_id,
+                rw.process_id,
+                rw.this_process,
+                rw.teams_groups_name,
+                rwd.order_number,
+                rwd.technology_number
+            </when>
+            <otherwise>
+                GROUP BY
+                <if test="laminating == 'stepA' || laminating == 'stepC'">
+                    ogd.`group`,
+                </if>
+                rw.reporting_work_id,
+                rw.process_id,
+                rw.this_process,
+                rw.teams_groups_name,
+                rwd.order_number
+            </otherwise>
+        </choose>
+        ) t
+        WHERE 1 = 1
+        <if test="teamOutputDTO.workProcessName != null and teamOutputDTO.workProcessName != ''">
+            and t.workProcessName like concat('%', #{teamOutputDTO.workProcessName}, '%')
+        </if>
+        GROUP BY
+        t.this_process,
+        t.teams_groups_name,
+        t.workProcessName
+
+        ORDER BY
+        t.this_process,
+        t.teams_groups_name,
+        t.workProcessName
+
+        ) as b
+        LIMIT #{offset}, #{pageSize};
+    </select>
+
+    <select id="exportTeamOutputSummaryMp">
+        SELECT
+        t.this_process,
+        t.teams_groups_name,
+        t.workProcessName,
+        -- 鏁伴噺姹囨��
+        SUM(t.completed_quantity) AS completed_quantity,
+
+        -- 闈㈢Н姹囨��
+        ROUND(SUM(t.area), 2) AS area
+        FROM
+        (
+        SELECT
+        rw.reporting_work_time,
+        rw.this_process,
+        rw.teams_groups_name,
+        o.project,
+        o.order_id,
+        rw.process_id,
+        fc.order_number,
+        MAX(ogd.child_width)  AS width,
+        MAX(ogd.child_height) AS height,
+        od.edging_type,
+        rwd.completed_quantity AS completed_quantity,
+        ROUND(
+        MAX(ogd.child_width) * MAX(ogd.child_height)
+        * rwd.completed_quantity / 1000000,
+        2
+        ) AS area,
+        od.product_name,
+        JSON_UNQUOTE(JSON_EXTRACT(od.other_columns, '$.S01')) AS code,
+        rw.reviewed,
+        rw.examine_time,
+        rw.device_name,
+        o.order_type,
+        CASE
+        WHEN LOCATE('step', #{laminating}) > 0
+        THEN GROUP_CONCAT(ogd.glass_child SEPARATOR '+')
+        ELSE MAX(ogd.glass_child)
+        END AS workProcessName,
+        o.batch
+        FROM
+        pp.reporting_work AS rw
+        LEFT JOIN pp.reporting_work_detail AS rwd
+        ON rwd.reporting_work_id = rw.reporting_work_id
+        LEFT JOIN pp.flow_card AS fc
+        ON fc.order_id = rw.order_id
+        AND fc.process_id = rw.process_id
+        AND fc.order_number = rwd.order_number
+        AND fc.technology_number = rwd.technology_number
+        LEFT JOIN sd.order_glass_detail AS ogd
+        ON ogd.order_id = fc.order_id
+        AND ogd.order_number = fc.order_number
+        AND ogd.technology_number = fc.technology_number
+        LEFT JOIN sd.order_detail AS od
+        ON od.order_id = ogd.order_id
+        AND od.order_number = ogd.order_number
+        LEFT JOIN sd.`order` AS o
+        ON o.order_id = od.order_id
+        WHERE
+        o.create_order > 0
+        AND rw.reviewed_state >= 0
+        AND rwd.completed_quantity > 0
+        AND rw.reporting_work_time &gt;= #{date[0]}
+        AND rw.reporting_work_time &lt;=  #{date[1]}
+
+        <choose>
+            <!-- 鏈変紶宸ュ簭锛氱簿纭尮閰� -->
+            <when test="selectProcesses != null and selectProcesses != ''">
+                AND rw.this_process = #{selectProcesses}
+            </when>
+            <!-- 鏈紶宸ュ簭锛氫笉鍔犻檺鍒讹紝鏌ユ墍鏈夛級 -->
+            <otherwise></otherwise>
+        </choose>
+
+        <choose>
+            <when test="laminating == ''">
+                GROUP BY
+                rw.reporting_work_id,
+                rw.process_id,
+                rw.this_process,
+                rw.teams_groups_name,
+                rwd.order_number,
+                rwd.technology_number
+            </when>
+            <otherwise>
+                GROUP BY
+                <if test="laminating == 'stepA' || laminating == 'stepC'">
+                    ogd.`group`,
+                </if>
+                rw.reporting_work_id,
+                rw.process_id,
+                rw.this_process,
+                rw.teams_groups_name,
+                rwd.order_number
+            </otherwise>
+        </choose>
+        ) t
+
+        GROUP BY
+        t.this_process,
+        t.teams_groups_name,
+        t.workProcessName
+
+        ORDER BY
+        t.this_process,
+        t.teams_groups_name,
+        t.workProcessName
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0