yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productreceipt/MesWmProductReceiptServiceImpl.java
@@ -81,6 +81,8 @@
    private MesWmWarehouseLocationService locationService;
    @Resource
    private MesWmWarehouseAreaService areaService;
    @Resource
    private cn.iocoder.yudao.module.mes.service.wm.productproduce.MesWmProductProduceDetailService productProduceDetailService;
    @Override
    public Long createProductReceipt(MesWmProductReceiptSaveReqVO createReqVO) {
@@ -110,7 +112,10 @@
        }
        String code = "AUTO-PR-" + produce.getId();
        MesWmProductReceiptDO existing = productReceiptMapper.selectByCode(code);
        MesWmProductReceiptDO existing = productReceiptMapper.selectByProduceId(produce.getId());
        if (existing == null) {
            existing = productReceiptMapper.selectByCode(code); // 兼容执行迁移 SQL 前生成的历史单据
        }
        if (existing != null) {
            return existing.getId();
        }
@@ -125,6 +130,7 @@
                .code(code)
                .name("生产完成自动入库-" + workOrderCode)
                .workOrderId(produce.getWorkOrderId())
                .produceId(produce.getId())
                .itemId(firstMdmItemId)
                .receiptDate(LocalDateTime.now())
                .status(MesWmProductReceiptStatusEnum.PREPARE.getStatus())
@@ -143,8 +149,13 @@
            MesMdItemDO item = mdItemService.getItem(produceLine.getItemId());
            Long mdmItemId = item != null && item.getMdmItemId() != null
                    ? item.getMdmItemId() : produceLine.getItemId();
            List<cn.iocoder.yudao.module.mes.dal.dataobject.wm.productproduce.MesWmProductProduceDetailDO> details =
                    productProduceDetailService.getProductProduceDetailListByLineId(produceLine.getId());
            Long warehouseId = CollUtil.isNotEmpty(details) ? details.get(0).getWarehouseId() : virtualWarehouse.getId();
            Long locationId = CollUtil.isNotEmpty(details) ? details.get(0).getLocationId() : virtualLocation.getId();
            Long areaId = CollUtil.isNotEmpty(details) ? details.get(0).getAreaId() : virtualArea.getId();
            MesWmMaterialStockDO stock = materialStockService.getMaterialStockByCompositeKey(
                    mdmItemId, virtualWarehouse.getId(), virtualLocation.getId(), virtualArea.getId(),
                    mdmItemId, warehouseId, locationId, areaId,
                    produceLine.getBatchId(), null);
            productReceiptLineMapper.insert(MesWmProductReceiptLineDO.builder()
                    .receiptId(receipt.getId())
@@ -255,8 +266,11 @@
            throw exception(WM_PRODUCT_RECPT_NO_DETAIL);
        }
        // 创建库存事务
        createTransactionList(receipt, details);
        // 自动入库单来源产出单已按工艺路线仓库记账,此处仅完成业务单据,避免实际仓库重复入库。
        // 手工创建的产品入库单仍执行“虚拟线边库 OUT + 实际仓库 IN”。
        if (receipt.getProduceId() == null) {
            createTransactionList(receipt, details);
        }
        // 更新收货单状态
        productReceiptMapper.updateById(new MesWmProductReceiptDO()