6 小时以前 7bf754a7835d06f26240c4ca15bc5f83650de377
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -63,24 +63,22 @@
            IFNULL(SUM(so.total_sale_out_num), 0) AS shipped_quantity
        FROM sales_ledger_product slp
        LEFT JOIN (
            -- 采购台账的「已销售数量」:油品出库不再产 shipping_product_detail,
            -- 改由绑定行的分摊数量反推 —— 出库单的 规格+批次 对上采购入库批次,即为该采购台账卖掉的量
            SELECT
                pl.id AS purchase_ledger_id,
                sir.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
                SUM(b.quantity) AS total_sale_out_num
            FROM stock_out_record_sales_ledger b
            INNER JOIN stock_out_record sor
                ON sor.record_id = si.id
               AND TRIM(sor.record_type) = '13'
               AND sor.approval_status IN (0, 1, 3)
            INNER JOIN stock_inventory inv
                ON inv.id = spd.stock_inventory_id
                ON sor.id = b.stock_out_record_id
               AND sor.approval_status = 1
               AND (sor.type IS NULL OR sor.type = '')
            INNER JOIN stock_in_record sir
                ON sir.product_model_id = inv.product_model_id
                ON sir.product_model_id = sor.product_model_id
               AND (
                    (sir.batch_no IS NOT NULL AND sir.batch_no = inv.batch_no)
                    OR (sir.batch_no IS NULL AND inv.batch_no IS NULL)
                    (sir.batch_no IS NOT NULL AND sir.batch_no = sor.batch_no)
                    OR (sir.batch_no IS NULL AND sor.batch_no IS NULL)
               )
               AND sir.approval_status = 1
               AND sir.record_type IN ('7', '10')
@@ -89,8 +87,7 @@
               AND sir.record_id = qi.id
            LEFT JOIN purchase_ledger pl
                ON pl.id = IF(sir.record_type = '7', sir.record_id, qi.purchase_ledger_id)
            WHERE si.status IN ('审核通过', '已发货')
              AND pl.id IS NOT NULL
            WHERE pl.id IS NOT NULL
            GROUP BY pl.id, sir.product_model_id
        ) so ON so.purchase_ledger_id = slp.sales_ledger_id
            AND so.product_model_id = slp.product_model_id
@@ -99,19 +96,14 @@
        UNION ALL
        -- 销售台账(type=1): shipping_info 直接挂 sales_ledger_product_id,只统计出库审核通过(approval_status=1)的发货量,与 t5 的 pending 逻辑互补
        -- 销售台账(type=1): 已发货量直接按到货记录汇总。到货记录本身就是「实际到了多少」的事实,
        -- 不再绕 shipping_info + shipping_product_detail
        SELECT
            si.sales_ledger_product_id AS sales_ledger_product_id,
            IFNULL(SUM(spd.quantity), 0) AS shipped_quantity
        FROM shipping_info si
        INNER JOIN shipping_product_detail spd ON si.id = spd.shipping_info_id
        INNER JOIN stock_out_record sor
            ON sor.record_id = si.id
           AND TRIM(sor.record_type) = '13'
           AND sor.approval_status = 1
        WHERE si.status IN ('审核通过', '已发货')
          AND si.sales_ledger_product_id IS NOT NULL
        GROUP BY si.sales_ledger_product_id
            sla.sales_ledger_product_id AS sales_ledger_product_id,
            IFNULL(SUM(sla.arrival_quantity), 0) AS shipped_quantity
        FROM sales_ledger_arrival sla
        WHERE sla.sales_ledger_product_id IS NOT NULL
        GROUP BY sla.sales_ledger_product_id
        ) t3 ON t3.sales_ledger_product_id = T1.id
        LEFT JOIN (
        SELECT rel.sales_ledger_product_id,
@@ -158,6 +150,20 @@
                  AND sor.approval_status = 1
           ))
        GROUP BY si.sales_ledger_product_id
        UNION ALL
        -- 油品出库待审批 / 待确认:还没到货,算「审批中」,与 t3 的到货量互补。
        -- 只有绑定了卖油台账的出库才占这条分支(代储、客存不产绑定行)
        SELECT b.sales_ledger_product_id AS sales_ledger_product_id,
               IFNULL(SUM(b.quantity), 0) AS pending_approval_quantity
        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, 3)
           AND (sor.type IS NULL OR sor.type = '')
        WHERE b.sales_ledger_product_id IS NOT NULL
        GROUP BY b.sales_ledger_product_id
        ) t5 ON t5.sales_ledger_product_id = T1.id
        LEFT JOIN (
            SELECT