fix(lastleg): allow edits with historical procurement warehouse

This commit is contained in:
2026-09-12 16:14:50 +08:00
parent d33922ad35
commit e467d60e8f
2 changed files with 24 additions and 0 deletions
@@ -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());
@@ -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();