From cea8396d93b31fe6037a0558febcabb2169363a8 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 14 十月 2026 14:02:25 +0800
Subject: [PATCH] feat(wm): 入库单和领料单支持手工填写关联信息

---
 yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImplTest.java |   88 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 88 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImplTest.java b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImplTest.java
index 684ac34..cb7436c 100644
--- a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImplTest.java
+++ b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImplTest.java
@@ -1,13 +1,20 @@
 package cn.iocoder.yudao.module.mes.service.wm.itemreceipt;
 
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
+import cn.iocoder.yudao.module.erp.api.purchase.ErpPurchaseOrderApi;
+import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
+import cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt.vo.MesWmItemReceiptSaveReqVO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.arrivalnotice.MesWmArrivalNoticeDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDetailDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptMapper;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmItemReceiptStatusEnum;
 import cn.iocoder.yudao.module.mes.service.qc.iqc.MesQcIqcService;
+import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeLineService;
 import cn.iocoder.yudao.module.mes.service.wm.arrivalnotice.MesWmArrivalNoticeService;
 import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
+import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.Import;
 import org.springframework.test.context.bean.override.mockito.MockitoBean;
@@ -15,6 +22,7 @@
 import jakarta.annotation.Resource;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.Collections;
 
@@ -24,6 +32,7 @@
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.*;
 
@@ -51,6 +60,85 @@
     private MesQcIqcService iqcService;
     @MockitoBean
     private MesWmTransactionService wmTransactionService;
+    @MockitoBean
+    private MesWmArrivalNoticeLineService arrivalNoticeLineService;
+    @MockitoBean
+    private SrmSupplierApi srmSupplierApi;
+    @MockitoBean
+    private BpmProcessInstanceApi processInstanceApi;
+    @MockitoBean
+    private ErpPurchaseOrderApi purchaseOrderApi;
+    @MockitoBean
+    private MdmItemApi mdmItemApi;
+
+    // ========== createItemReceipt锛氫緵搴斿晢 / 鍒拌揣閫氱煡鍗曟敮鎸佹墜宸ュ~鍐� ==========
+
+    @Test
+    public void testCreateItemReceipt_success_withManualVendorNameAndNoticeCode() {
+        // 鍑嗗鍙傛暟锛氬彧鎵嬪伐濉啓渚涘簲鍟嗗悕绉颁笌鍒拌揣閫氱煡鍗曞彿锛屼笉閫変緵搴斿晢涓绘暟鎹�佷笉閫夊埌璐ч�氱煡鍗�
+        MesWmItemReceiptSaveReqVO reqVO = new MesWmItemReceiptSaveReqVO();
+        reqVO.setCode("IR-MANUAL-" + randomLongId());
+        reqVO.setName("鎵嬪伐渚涘簲鍟嗗叆搴撳崟");
+        reqVO.setVendorId(null);
+        reqVO.setVendorName("鏌愭煇璐告槗鏈夐檺鍏徃");
+        reqVO.setNoticeId(null);
+        reqVO.setNoticeCode("AN2026020001");
+        reqVO.setReceiptDate(LocalDateTime.now());
+
+        // 璋冪敤
+        Long id = itemReceiptService.createItemReceipt(reqVO);
+
+        // 鏂█ 1锛氫繚瀛樻垚鍔燂紝鎵嬪伐濉啓鐨勫唴瀹硅惤搴�
+        MesWmItemReceiptDO saved = itemReceiptMapper.selectById(id);
+        assertNotNull(saved);
+        assertNull(saved.getVendorId());
+        assertEquals("鏌愭煇璐告槗鏈夐檺鍏徃", saved.getVendorName());
+        assertNull(saved.getNoticeId());
+        assertEquals("AN2026020001", saved.getNoticeCode());
+        // 鏂█ 2锛氭湭閫夋嫨渚涘簲鍟嗕富鏁版嵁鏃朵笉鏍¢獙渚涘簲鍟�
+        verify(srmSupplierApi, never()).getSupplier(anyLong());
+    }
+
+    @Test
+    public void testCreateItemReceipt_success_withNoticeIdButManualVendor() {
+        // 鍑嗗鍙傛暟锛氬叧鑱斾簡鍒拌揣閫氱煡鍗曪紙鍏煎鍘嗗彶鍗曟嵁锛夛紝浣嗕緵搴斿晢鏄墜宸ュ~鍐�
+        Long noticeId = randomLongId();
+        when(arrivalNoticeService.validateArrivalNoticeReadyForReceipt(eq(noticeId)))
+                .thenReturn(randomPojo(MesWmArrivalNoticeDO.class, o -> o.setVendorId(randomLongId())));
+
+        MesWmItemReceiptSaveReqVO reqVO = new MesWmItemReceiptSaveReqVO();
+        reqVO.setCode("IR-MANUAL-" + randomLongId());
+        reqVO.setName("鎵嬪伐渚涘簲鍟嗗叆搴撳崟");
+        reqVO.setNoticeId(noticeId);
+        reqVO.setVendorId(null);
+        reqVO.setVendorName("鏌愭煇璐告槗鏈夐檺鍏徃");
+        reqVO.setReceiptDate(LocalDateTime.now());
+
+        // 璋冪敤锛氫笉搴斿洜銆屼緵搴斿晢涓庡埌璐ч�氱煡鍗曚笉涓�鑷淬�嶈�屾姤閿�
+        Long id = itemReceiptService.createItemReceipt(reqVO);
+
+        // 鏂█锛氫繚瀛樻垚鍔�
+        assertNotNull(itemReceiptMapper.selectById(id));
+    }
+
+    @Test
+    public void testCreateItemReceipt_success_withVendorId() {
+        // 鍑嗗鍙傛暟锛氫粛鍙�夋嫨渚涘簲鍟嗕富鏁版嵁
+        Long vendorId = randomLongId();
+        MesWmItemReceiptSaveReqVO reqVO = new MesWmItemReceiptSaveReqVO();
+        reqVO.setCode("IR-MANUAL-" + randomLongId());
+        reqVO.setName("閫夋嫨渚涘簲鍟嗗叆搴撳崟");
+        reqVO.setVendorId(vendorId);
+        reqVO.setReceiptDate(LocalDateTime.now());
+
+        // 璋冪敤
+        Long id = itemReceiptService.createItemReceipt(reqVO);
+
+        // 鏂█ 1锛氫繚瀛樻垚鍔�
+        assertNotNull(itemReceiptMapper.selectById(id));
+        // 鏂█ 2锛氶�夋嫨浜嗕緵搴斿晢涓绘暟鎹椂浠嶄細鏍¢獙渚涘簲鍟嗗瓨鍦�
+        verify(srmSupplierApi).getSupplier(eq(vendorId));
+    }
 
     // ========== finishItemReceipt ==========
 

--
Gitblit v1.9.3