贴标申请,仓储转运

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)) {
boolean preDispatched = "PRE_DISPATCH_CREATED".equals(application.getFulfillmentStatus());
application.setFulfillmentStatus("OUTBOUNDED");
applications.updateById(application);
if (!StringUtils.hasText(application.getOutboundOrderNo())
&& !preDispatched) {
releaseInventory(customerId, operatorId, application);
@@ -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,
@@ -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<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
void completingEarlierReturnRelabelDoesNotOverwriteLaterApplicationStatus() {
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));
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());
}