From de0202274ed147e89fdbba0a953936a3b9997ec7 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 22 九月 2026 17:37:50 +0800
Subject: [PATCH] feat(mes): 更新IPQC过程检验功能

---
 yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImplTest.java |  373 +++++++++++++++--------------------------------------
 1 files changed, 107 insertions(+), 266 deletions(-)

diff --git a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImplTest.java b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImplTest.java
index 7207edb..26c638d 100644
--- a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImplTest.java
+++ b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/qc/ipqc/MesQcIpqcServiceImplTest.java
@@ -2,13 +2,9 @@
 
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
 import cn.iocoder.yudao.module.mes.controller.admin.qc.ipqc.vo.MesQcIpqcSaveReqVO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.pro.feedback.MesProFeedbackDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProcessDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.pro.route.MesProRouteProductDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.pro.task.MesProTaskDO;
-import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.ipqc.MesQcIpqcDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.qc.template.MesQcTemplateItemDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productproduce.MesWmProductProduceLineDO;
@@ -16,15 +12,10 @@
 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
 import cn.iocoder.yudao.module.mes.enums.qc.MesQcStatusEnum;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum;
-import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
-import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
 import cn.iocoder.yudao.module.mes.service.pro.feedback.MesProFeedbackService;
-import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProcessService;
-import cn.iocoder.yudao.module.mes.service.pro.route.MesProRouteProductService;
-import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService;
-import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
 import cn.iocoder.yudao.module.mes.service.qc.defectrecord.MesQcDefectRecordService;
 import cn.iocoder.yudao.module.mes.service.qc.indicatorresult.MesQcIndicatorResultService;
+import cn.iocoder.yudao.module.mes.service.qc.ncr.MesQcNcrService;
 import cn.iocoder.yudao.module.mes.service.qc.template.MesQcTemplateItemService;
 import cn.iocoder.yudao.module.mes.service.wm.productproduce.MesWmProductProduceLineService;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -34,6 +25,7 @@
 import org.springframework.test.context.bean.override.mockito.MockitoBean;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
 import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
@@ -60,11 +52,7 @@
     @MockitoBean
     private MesQcIpqcLineService ipqcLineService;
     @MockitoBean
-    private MesProWorkOrderService workOrderService;
-    @MockitoBean
-    private MesMdWorkstationService workstationService;
-    @MockitoBean
-    private MesMdItemService itemService;
+    private MdmItemApi mdmItemApi;
     @MockitoBean
     private MesQcDefectRecordService defectRecordService;
     @MockitoBean
@@ -72,15 +60,11 @@
     @MockitoBean
     private MesProFeedbackService feedbackService;
     @MockitoBean
-    private MesProRouteProductService routeProductService;
-    @MockitoBean
-    private MesProRouteProcessService routeProcessService;
-    @MockitoBean
-    private MesProTaskService taskService;
-    @MockitoBean
     private MesQcIndicatorResultService indicatorResultService;
     @MockitoBean
     private MesWmProductProduceLineService productProduceLineService;
+    @MockitoBean
+    private MesQcNcrService ncrService;
 
     @Test
     public void testFinishIpqc_writeBack_feedback() {
@@ -185,34 +169,46 @@
 
     @Test
     public void testFinishIpqc_writeBack_sourceDocTypeDirtyData() {
-        // 鍑嗗鏁版嵁锛歴ourceDocType 闈炵┖浣� sourceDocId 涓虹┖锛屽簲璇ユ姏寮傚父
+        // 鍑嗗鏁版嵁锛歴ourceDocType 闈炵┖浣� sourceDocId 涓虹┖锛岃烦杩囧洖鍐�
         MesQcIpqcDO ipqc = randomPojo(MesQcIpqcDO.class, o -> {
             o.setStatus(MesQcStatusEnum.DRAFT.getStatus());
             o.setCheckResult(1);
             o.setSourceDocType(MesBizTypeConstants.PRO_FEEDBACK);
             o.setSourceDocId(null); // 鑴忔暟鎹�
             o.setSourceLineId(null);
+            o.setUnqualifiedQuantity(BigDecimal.ZERO);
         });
         ipqcMapper.insert(ipqc);
 
-        // 璋冪敤锛屽苟鏂█寮傚父
-        assertThrows(IllegalArgumentException.class, () -> ipqcService.finishIpqc(ipqc.getId()));
+        // 璋冪敤锛氫笉鎶涘紓甯革紝浠呰烦杩囧洖鍐�
+        ipqcService.finishIpqc(ipqc.getId());
+
+        MesQcIpqcDO updatedIpqc = ipqcMapper.selectById(ipqc.getId());
+        assertEquals(MesQcStatusEnum.FINISHED.getStatus(), updatedIpqc.getStatus());
+        verify(feedbackService, never()).updateProFeedbackWhenIpqcFinish(
+                anyLong(), anyLong(), any(), any(), any(), any(), any());
     }
 
     @Test
     public void testFinishIpqc_writeBack_unknownSourceDocType() {
-        // 鍑嗗鏁版嵁锛歴ourceDocType 鏃犳硶璇嗗埆
+        // 鍑嗗鏁版嵁锛歴ourceDocType 鏃犳硶璇嗗埆锛屽洖鍐欓樁娈典笉鏍¢獙绫诲瀷锛堜粎鎸� sourceDocId 鍥炲啓鎶ュ伐锛�
         MesQcIpqcDO ipqc = randomPojo(MesQcIpqcDO.class, o -> {
             o.setStatus(MesQcStatusEnum.DRAFT.getStatus());
             o.setCheckResult(1);
             o.setSourceDocType(99999); // 鏃犳硶璇嗗埆鐨勭被鍨�
             o.setSourceDocId(randomLongId());
-            o.setSourceLineId(null);
+            o.setSourceLineId(randomLongId());
+            o.setUnqualifiedQuantity(BigDecimal.ZERO);
         });
         ipqcMapper.insert(ipqc);
 
-        // 璋冪敤锛屽苟鏂█寮傚父
-        assertThrows(IllegalArgumentException.class, () -> ipqcService.finishIpqc(ipqc.getId()));
+        // 璋冪敤锛氭寜 sourceDocId 鍥炲啓鎶ュ伐
+        ipqcService.finishIpqc(ipqc.getId());
+
+        MesQcIpqcDO updatedIpqc = ipqcMapper.selectById(ipqc.getId());
+        assertEquals(MesQcStatusEnum.FINISHED.getStatus(), updatedIpqc.getStatus());
+        verify(feedbackService).updateProFeedbackWhenIpqcFinish(
+                anyLong(), anyLong(), any(), any(), any(), any(), any());
     }
 
     @Test
@@ -242,159 +238,82 @@
         assertThrows(Exception.class, () -> ipqcService.finishIpqc(ipqc.getId()));
     }
 
-    // ==================== processId 鎺ㄥ琛屼负娴嬭瘯 ====================
+    // ==================== 鎵瑰彿蹇呭~鏍¢獙 ====================
 
     /**
-     * 宸ヤ綅鏈夊伐搴� + 璇ュ伐搴忓湪浜у搧宸ヨ壓璺嚎涓� 鈫� processId 搴旇琚缃负宸ヤ綅宸ュ簭
+     * 鎵瑰彿涓� null 鈫� 鍒涘缓澶辫触
      */
     @Test
-    public void testCreateIpqc_processId_workstationHasProcess() {
-        // 鍑嗗鍙傛暟
-        Long workstationId = randomLongId();
-        Long workOrderId = randomLongId();
-        Long productId = randomLongId();
-        Long processId = randomLongId();
-        Long routeId = randomLongId();
-        Long templateId = randomLongId();
-
+    public void testCreateIpqc_batchCode_null() {
         MesQcIpqcSaveReqVO reqVO = new MesQcIpqcSaveReqVO();
-        reqVO.setCode("IPQC-TEST-001");
-        reqVO.setWorkstationId(workstationId);
-        reqVO.setWorkOrderId(workOrderId);
+        reqVO.setCode("IPQC-BC-001");
+        reqVO.setBatchCode(null);
+        reqVO.setItemId(randomLongId());
         reqVO.setInspectorUserId(randomLongId());
 
-        // mock 宸ヤ綅杩斿洖鏈夊伐搴�
-        MesMdWorkstationDO workstation = new MesMdWorkstationDO();
-        workstation.setId(workstationId);
-        workstation.setProcessId(processId);
-        when(workstationService.validateWorkstationExists(workstationId)).thenReturn(workstation);
-        // mock 宸ュ崟
-        MesProWorkOrderDO workOrder = new MesProWorkOrderDO();
-        workOrder.setId(workOrderId);
-        workOrder.setProductId(productId);
-        when(workOrderService.validateWorkOrderExists(workOrderId)).thenReturn(workOrder);
-        when(workOrderService.validateWorkOrderConfirmed(workOrderId)).thenReturn(workOrder);
-        // mock 妯℃澘鍖归厤
-        MesQcTemplateItemDO templateItem = new MesQcTemplateItemDO();
-        templateItem.setTemplateId(templateId);
-        when(templateItemService.getRequiredTemplateByItemIdAndType(eq(productId), anyInt())).thenReturn(templateItem);
-        // mock 宸ヨ壓璺嚎
-        MesProRouteProductDO routeProduct = new MesProRouteProductDO();
-        routeProduct.setRouteId(routeId);
-        when(routeProductService.getRouteProductByItemId(productId)).thenReturn(routeProduct);
-        // mock 宸ュ簭鍦ㄨ矾绾夸腑
-        when(routeProcessService.getRouteProcessByRouteIdAndProcessId(routeId, processId))
-                .thenReturn(new MesProRouteProcessDO());
-
-        // 璋冪敤
-        Long ipqcId = ipqcService.createIpqc(reqVO);
-
-        // 鏂█锛歱rocessId 搴旇鏄伐浣嶅伐搴�
-        MesQcIpqcDO ipqc = ipqcMapper.selectById(ipqcId);
-        assertEquals(processId, ipqc.getProcessId());
+        ServiceException ex = assertThrows(ServiceException.class, () -> ipqcService.createIpqc(reqVO));
+        assertEquals(QC_IPQC_BATCH_CODE_REQUIRED.getCode(), ex.getCode());
     }
 
     /**
-     * 宸ヤ綅娌℃湁宸ュ簭锛坧rocessId=null锛夆啋 processId 搴旇鐣� null锛堜笉鍥為��鍒颁换鍔″伐搴忥級
+     * 鎵瑰彿涓虹┖鐧戒覆 鈫� 鍒涘缓澶辫触锛堝厹搴曞唴閮�/RPC 璋冪敤缁曡繃 VO 鏍¢獙鐨勬儏鍐碉級
      */
     @Test
-    public void testCreateIpqc_processId_workstationNoProcess_shouldBeNull() {
-        // 鍑嗗鍙傛暟
-        Long workstationId = randomLongId();
-        Long workOrderId = randomLongId();
-        Long productId = randomLongId();
-        Long taskId = randomLongId();
-        Long templateId = randomLongId();
-
+    public void testCreateIpqc_batchCode_blank() {
         MesQcIpqcSaveReqVO reqVO = new MesQcIpqcSaveReqVO();
-        reqVO.setCode("IPQC-TEST-002");
-        reqVO.setWorkstationId(workstationId);
-        reqVO.setWorkOrderId(workOrderId);
-        reqVO.setTaskId(taskId); // 鏁呮剰浼犲叆 taskId锛岄獙璇佷笉浼氬洖閫�
+        reqVO.setCode("IPQC-BC-002");
+        reqVO.setBatchCode("  ");
+        reqVO.setItemId(randomLongId());
         reqVO.setInspectorUserId(randomLongId());
 
-        // mock 宸ヤ綅娌℃湁宸ュ簭
-        MesMdWorkstationDO workstation = new MesMdWorkstationDO();
-        workstation.setId(workstationId);
-        workstation.setProcessId(null); // 鏃犲伐搴�
-        when(workstationService.validateWorkstationExists(workstationId)).thenReturn(workstation);
-        // mock 宸ュ崟
-        MesProWorkOrderDO workOrder = new MesProWorkOrderDO();
-        workOrder.setId(workOrderId);
-        workOrder.setProductId(productId);
-        when(workOrderService.validateWorkOrderExists(workOrderId)).thenReturn(workOrder);
-        when(workOrderService.validateWorkOrderConfirmed(workOrderId)).thenReturn(workOrder);
-        // mock 浠诲姟
-        MesProTaskDO task = new MesProTaskDO();
-        task.setId(taskId);
-        task.setWorkOrderId(workOrderId);
-        task.setWorkstationId(workstationId);
-        task.setItemId(productId);
-        when(taskService.validateTaskNotFinished(taskId)).thenReturn(task);
-        // mock 妯℃澘鍖归厤
-        MesQcTemplateItemDO templateItem = new MesQcTemplateItemDO();
-        templateItem.setTemplateId(templateId);
-        when(templateItemService.getRequiredTemplateByItemIdAndType(eq(productId), anyInt())).thenReturn(templateItem);
+        ServiceException ex = assertThrows(ServiceException.class, () -> ipqcService.createIpqc(reqVO));
+        assertEquals(QC_IPQC_BATCH_CODE_REQUIRED.getCode(), ex.getCode());
+    }
+
+    // ==================== 鍒涘缓鎴愬姛锛氭壒鍙� / 鐗╂枡钀藉簱 ====================
+
+    @Test
+    public void testCreateIpqc_success() {
+        // 鍑嗗鍙傛暟
+        Long itemId = randomLongId();
+        Long templateId = randomLongId();
+        MesQcIpqcSaveReqVO reqVO = new MesQcIpqcSaveReqVO();
+        reqVO.setCode("IPQC-OK-001");
+        reqVO.setName("娴嬭瘯杩囩▼妫�楠�");
+        reqVO.setBatchCode("BC-2025-001");
+        reqVO.setItemId(itemId);
+        reqVO.setInspectorUserId(randomLongId());
+        mockTemplate(itemId, templateId);
 
         // 璋冪敤
         Long ipqcId = ipqcService.createIpqc(reqVO);
 
-        // 鏂█锛歱rocessId 搴旇鏄� null锛屽嵆浣夸紶鍏ヤ簡 taskId 涔熶笉搴旇鍥為��
+        // 鏂█锛氭壒鍙蜂笌鐗╂枡钀藉簱锛屾ā鏉挎寜鐗╂枡+IPQC 绫诲瀷鍖归厤
         MesQcIpqcDO ipqc = ipqcMapper.selectById(ipqcId);
-        assertNull(ipqc.getProcessId(),
-                "宸ヤ綅鏃犲伐搴忔椂 processId 搴斾负 null锛屼笉搴斿洖閫�鍒颁换鍔″伐搴�");
-        // 鏂█锛氫笉搴旇璇诲彇浠诲姟鐨� processId
-        verify(routeProductService, never()).getRouteProductByItemId(any());
+        assertNotNull(ipqc);
+        assertEquals("BC-2025-001", ipqc.getBatchCode());
+        assertEquals(itemId, ipqc.getItemId());
+        assertEquals(templateId, ipqc.getTemplateId());
+        verify(mdmItemApi).validateItemExists(itemId);
     }
 
     /**
-     * 宸ヤ綅鏈夊伐搴忎絾璇ュ伐搴忎笉鍦ㄤ骇鍝佸伐鑹鸿矾绾夸腑 鈫� processId 搴旇鐣� null
+     * 浼犲叆浜嗕笉鍦ㄥ尮閰嶅垪琛ㄤ腑鐨� templateId 鈫� 鎷掔粷鍒涘缓
      */
     @Test
-    public void testCreateIpqc_processId_processNotInRoute() {
-        // 鍑嗗鍙傛暟
-        Long workstationId = randomLongId();
-        Long workOrderId = randomLongId();
-        Long productId = randomLongId();
-        Long processId = randomLongId();
-        Long routeId = randomLongId();
-        Long templateId = randomLongId();
-
+    public void testCreateIpqc_templateId_notMatched() {
+        Long itemId = randomLongId();
         MesQcIpqcSaveReqVO reqVO = new MesQcIpqcSaveReqVO();
-        reqVO.setCode("IPQC-TEST-003");
-        reqVO.setWorkstationId(workstationId);
-        reqVO.setWorkOrderId(workOrderId);
+        reqVO.setCode("IPQC-TPL-001");
+        reqVO.setName("鎸囧畾鏂规涓嶅尮閰�");
+        reqVO.setBatchCode("BC-2025-002");
+        reqVO.setItemId(itemId);
         reqVO.setInspectorUserId(randomLongId());
+        reqVO.setTemplateId(randomLongId()); // 涓庡尮閰嶇粨鏋滀笉涓�鑷�
+        mockTemplate(itemId, randomLongId());
 
-        // mock 宸ヤ綅鏈夊伐搴�
-        MesMdWorkstationDO workstation = new MesMdWorkstationDO();
-        workstation.setId(workstationId);
-        workstation.setProcessId(processId);
-        when(workstationService.validateWorkstationExists(workstationId)).thenReturn(workstation);
-        // mock 宸ュ崟
-        MesProWorkOrderDO workOrder = new MesProWorkOrderDO();
-        workOrder.setId(workOrderId);
-        workOrder.setProductId(productId);
-        when(workOrderService.validateWorkOrderExists(workOrderId)).thenReturn(workOrder);
-        when(workOrderService.validateWorkOrderConfirmed(workOrderId)).thenReturn(workOrder);
-        // mock 妯℃澘鍖归厤
-        MesQcTemplateItemDO templateItem = new MesQcTemplateItemDO();
-        templateItem.setTemplateId(templateId);
-        when(templateItemService.getRequiredTemplateByItemIdAndType(eq(productId), anyInt())).thenReturn(templateItem);
-        // mock 宸ヨ壓璺嚎瀛樺湪
-        MesProRouteProductDO routeProduct = new MesProRouteProductDO();
-        routeProduct.setRouteId(routeId);
-        when(routeProductService.getRouteProductByItemId(productId)).thenReturn(routeProduct);
-        // mock 宸ュ簭涓嶅湪璺嚎涓�
-        when(routeProcessService.getRouteProcessByRouteIdAndProcessId(routeId, processId))
-                .thenReturn(null);
-
-        // 璋冪敤
-        Long ipqcId = ipqcService.createIpqc(reqVO);
-
-        // 鏂█锛歱rocessId 搴旇鏄� null
-        MesQcIpqcDO ipqc = ipqcMapper.selectById(ipqcId);
-        assertNull(ipqc.getProcessId());
+        ServiceException ex = assertThrows(ServiceException.class, () -> ipqcService.createIpqc(reqVO));
+        assertEquals(QC_NO_TEMPLATE.getCode(), ex.getCode());
     }
 
     // ==================== sourceLineId 鏍¢獙娴嬭瘯 ====================
@@ -404,35 +323,10 @@
      */
     @Test
     public void testCreateIpqc_sourceLineId_required() {
-        // 鍑嗗鍙傛暟
-        Long workstationId = randomLongId();
-        Long workOrderId = randomLongId();
-        Long productId = randomLongId();
+        Long itemId = randomLongId();
         Long feedbackId = randomLongId();
-        Long templateId = randomLongId();
-
-        MesQcIpqcSaveReqVO reqVO = new MesQcIpqcSaveReqVO();
-        reqVO.setCode("IPQC-SL-001");
-        reqVO.setWorkstationId(workstationId);
-        reqVO.setWorkOrderId(workOrderId);
-        reqVO.setInspectorUserId(randomLongId());
-        reqVO.setSourceDocType(MesBizTypeConstants.PRO_FEEDBACK);
-        reqVO.setSourceDocId(feedbackId);
-        reqVO.setSourceLineId(null); // 涓嶄紶 sourceLineId
-
-        // mock
-        MesMdWorkstationDO workstation = new MesMdWorkstationDO();
-        workstation.setId(workstationId);
-        workstation.setProcessId(null);
-        when(workstationService.validateWorkstationExists(workstationId)).thenReturn(workstation);
-        MesProWorkOrderDO workOrder = new MesProWorkOrderDO();
-        workOrder.setId(workOrderId);
-        workOrder.setProductId(productId);
-        when(workOrderService.validateWorkOrderExists(workOrderId)).thenReturn(workOrder);
-        when(workOrderService.validateWorkOrderConfirmed(workOrderId)).thenReturn(workOrder);
-        MesQcTemplateItemDO templateItem = new MesQcTemplateItemDO();
-        templateItem.setTemplateId(templateId);
-        when(templateItemService.getRequiredTemplateByItemIdAndType(eq(productId), anyInt())).thenReturn(templateItem);
+        MesQcIpqcSaveReqVO reqVO = buildFeedbackReqVO("IPQC-SL-001", itemId, feedbackId, null);
+        mockTemplate(itemId, randomLongId());
         when(feedbackService.validateFeedbackExists(feedbackId)).thenReturn(new MesProFeedbackDO());
 
         // 璋冪敤锛屾柇瑷�寮傚父
@@ -445,36 +339,11 @@
      */
     @Test
     public void testCreateIpqc_sourceLineId_notBelong() {
-        // 鍑嗗鍙傛暟
-        Long workstationId = randomLongId();
-        Long workOrderId = randomLongId();
-        Long productId = randomLongId();
+        Long itemId = randomLongId();
         Long feedbackId = randomLongId();
         Long sourceLineId = randomLongId();
-        Long templateId = randomLongId();
-
-        MesQcIpqcSaveReqVO reqVO = new MesQcIpqcSaveReqVO();
-        reqVO.setCode("IPQC-SL-002");
-        reqVO.setWorkstationId(workstationId);
-        reqVO.setWorkOrderId(workOrderId);
-        reqVO.setInspectorUserId(randomLongId());
-        reqVO.setSourceDocType(MesBizTypeConstants.PRO_FEEDBACK);
-        reqVO.setSourceDocId(feedbackId);
-        reqVO.setSourceLineId(sourceLineId);
-
-        // mock
-        MesMdWorkstationDO workstation = new MesMdWorkstationDO();
-        workstation.setId(workstationId);
-        workstation.setProcessId(null);
-        when(workstationService.validateWorkstationExists(workstationId)).thenReturn(workstation);
-        MesProWorkOrderDO workOrder = new MesProWorkOrderDO();
-        workOrder.setId(workOrderId);
-        workOrder.setProductId(productId);
-        when(workOrderService.validateWorkOrderExists(workOrderId)).thenReturn(workOrder);
-        when(workOrderService.validateWorkOrderConfirmed(workOrderId)).thenReturn(workOrder);
-        MesQcTemplateItemDO templateItem = new MesQcTemplateItemDO();
-        templateItem.setTemplateId(templateId);
-        when(templateItemService.getRequiredTemplateByItemIdAndType(eq(productId), anyInt())).thenReturn(templateItem);
+        MesQcIpqcSaveReqVO reqVO = buildFeedbackReqVO("IPQC-SL-002", itemId, feedbackId, sourceLineId);
+        mockTemplate(itemId, randomLongId());
         when(feedbackService.validateFeedbackExists(feedbackId)).thenReturn(new MesProFeedbackDO());
         // mock锛氫骇鍑鸿瀛樺湪浣� feedbackId 涓嶅尮閰�
         MesWmProductProduceLineDO line = new MesWmProductProduceLineDO();
@@ -493,36 +362,11 @@
      */
     @Test
     public void testCreateIpqc_sourceLineId_notPending() {
-        // 鍑嗗鍙傛暟
-        Long workstationId = randomLongId();
-        Long workOrderId = randomLongId();
-        Long productId = randomLongId();
+        Long itemId = randomLongId();
         Long feedbackId = randomLongId();
         Long sourceLineId = randomLongId();
-        Long templateId = randomLongId();
-
-        MesQcIpqcSaveReqVO reqVO = new MesQcIpqcSaveReqVO();
-        reqVO.setCode("IPQC-SL-003");
-        reqVO.setWorkstationId(workstationId);
-        reqVO.setWorkOrderId(workOrderId);
-        reqVO.setInspectorUserId(randomLongId());
-        reqVO.setSourceDocType(MesBizTypeConstants.PRO_FEEDBACK);
-        reqVO.setSourceDocId(feedbackId);
-        reqVO.setSourceLineId(sourceLineId);
-
-        // mock
-        MesMdWorkstationDO workstation = new MesMdWorkstationDO();
-        workstation.setId(workstationId);
-        workstation.setProcessId(null);
-        when(workstationService.validateWorkstationExists(workstationId)).thenReturn(workstation);
-        MesProWorkOrderDO workOrder = new MesProWorkOrderDO();
-        workOrder.setId(workOrderId);
-        workOrder.setProductId(productId);
-        when(workOrderService.validateWorkOrderExists(workOrderId)).thenReturn(workOrder);
-        when(workOrderService.validateWorkOrderConfirmed(workOrderId)).thenReturn(workOrder);
-        MesQcTemplateItemDO templateItem = new MesQcTemplateItemDO();
-        templateItem.setTemplateId(templateId);
-        when(templateItemService.getRequiredTemplateByItemIdAndType(eq(productId), anyInt())).thenReturn(templateItem);
+        MesQcIpqcSaveReqVO reqVO = buildFeedbackReqVO("IPQC-SL-003", itemId, feedbackId, sourceLineId);
+        mockTemplate(itemId, randomLongId());
         when(feedbackService.validateFeedbackExists(feedbackId)).thenReturn(new MesProFeedbackDO());
         // mock锛氫骇鍑鸿瀛樺湪涓斿綊灞炴纭紝浣嗕笉鏄� PENDING 鐘舵��
         MesWmProductProduceLineDO line = new MesWmProductProduceLineDO();
@@ -541,36 +385,11 @@
      */
     @Test
     public void testCreateIpqc_sourceLineId_success() {
-        // 鍑嗗鍙傛暟
-        Long workstationId = randomLongId();
-        Long workOrderId = randomLongId();
-        Long productId = randomLongId();
+        Long itemId = randomLongId();
         Long feedbackId = randomLongId();
         Long sourceLineId = randomLongId();
-        Long templateId = randomLongId();
-
-        MesQcIpqcSaveReqVO reqVO = new MesQcIpqcSaveReqVO();
-        reqVO.setCode("IPQC-SL-004");
-        reqVO.setWorkstationId(workstationId);
-        reqVO.setWorkOrderId(workOrderId);
-        reqVO.setInspectorUserId(randomLongId());
-        reqVO.setSourceDocType(MesBizTypeConstants.PRO_FEEDBACK);
-        reqVO.setSourceDocId(feedbackId);
-        reqVO.setSourceLineId(sourceLineId);
-
-        // mock
-        MesMdWorkstationDO workstation = new MesMdWorkstationDO();
-        workstation.setId(workstationId);
-        workstation.setProcessId(null);
-        when(workstationService.validateWorkstationExists(workstationId)).thenReturn(workstation);
-        MesProWorkOrderDO workOrder = new MesProWorkOrderDO();
-        workOrder.setId(workOrderId);
-        workOrder.setProductId(productId);
-        when(workOrderService.validateWorkOrderExists(workOrderId)).thenReturn(workOrder);
-        when(workOrderService.validateWorkOrderConfirmed(workOrderId)).thenReturn(workOrder);
-        MesQcTemplateItemDO templateItem = new MesQcTemplateItemDO();
-        templateItem.setTemplateId(templateId);
-        when(templateItemService.getRequiredTemplateByItemIdAndType(eq(productId), anyInt())).thenReturn(templateItem);
+        MesQcIpqcSaveReqVO reqVO = buildFeedbackReqVO("IPQC-SL-004", itemId, feedbackId, sourceLineId);
+        mockTemplate(itemId, randomLongId());
         MesProFeedbackDO feedback = new MesProFeedbackDO();
         feedback.setId(feedbackId);
         feedback.setCode("FB-001");
@@ -593,4 +412,26 @@
         assertEquals("FB-001", ipqc.getSourceDocCode());
     }
 
+    // ==================== 娴嬭瘯杈呭姪 ====================
+
+    private MesQcIpqcSaveReqVO buildFeedbackReqVO(String code, Long itemId, Long feedbackId, Long sourceLineId) {
+        MesQcIpqcSaveReqVO reqVO = new MesQcIpqcSaveReqVO();
+        reqVO.setCode(code);
+        reqVO.setName("鏉ユ簮鏍¢獙杩囩▼妫�楠�");
+        reqVO.setBatchCode("BC-SL-001");
+        reqVO.setItemId(itemId);
+        reqVO.setInspectorUserId(randomLongId());
+        reqVO.setSourceDocType(MesBizTypeConstants.PRO_FEEDBACK);
+        reqVO.setSourceDocId(feedbackId);
+        reqVO.setSourceLineId(sourceLineId);
+        return reqVO;
+    }
+
+    private void mockTemplate(Long itemId, Long templateId) {
+        MesQcTemplateItemDO templateItem = new MesQcTemplateItemDO();
+        templateItem.setTemplateId(templateId);
+        when(templateItemService.getTemplateItemList(eq(itemId), anyInt()))
+                .thenReturn(List.of(templateItem));
+    }
+
 }

--
Gitblit v1.9.3