src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
@@ -8,6 +8,10 @@
        <result column="no" property="no" />
        <result column="return_type" property="returnType" />
        <result column="supplier_id" property="supplierId" />
        <result column="shipping_type" property="shippingType" />
        <result column="truck_plate_no" property="truckPlateNo" />
        <result column="express_company" property="expressCompany" />
        <result column="express_no" property="expressNo" />
        <result column="project_id" property="projectId" />
        <result column="project_phase" property="projectPhase" />
        <result column="prepared_at" property="preparedAt" />
@@ -22,7 +26,18 @@
        SELECT
            pro.*,
            sm.supplier_name as supplier_name,
            pl.purchase_contract_number as purchase_contract_number
            pl.purchase_contract_number as purchase_contract_number,
            CASE
                WHEN EXISTS (
                    SELECT 1
                    FROM purchase_return_order_products prop
                    INNER JOIN stock_out_record sor ON sor.record_id = prop.id
                        AND sor.record_type = '9'
                        AND sor.approval_status = 1
                    WHERE prop.purchase_return_order_id = pro.id
                ) THEN 1
                ELSE 0
            END AS stock_out_approved
        FROM purchase_return_orders pro
                 LEFT JOIN supplier_manage sm ON pro.supplier_id = sm.id
                 LEFT JOIN purchase_ledger pl ON pl.id = pro.purchase_ledger_id
@@ -59,6 +74,10 @@
                pro.no returnNo,
                t.inboundBatches,
                sm.supplier_name,
                pro.shipping_type,
                pro.truck_plate_no,
                pro.express_company,
                pro.express_no,
                pro.prepared_at,
                pro.total_amount,
                CASE pro.return_type WHEN 0 THEN '退货退款' WHEN 1 THEN '拒收' END AS returnType,
@@ -126,20 +145,43 @@
                GROUP BY stock_in_record_id
            ) rs ON rs.stock_in_record_id = sir.id
            LEFT JOIN (
                <!-- 已销售数量:① 手工发货单出库仍走 shipping_product_detail;
                     ② 油品出库不再产 shipping_product_detail,改按「出库单的规格+批次」对上采购入库批次,
                     汇总绑定行的分摊数量(一个出库单绑多个台账时,绑定行数量之和=整单出库量) -->
                SELECT
                    inv.batch_no,
                    inv.product_model_id,
                    SUM(spd.quantity) AS total_sale_out_num
                FROM shipping_product_detail spd
                INNER JOIN shipping_info si
                    ON si.id = spd.shipping_info_id
                INNER JOIN stock_out_record sor
                    ON sor.record_id = si.id
                   AND sor.record_type = '13'
                   AND sor.approval_status IN (0, 1, 3)
                INNER JOIN stock_inventory inv
                    ON inv.id = spd.stock_inventory_id
                GROUP BY inv.batch_no, inv.product_model_id
                    x.batch_no,
                    x.product_model_id,
                    SUM(x.total_sale_out_num) AS total_sale_out_num
                FROM (
                    SELECT
                        inv.batch_no,
                        inv.product_model_id,
                        SUM(spd.quantity) AS total_sale_out_num
                    FROM shipping_product_detail spd
                    INNER JOIN shipping_info si
                        ON si.id = spd.shipping_info_id
                    INNER JOIN stock_out_record sor
                        ON sor.record_id = si.id
                       AND sor.record_type = '13'
                       AND sor.approval_status IN (0, 1, 3)
                    INNER JOIN stock_inventory inv
                        ON inv.id = spd.stock_inventory_id
                    GROUP BY inv.batch_no, inv.product_model_id
                    UNION ALL
                    SELECT
                        sor.batch_no,
                        sor.product_model_id,
                        SUM(b.quantity) AS total_sale_out_num
                    FROM stock_out_record_sales_ledger b
                    INNER JOIN stock_out_record sor
                        ON sor.id = b.stock_out_record_id
                       AND sor.approval_status IN (0, 1, 3)
                       AND (sor.type IS NULL OR sor.type = '')
                    GROUP BY sor.batch_no, sor.product_model_id
                ) x
                GROUP BY x.batch_no, x.product_model_id
            ) so ON so.product_model_id = sir.product_model_id
               AND (so.batch_no = sir.batch_no OR (so.batch_no IS NULL AND sir.batch_no IS NULL))
        WHERE sir.approval_status = 1
@@ -163,7 +205,7 @@
           prop.purchase_return_order_id,
           GREATEST(
               sir.stock_in_num
               - COALESCE(rs1.total_return_num1, 0)
               - COALESCE(rs.total_return_num, 0)
               - COALESCE(so.total_sale_out_num, 0),
               0
           ) AS un_quantity,
@@ -176,13 +218,8 @@
    LEFT JOIN (SELECT stock_in_record_id,
                      SUM(return_quantity) AS total_return_num
               FROM purchase_return_order_products
               WHERE 1 = 1 and purchase_return_order_id = #{id}
               WHERE 1 = 1
               GROUP BY stock_in_record_id) rs ON rs.stock_in_record_id = sir.id
    LEFT JOIN (SELECT stock_in_record_id,
                      SUM(return_quantity) AS total_return_num1
               FROM purchase_return_order_products
               WHERE 1 = 1 and purchase_return_order_id = #{id}
               GROUP BY stock_in_record_id) rs1 ON rs1.stock_in_record_id = sir.id
    LEFT JOIN (
        SELECT
            inv.batch_no,