云
3 天以前 251be431ad12399fe4ebce599c353d05dcec7888
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesDetailServiceImpl.java
@@ -139,12 +139,27 @@
        // 校验仓库、库区、库位的关联关系
        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);
    }