From 1e15a2838ad891b4c455f5b16cece6b95dbec578 Mon Sep 17 00:00:00 2001 From: liuyihe <2513762445@qq.com> Date: Fri, 9 Oct 2026 15:25:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B4=E6=A0=87=E7=94=B3=E8=AF=B7=EF=BC=8C?= =?UTF-8?q?=E4=BB=93=E5=82=A8=E8=BD=AC=E8=BF=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/RelabelApplicationService.java | 1 + .../dto/WarehouseTransferResponses.java | 2 +- .../RelabelApplicationServiceTest.java | 32 +++++++++++++++++++ .../service/WarehouseTransferServiceTest.java | 4 +-- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelApplicationService.java b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelApplicationService.java index db4fd408e..3be6ada40 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelApplicationService.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/relabel/service/RelabelApplicationService.java @@ -645,6 +645,7 @@ public class RelabelApplicationService implements WalletResultHandler { } else if ("COMPLETED".equals(next)) { boolean preDispatched = "PRE_DISPATCH_CREATED".equals(application.getFulfillmentStatus()); application.setFulfillmentStatus("OUTBOUNDED"); + applications.updateById(application); if (!StringUtils.hasText(application.getOutboundOrderNo()) && !preDispatched) { releaseInventory(customerId, operatorId, application); diff --git a/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/dto/WarehouseTransferResponses.java b/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/dto/WarehouseTransferResponses.java index 205113cce..7a3ece053 100644 --- a/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/dto/WarehouseTransferResponses.java +++ b/lastleg-service/src/main/java/com/baiyue/lastleg/transfer/dto/WarehouseTransferResponses.java @@ -35,7 +35,7 @@ public final class WarehouseTransferResponses { String lastlegOrderNo, String operatingWarehouseId, String fbaWarehouseCode, String destinationType, String destinationWarehouseCode, String destinationWarehouseName, int packageCount, String deliveryMethod, boolean needRelabel, String relabelNo, - String relabelApplicationStatus, String relabelFulfillmentStatus, + String relabelStatus, String relabelFulfillmentStatus, String status, LocalDateTime estimatedArrivalAt, LocalDateTime createdAt) {} public record Detail(Long id, String transferNo, Long inboundOrderId, String inboundCode, Long lastlegOrderId, String lastlegOrderNo, String orderType, String orderStatus, diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/relabel/service/RelabelApplicationServiceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/relabel/service/RelabelApplicationServiceTest.java index d51f5d0dd..f985d5af3 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/relabel/service/RelabelApplicationServiceTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/relabel/service/RelabelApplicationServiceTest.java @@ -569,6 +569,38 @@ class RelabelApplicationServiceTest { assertEquals("COMPLETED", order.getRelabelStatus()); } + @Test + void zeroFeeCompletionPersistsFulfillmentForBothOutboundRoutes() { + for (String route : List.of("PRE_DISPATCH_CREATED", "OUTBOUND_CREATED")) { + RelabelApplication app = application(11L, "FBR-ZERO", "10001", "key", "hash", RelabelApplicationService.READY_FOR_OUTBOUND); + app.setLastlegOrderId(21L); + app.setWalletStatus("NOT_REQUIRED"); + app.setChargeAmount(BigDecimal.ZERO); + app.setFulfillmentStatus(route); + if ("OUTBOUND_CREATED".equals(route)) app.setOutboundOrderNo("OUT-ZERO"); + LastlegOrder order = order(21L, "10001", "LMO-ZERO", "PROCESSING"); + order.setOrderType("RETURN_RELABEL"); + order.setRelabelOrderNo(app.getRelabelNo()); + when(applications.lockNo("10001", app.getRelabelNo())).thenReturn(app); + when(orders.selectById(21L)).thenReturn(order); + stubDetail(app); + List persistedFulfillment = new java.util.ArrayList<>(); + org.mockito.Mockito.doAnswer(invocation -> { + RelabelApplication saved = invocation.getArgument(0); + persistedFulfillment.add(saved.getFulfillmentStatus()); + return 1; + }).when(applications).updateById(any(RelabelApplication.class)); + + service.changeStatus("10001", app.getRelabelNo(), "operator-2", + new RelabelRequests.ChangeStatus("COMPLETED", "finished")); + + assertEquals("OUTBOUNDED", persistedFulfillment.get(persistedFulfillment.size() - 1), route); + } + verify(feeSources, never()).publishApproved(any(), any(), any()); + verify(walletCommands, never()).publish(any(), anyLong(), any(), any(), any(), any(), anyLong()); + verify(inventoryCommands, never()).release(any(), any(), any()); + } + @Test void completingEarlierReturnRelabelDoesNotOverwriteLaterApplicationStatus() { RelabelApplication application = application(11L, "FBR-FIRST", "10001", "key-1", "hash", RelabelApplicationService.READY_FOR_OUTBOUND); diff --git a/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferServiceTest.java b/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferServiceTest.java index b0e97d320..ef75e2f19 100644 --- a/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferServiceTest.java +++ b/lastleg-service/src/test/java/com/baiyue/lastleg/transfer/service/WarehouseTransferServiceTest.java @@ -136,7 +136,7 @@ class WarehouseTransferServiceTest { 1, 20, null, null, null, null, null, null, null, null)); assertEquals("RL-20260923-000001", result.records().get(0).relabelNo()); - assertEquals("COMPLETED", result.records().get(0).relabelApplicationStatus()); + assertEquals("COMPLETED", result.records().get(0).relabelStatus()); assertEquals("READY_FOR_DISPATCH", result.records().get(0).relabelFulfillmentStatus()); } @@ -152,7 +152,7 @@ class WarehouseTransferServiceTest { 1, 20, null, null, null, null, null, null, null, null)); assertEquals(1, result.records().size()); - assertNull(result.records().get(0).relabelApplicationStatus()); + assertNull(result.records().get(0).relabelStatus()); assertNull(result.records().get(0).relabelFulfillmentStatus()); verify(relabelApplications, never()).selectList(any()); }