云
17 小时以前 ac2e2b5af3726ee64dc37c3ebf26989a0346f22a
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
53
54
package cn.iocoder.yudao.module.mes.service.pro.feedback;
 
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderProcessDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productproduce.MesWmProductProduceLineDO;
import cn.iocoder.yudao.module.mes.dal.mysql.pro.feedback.MesProFeedbackMapper;
import cn.iocoder.yudao.module.mes.enums.pro.MesProFeedbackStatusEnum;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum;
import cn.iocoder.yudao.module.mes.api.mps.MesProMpsApi;
import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService;
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderProcessService;
import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
import cn.iocoder.yudao.module.mes.service.wm.productproduce.MesWmProductProduceLineService;
import cn.iocoder.yudao.module.mes.service.wm.productproduce.MesWmProductProduceService;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import java.math.BigDecimal;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
 
class MesProFeedbackProgressTest {
    @Test
    void inspectionCompletionUpdatesProgressOnlyOnceForLastProcess() {
        var service = new MesProFeedbackServiceImpl();
        var mapper = mock(MesProFeedbackMapper.class);
        var produce = mock(MesWmProductProduceService.class);
        var lines = mock(MesWmProductProduceLineService.class);
        var tasks = mock(MesProTaskService.class);
        var orders = mock(MesProWorkOrderService.class);
        var processes = mock(MesProWorkOrderProcessService.class);
        var mps = mock(MesProMpsApi.class);
        ReflectionTestUtils.setField(service, "feedbackMapper", mapper);
        ReflectionTestUtils.setField(service, "productProduceService", produce);
        ReflectionTestUtils.setField(service, "produceLineService", lines);
        ReflectionTestUtils.setField(service, "taskService", tasks);
        ReflectionTestUtils.setField(service, "workOrderService", orders);
        ReflectionTestUtils.setField(service, "workOrderProcessService", processes);
        ReflectionTestUtils.setField(service, "mpsApi", mps);
        var feedback = new MesProFeedbackDO().setId(1L).setTaskId(2L).setWorkOrderId(3L)
                .setProcessId(4L).setFeedbackQuantity(BigDecimal.TEN).setStatus(MesProFeedbackStatusEnum.UNCHECK.getStatus());
        when(mapper.selectOne(any())).thenReturn(feedback, new MesProFeedbackDO().setStatus(MesProFeedbackStatusEnum.FINISHED.getStatus()));
        when(lines.getProductProduceLineListByFeedbackId(1L)).thenReturn(List.of(
                MesWmProductProduceLineDO.builder().quantity(BigDecimal.valueOf(8)).qualityStatus(MesWmQualityStatusEnum.PASS.getStatus()).build(),
                MesWmProductProduceLineDO.builder().quantity(BigDecimal.valueOf(2)).qualityStatus(MesWmQualityStatusEnum.FAIL.getStatus()).build()));
        when(processes.getLastWorkOrderProcessByWorkOrderId(3L)).thenReturn(MesProWorkOrderProcessDO.builder().processId(4L).build());
        service.updateProFeedbackWhenIpqcFinish(1L, 5L, BigDecimal.valueOf(8), BigDecimal.valueOf(2), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO);
        verify(tasks).updateProducedQuantity(2L, BigDecimal.TEN, BigDecimal.valueOf(8), BigDecimal.valueOf(2));
        verify(orders).updateProducedQuantity(3L, BigDecimal.TEN);
        assertThrows(RuntimeException.class, () -> service.updateProFeedbackWhenIpqcFinish(1L, 5L, BigDecimal.valueOf(8), BigDecimal.valueOf(2), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO));
        verify(produce, times(1)).splitPendingAndFinishProduce(anyLong(), anyLong(), any(), any());
    }
}