feat(lastleg): redispatch returned cargo and reconcile source signatures

This commit is contained in:
2026-10-03 16:06:54 +08:00
parent e740047e03
commit 8700fc3423
39 changed files with 1605 additions and 139 deletions
@@ -51,6 +51,7 @@ class InventoryCommandServiceTest {
@Mock InventoryLedgerMapper ledgers;
@Mock InventoryOperationMapper operations;
@Mock InventoryCommandMapper commands;
@Mock com.baiyue.lastleg.inventory.mapper.ReturnStockReceiptMapper returnReceipts;
@Mock WarehouseResourceGateway warehouseGateway;
private InventoryCommandService service;
@@ -63,6 +64,10 @@ class InventoryCommandServiceTest {
ReflectionTestUtils.setField(service, "ledgers", ledgers);
ReflectionTestUtils.setField(service, "operations", operations);
ReflectionTestUtils.setField(service, "commands", commands);
ReflectionTestUtils.setField(service, "returnReceipts", returnReceipts);
lenient().when(returnReceipts.owner(any(), any(), any(), any(), any())).thenReturn(
new com.baiyue.lastleg.inventory.mapper.ReturnStockReceiptMapper.ReturnOwner(1L, 51L, 101L));
lenient().when(returnReceipts.lockOrder(any(), any())).thenAnswer(call -> call.getArgument(1));
ReflectionTestUtils.setField(service, "warehouseGateway", warehouseGateway);
ReflectionTestUtils.setField(service, "objectMapper", new ObjectMapper().findAndRegisterModules());
lenient().when(operations.findIdempotency(any(), any())).thenReturn(null);
@@ -385,6 +390,12 @@ class InventoryCommandServiceTest {
assertEquals("RETURN_STOCK_IN", ledger.getValue().getBusinessType());
assertEquals("RETURN_SOURCE:301:201", ledger.getValue().getSourceEventId());
assertEquals("OUT-1", ledger.getValue().getOutboundOrderNo());
ArgumentCaptor<com.baiyue.lastleg.inventory.entity.ReturnStockReceipt> returned = ArgumentCaptor.forClass(com.baiyue.lastleg.inventory.entity.ReturnStockReceipt.class);
verify(returnReceipts).insert(returned.capture());
assertEquals(ledger.getValue().getId(), returned.getValue().getInventoryLedgerId());
assertEquals(51L, returned.getValue().getOrderId());
assertEquals(3L, returned.getValue().getReceivedPackages());
assertEquals(target.getValue().getId(), returned.getValue().getInventoryPositionId());
}
@Test
@@ -58,7 +58,8 @@ class InventoryHoldConcurrencyPersistenceTest {
jdbc = new JdbcTemplate(ds);
for (Class<?> entity : List.of(InventoryBalance.class, InventoryPosition.class, InventoryLedger.class,
InventoryOperation.class, LastlegOrder.class, LastlegOrderCommandRecord.class,
LastlegOrderHoldHistory.class, LastlegOrderOperationLog.class, InboundStockReceipt.class, DispatchPdaPickOrder.class)) {
LastlegOrderHoldHistory.class, LastlegOrderOperationLog.class, InboundStockReceipt.class,
ReturnStockReceipt.class, DispatchPdaPickOrder.class)) {
String columns = Arrays.stream(entity.getDeclaredFields())
.filter(f -> !Modifier.isStatic(f.getModifiers()))
.filter(f -> f.getAnnotation(TableField.class) == null || f.getAnnotation(TableField.class).exist())
@@ -74,7 +75,8 @@ class InventoryHoldConcurrencyPersistenceTest {
for (Class<?> mapper : List.of(InventoryBalanceMapper.class, InventoryPositionMapper.class,
InventoryLedgerMapper.class, InventoryOperationMapper.class, InventoryCommandMapper.class,
LastlegOrderMapper.class, LastlegOrderCommandRecordMapper.class, LastlegOrderHoldHistoryMapper.class,
LastlegOrderOperationLogMapper.class, DispatchPdaPickOrderMapper.class)) config.addMapper(mapper);
LastlegOrderOperationLogMapper.class, DispatchPdaPickOrderMapper.class,
ReturnStockReceiptMapper.class)) config.addMapper(mapper);
var factory = new MybatisSqlSessionFactoryBean(); factory.setDataSource(ds); factory.setConfiguration(config);
var session = new SqlSessionTemplate(factory.getObject());
var manager = new DataSourceTransactionManager(ds); tx = new TransactionTemplate(manager);
@@ -91,6 +93,7 @@ class InventoryHoldConcurrencyPersistenceTest {
var sourceLocks = new DispatchPickOrderAttributionService();
ReflectionTestUtils.setField(sourceLocks,"orders",orderMapper);
ReflectionTestUtils.setField(sourceLocks,"attributions",session.getMapper(DispatchPdaPickOrderMapper.class));
ReflectionTestUtils.setField(sourceLocks,"returnReceipts",session.getMapper(ReturnStockReceiptMapper.class));
attribution = proxy(sourceLocks,manager);
var target = new LastlegOrderCommandService();
ReflectionTestUtils.setField(target,"orders",orderMapper);