云
3 小时以前 e09f103259fa602382bb5ce2a03361a6397af46a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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<MesQcOqcDO> 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());
    }
}