fix: aggregate mixed cartons by fulfillment type

This commit is contained in:
2026-09-11 15:45:05 +08:00
parent 774f0472e8
commit 071f807b87
@@ -67,7 +67,7 @@ public class UnifiedOrderQueryService {
List<Long> orderIds = selected.stream().map(OrderEntity::getId).toList();
Map<Long, FirstlegUnifiedOrderClient.Summary> inboundByOrder = summaries(null, orderIds);
Map<Long, String> latestNotes = latestNotes(null, orderIds);
Map<Long, CargoSummary> cargoSummaries = cargoSummaries(null, orderIds);
Map<Long, CargoSummary> cargoSummaries = cargoSummaries(null, selected);
Map<Long, Integer> childCounts = childCounts(selected);
return selected.stream().map(order -> row(order, inboundByOrder.get(order.getId()),
latestNotes.get(order.getId()), childCounts, cargoSummaries.get(order.getId()), null)).toList();
@@ -90,8 +90,7 @@ public class UnifiedOrderQueryService {
? optionalSummaries(tenantId, sourceOrderIds)
: summaries(tenantId, sourceOrderIds);
Map<Long, String> latestNotes = latestNotes(tenantId, source.records().stream().map(OrderEntity::getId).toList());
Map<Long, CargoSummary> cargoSummaries = cargoSummaries(tenantId,
source.records().stream().map(OrderEntity::getId).toList());
Map<Long, CargoSummary> cargoSummaries = cargoSummaries(tenantId, source.records());
Map<Long, Integer> childCounts = childCounts(source.records());
Map<Long, UnifiedOrderResponse.CoLoadGroupSummary> coLoadByOrder = coLoadGroups(
source.records().stream().map(OrderEntity::getId).toList(), includeCoLoadGroups);
@@ -168,7 +167,7 @@ public class UnifiedOrderQueryService {
Map<Long, OrderEntity> orderById = orders.findByIds(tenantId, orderIds).stream()
.collect(Collectors.toMap(OrderEntity::getId, Function.identity(), (left, right) -> left));
Map<Long, String> latestNotes = latestNotes(tenantId, orderIds);
Map<Long, CargoSummary> cargoSummaries = cargoSummaries(tenantId, orderIds);
Map<Long, CargoSummary> cargoSummaries = cargoSummaries(tenantId, List.copyOf(orderById.values()));
Map<Long, Integer> childCounts = childCounts(List.copyOf(orderById.values()));
Map<Long, UnifiedOrderResponse.CoLoadGroupSummary> coLoadByOrder = coLoadGroups(
orderIds, includeCoLoadGroups);
@@ -239,11 +238,15 @@ public class UnifiedOrderQueryService {
OrderInternalNoteEntity::getOrderId, OrderInternalNoteEntity::getContent, (latest, ignored) -> latest));
}
private Map<Long, CargoSummary> cargoSummaries(Long tenantId, List<Long> orderIds) {
if (orderIds.isEmpty()) return Map.of();
private Map<Long, CargoSummary> cargoSummaries(Long tenantId, List<OrderEntity> pageOrders) {
if (pageOrders.isEmpty()) return Map.of();
List<Long> orderIds = pageOrders.stream().map(OrderEntity::getId).toList();
Map<Long, String> fulfillmentTypes = new HashMap<>();
pageOrders.forEach(order -> fulfillmentTypes.put(order.getId(), order.getFulfillmentType()));
return orders.findCargoByOrderIds(tenantId, orderIds).stream()
.collect(Collectors.groupingBy(OrderCargoEntity::getOrderId,
Collectors.collectingAndThen(Collectors.toList(), CargoSummary::from)));
.collect(Collectors.groupingBy(OrderCargoEntity::getOrderId)).entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,
entry -> CargoSummary.from(entry.getValue(), fulfillmentTypes.get(entry.getKey()))));
}
private Map<Long, Integer> childCounts(List<OrderEntity> pageOrders) {