gaoluyang
7 天以前 6b8585fc452ecdcaa82d86fab79a9f27bb442851
yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/oqc/MesQcOqcAutoCreateTest.java
@@ -1,11 +1,12 @@
package cn.iocoder.yudao.module.mes.service.qc.oqc;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.oqc.MesQcOqcDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO;
import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderItemRespDTO;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.qc.oqc.MesQcOqcMapper;
import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
import cn.iocoder.yudao.module.mes.service.wm.productsales.MesWmProductSalesService;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -25,18 +26,19 @@
class MesQcOqcAutoCreateTest {
    @InjectMocks private MesQcOqcServiceImpl service;
    @Mock private MesQcOqcMapper mapper;
    @Mock private MesQcTemplateItemService templates;
    @Mock private MesQcOqcLineService lines;
    @Mock private MesWmProductSalesService sales;
    @Mock private ErpSaleOrderApi saleOrderApi;
    @Test
    void generatedInspectionUsesHistoricalShipmentDateAndPreservesPendingQuantities() {
        LocalDateTime date = LocalDateTime.of(2026, 9, 23, 15, 30);
        when(templates.getRequiredTemplateByItemIdAndType(10L, 3))
                .thenReturn(new MesQcTemplateItemDO().setTemplateId(20L));
        when(sales.getProductSales(30L)).thenReturn(new MesWmProductSalesDO().setSalesDate(date));
        MesWmProductSalesLineDO line = new MesWmProductSalesLineDO().setId(40L)
                .setItemId(10L).setQuantity(BigDecimal.valueOf(200)).setBatchCode("B001");
                .setItemId(10L).setSaleOrderItemId(60L).setQuantity(BigDecimal.valueOf(200)).setBatchCode("B001");
        ErpSaleOrderItemRespDTO saleItem = new ErpSaleOrderItemRespDTO();
        saleItem.setReelNo("PAN-001");
        when(saleOrderApi.getSaleOrderItem(60L)).thenReturn(CommonResult.success(saleItem));
        service.createOqcFromProductSales(30L, line, "SL001", 50L);
        ArgumentCaptor<MesQcOqcDO> captor = ArgumentCaptor.forClass(MesQcOqcDO.class);
        verify(mapper).insert(captor.capture());
@@ -48,5 +50,19 @@
        assertEquals(BigDecimal.ZERO, row.getQualifiedQuantity());
        assertEquals(30L, row.getSourceDocId());
        assertEquals(40L, row.getSourceLineId());
        assertEquals("PAN-001", row.getReelNo());
    }
    @Test
    void historicalShipmentWithoutSaleItemDoesNotGuessReel() {
        MesWmProductSalesLineDO line = new MesWmProductSalesLineDO().setId(40L)
                .setItemId(10L).setQuantity(BigDecimal.ONE);
        service.createOqcFromProductSales(30L, line, "SL001", 50L);
        ArgumentCaptor<MesQcOqcDO> captor = ArgumentCaptor.forClass(MesQcOqcDO.class);
        verify(mapper).insert(captor.capture());
        assertNull(captor.getValue().getReelNo());
        verifyNoInteractions(saleOrderApi);
    }
}