<?xml version="1.0" encoding="UTF-8"?>
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<mapper namespace="cn.iocoder.yudao.module.mes.dal.mysql.wm.batch.MesWmBatchMapper">
|
|
<resultMap id="BatchTraceResult" type="cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO">
|
<id property="id" column="batch_id"/>
|
<result property="code" column="batch_code"/>
|
<result property="workOrderId" column="work_order_id"/>
|
<result property="itemId" column="item_id"/>
|
</resultMap>
|
|
<!--
|
向前追溯:从某个原材料批次出发,查找它被哪些工单消耗后,产出了哪些成品批次
|
链路:库存事务(消耗 OUT, biz=123, biz_id=消耗单id) → 消耗单 → 报工 → 产出单(feedback_id) → 库存事务(产出 IN, biz=124, biz_id=产出单id) → 批次
|
-->
|
<select id="selectListByForward" parameterType="String" resultMap="BatchTraceResult">
|
SELECT DISTINCT pf.work_order_id, pf.item_id, tx_produce.batch_id, tx_produce.batch_code
|
FROM mes_wm_transaction tx_consume
|
JOIN mes_wm_item_consume ic ON tx_consume.biz_id = ic.id AND tx_consume.biz_type = 123 AND ic.deleted = 0
|
JOIN mes_pro_feedback pf ON pf.id = ic.feedback_id AND pf.deleted = 0
|
JOIN mes_wm_product_produce pp ON pp.feedback_id = pf.id AND pp.deleted = 0
|
JOIN mes_wm_transaction tx_produce ON tx_produce.biz_id = pp.id AND tx_produce.biz_type = 124 AND tx_produce.deleted = 0
|
WHERE tx_consume.batch_code = #{batchCode}
|
AND tx_consume.biz_type = 123
|
AND tx_consume.deleted = 0
|
AND tx_produce.batch_id IS NOT NULL
|
</select>
|
|
<!--
|
向后追溯:从某个成品批次出发,查找生产它时消耗了哪些原材料批次
|
链路:库存事务(产出 IN, biz=124, biz_id=产出单id) → 产出单 → 报工 → 消耗单(feedback_id) → 库存事务(消耗 OUT, biz=123, biz_id=消耗单id) → 批次
|
-->
|
<select id="selectListByBackward" parameterType="String" resultMap="BatchTraceResult">
|
SELECT DISTINCT ic.work_order_id, tx_consume.item_id, tx_consume.batch_id, tx_consume.batch_code
|
FROM mes_wm_transaction tx_produce
|
JOIN mes_wm_product_produce pp ON tx_produce.biz_id = pp.id AND tx_produce.biz_type = 124 AND pp.deleted = 0
|
JOIN mes_pro_feedback pf ON pf.id = pp.feedback_id AND pf.deleted = 0
|
JOIN mes_wm_item_consume ic ON ic.feedback_id = pf.id AND ic.deleted = 0
|
JOIN mes_wm_transaction tx_consume ON tx_consume.biz_id = ic.id AND tx_consume.biz_type = 123 AND tx_consume.deleted = 0
|
WHERE tx_produce.batch_code = #{batchCode}
|
AND tx_produce.biz_type = 124
|
AND tx_produce.deleted = 0
|
AND tx_consume.batch_id IS NOT NULL
|
</select>
|
|
<!-- 批次采购来源:批次 → 采购入库行 → 采购入库单 → IQC -->
|
<select id="selectPurchaseSourceList" parameterType="String"
|
resultType="cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchPurchaseSourceRespVO">
|
SELECT r.code AS receipt_code, r.receipt_date, r.purchase_order_code, r.vendor_id,
|
iqc.code AS iqc_code, iqc.check_result AS check_result,
|
rl.batch_code, rl.item_id, rl.received_quantity
|
FROM mes_wm_item_receipt_line rl
|
JOIN mes_wm_item_receipt r ON r.id = rl.receipt_id AND r.deleted = 0
|
LEFT JOIN mes_qc_iqc iqc ON iqc.id = r.iqc_id AND iqc.deleted = 0
|
WHERE rl.batch_code = #{batchCode} AND rl.deleted = 0
|
</select>
|
|
<!-- 批次销售去向:批次 → 销售出库行 → 销售出库单 → OQC -->
|
<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,
|
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
|
</select>
|
|
<!-- 批次工序流转:产出(OUT)/投入(IN) 事件聚合,无需建表 -->
|
<select id="selectProcessTraceList" parameterType="String"
|
resultType="cn.iocoder.yudao.module.mes.controller.admin.wm.batch.vo.MesWmBatchProcessTraceRespVO">
|
SELECT 'OUT' AS event_type, pp.work_order_id, pp.process_id,
|
ppl.batch_code, ppl.quantity, ppl.quality_status, pp.produce_date AS event_time,
|
wop.sort AS process_sort
|
FROM mes_wm_product_produce_line ppl
|
JOIN mes_wm_product_produce pp ON pp.id = ppl.produce_id AND pp.deleted = 0
|
LEFT JOIN mes_pro_work_order_process wop
|
ON wop.work_order_id = pp.work_order_id AND wop.process_id = pp.process_id AND wop.deleted = 0
|
WHERE ppl.batch_code = #{batchCode} AND ppl.deleted = 0
|
UNION ALL
|
SELECT 'IN' AS event_type, ic.work_order_id, ic.process_id,
|
icd.batch_code, icd.quantity, NULL AS quality_status, ic.consume_date AS event_time,
|
wop.sort AS process_sort
|
FROM mes_wm_item_consume_detail icd
|
JOIN mes_wm_item_consume ic ON ic.id = icd.consume_id AND ic.deleted = 0
|
LEFT JOIN mes_pro_work_order_process wop
|
ON wop.work_order_id = ic.work_order_id AND wop.process_id = ic.process_id AND wop.deleted = 0
|
WHERE icd.batch_code = #{batchCode} AND icd.deleted = 0
|
</select>
|
|
</mapper>
|