8 小时以前 74ad846852f42b4e2258bfddd5c2a33cc1ce9847
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productproduce/MesWmProductProduceServiceImpl.java
@@ -24,10 +24,12 @@
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
import cn.iocoder.yudao.module.mes.service.wm.productreceipt.MesWmProductReceiptService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService;
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
@@ -66,6 +68,9 @@
    private MesWmWarehouseLocationService locationService;
    @Resource
    private MesWmWarehouseAreaService areaService;
    @Resource
    @Lazy // 避免循环依赖:产品收货单自动生成逻辑依赖生产入库单 Mapper/行 Service
    private MesWmProductReceiptService productReceiptService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -168,6 +173,10 @@
            // 3.2 无需检验:按合格品/不合格品各生成一行 + 明细
            BigDecimal qualifiedQty = ObjectUtil.defaultIfNull(feedback.getQualifiedQuantity(), BigDecimal.ZERO);
            BigDecimal unqualifiedQty = ObjectUtil.defaultIfNull(feedback.getUnqualifiedQuantity(), BigDecimal.ZERO);
            // 3.2.0 兜底:合格/不良数量都未填写时(报工只填报工数量),默认整单为合格品
            if (qualifiedQty.compareTo(BigDecimal.ZERO) <= 0 && unqualifiedQty.compareTo(BigDecimal.ZERO) <= 0) {
                qualifiedQty = feedback.getFeedbackQuantity();
            }
            // 3.2.1 不合格品行 + 明细
            if (unqualifiedQty.compareTo(BigDecimal.ZERO) > 0) {
                MesWmProductProduceLineDO unqualifiedLine = buildProduceLine(produce, feedback, batchId, batchCode,
@@ -296,6 +305,9 @@
        // 4. 完成产出单(创建库存事务 + 更新状态为已完成)
        finishProductProduce(produce.getId());
        // 5. 报工产出定稿后自动生成产品入库单(一次报工=一条,幂等)
        productReceiptService.createProductReceiptByFeedback(feedbackId);
    }
}