贴标申请,仓储转运

This commit is contained in:
2026-10-09 15:25:00 +08:00
parent b4b3ae452c
commit 1e15a2838a
4 changed files with 36 additions and 3 deletions
@@ -645,6 +645,7 @@ public class RelabelApplicationService implements WalletResultHandler {
} else if ("COMPLETED".equals(next)) { } else if ("COMPLETED".equals(next)) {
boolean preDispatched = "PRE_DISPATCH_CREATED".equals(application.getFulfillmentStatus()); boolean preDispatched = "PRE_DISPATCH_CREATED".equals(application.getFulfillmentStatus());
application.setFulfillmentStatus("OUTBOUNDED"); application.setFulfillmentStatus("OUTBOUNDED");
applications.updateById(application);
if (!StringUtils.hasText(application.getOutboundOrderNo()) if (!StringUtils.hasText(application.getOutboundOrderNo())
&& !preDispatched) { && !preDispatched) {
releaseInventory(customerId, operatorId, application); releaseInventory(customerId, operatorId, application);
@@ -35,7 +35,7 @@ public final class WarehouseTransferResponses {
String lastlegOrderNo, String operatingWarehouseId, String fbaWarehouseCode, String lastlegOrderNo, String operatingWarehouseId, String fbaWarehouseCode,
String destinationType, String destinationWarehouseCode, String destinationWarehouseName, String destinationType, String destinationWarehouseCode, String destinationWarehouseName,
int packageCount, String deliveryMethod, boolean needRelabel, String relabelNo, int packageCount, String deliveryMethod, boolean needRelabel, String relabelNo,
String relabelApplicationStatus, String relabelFulfillmentStatus, String relabelStatus, String relabelFulfillmentStatus,
String status, LocalDateTime estimatedArrivalAt, LocalDateTime createdAt) {} String status, LocalDateTime estimatedArrivalAt, LocalDateTime createdAt) {}
public record Detail(Long id, String transferNo, Long inboundOrderId, String inboundCode, public record Detail(Long id, String transferNo, Long inboundOrderId, String inboundCode,
Long lastlegOrderId, String lastlegOrderNo, String orderType, String orderStatus, Long lastlegOrderId, String lastlegOrderNo, String orderType, String orderStatus,
@@ -569,6 +569,38 @@ class RelabelApplicationServiceTest {
assertEquals("COMPLETED", order.getRelabelStatus()); 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<String> 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 @Test
void completingEarlierReturnRelabelDoesNotOverwriteLaterApplicationStatus() { void completingEarlierReturnRelabelDoesNotOverwriteLaterApplicationStatus() {
RelabelApplication application = application(11L, "FBR-FIRST", "10001", "key-1", "hash", RelabelApplicationService.READY_FOR_OUTBOUND); RelabelApplication application = application(11L, "FBR-FIRST", "10001", "key-1", "hash", RelabelApplicationService.READY_FOR_OUTBOUND);
@@ -136,7 +136,7 @@ class WarehouseTransferServiceTest {
1, 20, null, null, null, null, null, null, null, null)); 1, 20, null, null, null, null, null, null, null, null));
assertEquals("RL-20260923-000001", result.records().get(0).relabelNo()); 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()); 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)); 1, 20, null, null, null, null, null, null, null, null));
assertEquals(1, result.records().size()); assertEquals(1, result.records().size());
assertNull(result.records().get(0).relabelApplicationStatus()); assertNull(result.records().get(0).relabelStatus());
assertNull(result.records().get(0).relabelFulfillmentStatus()); assertNull(result.records().get(0).relabelFulfillmentStatus());
verify(relabelApplications, never()).selectList(any()); verify(relabelApplications, never()).selectList(any());
} }