From bd63dcea170b3ceb86851f56a7a53b85b77027c2 Mon Sep 17 00:00:00 2001
From: yinrw <2030349650@qq.com>
Date: 星期四, 23 七月 2026 15:03:25 +0800
Subject: [PATCH] 修改销售台账和生产订单绑定逻辑,修复销售台账和生产订单页面展示数据bug

---
 src/main/resources/mapper/production/ProductOrderMapper.xml |  210 ++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 179 insertions(+), 31 deletions(-)

diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index eb8831f..cc6c3df 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -13,40 +13,96 @@
         <result property="createTime" column="create_time"/>
         <result property="updateTime" column="update_time"/>
     </resultMap>
+
+<!--    鏃ql-->
+    <!--    <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">-->
+    <!--        select po.*,-->
+    <!--        sl.sales_contract_no,-->
+    <!--        sl.customer_name,-->
+    <!--        p.product_name as product_category,-->
+    <!--        pm.model as specification_model,-->
+    <!--        pm.unit,-->
+    <!--        ppr.process_route_code,-->
+    <!--        pb.bom_no,-->
+    <!--        ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,-->
+    <!--        DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,-->
+    <!--        sl.delivery_date,-->
+    <!--        CASE-->
+    <!--        WHEN shipping_status_counts.total_count = 0 THEN false-->
+    <!--        WHEN shipping_status_counts.unshipped_count = 0 THEN true-->
+    <!--        ELSE false-->
+    <!--        END AS is_fh-->
+    <!--        from product_order po-->
+    <!--        left join sales_ledger sl on po.sales_ledger_id = sl.id-->
+    <!--        LEFT JOIN (-->
+    <!--        SELECT sales_ledger_id,-->
+    <!--        COUNT(*) as total_count,-->
+    <!--        SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count-->
+    <!--        FROM shipping_info-->
+    <!--        GROUP BY sales_ledger_id-->
+    <!--        ) shipping_status_counts ON sl.id = shipping_status_counts.sales_ledger_id-->
+    <!--            left join product_model pm on po.product_model_id = pm.id-->
+    <!--            left join product p on pm.product_id = p.id-->
+    <!--        left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id and slp.type = 1-->
+    <!--        left join (-->
+    <!--        select max(id) as id, product_order_id-->
+    <!--        from product_process_route-->
+    <!--        group by product_order_id-->
+    <!--        ) ppr_latest on po.id = ppr_latest.product_order_id-->
+    <!--        left join product_process_route ppr on ppr.id = ppr_latest.id-->
+    <!--        left join product_bom pb on pb.id = ppr.bom_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},'%')-->
+    <!--            </if>-->
+    <!--            <if test="c.startTime != null and c.endTime != null">-->
+    <!--                and po.create_time between #{c.startTime} and #{c.endTime}-->
+    <!--            </if>-->
+    <!--        </where>-->
+    <!--    </select>-->
+
+<!--    鏂皊ql 鐢ㄤ腑闂磋〃sales_ledger_production_ref杩涜鍏宠仈sales_ledger鍜宲roduct_order锛屾煡璇㈠嚭鎵�鏈夊叧鑱旂殑sales_ledger_no鍜宑ustomer_name銆備氦鏈燂紝浜ゆ湡鍋忓樊锛屾槸鍚﹀彂璐х敱浜庝竴涓敓浜ц鍗曞搴斿涓攢鍞鍗曪紝瀵艰嚧鏃犳硶姝e父鏄剧ず锛屾殏鏃剁渷鐣�-->
     <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">
         select po.*,
-        sl.sales_contract_no,
-        sl.customer_name,
+        GROUP_CONCAT(DISTINCT sl.sales_contract_no SEPARATOR ',') AS sales_contract_no,
+        GROUP_CONCAT(DISTINCT sl.customer_name SEPARATOR ',') AS customer_name,
         p.product_name as product_category,
         pm.model as specification_model,
         pm.unit,
         ppr.process_route_code,
         pb.bom_no,
-        ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
-        DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
-        sl.delivery_date,
-        CASE
-        WHEN shipping_status_counts.total_count = 0 THEN false
-        WHEN shipping_status_counts.unshipped_count = 0 THEN true
-        ELSE false
-        END AS is_fh
+        ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus
+
+
         from product_order po
-        left join sales_ledger sl on po.sales_ledger_id = sl.id
+        left join sales_ledger_production_ref ref on po.id = ref.product_order_id
+        left join sales_ledger sl on ref.sales_ledger_id = sl.id
         LEFT JOIN (
         SELECT sales_ledger_id,
         COUNT(*) as total_count,
         SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count
         FROM shipping_info
-        GROUP BY sales_ledger_id
-        ) shipping_status_counts ON sl.id = shipping_status_counts.sales_ledger_id
-            left join product_model pm on po.product_model_id = pm.id
-            left join product p on pm.product_id = p.id
+        GROUP BY sales_ledger_id) shipping_status_counts
+        ON sl.id = shipping_status_counts.sales_ledger_id
+        left join product_model pm on po.product_model_id = pm.id
+        left join product p on pm.product_id = p.id
         left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id and slp.type = 1
         left join (
         select max(id) as id, product_order_id
         from product_process_route
-        group by product_order_id
-        ) ppr_latest on po.id = ppr_latest.product_order_id
+        group by product_order_id) ppr_latest on po.id = ppr_latest.product_order_id
         left join product_process_route ppr on ppr.id = ppr_latest.id
         left join product_bom pb on pb.id = ppr.bom_id
         <where>
@@ -69,7 +125,10 @@
                 and po.create_time between #{c.startTime} and #{c.endTime}
             </if>
         </where>
+        GROUP BY po.id
     </select>
+
+
     <select id="listProcessRoute" resultType="com.ruoyi.production.pojo.ProcessRoute">
         select pr.*
         from process_route pr
@@ -84,35 +143,124 @@
                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 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}
+        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}
+        SELECT count(1)
+        FROM product_order
+        WHERE create_time &gt;= #{startDate}
+          AND create_time &lt;= #{endDate}
           AND complete_quantity &lt; quantity
     </select>
+    <select id="listByProductModelId" resultType="com.ruoyi.production.dto.ProductOrderDto">
+        select po.*,
+        sl.sales_contract_no,
+        sl.customer_name,
+        p.product_name as product_category,
+        pm.model as specification_model,
+        pm.unit,
+        ppr.process_route_code,
+        pb.bom_no,
+        ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
+        DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
+        sl.delivery_date,
+        CASE
+        WHEN shipping_status_counts.total_count = 0 THEN false
+        WHEN shipping_status_counts.unshipped_count = 0 THEN true
+        ELSE false
+        END AS is_fh
+        from product_order po
+        left join sales_ledger sl on po.sales_ledger_id = sl.id
+        LEFT JOIN (SELECT sales_ledger_id,
+        COUNT(*) as total_count,
+        SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count
+        FROM shipping_info
+        GROUP BY sales_ledger_id) shipping_status_counts
+        ON sl.id = shipping_status_counts.sales_ledger_id
+        left join product_model pm on po.product_model_id = pm.id
+        left join product p on pm.product_id = p.id
+        left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id and slp.type = 1
+        left join (select max(id) as id, product_order_id
+        from product_process_route
+        group by product_order_id) ppr_latest on po.id = ppr_latest.product_order_id
+        left join product_process_route ppr on ppr.id = ppr_latest.id
+        left join product_bom pb on pb.id = ppr.bom_id
+        <where>
+            <if test="productModelIds != null and productModelIds.size() > 0">
+                po.product_model_id IN
+                <foreach collection="productModelIds" open="(" separator="," close=")" item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
+    <select id="listByProductOrderId" resultType="com.ruoyi.production.dto.ProductOrderDto">
+        select po.*,
+        sl.sales_contract_no,
+        sl.customer_name,
+        p.product_name as product_category,
+        pm.model as specification_model,
+        pm.unit,
+        ppr.process_route_code,
+        pb.bom_no,
+        ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus,
+        DATEDIFF(sl.delivery_date, CURDATE()) AS delivery_days_diff,
+        sl.delivery_date,
+        CASE
+        WHEN shipping_status_counts.total_count = 0 THEN false
+        WHEN shipping_status_counts.unshipped_count = 0 THEN true
+        ELSE false
+        END AS is_fh
+        from product_order po
+        left join sales_ledger sl on po.sales_ledger_id = sl.id
+        LEFT JOIN (SELECT sales_ledger_id,
+        COUNT(*) as total_count,
+        SUM(CASE WHEN status != '宸插彂璐�' THEN 1 ELSE 0 END) as unshipped_count
+        FROM shipping_info
+        GROUP BY sales_ledger_id) shipping_status_counts
+        ON sl.id = shipping_status_counts.sales_ledger_id
+        left join product_model pm on po.product_model_id = pm.id
+        left join product p on pm.product_id = p.id
+        left join sales_ledger_product slp on po.sale_ledger_product_id = slp.id and slp.type = 1
+        left join (select max(id) as id, product_order_id
+        from product_process_route
+        group by product_order_id) ppr_latest on po.id = ppr_latest.product_order_id
+        left join product_process_route ppr on ppr.id = ppr_latest.id
+        left join product_bom pb on pb.id = ppr.bom_id
+        <where>
+            <if test="productOrderIds != null and productOrderIds.size() > 0">
+                po.id IN
+                <foreach collection="productOrderIds" open="(" separator="," close=")" item="item">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

--
Gitblit v1.9.3