云
2 天以前 87733eb3623593da247c051593d64b8ff9e1d3a4
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
@@ -94,10 +94,11 @@
                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) {
@@ -154,6 +155,7 @@
                .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())
@@ -279,20 +281,21 @@
        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() : "");
        }
    }