From 3ff6604c75c887f4056ee03545d204bc9323286c Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 15 十月 2026 17:47:19 +0800
Subject: [PATCH] feat(mes): 新增报工设备快照功能并优化状态校验

---
 yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImplTest.java |   54 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImplTest.java b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImplTest.java
index a086275..304cee5 100644
--- a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImplTest.java
+++ b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImplTest.java
@@ -63,6 +63,9 @@
     private MesProFeedbackMapper feedbackMapper;
 
     @MockitoBean
+    private MesProFeedbackEquipmentService equipmentService;
+
+    @MockitoBean
     private MesProWorkOrderService workOrderService;
     @MockitoBean
     private MesProRouteProcessService routeProcessService;
@@ -94,6 +97,15 @@
     private MdmItemBatchConfigApi itemBatchConfigApi;
     @MockitoBean
     private BpmProcessInstanceApi processInstanceApi;
+
+    @Test
+    public void testEquipmentSnapshotSurvivesStatusUpdates() {
+        MesProFeedbackDO feedback = randomPojo(MesProFeedbackDO.class, f -> f.setMachineryIds("10,20"));
+        feedbackMapper.insert(feedback);
+        feedbackMapper.updateById(new MesProFeedbackDO().setId(feedback.getId())
+                .setStatus(MesProFeedbackStatusEnum.APPROVING.getStatus()));
+        assertEquals("10,20", feedbackMapper.selectById(feedback.getId()).getMachineryIds());
+    }
 
     @Test
     public void testUpdateProFeedbackWhenIpqcFinish_success_withUnqualified() {
@@ -146,12 +158,9 @@
         assertEquals(0, materialScrapQty.compareTo(updatedFeedback.getMaterialScrapQuantity()));
         assertEquals(0, otherScrapQty.compareTo(updatedFeedback.getOtherScrapQuantity()));
 
-        // 鏂█ 4锛氭洿鏂颁簡浠诲姟鍜屽伐鍗曠殑宸茬敓浜ф暟閲�
-        // 娉ㄦ剰锛氭暟閲忕粡杩� DB 瀛樺彇鍚� scale 鍙兘鍙樺寲锛岀敤 any() 鍖归厤
-        verify(taskService).updateProducedQuantity(eq(taskId),
-                any(BigDecimal.class), any(BigDecimal.class), any(BigDecimal.class));
-        verify(workOrderService).updateProducedQuantity(eq(workOrderId),
-                any(BigDecimal.class));
+        // 浜ч噺宸茬粡鍦ㄦ姤宸ュ鎵规椂绱锛岃川妫�鍥炶皟涓嶈兘閲嶅绱銆�
+        verify(taskService, never()).updateProducedQuantity(anyLong(), any(), any(), any());
+        verify(workOrderService, never()).updateProducedQuantity(anyLong(), any());
     }
 
     @Test
@@ -263,6 +272,8 @@
         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();
@@ -328,8 +339,8 @@
         verify(productProduceService).generateProductProduce(any(), eq(true), any());
         verify(productProduceService, never()).finishProductProduce(anyLong());
 
-        // 鏂█ 4锛氭病鏈夋洿鏂颁换鍔�/宸ュ崟鏁伴噺锛堢瓑 IPQC 鍥炶皟锛�
-        verify(taskService, never()).updateProducedQuantity(anyLong(), any(), any(), any());
+        // 浜ч噺鍦ㄥ鎵规椂绱锛屼骇鍑轰粛淇濇寔寰呮锛涢潪鏈亾涓嶆洿鏂板伐鍗曟�讳骇閲忋��
+        verify(taskService).updateProducedQuantity(eq(feedback.getTaskId()), any(), any(), any());
         verify(workOrderService, never()).updateProducedQuantity(anyLong(), any());
     }
 
@@ -353,6 +364,8 @@
                 .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();
@@ -366,9 +379,11 @@
         MesProFeedbackDO updated = feedbackMapper.selectById(feedback.getId());
         assertEquals(MesProFeedbackStatusEnum.FINISHED.getStatus(), updated.getStatus());
 
-        // 鏂█ 3锛氫笉鐢熸垚浜у嚭鍗曪紝涓嶆洿鏂颁换鍔�/宸ュ崟
-        verify(productProduceService, never()).generateProductProduce(any(), anyBoolean(), any());
-        verify(taskService, never()).updateProducedQuantity(anyLong(), any(), any(), any());
+        // 闈炲叧閿伐搴忎篃鐢熸垚浜у嚭骞剁疮璁′换鍔¤繘搴︼紝浣嗕笉绱宸ュ崟鎬讳骇閲忋��
+        verify(productProduceService).generateProductProduce(any(), eq(false), any());
+        verify(productProduceService).finishProductProduce(produce.getId());
+        verify(taskService).updateProducedQuantity(eq(feedback.getTaskId()), any(), any(), any());
+        verify(workOrderService, never()).updateProducedQuantity(anyLong(), any());
     }
 
     @Test
@@ -404,9 +419,9 @@
     }
 
     @Test
-    public void testApproveFeedback_nonKeyCheck_directFinishAndCleanUncheck() {
+    public void testApproveFeedback_nonKeyCheck_enterUncheckAndCleanQuantity() {
         // 鍑嗗鏁版嵁锛氶潪鍏抽敭 + 璐ㄦ宸ュ簭锛�!key+check锛夛紝uncheckQuantity > 0
-        // 搴旀斁琛岋紙checkFlag=true 涓嶆嫤鎴� uncheckQuantity锛夛紝鐩存帴瀹岀粨骞舵竻闆� uncheckQuantity
+        // 搴旀斁琛屽苟杩涘叆寰呮楠岋紝瀹℃壒闃舵鍙疮璁′竴娆′换鍔′骇閲忋��
         Long routeId = randomLongId();
         Long processId = randomLongId();
         MesProFeedbackDO feedback = randomPojo(MesProFeedbackDO.class, o -> {
@@ -430,16 +445,17 @@
         reqVO.setId(feedback.getId());
         boolean result = feedbackService.approveFeedback(reqVO);
 
-        // 鏂█ 1锛氳繑鍥� true锛堢洿鎺ュ畬鎴愶紝涓嶈蛋 UNCHECK锛�
-        assertTrue(result);
+        assertFalse(result);
 
-        // 鏂█ 2锛氱姸鎬佷负宸插畬鎴愶紝uncheckQuantity 琚竻闆�
+        // 璐ㄦ宸ュ簭鏃犺鏄惁鍏抽敭宸ュ簭锛岄兘杩涘叆寰呮楠屻��
         MesProFeedbackDO updated = feedbackMapper.selectById(feedback.getId());
-        assertEquals(MesProFeedbackStatusEnum.FINISHED.getStatus(), updated.getStatus());
+        assertEquals(MesProFeedbackStatusEnum.UNCHECK.getStatus(), updated.getStatus());
         assertEquals(0, BigDecimal.ZERO.compareTo(updated.getUncheckQuantity()));
 
-        // 鏂█ 3锛氶潪鍏抽敭宸ュ簭涓嶇敓鎴愪骇鍑哄崟
-        verify(productProduceService, never()).generateProductProduce(any(), anyBoolean(), any());
+        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());
     }
 
     // ==================== 椤哄簭鎶ュ伐锛堜笂涓�閬撳伐搴忓畬鎴愬悗鎵嶈兘鎶ヤ笅涓�閬擄級娴嬭瘯 ====================

--
Gitblit v1.9.3