gaoluyang
8 天以前 8e4eee5ad4d74e1a4e6ab4de3a9c28000700dce0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnissue/MesWmReturnIssueDetailServiceImpl.java
@@ -7,9 +7,11 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueDetailDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnissue.MesWmReturnIssueLineDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnissue.MesWmReturnIssueDetailMapper;
import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseDefaultService;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -17,6 +19,8 @@
import java.math.BigDecimal;
import java.util.List;
import cn.iocoder.yudao.framework.common.exception.ServiceException;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
@@ -36,6 +40,8 @@
    private MesWmReturnIssueLineService issueLineService;
    @Resource
    private MesWmWarehouseAreaService warehouseAreaService;
    @Resource
    private MesWmWarehouseDefaultService warehouseDefaultService;
    @Resource
    @Lazy
    private MesWmMaterialStockService materialStockService;
@@ -112,6 +118,14 @@
        if (ObjUtil.notEqual(line.getItemId(), reqVO.getItemId())) {
            throw exception(WM_RETURN_ISSUE_DETAIL_ITEM_MISMATCH);
        }
        // 未指定上架目标库区/库位时,落到仓库默认库区/库位(客户未启用库区/库位管理)
        if (reqVO.getWarehouseId() != null
                && (reqVO.getLocationId() == null || reqVO.getAreaId() == null)) {
            MesWmWarehouseAreaDO defaultArea =
                    warehouseDefaultService.getOrCreateDefaultArea(reqVO.getWarehouseId());
            reqVO.setLocationId(defaultArea.getLocationId());
            reqVO.setAreaId(defaultArea.getId());
        }
        // 校验上架目标仓库、库区、库位的关联关系
        warehouseAreaService.validateWarehouseAreaExists(
                reqVO.getWarehouseId(), reqVO.getLocationId(), reqVO.getAreaId());
@@ -123,9 +137,10 @@
            if (stock == null) {
                throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
            }
            // 校验物料和批次一致
            // 校验物料一致:此处只比对物料,因为来源库存(线边/虚拟仓)与上架目标仓库本就不同属正常
            if (ObjUtil.notEqual(stock.getItemId(), reqVO.getItemId())) {
                throw exception(WM_MATERIAL_STOCK_SELECTION_MISMATCH);
                throw new ServiceException(WM_MATERIAL_STOCK_SELECTION_MISMATCH.getCode(),
                        "所选来源库存归属物料与当前退货物料不一致,请重新选择来源库存");
            }
            // 校验库存数量充足
            if (reqVO.getQuantity() != null && stock.getQuantity() != null