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
|
@Service
|
||||||
public class WarehouseTransferService {
|
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.FleetPoolOrderBridge fleetPool;
|
||||||
@Resource private com.baiyue.lastleg.fleet.business.FleetPoolOrderQueries fleetPoolQueries;
|
@Resource private com.baiyue.lastleg.fleet.business.FleetPoolOrderQueries fleetPoolQueries;
|
||||||
public static final String ORDER_TYPE = "WAREHOUSE_TRANSFER";
|
public static final String ORDER_TYPE = "WAREHOUSE_TRANSFER";
|
||||||
@@ -166,6 +167,10 @@ public class WarehouseTransferService {
|
|||||||
return detail(customerId, replay.getTransferNo());
|
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();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
long transferId = IdWorker.getId();
|
long transferId = IdWorker.getId();
|
||||||
String transferNo = orderNoGenerator.next("TRANSFER", request.operatingWarehouseId(), transferId);
|
String transferNo = orderNoGenerator.next("TRANSFER", request.operatingWarehouseId(), transferId);
|
||||||
@@ -201,7 +206,7 @@ public class WarehouseTransferService {
|
|||||||
inboundOrderId = createInboundSnapshot(customerId, transferId, transferNo, request, requestHash, now);
|
inboundOrderId = createInboundSnapshot(customerId, transferId, transferNo, request, requestHash, now);
|
||||||
selectedOrders = List.of();
|
selectedOrders = List.of();
|
||||||
}
|
}
|
||||||
LastlegOrder order = createTailOrder(customerId, inboundOrderId, inboundCode, transferNo,
|
LastlegOrder order = createTailOrder(customerId, customer.name().trim(), inboundOrderId, inboundCode, transferNo,
|
||||||
request, requestHash, now);
|
request, requestHash, now);
|
||||||
|
|
||||||
WarehouseTransferOrder transfer = new WarehouseTransferOrder();
|
WarehouseTransferOrder transfer = new WarehouseTransferOrder();
|
||||||
@@ -1852,10 +1857,11 @@ public class WarehouseTransferService {
|
|||||||
return inbound.getId();
|
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) {
|
WarehouseTransferRequests.Create request, String requestHash, LocalDateTime now) {
|
||||||
LastlegOrder order = new LastlegOrder();
|
LastlegOrder order = new LastlegOrder();
|
||||||
order.setId(IdWorker.getId()); order.setOrderNo(orderNoGenerator.next("TRANSFER", request.operatingWarehouseId(), order.getId())); order.setCustomerId(customerId);
|
order.setId(IdWorker.getId()); order.setOrderNo(orderNoGenerator.next("TRANSFER", request.operatingWarehouseId(), order.getId())); order.setCustomerId(customerId);
|
||||||
|
order.setCustomerName(customerName);
|
||||||
order.setOrderType(ORDER_TYPE);
|
order.setOrderType(ORDER_TYPE);
|
||||||
order.setInboundCode(inboundCode); order.setSourceRegion("CUSTOMER");
|
order.setInboundCode(inboundCode); order.setSourceRegion("CUSTOMER");
|
||||||
order.setSourceInboundId("WAREHOUSE_TRANSFER:" + transferNo); order.setRootInboundId(String.valueOf(inboundOrderId));
|
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;
|
@Mock com.baiyue.lastleg.relabel.service.RelabelApplicationService relabelService;
|
||||||
private WarehouseTransferService service;
|
private WarehouseTransferService service;
|
||||||
@Mock WarehouseTransferReceiptCoordinator receiptCoordinator;
|
@Mock WarehouseTransferReceiptCoordinator receiptCoordinator;
|
||||||
|
@Mock com.baiyue.lastleg.fleet.customer.FleetCustomerDirectory customerDirectory;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() {
|
void setUp() {
|
||||||
service = new WarehouseTransferService();
|
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, "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));
|
org.springframework.test.util.ReflectionTestUtils.setField(service, "fleetPoolQueries", org.mockito.Mockito.mock(com.baiyue.lastleg.fleet.business.FleetPoolOrderQueries.class));
|
||||||
ReflectionTestUtils.setField(service, "receiptCoordinator", receiptCoordinator);
|
ReflectionTestUtils.setField(service, "receiptCoordinator", receiptCoordinator);
|
||||||
@@ -386,6 +390,7 @@ class WarehouseTransferServiceTest {
|
|||||||
ArgumentCaptor<LastlegOrder> tailOrder = ArgumentCaptor.forClass(LastlegOrder.class);
|
ArgumentCaptor<LastlegOrder> tailOrder = ArgumentCaptor.forClass(LastlegOrder.class);
|
||||||
verify(orders).insert(tailOrder.capture());
|
verify(orders).insert(tailOrder.capture());
|
||||||
assertEquals(WarehouseTransferService.ORDER_TYPE, tailOrder.getValue().getOrderType());
|
assertEquals(WarehouseTransferService.ORDER_TYPE, tailOrder.getValue().getOrderType());
|
||||||
|
assertEquals("Customer A", tailOrder.getValue().getCustomerName());
|
||||||
assertEquals(WarehouseTransferService.DRAFT, tailOrder.getValue().getCurrentStatus());
|
assertEquals(WarehouseTransferService.DRAFT, tailOrder.getValue().getCurrentStatus());
|
||||||
assertEquals("WAREHOUSE_TRANSFER:DRAFT;RELABEL:PENDING_BINDING", tailOrder.getValue().getSubOrderStatus());
|
assertEquals("WAREHOUSE_TRANSFER:DRAFT;RELABEL:PENDING_BINDING", tailOrder.getValue().getSubOrderStatus());
|
||||||
assertTrue(tailOrder.getValue().getOrderNo().matches("WT-[0-9A-Z]{25}"));
|
assertTrue(tailOrder.getValue().getOrderNo().matches("WT-[0-9A-Z]{25}"));
|
||||||
@@ -534,6 +539,7 @@ class WarehouseTransferServiceTest {
|
|||||||
verify(transfers).insert(transfer.capture());
|
verify(transfers).insert(transfer.capture());
|
||||||
verify(transferCartons, times(5)).insert(cartons.capture());
|
verify(transferCartons, times(5)).insert(cartons.capture());
|
||||||
verify(orders).insert(tailOrder.capture());
|
verify(orders).insert(tailOrder.capture());
|
||||||
|
assertEquals("Customer A", tailOrder.getValue().getCustomerName());
|
||||||
verify(sourceOrders, never()).insert(any(WarehouseTransferSourceOrder.class));
|
verify(sourceOrders, never()).insert(any(WarehouseTransferSourceOrder.class));
|
||||||
verify(relabelApplications, never()).insert(any(RelabelApplication.class));
|
verify(relabelApplications, never()).insert(any(RelabelApplication.class));
|
||||||
|
|
||||||
@@ -547,6 +553,13 @@ class WarehouseTransferServiceTest {
|
|||||||
.map(WarehouseTransferCarton::getCartonIndex).toList());
|
.map(WarehouseTransferCarton::getCartonIndex).toList());
|
||||||
assertTrue(cartons.getAllValues().stream().allMatch(value -> value.getCartonMark()
|
assertTrue(cartons.getAllValues().stream().allMatch(value -> value.getCartonMark()
|
||||||
.matches("WT-[0-9A-Z]{25}#5-[1-5]")));
|
.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
|
@Test
|
||||||
@@ -1089,6 +1102,20 @@ class WarehouseTransferServiceTest {
|
|||||||
verify(orders, never()).insert(any(LastlegOrder.class));
|
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) {
|
private static WarehouseTransferRequests.Create request(boolean needRelabel) {
|
||||||
if (!needRelabel) {
|
if (!needRelabel) {
|
||||||
return new WarehouseTransferRequests.Create(
|
return new WarehouseTransferRequests.Create(
|
||||||
|
|||||||
Reference in New Issue
Block a user