gaoluyang
10 天以前 7bd10d34e8a8dc2437ec8551eb511e37634d7306
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/materialstock/MesWmMaterialStockServiceImpl.java
@@ -39,6 +39,7 @@
import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseDefaultService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;
import com.mzt.logapi.starter.annotation.LogRecord;
@@ -85,6 +86,9 @@
    @Resource
    @Lazy
    private MesWmWarehouseService warehouseService;
    @Resource
    @Lazy
    private MesWmWarehouseDefaultService warehouseDefaultService;
    @Resource
    @Lazy
    private MesWmTransactionService wmTransactionService;
@@ -245,6 +249,10 @@
    @Override
    public void checkAreaMixingRule(Long areaId, Long itemId, Long batchId) {
        // 未指定库位(客户未启用库区/库位管理)时不校验混放,后续入库事务会落到仓库默认库位
        if (areaId == null) {
            return;
        }
        // 1.1 校验库位必须存在
        MesWmWarehouseAreaDO area = areaService.validateWarehouseAreaExists(areaId);
@@ -403,7 +411,14 @@
            }
        }
        // 3. 校验库位混放规则
        // 3. 未指定库区/库位时,落到仓库默认库区/库位(客户未启用库区/库位管理)
        if (reqVO.getWarehouseId() != null
                && (reqVO.getLocationId() == null || reqVO.getAreaId() == null)) {
            MesWmWarehouseAreaDO defaultArea = warehouseDefaultService.getOrCreateDefaultArea(reqVO.getWarehouseId());
            reqVO.setLocationId(defaultArea.getLocationId());
            reqVO.setAreaId(defaultArea.getId());
        }
        // 3.1 校验库位混放规则
        checkAreaMixingRule(reqVO.getAreaId(), reqVO.getItemId(), batchId);
        // 4. 获取或创建库存记录
@@ -540,7 +555,16 @@
            throw exception(WM_MATERIAL_STOCK_FROZEN);
        }
        // 4. 校验目标库位混放规则
        // 4. 目标库区/库位未指定时,落到目标仓库的默认库区/库位(客户未启用库区/库位管理)
        if (reqVO.getToWarehouseId() == null) {
            reqVO.setToWarehouseId(sourceStock.getWarehouseId());
        }
        if ((reqVO.getToLocationId() == null || reqVO.getToAreaId() == null)) {
            MesWmWarehouseAreaDO defaultArea = warehouseDefaultService.getOrCreateDefaultArea(reqVO.getToWarehouseId());
            reqVO.setToLocationId(defaultArea.getLocationId());
            reqVO.setToAreaId(defaultArea.getId());
        }
        // 4.1 校验目标库位混放规则
        checkAreaMixingRule(reqVO.getToAreaId(), sourceStock.getItemId(), sourceStock.getBatchId());
        // 5. 生成移库单号