xiaoyi
3 天以前 f71dabccb0e4c2fa410683e6058eb906a7dbf094
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -25,8 +25,8 @@
import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.erp.api.purchase.ErpPurchaseOrderApi;
import cn.iocoder.yudao.module.erp.api.purchase.ErpSupplierApi;
import cn.iocoder.yudao.module.erp.api.purchase.PurchaseOrderApi;
import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi;
import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
import org.springframework.security.core.Authentication;
@@ -67,7 +67,7 @@
    private MesWmArrivalNoticeService arrivalNoticeService;
    @Resource
    @Lazy
    private ErpSupplierApi supplierApi;
    private SrmSupplierApi srmSupplierApi;
    @Resource
    @Lazy
    private MesQcIqcService iqcService;
@@ -81,7 +81,7 @@
    private BpmProcessInstanceApi processInstanceApi;
    @Resource
    private ErpPurchaseOrderApi purchaseOrderApi;
    private PurchaseOrderApi purchaseOrderApi;
    @Resource
    private MdmItemApi mdmItemApi;
@@ -114,7 +114,7 @@
        // 校验编码唯一
        validateCodeUnique(reqVO.getId(), reqVO.getCode());
        // 校验供应商存在(采购入库使用 ERP 供应商)
        supplierApi.validateSupplier(reqVO.getVendorId());
        srmSupplierApi.getSupplier(reqVO.getVendorId());
        // 校验到货通知单存在
        if (reqVO.getNoticeId() != null) {
            MesWmArrivalNoticeDO notice = arrivalNoticeService.validateArrivalNoticeReadyForReceipt(reqVO.getNoticeId());
@@ -184,13 +184,21 @@
            if (item == null) {
                continue;
            }
            // 如果物料开启批次管理,检查行上的批次号是否为空
            if (Boolean.TRUE.equals(item.getIsBatchManaged()) && line.getBatchId() == null) {
                throw exception(WM_ITEM_RECEIPT_BATCH_REQUIRED, item.getCode(), item.getName());
            // 如果物料开启批次管理,行或其上架明细必须携带批次号,否则无法生成库存事务
            if (Boolean.TRUE.equals(item.getIsBatchManaged())) {
                boolean hasBatch = line.getBatchId() != null
                        || hasDetailBatch(itemReceiptDetailService.getItemReceiptDetailListByLineId(line.getId()));
                if (!hasBatch) {
                    throw exception(WM_ITEM_RECEIPT_BATCH_REQUIRED, item.getCode(), item.getName());
                }
            }
        }
    }
    private boolean hasDetailBatch(List<MesWmItemReceiptDetailDO> details) {
        return details.stream().anyMatch(detail -> detail.getBatchId() != null);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void stockItemReceipt(Long id) {