| | |
| | | assertEquals(0, otherScrapQty.compareTo(updatedFeedback.getOtherScrapQuantity())); |
| | | |
| | | // 产量已经在报工审批时累计,质检回调不能重复累计。 |
| | | verify(taskService).updateQualityQuantity(taskId, qualifiedQty, unqualifiedQty); |
| | | verify(taskService, never()).updateProducedQuantity(anyLong(), any(), any(), any()); |
| | | verify(workOrderService, never()).updateProducedQuantity(anyLong(), any()); |
| | | } |
| | |
| | | when(routeProcessService.getRouteProcessByRouteIdAndProcessId(routeId, processId)) |
| | | .thenReturn(routeProcess); |
| | | |
| | | // mock: 产品产出单 |
| | | MesWmProductProduceDO produce = randomPojo(MesWmProductProduceDO.class); |
| | | when(productProduceService.generateProductProduce(any(), eq(false), any())).thenReturn(produce); |
| | | |
| | | // mock: 产出行(用于 updateTaskAndWorkOrderByFeedback) |
| | | // 关键末道工序累计工单产量,质量数量等待检验。 |
| | | when(workOrderProcessService.getLastWorkOrderProcessByWorkOrderId(feedback.getWorkOrderId())) |
| | | .thenReturn(new MesProWorkOrderProcessDO().setProcessId(processId)); |
| | | MesWmProductProduceLineDO qualifiedLine = MesWmProductProduceLineDO.builder() |
| | | .quantity(BigDecimal.valueOf(80)) |
| | | .qualityStatus(MesWmQualityStatusEnum.PASS.getStatus()).build(); |
| | | when(produceLineService.getProductProduceLineListByFeedbackId(feedback.getId())) |
| | | .thenReturn(ListUtil.of(qualifiedLine)); |
| | | |
| | | // 调用 |
| | | MesProFeedbackApproveReqVO reqVO = new MesProFeedbackApproveReqVO(); |
| | | reqVO.setId(feedback.getId()); |
| | | boolean result = feedbackService.approveFeedback(reqVO); |
| | | |
| | | // 断言 1:返回 true(已完成) |
| | | assertTrue(result); |
| | | assertFalse(result); |
| | | |
| | | // 断言 2:状态为已完成,uncheckQuantity 清零 |
| | | // 未经检验的报工不允许直接入库。 |
| | | MesProFeedbackDO updated = feedbackMapper.selectById(feedback.getId()); |
| | | assertEquals(MesProFeedbackStatusEnum.FINISHED.getStatus(), updated.getStatus()); |
| | | assertEquals(0, BigDecimal.ZERO.compareTo(updated.getUncheckQuantity())); |
| | | assertEquals(MesProFeedbackStatusEnum.UNCHECK.getStatus(), updated.getStatus()); |
| | | assertEquals(0, feedback.getFeedbackQuantity().compareTo(updated.getUncheckQuantity())); |
| | | assertEquals(0, BigDecimal.ZERO.compareTo(updated.getQualifiedQuantity())); |
| | | |
| | | // 断言 3:调用了产出单生成 + 入库 + 任务/工单更新 |
| | | verify(productProduceService).generateProductProduce(any(), eq(false), any()); |
| | | verify(productProduceService).finishProductProduce(produce.getId()); |
| | | verify(productProduceService).generateProductProduce(any(), eq(true), any()); |
| | | verify(productProduceService, never()).finishProductProduce(anyLong()); |
| | | verify(taskService).updateProducedQuantity(eq(feedback.getTaskId()), |
| | | any(BigDecimal.class), any(BigDecimal.class), any(BigDecimal.class)); |
| | | verify(workOrderService).updateProducedQuantity(eq(feedback.getWorkOrderId()), |
| | |
| | | .keyFlag(false).checkFlag(false).build(); |
| | | when(routeProcessService.getRouteProcessByRouteIdAndProcessId(routeId, processId)) |
| | | .thenReturn(routeProcess); |
| | | MesWmProductProduceDO produce = randomPojo(MesWmProductProduceDO.class); |
| | | when(productProduceService.generateProductProduce(any(), eq(false), any())).thenReturn(produce); |
| | | |
| | | // 调用 |
| | | MesProFeedbackApproveReqVO reqVO = new MesProFeedbackApproveReqVO(); |
| | | reqVO.setId(feedback.getId()); |
| | | boolean result = feedbackService.approveFeedback(reqVO); |
| | | |
| | | // 断言 1:返回 true(已完成) |
| | | assertTrue(result); |
| | | assertFalse(result); |
| | | |
| | | // 断言 2:状态为已完成 |
| | | MesProFeedbackDO updated = feedbackMapper.selectById(feedback.getId()); |
| | | assertEquals(MesProFeedbackStatusEnum.FINISHED.getStatus(), updated.getStatus()); |
| | | assertEquals(MesProFeedbackStatusEnum.UNCHECK.getStatus(), updated.getStatus()); |
| | | |
| | | // 非关键工序也生成产出并累计任务进度,但不累计工单总产量。 |
| | | verify(productProduceService).generateProductProduce(any(), eq(false), any()); |
| | | verify(productProduceService).finishProductProduce(produce.getId()); |
| | | verify(productProduceService).generateProductProduce(any(), eq(true), any()); |
| | | verify(productProduceService, never()).finishProductProduce(anyLong()); |
| | | verify(taskService).updateProducedQuantity(eq(feedback.getTaskId()), any(), any(), any()); |
| | | verify(workOrderService, never()).updateProducedQuantity(anyLong(), any()); |
| | | } |
| | |
| | | when(routeProcessService.getRouteProcessByRouteIdAndProcessId(routeId, processId)) |
| | | .thenReturn(routeProcess); |
| | | |
| | | // 调用,应该抛异常 |
| | | // 待检数量不再阻止非检验标识工序报工。 |
| | | MesProFeedbackApproveReqVO reqVO = new MesProFeedbackApproveReqVO(); |
| | | reqVO.setId(feedback.getId()); |
| | | assertThrows(Exception.class, () -> |
| | | feedbackService.approveFeedback(reqVO)); |
| | | |
| | | // 断言:不应该执行任何后续操作 |
| | | verify(productProduceService, never()).generateProductProduce(any(), anyBoolean(), any()); |
| | | verify(itemConsumeService, never()).generateItemConsume(any()); |
| | | assertFalse(feedbackService.approveFeedback(reqVO)); |
| | | verify(productProduceService).generateProductProduce(any(), eq(true), any()); |
| | | verify(productProduceService, never()).finishProductProduce(anyLong()); |
| | | } |
| | | |
| | | @Test |
| | |
| | | // 质检工序无论是否关键工序,都进入待检验。 |
| | | MesProFeedbackDO updated = feedbackMapper.selectById(feedback.getId()); |
| | | assertEquals(MesProFeedbackStatusEnum.UNCHECK.getStatus(), updated.getStatus()); |
| | | assertEquals(0, BigDecimal.ZERO.compareTo(updated.getUncheckQuantity())); |
| | | assertEquals(0, feedback.getFeedbackQuantity().compareTo(updated.getUncheckQuantity())); |
| | | |
| | | verify(productProduceService).generateProductProduce(any(), eq(true), any()); |
| | | verify(productProduceService, never()).finishProductProduce(anyLong()); |
| | |
| | | MesProFeedbackQuickCreateReqVO req = new MesProFeedbackQuickCreateReqVO(); |
| | | req.setTaskId(curTaskId); |
| | | req.setFeedbackQuantity(BigDecimal.TEN); |
| | | req.setFeedbackTime(java.time.LocalDateTime.of(2026, 10, 20, 9, 30)); |
| | | MesProFeedbackQuickCreateRespVO resp = feedbackService.quickCreateFeedback(req); |
| | | assertNotNull(resp); |
| | | assertNotNull(resp.getFeedbackId()); |
| | | assertEquals(req.getFeedbackTime(), feedbackMapper.selectById(resp.getFeedbackId()).getFeedbackTime()); |
| | | verify(autoCodeRecordService).generateAutoCode(anyString()); |
| | | } |
| | | |