| | |
| | | } |
| | | |
| | | @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", "红富士苹果"); |