发布采购、拼车、预约及匹配端侧修复至灰度 #26

Merged
admin merged 45 commits from test into main 2026-10-12 10:19:14 +08:00
4 changed files with 36 additions and 3 deletions
Showing only changes of commit 1e15a2838a - Show all commits
@@ -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());
}