From 346d463346701e8714b3a3a3ebb21e21960b5484 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 20 三月 2026 15:06:47 +0800
Subject: [PATCH] feat: 查看生产订单对应的生产计划来源

---
 src/main/resources/mapper/production/ProductOrderMapper.xml |  154 ++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 103 insertions(+), 51 deletions(-)

diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 5f526ea..ed6c187 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -5,67 +5,77 @@
 
     <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductOrder">
         <id property="id" column="id"/>
-        <result property="productModelId" column="product_model_id"/>
         <result property="tenantId" column="tenant_id"/>
-        <result property="salesLedgerId" column="sales_ledger_id"/>
         <result property="routeId" column="route_id"/>
         <result property="npsNo" column="nps_no"/>
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
+        <result property="planCompleteTime" column="plan_complete_time"/>
+        <result property="status" column="status"/>
     </resultMap>
+
+    <resultMap id="ProductOrderSourceMap" type="com.ruoyi.production.dto.ProductOrderSourceDto">
+        <id property="applyNo" column="apply_no"/>
+        <result property="applyNo" column="apply_no"/>
+        <collection property="productPlans" ofType="com.ruoyi.productionPlan.dto.ProductionPlanDto" autoMapping="true">
+            <id property="id" column="plan_id"/>
+            <result property="materialCode" column="material_code"/>
+            <result property="productName" column="product_name"/>
+            <result property="model" column="model"/>
+            <result property="unit" column="unit"/>
+            <result property="totalAssignedQuantity" column="total_assigned_quantity"/>
+        </collection>
+    </resultMap>
+
     <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">
-        select po.*,
-        sl.sales_contract_no,
-        sl.customer_name,
-        slp.product_category,
-        slp.specification_model,
-        ppr.process_route_code,
-        pb.bom_no,
+        SELECT
+        po.id,
+        po.nps_no,
+        po.tenant_id,
+        po.create_time,
+        po.update_time,
+        po.route_id,
+        po.quantity,
+        po.complete_quantity,
+        po.start_time,
+        po.end_time,
+        po.plan_complete_time,
+        po.status,
+        pm.product_name,
+        po.strength AS strength,
+        pr.process_route_code AS processRouteCode,
+        pr.description,
+        pb.id AS bomId,
+        pb.bom_no AS bomNo,
         ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
-        DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff
-        from product_order po
-        left join sales_ledger sl on po.sales_ledger_id = sl.id
-        left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id
-        left join product_process_route ppr on po.id = ppr.product_order_id
-        left join product_bom pb on pb.id = ppr.bom_id
+        pms.model,
+        pms.material_code AS materialCode
+        FROM product_order po
+        LEFT JOIN process_route pr ON po.route_id = pr.id
+        LEFT JOIN product_bom pb ON pr.bom_id = pb.id
+        LEFT JOIN (
+        SELECT product_order_id, MIN(production_plan_id) AS production_plan_id
+        FROM product_order_plan
+        GROUP BY product_order_id
+        ) pop ON po.id = pop.product_order_id
+        LEFT JOIN production_plan pp ON pop.production_plan_id = pp.id
+        LEFT JOIN product_material_sku pms ON pms.id = pp.product_material_sku_id
+        LEFT JOIN product_material pm ON pm.id = pms.product_id
         <where>
             <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 sl.sales_contract_no like concat('%',#{c.salesContractNo},'%')
-            </if>
-            <if test="c.customerName != null and c.customerName != ''">
-                and sl.customer_name like concat('%',#{c.customerName},'%')
-            </if>
-            <if test="c.productCategory != null and c.productCategory != ''">
-                and slp.product_category like concat('%',#{c.productCategory},'%')
-            </if>
-            <if test="c.specificationModel != null and c.specificationModel != ''">
-                and slp.specification_model like concat('%',#{c.specificationModel},'%')
+                AND po.nps_no LIKE CONCAT('%', #{c.npsNo}, '%')
             </if>
             <if test="c.startTime != null and c.endTime != null">
-                and po.create_time between #{c.startTime} and #{c.endTime}
+                AND po.create_time BETWEEN #{c.startTime} AND #{c.endTime}
             </if>
         </where>
     </select>
-    <select id="productMainByOrderId" resultType="com.ruoyi.production.dto.ProductOrderDto">
-        select po.*,
-               pwo.work_order_no,
-               pwo.report_work,
-               pwo.status,
-               pwo.quantity,
-               pwo.plan_quantity
-        from product_order po
-                 left join product_work_order pwo on po.id = pwo.product_order_id
-        where po.id = #{c.id}
-    </select>
+
     <select id="listProcessRoute" resultType="com.ruoyi.production.pojo.ProcessRoute">
         select pr.*
         from process_route pr
-                 left join product_model pm on pr.product_model_id = pm.id
-                 left join sales_ledger_product slp on pm.id = slp.product_model_id
-        where slp.id = #{productModelId}
+                 left join product_material_sku pms on pms.id = pr.product_model_id
+        where pms.id = #{productModelId}
     </select>
     <select id="listProcessBom" resultType="com.ruoyi.production.dto.ProductStructureDto">
         select ps.id,
@@ -75,19 +85,61 @@
                ps.unit_quantity * po.quantity as demandedQuantity,
                ps.unit,
                p.product_name,
-               pp.name as  process_name,
+               pp.name                        as process_name,
                pm.product_id,
                pm.model
-        from
-            product_structure ps
-                left join product_model pm on ps.product_model_id = pm.id
-                left join product p on pm.product_id = p.id
-                left join product_process pp on ps.process_id = pp.id
-                left join product_process_route ppr on ps.bom_id = ppr.bom_id
-                left join product_order po on po.id = ppr.product_order_id
+        from product_structure ps
+                 left join product_model pm on ps.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+                 left join product_process pp on ps.process_id = pp.id
+                 left join product_process_route ppr on ps.bom_id = ppr.bom_id
+                 left join product_order po on po.id = ppr.product_order_id
         where ppr.product_order_id = #{orderId}
         order by ps.id
     </select>
 
 
+    <select id="countCreated" resultType="java.lang.Integer">
+        SELECT count(1)
+        FROM product_order
+        WHERE create_time &gt;= #{startDate}
+          AND create_time &lt;= #{endDate}
+    </select>
+
+    <select id="countCompleted" resultType="java.lang.Integer">
+        SELECT count(1)
+        FROM product_order
+        WHERE end_time &gt;= #{startDate}
+          AND end_time &lt;= #{endDate}
+          AND complete_quantity &gt;= quantity
+    </select>
+
+    <select id="countPending" resultType="java.lang.Integer">
+        SELECT count(1)
+        FROM product_order
+        WHERE create_time &gt;= #{startDate}
+          AND create_time &lt;= #{endDate}
+          AND complete_quantity &lt; quantity
+    </select>
+
+    <select id="productOrderSource" resultMap="ProductOrderSourceMap"
+            parameterType="java.lang.Long">
+        SELECT pp.id                 AS plan_id,
+               pp.apply_no,
+               pp.*,
+               pop.assigned_quantity AS total_assigned_quantity,
+               sku.material_code,
+               sku.model,
+               pm.product_name,
+               pm.unit
+
+        FROM product_order_plan pop
+                 LEFT JOIN production_plan pp ON pop.production_plan_id = pp.id
+                 LEFT JOIN product_material_sku sku ON pp.product_material_sku_id = sku.id
+                 LEFT JOIN product_material pm ON sku.product_id = pm.id
+
+        WHERE pop.product_order_id = #{orderId}
+        ORDER BY pp.apply_no
+
+    </select>
 </mapper>

--
Gitblit v1.9.3