fix(lastleg): snapshot customer name for incoming cargo
This commit is contained in:
+8
-2
@@ -88,6 +88,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class WarehouseTransferService {
|
||||
@Resource private com.baiyue.lastleg.fleet.customer.FleetCustomerDirectory customerDirectory;
|
||||
@Resource private com.baiyue.lastleg.fleet.business.FleetPoolOrderBridge fleetPool;
|
||||
@Resource private com.baiyue.lastleg.fleet.business.FleetPoolOrderQueries fleetPoolQueries;
|
||||
public static final String ORDER_TYPE = "WAREHOUSE_TRANSFER";
|
||||
@@ -166,6 +167,10 @@ public class WarehouseTransferService {
|
||||
return detail(customerId, replay.getTransferNo());
|
||||
}
|
||||
|
||||
var customer = customerDirectory.find(customerId);
|
||||
if (customer == null || !customerId.equals(customer.id()) || !StringUtils.hasText(customer.name())) {
|
||||
throw new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE, "客户名称暂不可用,请稍后重试");
|
||||
}
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
long transferId = IdWorker.getId();
|
||||
String transferNo = orderNoGenerator.next("TRANSFER", request.operatingWarehouseId(), transferId);
|
||||
@@ -201,7 +206,7 @@ public class WarehouseTransferService {
|
||||
inboundOrderId = createInboundSnapshot(customerId, transferId, transferNo, request, requestHash, now);
|
||||
selectedOrders = List.of();
|
||||
}
|
||||
LastlegOrder order = createTailOrder(customerId, inboundOrderId, inboundCode, transferNo,
|
||||
LastlegOrder order = createTailOrder(customerId, customer.name().trim(), inboundOrderId, inboundCode, transferNo,
|
||||
request, requestHash, now);
|
||||
|
||||
WarehouseTransferOrder transfer = new WarehouseTransferOrder();
|
||||
@@ -1852,10 +1857,11 @@ public class WarehouseTransferService {
|
||||
return inbound.getId();
|
||||
}
|
||||
|
||||
private LastlegOrder createTailOrder(String customerId, Long inboundOrderId, String inboundCode, String transferNo,
|
||||
private LastlegOrder createTailOrder(String customerId, String customerName, Long inboundOrderId, String inboundCode, String transferNo,
|
||||
WarehouseTransferRequests.Create request, String requestHash, LocalDateTime now) {
|
||||
LastlegOrder order = new LastlegOrder();
|
||||
order.setId(IdWorker.getId()); order.setOrderNo(orderNoGenerator.next("TRANSFER", request.operatingWarehouseId(), order.getId())); order.setCustomerId(customerId);
|
||||
order.setCustomerName(customerName);
|
||||
order.setOrderType(ORDER_TYPE);
|
||||
order.setInboundCode(inboundCode); order.setSourceRegion("CUSTOMER");
|
||||
order.setSourceInboundId("WAREHOUSE_TRANSFER:" + transferNo); order.setRootInboundId(String.valueOf(inboundOrderId));
|
||||
|
||||
+27
@@ -186,10 +186,14 @@ class WarehouseTransferServiceTest {
|
||||
@Mock com.baiyue.lastleg.relabel.service.RelabelApplicationService relabelService;
|
||||
private WarehouseTransferService service;
|
||||
@Mock WarehouseTransferReceiptCoordinator receiptCoordinator;
|
||||
@Mock com.baiyue.lastleg.fleet.customer.FleetCustomerDirectory customerDirectory;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
service = new WarehouseTransferService();
|
||||
ReflectionTestUtils.setField(service, "customerDirectory", customerDirectory);
|
||||
lenient().when(customerDirectory.find("TENANT-A")).thenReturn(
|
||||
new com.baiyue.lastleg.fleet.customer.FleetCustomerDirectory.Customer("TENANT-A", "C-A", "Customer A", null, null));
|
||||
org.springframework.test.util.ReflectionTestUtils.setField(service, "fleetPool", org.mockito.Mockito.mock(com.baiyue.lastleg.fleet.business.FleetPoolOrderBridge.class));
|
||||
org.springframework.test.util.ReflectionTestUtils.setField(service, "fleetPoolQueries", org.mockito.Mockito.mock(com.baiyue.lastleg.fleet.business.FleetPoolOrderQueries.class));
|
||||
ReflectionTestUtils.setField(service, "receiptCoordinator", receiptCoordinator);
|
||||
@@ -386,6 +390,7 @@ class WarehouseTransferServiceTest {
|
||||
ArgumentCaptor<LastlegOrder> tailOrder = ArgumentCaptor.forClass(LastlegOrder.class);
|
||||
verify(orders).insert(tailOrder.capture());
|
||||
assertEquals(WarehouseTransferService.ORDER_TYPE, tailOrder.getValue().getOrderType());
|
||||
assertEquals("Customer A", tailOrder.getValue().getCustomerName());
|
||||
assertEquals(WarehouseTransferService.DRAFT, tailOrder.getValue().getCurrentStatus());
|
||||
assertEquals("WAREHOUSE_TRANSFER:DRAFT;RELABEL:PENDING_BINDING", tailOrder.getValue().getSubOrderStatus());
|
||||
assertTrue(tailOrder.getValue().getOrderNo().matches("WT-[0-9A-Z]{25}"));
|
||||
@@ -534,6 +539,7 @@ class WarehouseTransferServiceTest {
|
||||
verify(transfers).insert(transfer.capture());
|
||||
verify(transferCartons, times(5)).insert(cartons.capture());
|
||||
verify(orders).insert(tailOrder.capture());
|
||||
assertEquals("Customer A", tailOrder.getValue().getCustomerName());
|
||||
verify(sourceOrders, never()).insert(any(WarehouseTransferSourceOrder.class));
|
||||
verify(relabelApplications, never()).insert(any(RelabelApplication.class));
|
||||
|
||||
@@ -547,6 +553,13 @@ class WarehouseTransferServiceTest {
|
||||
.map(WarehouseTransferCarton::getCartonIndex).toList());
|
||||
assertTrue(cartons.getAllValues().stream().allMatch(value -> value.getCartonMark()
|
||||
.matches("WT-[0-9A-Z]{25}#5-[1-5]")));
|
||||
when(transfers.findKey("TENANT-A", request.idempotencyKey())).thenReturn(transfer.getValue());
|
||||
clearInvocations(customerDirectory, orders, inboundOrders);
|
||||
service.create("TENANT-A", "USER-1", request);
|
||||
verifyNoInteractions(customerDirectory, inboundOrders);
|
||||
verify(orders, never()).insert(any(LastlegOrder.class));
|
||||
verify(orders, never()).updateById(any(LastlegOrder.class));
|
||||
assertEquals("Customer A", tailOrder.getValue().getCustomerName());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1089,6 +1102,20 @@ class WarehouseTransferServiceTest {
|
||||
verify(orders, never()).insert(any(LastlegOrder.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void missingOrForeignCustomerNameStopsCreationBeforeAnyBusinessWrites() {
|
||||
for (var customer : List.of(
|
||||
new com.baiyue.lastleg.fleet.customer.FleetCustomerDirectory.Customer("TENANT-A", "C-A", " ", null, null),
|
||||
new com.baiyue.lastleg.fleet.customer.FleetCustomerDirectory.Customer("OTHER", "C-B", "Other customer", null, null))) {
|
||||
when(customerDirectory.find("TENANT-A")).thenReturn(customer);
|
||||
var error = assertThrows(ResponseStatusException.class, () -> service.create("TENANT-A", "USER-1", request(false)));
|
||||
assertEquals(503, error.getStatusCode().value());
|
||||
}
|
||||
verify(orders, never()).insert(any(LastlegOrder.class));
|
||||
verify(inboundOrders, never()).insert(any(LastlegInboundOrder.class));
|
||||
verify(transfers, never()).insert(any(WarehouseTransferOrder.class));
|
||||
}
|
||||
|
||||
private static WarehouseTransferRequests.Create request(boolean needRelabel) {
|
||||
if (!needRelabel) {
|
||||
return new WarehouseTransferRequests.Create(
|
||||
|
||||
Reference in New Issue
Block a user