From 36f5aa4ae3f7cf8ab8832e8bbd8eee7905490405 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Mon, 21 Sep 2026 19:58:01 +0800 Subject: [PATCH] fix: allow measurement draft during processing --- .../service/InboundMeasurementService.java | 2 +- .../service/MeasurementBatchService.java | 2 +- .../InboundMeasurementServiceTest.java | 24 +++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/firstleg/src/main/java/com/baiyue/firstleg/service/InboundMeasurementService.java b/firstleg/src/main/java/com/baiyue/firstleg/service/InboundMeasurementService.java index d82ca93ec..77031d5c7 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/service/InboundMeasurementService.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/service/InboundMeasurementService.java @@ -52,7 +52,7 @@ public class InboundMeasurementService { /** OCR 结果无效或不完整,必须人工录入或修正。 */ private static final String WEIGHT_NEEDS_MANUAL = "NEEDS_MANUAL"; private static final Set MEASUREMENT_DRAFT_EDITABLE_STATUSES = Set.of( - "PREPARING", "WAIT_MEASURE", "MEASURING", "MEASURE_REJECTED"); + "PREPARING", "WAIT_MEASURE", "MEASURING", "PROCESSING", "MEASURE_REJECTED"); private static final Set WEIGHT_EDITABLE_STATUSES = Set.of( "PREPARING", "WAIT_MEASURE", "MEASURING", "MEASURE_REJECTED"); /** 测量完成后的默认普通托盘类型;实际拆托和库位占用由提交编排服务执行。 */ diff --git a/firstleg/src/main/java/com/baiyue/firstleg/service/MeasurementBatchService.java b/firstleg/src/main/java/com/baiyue/firstleg/service/MeasurementBatchService.java index db1f98688..711862eab 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/service/MeasurementBatchService.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/service/MeasurementBatchService.java @@ -43,7 +43,7 @@ public class MeasurementBatchService { /** 已接收第三方测量数据,待平台提交审核。 */ static final String STATUS_RECEIVED = "RECEIVED"; private static final Set EDITABLE_INBOUND_STATUSES = Set.of( - "PREPARING", "WAIT_MEASURE", "MEASURING", "MEASURE_REJECTED"); + "PREPARING", "WAIT_MEASURE", "MEASURING", "PROCESSING", "MEASURE_REJECTED"); static final BigDecimal VOLUME_WEIGHT_FACTOR = new BigDecimal("167"); private static final BigDecimal MAX_RAW_VOLUME_CBM = new BigDecimal("999999999999.999999"); private static final BigDecimal MAX_TOTAL_VOLUME_CBM = new BigDecimal("99999999999999.9999"); diff --git a/firstleg/src/test/java/com/baiyue/firstleg/service/InboundMeasurementServiceTest.java b/firstleg/src/test/java/com/baiyue/firstleg/service/InboundMeasurementServiceTest.java index 1d47e2c4a..41891f855 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/service/InboundMeasurementServiceTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/service/InboundMeasurementServiceTest.java @@ -1406,6 +1406,30 @@ class InboundMeasurementServiceTest { verify(orderCargoClient).detail("internal-token", 1L, 80L, 80001L); } + @Test + void savingDraftRemainsEditableWhileInboundIsProcessingBeforeMeasurementSubmission() { + InboundOrderEntity inbound = inbound("PROCESSING"); + inbound.setOrderId(80L); + InboundMeasurementEntity saved = new InboundMeasurementEntity(); + saved.setId(31L); + saved.setVersion(0); + saved.setStatus("DRAFT"); + when(repository.findInbound(1L, 10L)).thenReturn(inbound); + when(orderCargoClient.detail(eq("internal-token"), eq(1L), eq(80L), eq(80001L))).thenReturn( + ApiResponse.success(new OrderCargoClient.CargoBinding(80001L, 80L, 1, "Test cargo", + 2, new BigDecimal("6.500"), new BigDecimal("0.0480")))); + when(batchService.saveBatch(any())).thenReturn(saved); + + InboundMeasurementResponses.DraftSaved result = service.saveDraft(1L, 10L, 9L, + new InboundMeasurementRequests.SaveDraftRequest(null, 0, null, + List.of(new InboundMeasurementRequests.ItemRequest(80001L, "001", "A", 2, + new BigDecimal("40"), new BigDecimal("30"), new BigDecimal("20"), + null, null, null, null, null, null)))); + + assertThat(result.measurementId()).isEqualTo(31L); + verify(batchService).saveBatch(any()); + } + @Test void savingDraftCannotReopenSubmittedMeasurementWhileReviewIsPending() { InboundOrderEntity inbound = inbound("MEASURE_PENDING");