From 54b83f755d687fbc87bd9c93ac459feccc7e12d1 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 19 八月 2026 10:19:55 +0800
Subject: [PATCH] feat: 生产订单新增销售号查询

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

diff --git a/src/main/resources/mapper/production/ProductionOrderMapper.xml b/src/main/resources/mapper/production/ProductionOrderMapper.xml
index deb2960..0028120 100644
--- a/src/main/resources/mapper/production/ProductionOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductionOrderMapper.xml
@@ -27,6 +27,7 @@
         <result column="productName" property="productName" />
         <result column="model" property="model" />
         <result column="processRouteCode" property="processRouteCode" />
+        <result column="returned" property="returned" />
     </resultMap>
 
     <sql id="ProductionOrderVoColumns">
@@ -49,9 +50,11 @@
         po_sales.customerName,
         p.product_name as productName,
         pm.model as model,
+        po.is_end_order as endOrder,
         tr.process_route_code as processRouteCode,
         ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
-        tb.bom_no as bomNo
+        tb.bom_no as bomNo,
+        pop_return.returned as returned
     </sql>
 
     <sql id="ProductionOrderVoFrom">
@@ -72,6 +75,12 @@
                  left join product p on pm.product_id = p.id
                  left join technology_routing tr on po.technology_routing_id = tr.id
                  left join technology_bom tb on tb.id = tr.bom_id
+                 left join (
+            select production_order_id as productionOrderId,
+                   if(max(case when ifnull(is_returned, 0) = 1 then 1 else 0 end) = 1, true, false) as returned
+            from production_order_pick
+            group by production_order_id
+        ) pop_return on pop_return.productionOrderId = po.id
     </sql>
 
     <sql id="ProductionOrderWhere">
@@ -104,6 +113,9 @@
                 <if test="c.npsNo != null and c.npsNo != ''">
                     and po.nps_no like concat('%', #{c.npsNo}, '%')
                 </if>
+                <if test="c.salesContractNo != null and c.salesContractNo != ''">
+                    and po_sales.salesContractNo like concat('%', #{c.salesContractNo}, '%')
+                </if>
                 <if test="c.productionPlanIds != null and c.productionPlanIds != ''">
                     and po.production_plan_ids like concat('%', #{c.productionPlanIds}, '%')
                 </if>
@@ -125,7 +137,7 @@
         <include refid="ProductionOrderVoColumns" />
         <include refid="ProductionOrderVoFrom" />
         <include refid="ProductionOrderWhere" />
-        order by po.id desc
+        order by po.nps_no desc
     </select>
 
     <select id="listProductionOrder" resultMap="ProductionOrderVoResultMap">
@@ -203,4 +215,85 @@
           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>
+            <if test="startTime != null and endTime != null">
+                and po.create_time &gt;= #{startTime}
+                and po.create_time &lt; #{endTime}
+            </if>
+        </where>
+        order by po.nps_no 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>
+            <if test="startTime != null and endTime != null">
+                and po.create_time &gt;= #{startTime}
+                and po.create_time &lt; #{endTime}
+            </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 (1, 2, 3, 4)
+        <if test="startTime != null and endTime != null">
+            and po.create_time &gt;= #{startTime}
+            and po.create_time &lt; #{endTime}
+        </if>
+        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)
+            <if test="planStart != null and planEnd != null">
+                and po.plan_complete_time &gt;= #{planStart}
+                and po.plan_complete_time &lt; #{planEnd}
+            </if>
+        </where>
+        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)
+            <if test="planStart != null and planEnd != null">
+                and po.plan_complete_time &gt;= #{planStart}
+                and po.plan_complete_time &lt; #{planEnd}
+            </if>
+        </where>
+    </select>
+
 </mapper>

--
Gitblit v1.9.3