xiaoyi
2 天以前 f71dabccb0e4c2fa410683e6058eb906a7dbf094
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -25,7 +25,7 @@
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.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;
@@ -81,7 +81,7 @@
    private BpmProcessInstanceApi processInstanceApi;
    @Resource
    private ErpPurchaseOrderApi purchaseOrderApi;
    private PurchaseOrderApi purchaseOrderApi;
    @Resource
    private MdmItemApi mdmItemApi;
@@ -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) {