| | |
| | | // 校验仓库、库区、库位的关联关系 |
| | | warehouseAreaService.validateWarehouseAreaExists( |
| | | reqVO.getWarehouseId(), reqVO.getLocationId(), reqVO.getAreaId()); |
| | | // 物料、批次以退货行为准(退货批次来自销售出库单,上架时不允许变更) |
| | | reqVO.setItemId(line.getItemId()); |
| | | resolveBatch(reqVO, line); |
| | | // 校验库位物料/批次混放规则 |
| | | materialStockService.checkAreaMixingRule(reqVO.getAreaId(), reqVO.getItemId(), reqVO.getBatchId()); |
| | | // 校验明细总数量不超过行数量(排除自身) |
| | | validateDetailQuantityNotExceed(reqVO.getLineId(), reqVO.getQuantity(), reqVO.getId(), line); |
| | | } |
| | | |
| | | // 根据 batchCode 解析 batchId(必须在混放规则校验之前,因为它依赖 batchId) |
| | | /** |
| | | * 解析上架明细批次:行已指定批次时强制沿用,否则按批次号解析 |
| | | */ |
| | | private void resolveBatch(MesWmReturnSalesDetailSaveReqVO reqVO, MesWmReturnSalesLineDO line) { |
| | | if (line.getBatchId() != null) { |
| | | if (reqVO.getBatchId() != null && ObjUtil.notEqual(reqVO.getBatchId(), line.getBatchId())) { |
| | | throw exception(WM_RETURN_SALES_DETAIL_BATCH_MISMATCH); |
| | | } |
| | | reqVO.setBatchId(line.getBatchId()); |
| | | reqVO.setBatchCode(line.getBatchCode()); |
| | | return; |
| | | } |
| | | fillBatchId(reqVO); |
| | | } |
| | | |