From 864037580c3e4d9f8c756b66ef40464d23262e6c Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 20 五月 2026 17:53:42 +0800
Subject: [PATCH] feat(home): 添加生产看板功能并优化订单查询性能

---
 src/main/resources/mapper/production/ProductionOrderMapper.xml |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/src/main/resources/mapper/production/ProductionOrderMapper.xml b/src/main/resources/mapper/production/ProductionOrderMapper.xml
index 1a304ef..95679a7 100644
--- a/src/main/resources/mapper/production/ProductionOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductionOrderMapper.xml
@@ -212,4 +212,61 @@
           and ifnull(complete_quantity, 0) &lt; quantity
     </select>
 
+    <select id="selectHomeOrderProgressPage" resultType="java.util.Map">
+        select po.nps_no as orderNo,
+               p.product_name as productName,
+               ifnull(po.quantity, 0) as plannedQuantity,
+               ifnull(po.complete_quantity, 0) as completedQuantity,
+               round(ifnull(po.complete_quantity, 0) / nullif(po.quantity, 0) * 100, 2) as completionRate,
+               po.plan_complete_time as dueDate,
+               po.status as status
+        from production_order po
+                 left join product_model pm on po.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+        <where>
+            <if test="status != null">
+                and po.status = #{status}
+            </if>
+        </where>
+        order by po.id desc
+        limit #{offset}, #{size}
+    </select>
+
+    <select id="countHomeOrderProgress" resultType="java.lang.Long">
+        select count(1)
+        from production_order po
+        <where>
+            <if test="status != null">
+                and po.status = #{status}
+            </if>
+        </where>
+    </select>
+
+    <select id="countHomeOrderProgressByStatus" resultType="java.util.Map">
+        select po.status as status, count(1) as cnt
+        from production_order po
+        where po.status in (2, 3, 4)
+        group by po.status
+    </select>
+
+    <select id="selectHomeTodayProductionPlan" resultType="java.util.Map">
+        select po.nps_no as orderNo,
+               p.product_name as productName,
+               ifnull(po.quantity, 0) as plannedQuantity,
+               po.plan_complete_time as dueDate,
+               po.status as status
+        from production_order po
+                 left join product_model pm on po.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+        where po.status in (1, 2)
+        order by case when po.status = 2 then 0 else 1 end, po.id desc
+        limit #{size}
+    </select>
+
+    <select id="countHomeTodayProductionPlan" resultType="java.lang.Long">
+        select count(1)
+        from production_order po
+        where po.status in (1, 2)
+    </select>
+
 </mapper>

--
Gitblit v1.9.3