| | |
| | | throw exception(WM_MATERIAL_STOCK_NOT_EXISTS); |
| | | } |
| | | // 校验物料、批次、仓库等维度一致(防止传入错误的 materialStockId) |
| | | // 库区/库位为可选维度,未指定时不参与比对 |
| | | if (ObjUtil.notEqual(materialStock.getItemId(), reqDTO.getItemId()) |
| | | || ObjUtil.notEqual(materialStock.getWarehouseId(), reqDTO.getWarehouseId()) |
| | | || ObjUtil.notEqual(materialStock.getLocationId(), reqDTO.getLocationId()) |
| | | || ObjUtil.notEqual(materialStock.getAreaId(), reqDTO.getAreaId())) { |
| | | || (reqDTO.getLocationId() != null && ObjUtil.notEqual(materialStock.getLocationId(), reqDTO.getLocationId())) |
| | | || (reqDTO.getAreaId() != null && ObjUtil.notEqual(materialStock.getAreaId(), reqDTO.getAreaId()))) { |
| | | throw exception(WM_MATERIAL_STOCK_SELECTION_MISMATCH); |
| | | } |
| | | } else if (isInbound) { |
| | |
| | | .type(reqDTO.getType()).quantity(reqDTO.getQuantity()).transactionTime(LocalDateTime.now()) |
| | | .itemId(reqDTO.getItemId()).batchId(reqDTO.getBatchId()).batchCode(reqDTO.getBatchCode()) |
| | | .bagCodeId(reqDTO.getBagCodeId()).bagCode(reqDTO.getBagCode()) |
| | | .shipmentId(reqDTO.getShipmentId()) |
| | | .warehouseId(reqDTO.getWarehouseId()).locationId(reqDTO.getLocationId()).areaId(reqDTO.getAreaId()) |
| | | .bizType(reqDTO.getBizType()).bizId(reqDTO.getBizId()).bizCode(reqDTO.getBizCode()).bizLineId(reqDTO.getBizLineId()) |
| | | .materialStockId(materialStock.getId()).relatedTransactionId(reqDTO.getRelatedTransactionId()) |
| | |
| | | if (Boolean.TRUE.equals(warehouse.getFrozen())) { |
| | | throw exception(WM_TRANSACTION_WAREHOUSE_FROZEN, warehouse.getName()); |
| | | } |
| | | // 1.2 检查库区冻结 |
| | | // 1.2 检查库区冻结(未使用库区时跳过) |
| | | MesWmWarehouseLocationDO location = locationService.validateWarehouseLocationExists(reqDTO.getLocationId()); |
| | | if (Boolean.TRUE.equals(location.getFrozen())) { |
| | | if (location != null && Boolean.TRUE.equals(location.getFrozen())) { |
| | | throw exception(WM_TRANSACTION_LOCATION_FROZEN, location.getName()); |
| | | } |
| | | // 1.3 检查库位冻结 |
| | | // 1.3 检查库位冻结(未使用库位时跳过) |
| | | MesWmWarehouseAreaDO area = areaService.validateWarehouseAreaExists(reqDTO.getAreaId()); |
| | | if (Boolean.TRUE.equals(area.getFrozen())) { |
| | | if (area != null && Boolean.TRUE.equals(area.getFrozen())) { |
| | | throw exception(WM_TRANSACTION_AREA_FROZEN, area.getName()); |
| | | } |
| | | |
| | | // 2. 检查库存记录冻结 |
| | | if (Boolean.TRUE.equals(materialStock.getFrozen())) { |
| | | throw exception(WM_TRANSACTION_STOCK_FROZEN, warehouse.getName(), location.getName(), area.getName()); |
| | | throw exception(WM_TRANSACTION_STOCK_FROZEN, warehouse.getName(), |
| | | location != null ? location.getName() : "", area != null ? area.getName() : ""); |
| | | } |
| | | } |
| | | |