Merge remote-tracking branch 'origin/test' into dev

# Conflicts:
#	firstleg/src/test/java/com/baiyue/firstleg/service/CartonMeasurementServiceTest.java
This commit is contained in:
2026-09-03 21:23:35 +08:00
38 changed files with 643 additions and 206 deletions
@@ -306,7 +306,7 @@ public class UnifiedOrderQueryService {
order.getCustomerId(), order.getCustomerName(),
order.getChannelCode(), order.getChannelName(), Boolean.TRUE.equals(order.getChannelChanged()), order.getReceivingWarehouseId(), order.getReceivingWarehouseName(),
order.getDestinationWarehouseId(), order.getDestinationWarehouseName(), inbound.id(), inbound.version(), inbound.inboundCode(),
order.getExpectedShipDate(), inbound.totalPackageCount() != null ? inbound.totalPackageCount() : totalPackageCount(cargo), null, inbound.locationCodes(),
order.getExpectedShipDate(), displayedPackageCount(order, cargo, inbound), null, inbound.locationCodes(),
order.getEstimatedVolumeCbm(), volumeCbm(cargo),
inbound.actualGrossWeightKg(), inbound.actualVolumeCbm(),
order.getExpectedArrivalAt() != null ? order.getExpectedArrivalAt() : inbound.expectedArrivalAt(), inbound.feeReviewStatus(),
@@ -333,7 +333,7 @@ public class UnifiedOrderQueryService {
order != null && Boolean.TRUE.equals(order.getChannelChanged()), inbound.warehouseId(),
inbound.warehouseName(), inbound.deliveryWarehouseId(), inbound.deliveryWarehouseName(),
inbound.id(), inbound.version(), inbound.inboundCode(), null,
inbound.totalPackageCount() != null ? inbound.totalPackageCount() : totalPackageCount(cargo), null, inbound.locationCodes(),
displayedPackageCount(order, cargo, inbound), null, inbound.locationCodes(),
order == null ? null : order.getEstimatedVolumeCbm(), volumeCbm(cargo),
inbound.actualGrossWeightKg(), inbound.actualVolumeCbm(),
order != null && order.getExpectedArrivalAt() != null ? order.getExpectedArrivalAt() : inbound.expectedArrivalAt(), inbound.feeReviewStatus(), inbound.companyName(),
@@ -416,6 +416,15 @@ public class UnifiedOrderQueryService {
return cargo == null ? null : cargo.totalPackageCount();
}
private Integer displayedPackageCount(OrderEntity order, CargoSummary cargo,
FirstlegUnifiedOrderClient.Inbound inbound) {
Integer declaredPackageCount = totalPackageCount(cargo);
boolean splitChild = order != null
&& (order.getParentOrderId() != null || "CHILD".equals(order.getOrderRole()));
if (!splitChild && declaredPackageCount != null) return declaredPackageCount;
return inbound.totalPackageCount() != null ? inbound.totalPackageCount() : declaredPackageCount;
}
private BigDecimal grossWeightKg(CargoSummary cargo) {
return cargo == null ? null : cargo.grossWeightKg();
}
@@ -167,6 +167,25 @@ class UnifiedOrderQueryServiceTest {
.extracting(UnifiedOrderResponse.Row::totalPackageCount).isEqualTo(35);
}
@Test
void regularOrderAlwaysDisplaysDeclaredCargoCountInsteadOfMeasuredInboundSnapshot() {
UnifiedOrderQuery query = query(null);
OrderEntity order = order(OrderStatus.APPROVED);
OrderCargoEntity declaredCargo = new OrderCargoEntity();
declaredCargo.setOrderId(77L);
declaredCargo.setPackageCount(100);
var summary = summary("WAIT_SPLIT", null);
when(summary.inbound().totalPackageCount()).thenReturn(3);
when(orders.unifiedPage(eq(10001L), eq(query), any()))
.thenReturn(new PageResult<>(List.of(order), 1, 20, 1, 1));
when(firstleg.summaries(eq("internal-token"), any()))
.thenReturn(ApiResponse.success(List.of(summary)));
when(orders.findCargoByOrderIds(10001L, List.of(77L))).thenReturn(List.of(declaredCargo));
assertThat(service.page(10001L, query).records()).singleElement()
.extracting(UnifiedOrderResponse.Row::totalPackageCount).isEqualTo(100);
}
@Test
void inboundMasterUsesTotalPackageCountEvenWhenLegacyPackageCountIsAbsent() {
UnifiedOrderQuery query = query(null);