fix(transfer): settle linked relabel fees after final receipt

This commit is contained in:
2026-10-05 02:47:22 +08:00
parent 9e4a838ba1
commit b371fab53d
4 changed files with 151 additions and 18 deletions
@@ -74,6 +74,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.times;
@@ -853,10 +854,19 @@ class WarehouseTransferServiceTest {
verify(inventory,never()).ship(anyString(),anyString(),any());assertEquals("OUTBOUNDED",app.getFulfillmentStatus());
var mixed=balance(601,101,"IN-1");mixed.setSkuCode("MIXED");when(inventoryCommands.lockBalance("TENANT-A",601L)).thenReturn(mixed);
when(inventory.stockIn(eq("TENANT-A"),eq("USER-1"),any())).thenReturn(new InventoryCommandResponse(1L,"STOCK_IN",801L,901L,5,0,0,0,false,false));
doAnswer(call -> { app.setStatus("COMPLETED"); app.setFulfillmentStatus("COMPLETED");
app.setWalletStatus("SETTLE_PENDING"); return null; }).when(relabelService)
.completeWarehouseTransferFulfillment("TENANT-A", "RL-OWN", 21L, "USER-1");
service.receive("TENANT-A","WTR-1","USER-1",receiptRequest());
var received=ArgumentCaptor.forClass(com.baiyue.lastleg.inventory.command.dto.InventoryCommandRequests.StockIn.class);
verify(inventory).stockIn(eq("TENANT-A"),eq("USER-1"),received.capture());assertEquals("NEW",received.getValue().skuCode());
assertEquals("RECEIVED",transfer.getStatus());assertEquals("COMPLETED",app.getStatus());assertEquals("COMPLETED",app.getFulfillmentStatus());
var savedReceipt = ArgumentCaptor.forClass(com.baiyue.lastleg.transfer.entity.WarehouseTransferReceipt.class);
verify(transferReceipts).insert(savedReceipt.capture());
when(transferReceipts.findSource("TENANT-A", 21L, current.getInventoryPositionId())).thenReturn(savedReceipt.getValue());
service.receive("TENANT-A","WTR-1","USER-1",receiptRequest());
verify(relabelService, times(1)).completeWarehouseTransferFulfillment("TENANT-A", "RL-OWN", 21L, "USER-1");
assertEquals("SETTLE_PENDING", app.getWalletStatus());
}
@Test