package cn.iocoder.yudao.module.mes.service.wm.materialstockbag; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstockbag.MesWmMaterialStockBagDO; import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; /** * MES 库存袋码明细 Service 接口 * * 统一封装袋码库存明细的建立、迁移、出库、报废逻辑,供所有带袋码的库存变动入口复用。 * 每个袋码在同一时间只有一条在库明细(唯一约束 bag_code),流转通过更新明细位置/状态实现。 */ public interface MesWmMaterialStockBagService { /** * 入库:建立或激活活动袋码明细。 *

* 袋码首次入库时新建明细;已出库/已报废的袋码再次入库时激活为在库并更新位置;已在库则视为重复入库抛出异常。 * * @param reqDTO 事务请求 * @param stock 目标库存汇总记录 * @param transactionId 本笔事务 ID * @return 袋码明细 */ MesWmMaterialStockBagDO inbound(MesWmTransactionSaveReqDTO reqDTO, MesWmMaterialStockDO stock, Long transactionId); /** * 出库:将指定袋码明细置为已出库。 * * @param reqDTO 事务请求(需携带 bagCode/bagCodeId) * @param transactionId 本笔事务 ID */ void outbound(MesWmTransactionSaveReqDTO reqDTO, Long transactionId); /** * 移入/迁移:更新活动袋码明细的位置与库存状态(移库、调拨、质检合格迁移)。 * * @param reqDTO 事务请求(需携带 bagCode) * @param targetStock 目标库存汇总记录 * @param transactionId 本笔事务 ID */ void moveIn(MesWmTransactionSaveReqDTO reqDTO, MesWmMaterialStockDO targetStock, Long transactionId); /** * 报废:将指定袋码明细置为报废。 * * @param reqDTO 事务请求(需携带 bagCode) * @param transactionId 本笔事务 ID */ void scrap(MesWmTransactionSaveReqDTO reqDTO, Long transactionId); /** * 根据库存汇总 ID 查询在库袋码明细。 * * @param materialStockId 库存汇总 ID * @return 袋码明细(无则 null) */ MesWmMaterialStockBagDO getActiveByMaterialStockId(Long materialStockId); }