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()); } }