From a1a94ab39a3ac9cc28601e3381b3b4fbc0cda02a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 29 十月 2026 12:20:31 +0800
Subject: [PATCH] fix(mes): 解决产品收货批次信息传递和销售订单校验问题

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

diff --git a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineReelTest.java b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineReelTest.java
index 0601d87..05fb16f 100644
--- a/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineReelTest.java
+++ b/yudao-module-mes/src/test/java/cn/iocoder/yudao/module/mes/service/wm/productsales/MesWmProductSalesLineReelTest.java
@@ -7,6 +7,9 @@
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales.MesWmProductSalesLineMapper;
 import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
 import cn.iocoder.yudao.module.mes.service.qc.oqc.MesQcOqcService;
+import cn.iocoder.yudao.module.erp.api.sale.ErpSaleOrderApi;
+import cn.iocoder.yudao.module.erp.api.sale.dto.ErpSaleOrderItemRespDTO;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.module.mes.service.wm.salesnotice.MesWmSalesNoticeLineService;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -18,6 +21,7 @@
 import java.math.BigDecimal;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
@@ -29,6 +33,44 @@
     @Mock private MesWmSalesNoticeLineService noticeService;
     @Mock private MesMdmItemService itemService;
     @Mock private MesQcOqcService oqcService;
+    @Mock private ErpSaleOrderApi saleOrderApi;
+
+    @Test
+    void directSaleRetainsSelectedOrderItem() {
+        var req = new MesWmProductSalesLineSaveReqVO();
+        req.setSalesId(1L);
+        req.setSaleOrderItemId(5L);
+        req.setItemId(3L);
+        req.setQuantity(BigDecimal.ONE);
+        when(salesService.validateProductSalesExistsAndDraft(1L))
+                .thenReturn(MesWmProductSalesDO.builder().id(1L).saleOrderId(4L).build());
+        var item = new ErpSaleOrderItemRespDTO();
+        item.setId(5L);
+        item.setOrderId(4L);
+        item.setProductId(3L);
+        when(saleOrderApi.getSaleOrderItem(5L)).thenReturn(CommonResult.success(item));
+        service.createProductSalesLine(req);
+        var line = ArgumentCaptor.forClass(MesWmProductSalesLineDO.class);
+        verify(mapper).insert(line.capture());
+        assertEquals(5L, line.getValue().getSaleOrderItemId());
+    }
+
+    @Test
+    void directSaleRejectsItemFromAnotherOrder() {
+        var req = new MesWmProductSalesLineSaveReqVO();
+        req.setSalesId(1L);
+        req.setSaleOrderItemId(5L);
+        req.setItemId(3L);
+        req.setQuantity(BigDecimal.ONE);
+        when(salesService.validateProductSalesExistsAndDraft(1L))
+                .thenReturn(MesWmProductSalesDO.builder().id(1L).saleOrderId(4L).build());
+        var item = new ErpSaleOrderItemRespDTO();
+        item.setOrderId(99L);
+        item.setProductId(3L);
+        when(saleOrderApi.getSaleOrderItem(5L)).thenReturn(CommonResult.success(item));
+        assertThrows(RuntimeException.class, () -> service.createProductSalesLine(req));
+        verify(mapper, never()).insert(any(MesWmProductSalesLineDO.class));
+    }
 
     private MesWmProductSalesLineSaveReqVO request() {
         var req = new MesWmProductSalesLineSaveReqVO();

--
Gitblit v1.9.3