| | |
| | | .orderByDesc(MesWmTransactionDO::getTransactionTime)); |
| | | } |
| | | |
| | | /** |
| | | * 查找虚拟线边库库存记录对应的原始出库仓库信息 |
| | | * <p> |
| | | * 通过虚拟线边库的 materialStockId,找到首次入库事务(IN), |
| | | * 再通过 relatedTransactionId 找到关联的出库事务(OUT), |
| | | * 获取物料从哪个实际仓库出库进入虚拟线边库的。 |
| | | * |
| | | * @param materialStockId 虚拟线边库库存记录 ID |
| | | * @return 原始出库事务(包含 warehouseId/locationId/areaId),不存在返回 null |
| | | */ |
| | | default MesWmTransactionDO selectOriginalOutTransaction(Long materialStockId) { |
| | | // 1. 找到该库存记录的首次入库事务 |
| | | MesWmTransactionDO firstInTransaction = selectOne(new LambdaQueryWrapperX<MesWmTransactionDO>() |
| | | .eq(MesWmTransactionDO::getMaterialStockId, materialStockId) |
| | | .eq(MesWmTransactionDO::getType, 1) // IN |
| | | .orderByAsc(MesWmTransactionDO::getId) |
| | | .last("LIMIT 1")); |
| | | if (firstInTransaction == null || firstInTransaction.getRelatedTransactionId() == null) { |
| | | return null; |
| | | } |
| | | // 2. 通过 relatedTransactionId 找到原始出库事务 |
| | | return selectById(firstInTransaction.getRelatedTransactionId()); |
| | | } |
| | | |
| | | } |