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/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueSaveReqVO.java |   12 ++
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java               |   12 ++
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemreceipt/MesWmItemReceiptMapper.java                |    1 
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptSaveReqVO.java   |    9 +
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java             |    9 +
 yudao-module-mes/src/test/resources/sql/create_tables.sql                                                                      |    5 +
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java     |   14 ++
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productissue/MesWmProductIssueDO.java             |   18 +++
 docs/project-business/data/objects.json                                                                                        |    4 
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptPageReqVO.java   |    3 
 docs/sql/config_export_all_20260928.sql                                                                                        |    5 +
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/MesWmProductIssueController.java   |   29 ++++-
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueRespVO.java    |    4 
 yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImplTest.java         |   88 +++++++++++++++++
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java           |   51 ++++++----
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java       |    4 
 16 files changed, 224 insertions(+), 44 deletions(-)

diff --git a/docs/project-business/data/objects.json b/docs/project-business/data/objects.json
index 97cab45..e374767 100644
--- a/docs/project-business/data/objects.json
+++ b/docs/project-business/data/objects.json
@@ -26,8 +26,8 @@
     {"name": "鎶ュ伐鍗�", "module": "鐢熶骇", "table": "mes_pro_feedback", "doc": "鑽夌0鈫掑鎵逛腑2鈫掑緟妫�3/瀹屾垚4锛屾寜宸ュ簭椤哄簭鏍¢獙(涓婇亾宸ュ簭鎶ユ弧鎵嶅彲鎶�)锛岃仈鍔ㄥ�掑啿娑堣��/浜у嚭鍏ュ簱/IPQC", "upstream": ["鐢熶骇浠诲姟"], "downstream": ["浜у搧浜у嚭", "鐗╂枡娑堣��", "IPQC"], "keywords": "鎶ュ伐 feedback"},
     {"name": "宸ヨ壓璺嚎", "module": "鐢熶骇", "table": "mes_pro_route", "doc": "宸ュ簭椤哄簭+璐ㄦ/鍏抽敭/鍊掑啿鏍囪锛岄┍鍔ㄥ伐鍗曚换鍔′笌鎶ュ伐瑙勫垯", "upstream": [], "downstream": ["鐢熶骇宸ュ崟"], "keywords": "宸ヨ壓 璺嚎 route 宸ュ簭"},
     {"name": "鍒拌揣閫氱煡鍗�", "module": "浠撳偍", "table": "mes_wm_arrival_notice", "doc": "閲囪喘璁㈠崟纭鏀惰揣鐢熸垚锛岃崏绋�0鈫掑緟璐ㄦ2鈫掑緟鍏ュ簱3鈫掑畬鎴�4", "upstream": ["閲囪喘璁㈠崟"], "downstream": ["IQC", "閲囪喘鍏ュ簱"], "keywords": "鍒拌揣 鏀惰揣 arrival"},
-    {"name": "閲囪喘鍏ュ簱鍗�", "module": "浠撳偍", "table": "mes_wm_item_receipt", "doc": "鑽夌0鈫掑緟涓婃灦2鈫掑緟鎵ц3鈫掑畬鎴�4锛屽畬鎴愬悗搴撳瓨+骞跺洖鍐� ERP inCount/inStatus", "upstream": ["鍒拌揣閫氱煡"], "downstream": ["搴撳瓨鍙拌处", "閲囪喘璁㈠崟(鍥炲啓)"], "keywords": "閲囪喘鍏ュ簱 鏀惰揣鍏ュ簱 receipt"},
-    {"name": "鐢熶骇棰嗘枡鍗�", "module": "浠撳偍", "table": "mes_wm_product_issue", "doc": "鑽夌0鈫掑緟鎷h揣2鈫掑緟鎵ц3鈫掑畬鎴�4锛屽簱瀛�-", "upstream": ["鐢熶骇宸ュ崟"], "downstream": ["搴撳瓨鍙拌处"], "keywords": "棰嗘枡 issue"},
+    {"name": "閲囪喘鍏ュ簱鍗�", "module": "浠撳偍", "table": "mes_wm_item_receipt", "doc": "鑽夌0鈫掑緟涓婃灦2鈫掑緟鎵ц3鈫掑畬鎴�4锛屽畬鎴愬悗搴撳瓨+骞跺洖鍐� ERP inCount/inStatus锛涘寳鏂圭鎶�branch锛氬埌璐ч�氱煡鍗曞彿(notice_code)涓庝緵搴斿晢鍚嶇О(vendor_name)鏀逛负鎵嬪伐濉啓涓旈潪蹇呭~锛屽彲涓嶄緷璧栧墠缃埌璐ч�氱煡鍗�", "upstream": ["鍒拌揣閫氱煡锛堝彲閫夛級"], "downstream": ["搴撳瓨鍙拌处", "閲囪喘璁㈠崟(鍥炲啓)"], "keywords": "閲囪喘鍏ュ簱 鏀惰揣鍏ュ簱 receipt 鎵嬪伐濉啓 渚涘簲鍟� 鍒拌揣閫氱煡鍗�"},
+    {"name": "鐢熶骇棰嗘枡鍗�", "module": "浠撳偍", "table": "mes_wm_product_issue", "doc": "鑽夌0鈫掑緟鎷h揣2鈫掑緟鎵ц3鈫掑畬鎴�4锛屽簱瀛�-锛涘寳鏂圭鎶�branch锛氱敓浜ц鍗曞彿(work_order_code)銆佺敓浜т换鍔″彿(task_code)銆佸伐浣滅珯鍚嶇О(workstation_name)鏀逛负鎵嬪伐濉啓涓旈潪蹇呭~锛屼笉鍐嶈仈鍔ㄥ甫鍑猴紱鏃犲伐鍗旾D鏃惰烦杩嘊OM闃查敊鏂欐牎楠屻�佷笉鍐欎换鍔℃姇鏂欒褰�", "upstream": ["鐢熶骇宸ュ崟锛堝彲閫�/鎵嬪~锛�"], "downstream": ["搴撳瓨鍙拌处"], "keywords": "棰嗘枡 issue 鎵嬪伐濉啓 鐢熶骇璁㈠崟 鐢熶骇浠诲姟 宸ヤ綔绔�"},
     {"name": "閿�鍞嚭搴撳崟", "module": "浠撳偍", "table": "mes_wm_product_sales", "doc": "鍙戣揣閫氱煡瀹℃牳鍚庣敓鎴愶紝鎻愪氦鈫扥QC妫�娴嬧啋鎷h揣鈫掑彂杩�10鈫掑緟鎵ц3鈫掑畬鎴�4锛屽洖鍐欓攢鍞鍗曞嚭搴撴暟涓庣姸鎬�", "upstream": ["鍙戣揣閫氱煡", "閿�鍞鍗�"], "downstream": ["搴撳瓨鍙拌处", "OQC"], "keywords": "閿�鍞嚭搴� 鍙戣揣 鍑哄簱鍗� sales"},
     {"name": "閿�鍞��璐у崟", "module": "浠撳偍", "table": "mes_wm_return_sales", "doc": "鑽夌鈫掑緟妫�楠�(RQC)鈫掑緟涓婃灦鈫掑緟鍏ュ簱鈫掑畬鎴愶紝鍞悗涓庢墜宸ヤ袱鏉ユ簮", "upstream": ["鍞悗閫�璐х敵璇�"], "downstream": ["搴撳瓨鍙拌处", "RQC"], "keywords": "閿�鍞��璐� 閫�璐у叆搴�"},
     {"name": "渚涘簲鍟嗛��璐у崟", "module": "浠撳偍", "table": "mes_wm_return_vendor", "doc": "IQC 涓嶅悎鏍奸��璐у彂璧凤紝寰呮嫞璐р啋寰呮墽琛屸啋瀹屾垚锛屽簱瀛�-", "upstream": ["IQC"], "downstream": ["搴撳瓨鍙拌处", "閲囪喘璁㈠崟(returnCount)"], "keywords": "渚涘簲鍟嗛��璐� 閫�鏂� 閫�璐� vendor"},
diff --git a/docs/sql/config_export_all_20260928.sql b/docs/sql/config_export_all_20260928.sql
index d5cbeb8..8dc5be9 100644
--- a/docs/sql/config_export_all_20260928.sql
+++ b/docs/sql/config_export_all_20260928.sql
@@ -6744,9 +6744,11 @@
   `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鍚嶇О',
   `iqc_id` bigint DEFAULT NULL COMMENT '鏉ユ枡妫�楠屽崟缂栧彿',
   `notice_id` bigint DEFAULT NULL COMMENT '鍒拌揣閫氱煡鍗曠紪鍙�',
+  `notice_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鍒拌揣閫氱煡鍗曠紪鐮侊紙鎵嬪伐濉啓/鍐椾綑锛�',
   `purchase_order_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '閲囪喘璁㈠崟鍙�',
   `purchase_order_id` bigint DEFAULT NULL COMMENT '閲囪喘璁㈠崟缂栧彿',
   `vendor_id` bigint DEFAULT NULL COMMENT '渚涘簲鍟嗙紪鍙�',
+  `vendor_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渚涘簲鍟嗗悕绉帮紙鎵嬪伐濉啓/鍐椾綑锛�',
   `receipt_date` datetime DEFAULT NULL COMMENT '閫�搴撴棩鏈�',
   `status` int DEFAULT NULL COMMENT '鐘舵��',
   `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '澶囨敞',
@@ -7129,7 +7131,9 @@
   `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鍗曞彿',
   `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鍚嶇О',
   `work_order_id` bigint DEFAULT NULL COMMENT '鐢熶骇宸ュ崟 ID',
+  `work_order_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鐢熶骇宸ュ崟缂栧彿锛堟墜宸ュ~鍐�/鍐椾綑锛�',
   `task_id` bigint DEFAULT NULL COMMENT '鐢熶骇浠诲姟ID',
+  `task_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '鐢熶骇浠诲姟缂栫爜锛堟墜宸ュ~鍐�/鍐椾綑锛�',
   `issue_date` datetime DEFAULT NULL COMMENT '棰嗘枡鏃ユ湡',
   `required_time` datetime DEFAULT NULL COMMENT '闇�姹傛椂闂�',
   `status` int DEFAULT NULL COMMENT '鐘舵��',
@@ -7142,6 +7146,7 @@
   `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
   `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '鏄惁鍒犻櫎',
   `workstation_id` int DEFAULT NULL,
+  `workstation_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '宸ヤ綔绔欏悕绉帮紙鎵嬪伐濉啓/鍐椾綑锛�',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='MES 鐢熶骇棰嗘枡鍗�';
 
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java
index 08be571..de53d77 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/MesWmItemReceiptController.java
@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.mes.controller.admin.wm.itemreceipt;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
@@ -181,12 +182,17 @@
                 convertSet(list, MesWmItemReceiptDO::getNoticeId));
         // 2. 鏋勫缓缁撴灉
         return BeanUtils.toBean(list, MesWmItemReceiptRespVO.class, vo -> {
-            MapUtils.findAndThen(supplierMap, vo.getVendorId(),
-                    supplier -> vo.setVendorName(supplier.getName()));
+            // 渚涘簲鍟嗗悕绉般�佸埌璐ч�氱煡鍗曠紪鐮佷互鍗曟嵁涓婄殑鏂囨湰涓哄噯锛堟敮鎸佹墜宸ュ~鍐欙級锛涗负绌烘椂鎵嶅洖閫�鍒版寜缂栧彿鍙嶆煡锛屽吋瀹瑰巻鍙叉暟鎹�
+            if (StrUtil.isEmpty(vo.getVendorName())) {
+                MapUtils.findAndThen(supplierMap, vo.getVendorId(),
+                        supplier -> vo.setVendorName(supplier.getName()));
+            }
             MapUtils.findAndThen(iqcMap, vo.getIqcId(),
                     iqc -> vo.setIqcCode(iqc.getCode()));
-            MapUtils.findAndThen(noticeMap, vo.getNoticeId(), notice ->
-                    vo.setNoticeCode(notice.getCode()));
+            if (StrUtil.isEmpty(vo.getNoticeCode())) {
+                MapUtils.findAndThen(noticeMap, vo.getNoticeId(), notice ->
+                        vo.setNoticeCode(notice.getCode()));
+            }
         });
     }
 
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptPageReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptPageReqVO.java
index 0f7ae53..dd269d0 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptPageReqVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptPageReqVO.java
@@ -26,6 +26,9 @@
     @Schema(description = "渚涘簲鍟嗙紪鍙�", example = "1")
     private Long vendorId;
 
+    @Schema(description = "渚涘簲鍟嗗悕绉�", example = "鏌愪緵搴斿晢")
+    private String vendorName;
+
     @Schema(description = "鍏ュ簱鏃ユ湡")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] receiptDate;
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptSaveReqVO.java
index 07cee3e..f21b989 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptSaveReqVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/itemreceipt/vo/MesWmItemReceiptSaveReqVO.java
@@ -28,10 +28,15 @@
     @Schema(description = "鍒拌揣閫氱煡鍗曠紪鍙�", example = "1")
     private Long noticeId;
 
-    @Schema(description = "渚涘簲鍟嗙紪鍙�", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "渚涘簲鍟嗕笉鑳戒负绌�")
+    @Schema(description = "鍒拌揣閫氱煡鍗曠紪鐮�", example = "AN2026020001")
+    private String noticeCode;
+
+    @Schema(description = "渚涘簲鍟嗙紪鍙�", example = "1")
     private Long vendorId;
 
+    @Schema(description = "渚涘簲鍟嗗悕绉�", example = "鏌愪緵搴斿晢")
+    private String vendorName;
+
     @Schema(description = "鍏ュ簱鏃ユ湡", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "鍏ュ簱鏃ユ湡涓嶈兘涓虹┖")
     private LocalDateTime receiptDate;
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/MesWmProductIssueController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/MesWmProductIssueController.java
index c1f4a06..3396360 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/MesWmProductIssueController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/MesWmProductIssueController.java
@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.mes.controller.admin.wm.productissue;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
@@ -176,15 +177,25 @@
                 convertSet(workOrderMap.values(), MesProWorkOrderDO::getClientId));
         // 2. 鏋勫缓缁撴灉
         return BeanUtils.toBean(list, MesWmProductIssueRespVO.class, vo -> {
-            MapUtils.findAndThen(workstationMap, vo.getWorkstationId(),
-                    workstation -> vo.setWorkstationName(workstation.getName()));
-            MapUtils.findAndThen(taskMap, vo.getTaskId(), task ->
-                    vo.setTaskCode(task.getCode()).setTaskName(task.getName()));
-            MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(), workOrder -> {
-                vo.setWorkOrderCode(workOrder.getCode());
-                MapUtils.findAndThen(clientMap, workOrder.getClientId(), client ->
-                        vo.setClientName(client.getName()));
-            });
+            // 宸ヤ綔绔欏悕绉颁互鍗曟嵁涓婄殑鏂囨湰涓哄噯锛堟敮鎸佹墜宸ュ~鍐欙級锛涗负绌烘椂鎵嶆寜缂栧彿鍙嶆煡锛屽吋瀹瑰巻鍙叉暟鎹�
+            if (StrUtil.isEmpty(vo.getWorkstationName())) {
+                MapUtils.findAndThen(workstationMap, vo.getWorkstationId(),
+                        workstation -> vo.setWorkstationName(workstation.getName()));
+            }
+            // 鐢熶骇浠诲姟缂栫爜鍚岀悊锛泃askName 涓嶈惤搴擄紝浠嶆寜缂栧彿鍙嶆煡
+            if (StrUtil.isEmpty(vo.getTaskCode())) {
+                MapUtils.findAndThen(taskMap, vo.getTaskId(), task ->
+                        vo.setTaskCode(task.getCode()).setTaskName(task.getName()));
+            }
+            // 鐢熶骇宸ュ崟缂栧彿鍚岀悊
+            if (StrUtil.isEmpty(vo.getWorkOrderCode())) {
+                MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(), workOrder ->
+                        vo.setWorkOrderCode(workOrder.getCode()));
+            }
+            // 瀹㈡埛鍚嶇О锛氫粛鎸� workOrderId 鈫� workOrder.clientId 鍙嶆煡锛涙墜濉崟娌℃湁宸ュ崟缂栧彿鏃朵繚鎸佷负绌�
+            MapUtils.findAndThen(workOrderMap, vo.getWorkOrderId(), workOrder ->
+                    MapUtils.findAndThen(clientMap, workOrder.getClientId(), client ->
+                            vo.setClientName(client.getName())));
         });
     }
 
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueRespVO.java
index e6b4ca3..6319316 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueRespVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueRespVO.java
@@ -18,10 +18,10 @@
     @Schema(description = "棰嗘枡鍗曞悕绉�", requiredMode = Schema.RequiredMode.REQUIRED, example = "鐢熶骇棰嗘枡")
     private String name;
 
-    @Schema(description = "鐢熶骇宸ュ崟 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @Schema(description = "鐢熶骇宸ュ崟 ID", example = "1")
     private Long workOrderId;
 
-    @Schema(description = "鐢熶骇宸ュ崟缂栧彿", requiredMode = Schema.RequiredMode.REQUIRED, example = "WO20250226001")
+    @Schema(description = "鐢熶骇宸ュ崟缂栧彿", example = "WO20250226001")
     private String workOrderCode;
 
     @Schema(description = "宸ヤ綔绔� ID", example = "1")
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueSaveReqVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueSaveReqVO.java
index b84e0ea..457782e 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueSaveReqVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/productissue/vo/MesWmProductIssueSaveReqVO.java
@@ -22,16 +22,24 @@
     @NotBlank(message = "棰嗘枡鍗曞悕绉颁笉鑳戒负绌�")
     private String name;
 
-    @Schema(description = "鐢熶骇浠诲姟 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "鐢熶骇浠诲姟 ID 涓嶈兘涓虹┖")
+    @Schema(description = "鐢熶骇浠诲姟 ID", example = "1")
     private Long taskId;
+
+    @Schema(description = "鐢熶骇浠诲姟缂栫爜", example = "TASK001")
+    private String taskCode;
 
     @Schema(description = "鐢熶骇宸ュ崟 ID", example = "1")
     private Long workOrderId;
 
+    @Schema(description = "鐢熶骇宸ュ崟缂栧彿", example = "WO20250226001")
+    private String workOrderCode;
+
     @Schema(description = "宸ヤ綔绔� ID", example = "1")
     private Long workstationId;
 
+    @Schema(description = "宸ヤ綔绔欏悕绉�", example = "瑁呴厤宸ヤ綔绔�")
+    private String workstationName;
+
     @Schema(description = "闇�姹傛椂闂�", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "闇�姹傛椂闂翠笉鑳戒负绌�")
     private LocalDateTime requiredTime;
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java
index f641a4d..2e5c3e2 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/itemreceipt/MesWmItemReceiptDO.java
@@ -51,6 +51,12 @@
      */
     private Long noticeId;
     /**
+     * 鍒拌揣閫氱煡鍗曠紪鐮�
+     *
+     * 鍐椾綑鑷� {@link MesWmArrivalNoticeDO#getCode()}锛屼篃鍙互鎵嬪姩濉啓
+     */
+    private String noticeCode;
+    /**
      * 閲囪喘璁㈠崟鍙�
      *
      * 鍐椾綑鑷� {@link MesWmArrivalNoticeDO#getPurchaseOrderCode()}锛屼篃鍙互鎵嬪姩濉啓
@@ -70,6 +76,12 @@
      */
     private Long vendorId;
     /**
+     * 渚涘簲鍟嗗悕绉�
+     *
+     * 鍐椾綑鑷� ERP 渚涘簲鍟嗭紝涔熷彲浠ユ墜鍔ㄥ~鍐�
+     */
+    private String vendorName;
+    /**
      * 鍏ュ簱鏃ユ湡
      */
     private LocalDateTime receiptDate;
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productissue/MesWmProductIssueDO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productissue/MesWmProductIssueDO.java
index 7aa3254..49bceea 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productissue/MesWmProductIssueDO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/productissue/MesWmProductIssueDO.java
@@ -46,18 +46,36 @@
      */
     private Long workstationId;
     /**
+     * 宸ヤ綔绔欏悕绉�
+     *
+     * 鍐椾綑鑷� {@link MesMdWorkstationDO#getName()}锛屼篃鍙互鎵嬪姩濉啓
+     */
+    private String workstationName;
+    /**
      * 鐢熶骇宸ュ崟 ID
      *
      * 鍏宠仈 {@link MesProWorkOrderDO#getId()}
      */
     private Long workOrderId;
     /**
+     * 鐢熶骇宸ュ崟缂栧彿
+     *
+     * 鍐椾綑鑷� {@link MesProWorkOrderDO#getCode()}锛屼篃鍙互鎵嬪姩濉啓
+     */
+    private String workOrderCode;
+    /**
      * 鐢熶骇浠诲姟 ID
      *
      * 鍏宠仈 {@link MesProTaskDO#getId()}
      */
     private Long taskId;
     /**
+     * 鐢熶骇浠诲姟缂栫爜
+     *
+     * 鍐椾綑鑷� {@link MesProTaskDO#getCode()}锛屼篃鍙互鎵嬪姩濉啓
+     */
+    private String taskCode;
+    /**
      * 棰嗘枡鏃ユ湡
      */
     private LocalDateTime issueDate;
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemreceipt/MesWmItemReceiptMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemreceipt/MesWmItemReceiptMapper.java
index 65336ff..a7e59a4 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemreceipt/MesWmItemReceiptMapper.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/itemreceipt/MesWmItemReceiptMapper.java
@@ -20,6 +20,7 @@
                 .likeIfPresent(MesWmItemReceiptDO::getCode, reqVO.getCode())
                 .likeIfPresent(MesWmItemReceiptDO::getName, reqVO.getName())
                 .eqIfPresent(MesWmItemReceiptDO::getVendorId, reqVO.getVendorId())
+                .likeIfPresent(MesWmItemReceiptDO::getVendorName, reqVO.getVendorName())
                 .betweenIfPresent(MesWmItemReceiptDO::getReceiptDate, reqVO.getReceiptDate())
                 .orderByDesc(MesWmItemReceiptDO::getId));
     }
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
index 4403d20..c0026fc 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -113,12 +113,15 @@
     private void validateItemReceiptSaveData(MesWmItemReceiptSaveReqVO reqVO) {
         // 鏍¢獙缂栫爜鍞竴
         validateCodeUnique(reqVO.getId(), reqVO.getCode());
-        // 鏍¢獙渚涘簲鍟嗗瓨鍦紙閲囪喘鍏ュ簱浣跨敤 ERP 渚涘簲鍟嗭級
-        srmSupplierApi.getSupplier(reqVO.getVendorId());
+        // 鏍¢獙渚涘簲鍟嗗瓨鍦紙閲囪喘鍏ュ簱浣跨敤 ERP 渚涘簲鍟嗭級锛涗緵搴斿晢宸叉敼涓哄彲閫夛紝鍏佽鎵嬪伐濉啓鍚嶇О锛屾鏃朵笉鏍¢獙涓绘暟鎹�
+        if (reqVO.getVendorId() != null) {
+            srmSupplierApi.getSupplier(reqVO.getVendorId());
+        }
         // 鏍¢獙鍒拌揣閫氱煡鍗曞瓨鍦�
         if (reqVO.getNoticeId() != null) {
             MesWmArrivalNoticeDO notice = arrivalNoticeService.validateArrivalNoticeReadyForReceipt(reqVO.getNoticeId());
-            if (ObjUtil.notEqual(notice.getVendorId(), reqVO.getVendorId())) {
+            // 浠呭湪閫夋嫨浜嗕緵搴斿晢涓绘暟鎹椂鎵嶆瘮瀵逛笌鍒拌揣閫氱煡鍗曠殑涓�鑷存�э紱鎵嬪~渚涘簲鍟嗗悕绉版椂璺宠繃
+            if (reqVO.getVendorId() != null && ObjUtil.notEqual(notice.getVendorId(), reqVO.getVendorId())) {
                 throw exception(WM_ARRIVAL_NOTICE_VENDOR_MISMATCH);
             }
         }
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java
index 6b5141b..525cea2 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueLineServiceImpl.java
@@ -141,6 +141,10 @@
     private void validateItemInWorkOrderBom(Long issueId, Long itemId) {
         // 鏍¢獙棰嗘枡鍗曞瓨鍦紝骞惰幏鍙栧伐鍗曠紪鍙�
         MesWmProductIssueDO issue = issueService.validateProductIssueExists(issueId);
+        // 鏈叧鑱斿伐鍗曪紙宸ュ崟鏀逛负鎵嬪伐濉啓銆佹湭閫変富鏁版嵁锛夋椂娌℃湁 BOM 鍙牎楠岋紝鐩存帴鏀捐
+        if (issue.getWorkOrderId() == null) {
+            return;
+        }
         // 鏍¢獙鐗╂枡鏄惁鍦ㄥ伐鍗� BOM 涓紙闃查敊鏂欙級
         List<MesProWorkOrderBomDO> workOrderBoms = workOrderBomService.getWorkOrderBomListByWorkOrderId(issue.getWorkOrderId());
         if (CollUtil.isEmpty(workOrderBoms)) {
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java
index 3164436..e71c958 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/productissue/MesWmProductIssueServiceImpl.java
@@ -90,13 +90,16 @@
         // 1. 鏍¢獙鍏宠仈鏁版嵁
         validateProductIssueSaveData(createReqVO);
 
-        // 2. 浠� task 鑷姩甯﹀叆 workOrderId 鍜� workstationId
-        MesProTaskDO task = taskService.validateTaskExists(createReqVO.getTaskId());
-        if (createReqVO.getWorkOrderId() == null) {
-            createReqVO.setWorkOrderId(task.getWorkOrderId());
-        }
-        if (createReqVO.getWorkstationId() == null) {
-            createReqVO.setWorkstationId(task.getWorkstationId());
+        // 2. 浠� task 鑷姩甯﹀叆 workOrderId 鍜� workstationId锛�
+        //    鐢熶骇浠诲姟鏀逛负鍙�夛細鎵嬪~鍗曟嵁涓嶄紶 taskId锛屽伐鍗曚笌宸ヤ綔绔欑敱浜哄伐濉啓锛屼笉鑷姩甯﹀叆
+        if (createReqVO.getTaskId() != null) {
+            MesProTaskDO task = taskService.validateTaskExists(createReqVO.getTaskId());
+            if (createReqVO.getWorkOrderId() == null) {
+                createReqVO.setWorkOrderId(task.getWorkOrderId());
+            }
+            if (createReqVO.getWorkstationId() == null) {
+                createReqVO.setWorkstationId(task.getWorkstationId());
+            }
         }
 
         // 3. 鎻掑叆涓昏〃
@@ -114,13 +117,16 @@
         // 1.2 鏍¢獙鍏宠仈鏁版嵁
         validateProductIssueSaveData(updateReqVO);
 
-        // 2. 浠� task 鑷姩甯﹀叆 workOrderId 鍜� workstationId
-        MesProTaskDO task = taskService.validateTaskExists(updateReqVO.getTaskId());
-        if (updateReqVO.getWorkOrderId() == null) {
-            updateReqVO.setWorkOrderId(task.getWorkOrderId());
-        }
-        if (updateReqVO.getWorkstationId() == null) {
-            updateReqVO.setWorkstationId(task.getWorkstationId());
+        // 2. 浠� task 鑷姩甯﹀叆 workOrderId 鍜� workstationId锛�
+        //    鐢熶骇浠诲姟鏀逛负鍙�夛細鎵嬪~鍗曟嵁涓嶄紶 taskId锛屽伐鍗曚笌宸ヤ綔绔欑敱浜哄伐濉啓锛屼笉鑷姩甯﹀叆
+        if (updateReqVO.getTaskId() != null) {
+            MesProTaskDO task = taskService.validateTaskExists(updateReqVO.getTaskId());
+            if (updateReqVO.getWorkOrderId() == null) {
+                updateReqVO.setWorkOrderId(task.getWorkOrderId());
+            }
+            if (updateReqVO.getWorkstationId() == null) {
+                updateReqVO.setWorkstationId(task.getWorkstationId());
+            }
         }
 
         // 3. 鏇存柊涓昏〃
@@ -398,12 +404,17 @@
      */
     private void validateProductIssueSaveData(MesWmProductIssueSaveReqVO reqVO) {
         validateCodeUnique(reqVO.getId(), reqVO.getCode());
-        // 鏍¢獙 task 瀛樺湪
-        MesProTaskDO task = taskService.validateTaskExists(reqVO.getTaskId());
-        // 鏍¢獙 task 鍏宠仈鐨勫伐鍗曞凡纭
-        Long workOrderId = reqVO.getWorkOrderId() != null ? reqVO.getWorkOrderId() : task.getWorkOrderId();
-        if (workOrderId != null) {
-            workOrderService.validateWorkOrderConfirmed(workOrderId);
+        // 鐢熶骇浠诲姟鏀逛负鍙�夛細浼犱簡鎵嶆牎楠屼换鍔″瓨鍦紝骞舵寜浠诲姟甯﹀嚭鐨勫伐鍗曟牎楠屽凡纭
+        if (reqVO.getTaskId() != null) {
+            MesProTaskDO task = taskService.validateTaskExists(reqVO.getTaskId());
+            // 鏍¢獙 task 鍏宠仈鐨勫伐鍗曞凡纭
+            Long workOrderId = reqVO.getWorkOrderId() != null ? reqVO.getWorkOrderId() : task.getWorkOrderId();
+            if (workOrderId != null) {
+                workOrderService.validateWorkOrderConfirmed(workOrderId);
+            }
+        } else if (reqVO.getWorkOrderId() != null) {
+            // 娌′紶 taskId 浣嗕紶浜� workOrderId锛屼粛鏍¢獙宸ュ崟宸茬‘璁�
+            workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId());
         }
         if (reqVO.getWorkstationId() != null) {
             workstationService.validateWorkstationExistsAndEnable(reqVO.getWorkstationId());
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 ==========
 
diff --git a/yudao-module-mes/src/test/resources/sql/create_tables.sql b/yudao-module-mes/src/test/resources/sql/create_tables.sql
index 203b99a..a766f59 100644
--- a/yudao-module-mes/src/test/resources/sql/create_tables.sql
+++ b/yudao-module-mes/src/test/resources/sql/create_tables.sql
@@ -543,10 +543,15 @@
     "name" varchar(255) DEFAULT NULL,
     "iqc_id" bigint DEFAULT NULL,
     "notice_id" bigint DEFAULT NULL,
+    "notice_code" varchar(64) DEFAULT NULL,
     "vendor_id" bigint DEFAULT NULL,
+    "vendor_name" varchar(128) DEFAULT NULL,
     "purchase_order_code" varchar(64) DEFAULT NULL,
+    "purchase_order_id" bigint DEFAULT NULL,
     "receipt_date" timestamp DEFAULT NULL,
     "status" tinyint NOT NULL DEFAULT 0,
+    "process_instance_id" varchar(64) DEFAULT NULL,
+    "process_definition_key" varchar(64) DEFAULT NULL,
     "remark" varchar(500) DEFAULT NULL,
     "creator" varchar(64) DEFAULT '',
     "create_time" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

--
Gitblit v1.9.3