优化
This commit is contained in:
@@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -254,8 +255,10 @@ public class PdaPickSettlementService {
|
||||
throw conflict("入仓单缺少真实订单引用");
|
||||
}
|
||||
List<OrderFulfillmentSplitClient.QuantityLine> quantities = lines.stream()
|
||||
.map(line -> new OrderFulfillmentSplitClient.QuantityLine(
|
||||
line.item().inboundDetailId(), line.item().packageCount()))
|
||||
.collect(Collectors.groupingBy(line -> line.item().inboundDetailId(), LinkedHashMap::new,
|
||||
Collectors.summingInt(line -> count(line.item().packageCount(), "测量明细箱数"))))
|
||||
.entrySet().stream()
|
||||
.map(entry -> new OrderFulfillmentSplitClient.QuantityLine(entry.getKey(), entry.getValue()))
|
||||
.toList();
|
||||
OrderFulfillmentSplitClient.CreateRequest request = new OrderFulfillmentSplitClient.CreateRequest(
|
||||
source.tenantId(), root.orderId(), source.orderId(), loadingPlanId, containerBookingId,
|
||||
@@ -333,15 +336,18 @@ public class PdaPickSettlementService {
|
||||
if (!measuredDetailIds.containsAll(pickedByDetail.keySet())) {
|
||||
throw conflict("PDA 已拣明细未匹配已审核测量明细");
|
||||
}
|
||||
Map<Long, Integer> remainingPickedByDetail = new HashMap<>(pickedByDetail);
|
||||
List<MeasurementSplitLine> result = new ArrayList<>();
|
||||
for (MeasurementItemRow item : measurements) {
|
||||
int measured = count(item.packageCount(), "测量明细箱数");
|
||||
int picked = pickedByDetail.getOrDefault(item.inboundDetailId(), 0);
|
||||
if (picked > measured) {
|
||||
throw conflict("PDA 已拣箱数超过测量明细箱数");
|
||||
}
|
||||
int requested = remainingPickedByDetail.getOrDefault(item.inboundDetailId(), 0);
|
||||
int picked = Math.min(measured, requested);
|
||||
remainingPickedByDetail.put(item.inboundDetailId(), requested - picked);
|
||||
result.add(new MeasurementSplitLine(item, picked, measured - picked));
|
||||
}
|
||||
if (remainingPickedByDetail.values().stream().anyMatch(remaining -> remaining != 0)) {
|
||||
throw conflict("PDA 已拣箱数超过测量明细箱数");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user