昨天 c89f7dcf9344a35efde2a00edb10491b401ba000
yudao-module-mes/src/main/resources/mapper/wm/batch/MesWmBatchMapper.xml
@@ -55,16 +55,50 @@
        WHERE rl.batch_code = #{batchCode} AND rl.deleted = 0
    </select>
    <!-- 批次销售去向:批次 → 销售出库行 → 销售出库单 → OQC -->
    <!--
        批次销售去向(种子流向):
        ① 行级匹配:批次 → 销售出库行 → 销售出库单 → OQC(行上直接记录批次的流程);
        ② 明细级匹配:批次 → 扫码出库明细 → 销售出库单 → OQC(种子袋码/托盘扫码出库时批次只写入明细表,按单据聚合数量)。
        同一出库行若已有明细级匹配则不再重复出行级记录;排除已取消(状态 5)单据。
    -->
    <select id="selectSalesTargetList" parameterType="String"
            resultType="cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchSalesTargetRespVO">
        SELECT s.code AS sales_code, s.sales_date, s.sales_order_code, s.client_id,
        SELECT s.code AS sales_code, s.sales_date, s.sales_order_code, s.client_id, s.client_name,
               oqc.code AS oqc_code, oqc.check_result AS check_result,
               sl.batch_code, sl.item_id, sl.quantity, sl.quality_status
        FROM mes_wm_product_sales_line sl
        JOIN mes_wm_product_sales s ON s.id = sl.sales_id AND s.deleted = 0
        LEFT JOIN mes_qc_oqc oqc ON oqc.id = sl.oqc_id AND oqc.deleted = 0
        WHERE sl.batch_code = #{batchCode} AND sl.deleted = 0
        WHERE sl.batch_code = #{batchCode} AND sl.deleted = 0 AND s.status != 5
          AND NOT EXISTS (SELECT 1 FROM mes_wm_product_sales_detail d
                          WHERE d.line_id = sl.id AND d.batch_code = #{batchCode} AND d.deleted = 0)
        UNION ALL
        SELECT s.code AS sales_code, s.sales_date, s.sales_order_code, s.client_id, s.client_name,
               oqc.code AS oqc_code, oqc.check_result AS check_result,
               d.batch_code, d.item_id, SUM(d.quantity) AS quantity, MAX(sl.quality_status) AS quality_status
        FROM mes_wm_product_sales_detail d
        JOIN mes_wm_product_sales s ON s.id = d.sales_id AND s.deleted = 0
        JOIN mes_wm_product_sales_line sl ON sl.id = d.line_id AND sl.deleted = 0
        LEFT JOIN mes_qc_oqc oqc ON oqc.id = sl.oqc_id AND oqc.deleted = 0
        WHERE d.batch_code = #{batchCode} AND d.deleted = 0 AND s.status != 5
        GROUP BY s.id, s.code, s.sales_date, s.sales_order_code, s.client_id, s.client_name,
                 oqc.code, oqc.check_result, d.batch_code, d.item_id
        ORDER BY sales_date
    </select>
    <!-- 批次出入库流水(种子流向):库存事务 → 仓库/库区/库位 → 销售出库单(biz_type 119 带出客户名称) -->
    <select id="selectBatchFlowList" parameterType="String"
            resultType="cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchFlowRespVO">
        SELECT tx.type, tx.biz_type, tx.biz_code, tx.quantity, tx.transaction_time,
               w.name AS warehouse_name, loc.name AS location_name, area.name AS area_name,
               sales.client_name
        FROM mes_wm_transaction tx
        LEFT JOIN mes_wm_warehouse w ON w.id = tx.warehouse_id AND w.deleted = 0
        LEFT JOIN mes_wm_warehouse_location loc ON loc.id = tx.location_id AND loc.deleted = 0
        LEFT JOIN mes_wm_warehouse_area area ON area.id = tx.area_id AND area.deleted = 0
        LEFT JOIN mes_wm_product_sales sales ON tx.biz_type = 119 AND sales.id = tx.biz_id AND sales.deleted = 0
        WHERE tx.batch_code = #{batchCode} AND tx.deleted = 0
        ORDER BY tx.transaction_time
    </select>
    <!-- 批次工序流转:产出(OUT)/投入(IN) 事件聚合,无需建表 -->