diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/procurement/service/OverseasProcurementService.java b/lastleg-service/src/main/java/com/baiyue/lastleg/procurement/service/OverseasProcurementService.java index 360e9832b..dc93177b3 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/procurement/service/OverseasProcurementService.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/procurement/service/OverseasProcurementService.java @@ -417,6 +417,9 @@ public class OverseasProcurementService implements WalletResultHandler { } catch (NumberFormatException exception) { throw badRequest("purchaseWarehouseId must be a numeric overseas partner warehouse ID"); } + // Keep the warehouse snapshot already frozen on a historical order. A later master-data + // deactivation must not block unrelated edits such as recording outbound details. + if (Long.toString(numericId).equals(order.getPurchaseWarehouseId())) return; var option = warehouseDirectory.required(numericId); order.setPurchaseWarehouseId(option.warehouseId()); order.setPurchaseWarehouseName(option.warehouseName()); diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/procurement/service/OverseasProcurementServiceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/procurement/service/OverseasProcurementServiceTest.java index 6f6f69118..dc87b1865 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/procurement/service/OverseasProcurementServiceTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/procurement/service/OverseasProcurementServiceTest.java @@ -177,6 +177,27 @@ class OverseasProcurementServiceTest { assertEquals("洛杉矶采购仓", order.getPurchaseWarehouseName()); } + @Test + void unchangedHistoricalWarehouseDoesNotBlockUnrelatedEditsAfterDeactivation() { + OverseasProcurementOrder order = order(OverseasProcurementService.APPROVED, 100, 0); + order.setPurchaseWarehouseId("10"); + order.setPurchaseWarehouseName("历史采购仓"); + when(orders.lockNo("100", "HC1")).thenReturn(order); + when(orders.findNo("100", "HC1")).thenReturn(order); + when(histories.listOrder("100", 1L)).thenReturn(List.of()); + ObjectMapper mapper = new ObjectMapper(); + var request = new OverseasProcurementRequests.Update(0L, null, null, null, null, + null, mapper.getNodeFactory().textNode("10"), null, + null, null, null, null, null, mapper.getNodeFactory().textNode("更新出库信息")); + + service.update("100", "HC1", "7", request); + + assertEquals("10", order.getPurchaseWarehouseId()); + assertEquals("历史采购仓", order.getPurchaseWarehouseName()); + verify(warehouseDirectory, never()).required(10L); + verify(orders).updateById(order); + } + @Test void customerOptionsAreDeduplicatedSnapshotsFromProcurementOrders() { OverseasProcurementOrder option = new OverseasProcurementOrder();