From 24681c81c09022f584a57006f2534b5f74723414 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 30 六月 2026 09:27:31 +0800
Subject: [PATCH] 初始化项目

---
 yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java
index 22b4ca1..3585c6e 100644
--- a/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java
+++ b/yudao-module-wms/src/test/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImplTest.java
@@ -241,6 +241,46 @@
     }
 
     @Test
+    public void testChangeInventory_multipleExistingInventoryKeys() {
+        // mock 鏁版嵁
+        WmsItemDO item = createItem("ITEM-001", "绾㈠瘜澹嫻鏋�");
+        WmsItemSkuDO sku = createSku(item.getId(), "SKU-001", "10kg 绠辫");
+        inventoryMapper.insert(createInventory(sku.getId(), 200L, "7.00"));
+        inventoryMapper.insert(createInventory(sku.getId(), 100L, "5.00"));
+        WmsInventoryChangeReqDTO reqDTO = createChangeReq(sku.getId(), 100L, "2.00");
+        List<WmsInventoryChangeReqDTO.Item> items = new ArrayList<>(reqDTO.getItems());
+        items.add(new WmsInventoryChangeReqDTO.Item()
+                .setSkuId(sku.getId())
+                .setWarehouseId(200L)
+                .setQuantity(new BigDecimal("3.00"))
+                .setPrice(new BigDecimal("100.00"))
+                .setTotalPrice(new BigDecimal("300.00"))
+                .setRemark("娴嬭瘯鍏ュ簱 2"));
+        reqDTO.setItems(items);
+
+        // 璋冪敤
+        inventoryService.changeInventory(reqDTO);
+
+        // 鏂█锛氬鏉″凡瀛樺湪搴撳瓨浣欓鍒嗗埆鏇存柊
+        WmsInventoryDO inventory1 = inventoryMapper.selectBySkuIdAndWarehouseId(sku.getId(), 100L);
+        assertNotNull(inventory1);
+        assertEquals(0, new BigDecimal("7.00").compareTo(inventory1.getQuantity()));
+        WmsInventoryDO inventory2 = inventoryMapper.selectBySkuIdAndWarehouseId(sku.getId(), 200L);
+        assertNotNull(inventory2);
+        assertEquals(0, new BigDecimal("10.00").compareTo(inventory2.getQuantity()));
+        // 鏂█锛氬簱瀛樻祦姘翠繚鎸佸叆鍙傛槑缁嗛『搴�
+        List<WmsInventoryHistoryDO> histories = inventoryHistoryMapper.selectList();
+        histories.sort(Comparator.comparing(WmsInventoryHistoryDO::getId));
+        assertEquals(2, histories.size());
+        assertEquals(100L, histories.get(0).getWarehouseId());
+        assertEquals(0, new BigDecimal("5.00").compareTo(histories.get(0).getBeforeQuantity()));
+        assertEquals(0, new BigDecimal("7.00").compareTo(histories.get(0).getAfterQuantity()));
+        assertEquals(200L, histories.get(1).getWarehouseId());
+        assertEquals(0, new BigDecimal("7.00").compareTo(histories.get(1).getBeforeQuantity()));
+        assertEquals(0, new BigDecimal("10.00").compareTo(histories.get(1).getAfterQuantity()));
+    }
+
+    @Test
     public void testChangeInventory_concurrentCreateSameInventoryOnlyOneBalance() throws Exception {
         // mock 鏁版嵁
         WmsItemDO item = createItem("ITEM-001", "绾㈠瘜澹嫻鏋�");

--
Gitblit v1.9.3