yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
@@ -21,6 +21,7 @@
import cn.iocoder.yudao.module.mes.service.wm.stockwarning.MesWmStockWarningService;
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 jakarta.annotation.Resource;
@@ -60,6 +61,8 @@
    @Resource
    private MesWmWarehouseAreaService areaService;
    @Resource
    private MesWmWarehouseDefaultService warehouseDefaultService;
    @Resource
    private MesWmStockWarningService stockWarningService;
    @Override
@@ -75,6 +78,10 @@
        checkQuantity(reqDTO, inbound);
        // 1.3 入库事务:批次号校验 + batchId/batchCode 互补
        checkBatch(reqDTO, inbound);
        // 1.3.1 入库事务未指定库区/库位时,自动落到仓库默认库区/库位(客户未启用库区/库位管理)
        if (inbound) {
            fillDefaultLocationAndArea(reqDTO);
        }
        // 1.4 入库事务:库位混放规则校验
        if (inbound) {
            materialStockService.checkAreaMixingRule(reqDTO.getAreaId(), reqDTO.getItemId(), reqDTO.getBatchId());
@@ -171,6 +178,21 @@
    // ==================== 私有校验方法 ====================
    /**
     * 入库事务未指定库区/库位时,自动使用仓库的默认库区/默认库位
     *
     * 客户未启用库区/库位管理,前端不再让用户选择,库存仍需要完整的仓库-库区-库位维度。
     */
    private void fillDefaultLocationAndArea(MesWmTransactionSaveReqDTO reqDTO) {
        if (reqDTO.getWarehouseId() == null
                || (reqDTO.getLocationId() != null && reqDTO.getAreaId() != null)) {
            return;
        }
        MesWmWarehouseAreaDO defaultArea = warehouseDefaultService.getOrCreateDefaultArea(reqDTO.getWarehouseId());
        reqDTO.setLocationId(defaultArea.getLocationId());
        reqDTO.setAreaId(defaultArea.getId());
    }
    /**
     * 校验数量正负号与事务方向一致
     */
    private void checkQuantity(MesWmTransactionSaveReqDTO reqDTO, boolean inbound) {