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.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; import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.math.BigDecimal; import java.time.LocalDateTime; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class MesQcOqcAutoCreateTest { @InjectMocks private MesQcOqcServiceImpl service; @Mock private MesQcOqcMapper mapper; @Mock private MesQcTemplateItemService templates; @Mock private MesQcOqcLineService lines; @Mock private MesWmProductSalesService sales; @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"); service.createOqcFromProductSales(30L, line, "SL001", 50L); ArgumentCaptor captor = ArgumentCaptor.forClass(MesQcOqcDO.class); verify(mapper).insert(captor.capture()); MesQcOqcDO row = captor.getValue(); assertEquals(date, row.getOutDate()); assertEquals(date, row.getInspectDate()); assertEquals(BigDecimal.valueOf(200), row.getOutQuantity()); assertEquals(BigDecimal.ZERO, row.getCheckQuantity()); assertEquals(BigDecimal.ZERO, row.getQualifiedQuantity()); assertEquals(30L, row.getSourceDocId()); assertEquals(40L, row.getSourceLineId()); } }