qiangxuan 5 月之前
父節點
當前提交
8b81845295

+ 3 - 1
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollClubOne/service/impl/RollClubOneServiceImpl.java

@@ -45,11 +45,13 @@ public class RollClubOneServiceImpl extends ServiceImpl<RollClubOneMapper, RollC
         }
         Integer amountTotal = rollClubOneList.stream().map(RollClubOne::getAmountTotal).reduce(0, Integer::sum);
         // 先将每个RollHeight对象中的heightValue属性值乘以blankOutput,再求和
-        double sumResult = rollClubOneList.stream().mapToDouble(x -> x.getAmountTotal() * x.getBlankOutput()).sum();
+        double sumResult = rollClubOneList.stream().map(RollClubOne::getBlankOutput).filter(blankOutput -> blankOutput!= null).mapToDouble(Double::doubleValue).sum();
         BigDecimal bd = BigDecimal.valueOf(sumResult).setScale(4, BigDecimal.ROUND_HALF_UP);
         double finalResult = bd.doubleValue();
         destinationStatistics.setCounts(amountTotal);
         destinationStatistics.setBlankOutput(finalResult);
+
+
         LambdaQueryWrapper<RollClubOneDetails> queryWrapperDetails = new LambdaQueryWrapper<>();
         if (oConvertUtils.isNotEmpty(ccmNo)){
             queryWrapperDetails.eq(RollClubOneDetails::getCcmNo, ccmNo);

+ 16 - 16
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollClubThree/service/impl/RollClubThreeServiceImpl.java

@@ -59,14 +59,17 @@ public class RollClubThreeServiceImpl extends ServiceImpl<RollClubThreeMapper, R
         if (oConvertUtils.listIsEmpty(rollClubThreeDetailsList)){
             return destinationStatistics;
         }
-        // 根据size属性进行分组,并统计每组的总数和总重
-        Map<String, Double> sumBySize = rollClubThreeDetailsList.stream()
-                .collect(Collectors.groupingBy(RollClubThreeDetails::getSize,Collectors.summingDouble(RollClubThreeDetails::getBlankOutput)));
 
-        Map<String, Long> countBySize = rollClubThreeDetailsList.stream()
-                // 先按照size进行分组
-                .collect(Collectors.groupingBy(RollClubThreeDetails::getSize,
-                        // 自定义一个Collector来实现类似功能
+        Map<String, Double> sumBySizeAndCcmNo = rollClubThreeDetailsList.stream()
+                // 通过一个自定义的Function来组合size和ccmNo作为分组的键
+                .collect(Collectors.groupingBy(roll -> roll.getSize() + "_" + roll.getCcmNo(),
+                        // 对每个分组内的元素,根据blankOutput进行求和统计
+                        Collectors.summingDouble(RollClubThreeDetails::getBlankOutput)
+                ));
+        Map<String, Long> countBySizeAndCcmNo = rollClubThreeDetailsList.stream()
+                // 通过一个Function将size和ccmNo组合起来作为分组的键
+                .collect(Collectors.groupingBy(roll -> roll.getSize() + "_" + roll.getCcmNo(),
+                        // 自定义Collector来实现分组后的统计求和功能
                         Collectors.collectingAndThen(
                                 Collectors.toList(),
                                 list -> list.stream().mapToLong(roll -> {
@@ -79,15 +82,12 @@ public class RollClubThreeServiceImpl extends ServiceImpl<RollClubThreeMapper, R
                 ));
 
         List<DestinationStatisticsDetails> rollClubThreeDetailsStatisticsList = new ArrayList<>();
-        sumBySize.forEach((size, totalWeight) -> {
-            long count = countBySize.get(size);
-            // 找到第一个匹配size的RollClubOneDetails对象获取其ccmNo值(假设ccmNo在同一size分组内是相同的,如有不同需调整逻辑)
-            String ccmNos = rollClubThreeDetailsList.stream()
-                    .filter(detail -> detail.getSize().equals(size))
-                    .findFirst()
-                    .map(RollClubThreeDetails::getCcmNo)
-                    .orElse(null);
-            rollClubThreeDetailsStatisticsList.add(new DestinationStatisticsDetails(size, (int) count, totalWeight, ccmNos));
+        sumBySizeAndCcmNo.forEach((size, totalWeight) -> {
+            String[] parts = size.split("_");
+            String sizeStr = parts[0];
+            String ccmNoStr = parts[1];
+            long count = countBySizeAndCcmNo.get(size);
+            rollClubThreeDetailsStatisticsList.add(new DestinationStatisticsDetails(sizeStr, (int) count, totalWeight, ccmNoStr));
         });
 
 //        Integer sums = rollClubThreeDetailsStatisticsList.stream()

+ 17 - 17
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollClubTwo/service/impl/RollClubTwoServiceImpl.java

@@ -58,14 +58,16 @@ public class RollClubTwoServiceImpl extends ServiceImpl<RollClubTwoMapper, RollC
             return destinationStatistics;
         }
         // 根据size属性进行分组,并统计每组的总数和总重
-        Map<String, Double> sumBySize = rollClubTwoDetailsList.stream()
-                .collect(Collectors.groupingBy(RollClubTwoDetails::getSize,Collectors.summingDouble(RollClubTwoDetails::getBlankOutput)));
-
-
-        Map<String, Long> countBySize = rollClubTwoDetailsList.stream()
-                // 先按照size进行分组
-                .collect(Collectors.groupingBy(RollClubTwoDetails::getSize,
-                        // 自定义一个Collector来实现类似功能
+        Map<String, Double> sumBySizeAndCcmNo = rollClubTwoDetailsList.stream()
+                // 通过一个自定义的Function来组合size和ccmNo作为分组的键
+                .collect(Collectors.groupingBy(roll -> roll.getSize() + "_" + roll.getCcmNo(),
+                        // 对每个分组内的元素,根据blankOutput进行求和统计
+                        Collectors.summingDouble(RollClubTwoDetails::getBlankOutput)
+                ));
+        Map<String, Long> countBySizeAndCcmNo = rollClubTwoDetailsList.stream()
+                // 通过一个Function将size和ccmNo组合起来作为分组的键
+                .collect(Collectors.groupingBy(roll -> roll.getSize() + "_" + roll.getCcmNo(),
+                        // 自定义Collector来实现分组后的统计求和功能
                         Collectors.collectingAndThen(
                                 Collectors.toList(),
                                 list -> list.stream().mapToLong(roll -> {
@@ -77,16 +79,14 @@ public class RollClubTwoServiceImpl extends ServiceImpl<RollClubTwoMapper, RollC
                         )
                 ));
 
+
         List<DestinationStatisticsDetails> rollClubTwoDetailsStatisticsList = new ArrayList<>();
-        sumBySize.forEach((size, totalWeight) -> {
-            long count = countBySize.get(size);
-            // 找到第一个匹配size的RollClubOneDetails对象获取其ccmNo值(假设ccmNo在同一size分组内是相同的,如有不同需调整逻辑)
-            String ccmNos = rollClubTwoDetailsList.stream()
-                    .filter(detail -> detail.getSize().equals(size))
-                    .findFirst()
-                    .map(RollClubTwoDetails::getCcmNo)
-                    .orElse(null);
-            rollClubTwoDetailsStatisticsList.add(new DestinationStatisticsDetails(size, (int) count, totalWeight, ccmNos));
+        sumBySizeAndCcmNo.forEach((size, totalWeight) -> {
+            String[] parts = size.split("_");
+            String sizeStr = parts[0];
+            String ccmNoStr = parts[1];
+            long count = countBySizeAndCcmNo.get(size);
+            rollClubTwoDetailsStatisticsList.add(new DestinationStatisticsDetails(sizeStr, (int) count, totalWeight, ccmNoStr));
         });
 
 //        Integer sums = rollClubTwoDetailsStatisticsList.stream()

+ 6 - 1
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollHeight/service/impl/RollHeightServiceImpl.java

@@ -44,9 +44,14 @@ public class RollHeightServiceImpl extends ServiceImpl<RollHeightMapper, RollHei
         }
         Integer amountTotal = rollHeightList.stream().map(RollHeight::getAmountTotal).reduce(0, Integer::sum);
         // 先将每个RollHeight对象中的heightValue属性值乘以blankOutput,再求和
-        double sumResult = rollHeightList.stream().mapToDouble(rollHeight -> rollHeight.getAmountTotal() * rollHeight.getBlankOutput()).sum();
+//        double sumResult = rollHeightList.stream().mapToDouble(rollHeight -> rollHeight.getAmountTotal() * rollHeight.getBlankOutput()).sum();
+//        BigDecimal bd = BigDecimal.valueOf(sumResult).setScale(4, BigDecimal.ROUND_HALF_UP);
+//        double finalResult = bd.doubleValue();
+
+        double sumResult = rollHeightList.stream().map(RollHeight::getBlankOutput).filter(blankOutput -> blankOutput!= null).mapToDouble(Double::doubleValue).sum();
         BigDecimal bd = BigDecimal.valueOf(sumResult).setScale(4, BigDecimal.ROUND_HALF_UP);
         double finalResult = bd.doubleValue();
+
         destinationStatistics.setCounts(amountTotal);
         destinationStatistics.setBlankOutput(finalResult);
         LambdaQueryWrapper<RollHeightDetails> queryWrapperDetails = new LambdaQueryWrapper<>();

+ 16 - 25
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollOutShipp/service/impl/RollOutShippServiceImpl.java

@@ -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;