|
@@ -60,12 +60,16 @@ public class RollOutShippServiceImpl extends ServiceImpl<RollOutShippMapper, Rol
|
|
|
return destinationStatistics;
|
|
|
}
|
|
|
// 根据size属性进行分组,并统计每组的总数和总重
|
|
|
- Map<String, Double> sumBySize = rollOutShippDetailsList.stream().collect(Collectors.groupingBy(RollOutShippDetails::getSize,Collectors.summingDouble(RollOutShippDetails::getBlankOutput)));
|
|
|
-
|
|
|
- Map<String, Long> countBySize = rollOutShippDetailsList.stream()
|
|
|
- // 先按照size进行分组
|
|
|
- .collect(Collectors.groupingBy(RollOutShippDetails::getSize,
|
|
|
- // 自定义一个Collector来实现类似功能
|
|
|
+ Map<String, Double> sumBySizeAndCcmNo = rollOutShippDetailsList.stream()
|
|
|
+ // 通过一个自定义的Function来组合size和ccmNo作为分组的键
|
|
|
+ .collect(Collectors.groupingBy(roll -> roll.getSize() + "_" + roll.getCcmNo(),
|
|
|
+ // 对每个分组内的元素,根据blankOutput进行求和统计
|
|
|
+ Collectors.summingDouble(RollOutShippDetails::getBlankOutput)
|
|
|
+ ));
|
|
|
+ Map<String, Long> countBySizeAndCcmNo = rollOutShippDetailsList.stream()
|
|
|
+ // 通过一个Function将size和ccmNo组合起来作为分组的键
|
|
|
+ .collect(Collectors.groupingBy(roll -> roll.getSize() + "_" + roll.getCcmNo(),
|
|
|
+ // 自定义Collector来实现分组后的统计求和功能
|
|
|
Collectors.collectingAndThen(
|
|
|
Collectors.toList(),
|
|
|
list -> list.stream().mapToLong(roll -> {
|
|
@@ -78,27 +82,14 @@ public class RollOutShippServiceImpl extends ServiceImpl<RollOutShippMapper, Rol
|
|
|
));
|
|
|
|
|
|
List<DestinationStatisticsDetails> rollOutShippDetailsStatisticsList = new ArrayList<>();
|
|
|
- sumBySize.forEach((size, totalWeight) -> {
|
|
|
- long count = countBySize.get(size);
|
|
|
+ sumBySizeAndCcmNo.forEach((size, totalWeight) -> {
|
|
|
+ String[] parts = size.split("_");
|
|
|
+ String sizeStr = parts[0];
|
|
|
+ String ccmNoStr = parts[1];
|
|
|
+ long count = countBySizeAndCcmNo.get(size);
|
|
|
// 找到第一个匹配size的RollClubOneDetails对象获取其ccmNo值(假设ccmNo在同一size分组内是相同的,如有不同需调整逻辑)
|
|
|
- String ccmNos = rollOutShippDetailsList.stream()
|
|
|
- .filter(detail -> detail.getSize().equals(size))
|
|
|
- .findFirst()
|
|
|
- .map(RollOutShippDetails::getCcmNo)
|
|
|
- .orElse(null);
|
|
|
- rollOutShippDetailsStatisticsList.add(new DestinationStatisticsDetails(size, (int) count, totalWeight, ccmNos));
|
|
|
+ rollOutShippDetailsStatisticsList.add(new DestinationStatisticsDetails(sizeStr, (int) count, totalWeight, ccmNoStr));
|
|
|
});
|
|
|
-// Integer sums = rollOutShippDetailsStatisticsList.stream()
|
|
|
-// .map(DestinationStatisticsDetails::getNums)
|
|
|
-// .reduce(0, Integer::sum);
|
|
|
-// // 使用String.format方法对求和结果保留两位小数
|
|
|
-// double blankOutputSum = rollOutShippDetailsStatisticsList.stream()
|
|
|
-// .mapToDouble(DestinationStatisticsDetails::getBlankOutput)
|
|
|
-// .sum();
|
|
|
-// String formattedResult = String.format("%.4f", blankOutputSum);
|
|
|
-// double finalBlankOutputSum = Double.parseDouble(formattedResult);
|
|
|
-// destinationStatistics.setCounts(sums);
|
|
|
-// destinationStatistics.setBlankOutput(finalBlankOutputSum);
|
|
|
|
|
|
destinationStatistics.setStatisticsDetailsList(rollOutShippDetailsStatisticsList);
|
|
|
return destinationStatistics;
|