Эх сурвалжийг харах

看板统计代码BUG修复

qiangxuan 2 сар өмнө
parent
commit
4e5be135c7

+ 8 - 13
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/service/impl/BilletHotsendBaseServiceImpl.java

@@ -350,23 +350,18 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 		storageBill.setDestination(billetHotsendDetailsVo.getBelongTypeName());// 目的地
 		storageBill.setSize(String.join(",", sizeList));
 		storageBill.setOutTime(new Date());
-
-		String distinctAssemblyNumber = billetBasicInfoList.stream()
-				.map(BilletBasicInfo::getAssemblyNumber)
-				.filter(assemblyNumber -> assemblyNumber!= null)
-				.distinct()
-				.collect(Collectors.joining(","));
-
-		if (oConvertUtils.isNotEmpty(storageBill)){
-			String existingAssemblyNumber = storageBill.getAssemblyNumber();
-			String finalAssemblyNumber = Optional.ofNullable(existingAssemblyNumber)
+		List<String> stringList = billetBasicInfoList.stream().map(BilletBasicInfo::getAssemblyNumber).filter(assemblyNumber -> oConvertUtils.isNotEmpty(assemblyNumber)).collect(Collectors.toList());
+		if(oConvertUtils.listIsNotEmpty(stringList)) {
+			String distinctAssemblyNumber = billetBasicInfoList.stream()
+					.map(BilletBasicInfo::getAssemblyNumber)
+					.filter(assemblyNumber -> oConvertUtils.isNotEmpty(assemblyNumber))
+					.distinct().collect(Collectors.joining(","));
+			String finalAssemblyNumber = Optional.ofNullable(storageBill.getAssemblyNumber())
+					.filter(oConvertUtils::isNotEmpty)
 					.map(s -> s + "," + distinctAssemblyNumber)
 					.orElse(distinctAssemblyNumber);
 			storageBill.setAssemblyNumber(finalAssemblyNumber);
-		}else {
-			storageBill.setAssemblyNumber(distinctAssemblyNumber);
 		}
-
 		storageBillService.updateById(storageBill);
 		// 生成储运单
 		StorageCarLog storageCarLog = new StorageCarLog();

+ 22 - 18
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/stackingAndLoadingVehicles/service/impl/StackingAndLoadingVehiclesServiceImpl.java

@@ -196,26 +196,30 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
         billetBasicInfoService.saveOrUpdateBatch(billetBasicInfoList);
         // 取最新的第一条钢坯信息
         RollClubCommon rollClubCommon = rollClubCommonList.stream().findFirst().orElse(null);
-        storageBill.setSteel(rollClubCommon.getGrade());//钢种
-        storageBill.setSpec(rollClubCommon.getSpec());//规格
-        storageBill.setAmountTotal((oConvertUtils.isNotEmpty(storageBill.getAmountTotal()) ? storageBill.getAmountTotal() : 0) + stackingAndLoadingVehiclesList.size() * 4);
-        storageBill.setDestination(loadingParams.getDestination());
-        storageBill.setTypeConfigId(loadingParams.getDestinationId());
-        String distinctAssemblyNumber = billetBasicInfoList.stream()
-                .map(BilletBasicInfo::getAssemblyNumber)
-                .filter(assemblyNumber -> assemblyNumber != null)
-                .distinct()
-                .collect(Collectors.joining(","));
-        if (oConvertUtils.isNotEmpty(storageBill)) {
-            String existingAssemblyNumber = storageBill.getAssemblyNumber();
-            String finalAssemblyNumber = Optional.ofNullable(existingAssemblyNumber)
+        // 根据装运单ID查询装运单信息
+        StorageBill storageBillInfo = storageBillService.getById(storageBill.getId());
+        if (oConvertUtils.isEmpty(storageBillInfo)){
+            result.put("fail", "钢坯装运单信息为空,堆垛保存操作失败!");
+            return result;
+        }
+        storageBillInfo.setSteel(rollClubCommon.getGrade());//钢种
+        storageBillInfo.setSpec(rollClubCommon.getSpec());//规格
+        storageBillInfo.setAmountTotal((oConvertUtils.isNotEmpty(storageBillInfo.getAmountTotal()) ? storageBillInfo.getAmountTotal() : 0) + stackingAndLoadingVehiclesList.size() * 4);
+        storageBillInfo.setDestination(loadingParams.getDestination());
+        storageBillInfo.setTypeConfigId(loadingParams.getDestinationId());
+        List<String> stringList = billetBasicInfoList.stream().map(BilletBasicInfo::getAssemblyNumber).filter(assemblyNumber -> oConvertUtils.isNotEmpty(assemblyNumber)).collect(Collectors.toList());
+        if(oConvertUtils.listIsNotEmpty(stringList)) {
+            String distinctAssemblyNumber = billetBasicInfoList.stream()
+                    .map(BilletBasicInfo::getAssemblyNumber)
+                    .filter(assemblyNumber -> oConvertUtils.isNotEmpty(assemblyNumber))
+                    .distinct().collect(Collectors.joining(","));
+            String finalAssemblyNumber = Optional.ofNullable(storageBillInfo.getAssemblyNumber())
+                    .filter(oConvertUtils::isNotEmpty)
                     .map(s -> s + "," + distinctAssemblyNumber)
                     .orElse(distinctAssemblyNumber);
-            storageBill.setAssemblyNumber(finalAssemblyNumber);
-        } else {
-            storageBill.setAssemblyNumber(distinctAssemblyNumber);
+            storageBillInfo.setAssemblyNumber(finalAssemblyNumber);
         }
-        storageBillService.updateById(storageBill);
+        storageBillService.updateById(storageBillInfo);
         result.put("success", "堆垛保存操作成功");
         return result;
     }
@@ -692,7 +696,7 @@ public class StackingAndLoadingVehiclesServiceImpl extends ServiceImpl<StackingA
 
         String distinctAssemblyNumber = billetBasicInfoList.stream()
                 .map(BilletBasicInfo::getAssemblyNumber)
-                .filter(assemblyNumber -> assemblyNumber != null)
+                .filter(assemblyNumber -> oConvertUtils.isNotEmpty(assemblyNumber))
                 .distinct()
                 .collect(Collectors.joining(","));
 

+ 77 - 112
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/service/impl/StorageBillServiceImpl.java

@@ -1646,21 +1646,23 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                 List<RollClubTwoDetails> rollClubTwoDetailsList = rollClubTwoDetailsService.list(queryWrapper3);
                 if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsList)) {
                     List<DestinationStatisticsDetails> currentList1 = rollClubTwoDetailsList.stream()
-                            .collect(Collectors.groupingBy(RollClubTwoDetails::getSize, Collectors.toList()))
+                            .collect(Collectors.groupingBy(RollClubTwoDetails::getSize))
                             .entrySet().stream()
                             .map(entry -> {
                                 String size = entry.getKey();
                                 List<RollClubTwoDetails> group = entry.getValue();
-                                Integer nums = group.size();
-                                boolean shouldMultiply = group.stream().anyMatch(detail -> detail.getStackAddr() != null);
-                                if (shouldMultiply) {
-                                    nums = nums * 4;
-                                }
-                                Double totalBlankOutput = group.stream().mapToDouble(RollClubTwoDetails::getBlankOutput).sum();
+                                // 统计 blankOutput 总和
+                                Double totalBlankOutput = group.stream()
+                                        .mapToDouble(RollClubTwoDetails::getBlankOutput)
+                                        .sum();
                                 BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-                                double finalBlankOutput = bd.doubleValue();
+                                totalBlankOutput = bd.doubleValue();
+                                // 统计数量
+                                Integer totalNums = group.stream()
+                                        .mapToInt(detail -> detail.getStackAddr() != null ? 4 : 1).sum();
+                                // 取第一个元素的 ccmNo 作为该分组的 ccmNo
                                 String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
-                                return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                                return new DestinationStatisticsDetails(size, totalNums, totalBlankOutput, ccmNos);
                             }).collect(Collectors.toList());
                     statisticsDetailsList1.addAll(currentList1);
                 }
@@ -1672,21 +1674,23 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                 List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper3);
                 if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsList)) {
                     List<DestinationStatisticsDetails> currentList2 = rollClubThreeDetailsList.stream()
-                            .collect(Collectors.groupingBy(RollClubThreeDetails::getSize, Collectors.toList()))
+                            .collect(Collectors.groupingBy(RollClubThreeDetails::getSize))
                             .entrySet().stream()
                             .map(entry -> {
                                 String size = entry.getKey();
                                 List<RollClubThreeDetails> group = entry.getValue();
-                                Integer nums = group.size();
-                                boolean shouldMultiply = group.stream().anyMatch(detail -> detail.getStackAddr() != null);
-                                if (shouldMultiply) {
-                                    nums = nums * 4;
-                                }
-                                Double totalBlankOutput = group.stream().mapToDouble(RollClubThreeDetails::getBlankOutput).sum();
+                                // 统计 blankOutput 总和
+                                Double totalBlankOutput = group.stream()
+                                        .mapToDouble(RollClubThreeDetails::getBlankOutput)
+                                        .sum();
                                 BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-                                double finalBlankOutput = bd.doubleValue();
+                                totalBlankOutput = bd.doubleValue();
+                                // 统计数量
+                                Integer totalNums = group.stream()
+                                        .mapToInt(detail -> detail.getStackAddr() != null ? 4 : 1).sum();
+                                // 取第一个元素的 ccmNo 作为该分组的 ccmNo
                                 String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
-                                return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                                return new DestinationStatisticsDetails(size, totalNums, totalBlankOutput, ccmNos);
                             }).collect(Collectors.toList());
                     statisticsDetailsList2.addAll(currentList2);
                 }
@@ -1698,21 +1702,23 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                 List<RollOutShippDetails> rollOutShippDetailsList = rollOutShippDetailsService.list(queryWrapper3);
                 if (oConvertUtils.listIsNotEmpty(rollOutShippDetailsList)) {
                     List<DestinationStatisticsDetails> currentList3 = rollOutShippDetailsList.stream()
-                            .collect(Collectors.groupingBy(RollOutShippDetails::getSize, Collectors.toList()))
+                            .collect(Collectors.groupingBy(RollOutShippDetails::getSize))
                             .entrySet().stream()
                             .map(entry -> {
                                 String size = entry.getKey();
                                 List<RollOutShippDetails> group = entry.getValue();
-                                Integer nums = group.size();
-                                boolean shouldMultiply = group.stream().anyMatch(detail -> detail.getStackAddr() != null);
-                                if (shouldMultiply) {
-                                    nums = nums * 4;
-                                }
-                                Double totalBlankOutput = group.stream().mapToDouble(RollOutShippDetails::getBlankOutput).sum();
+                                // 统计 blankOutput 总和
+                                Double totalBlankOutput = group.stream()
+                                        .mapToDouble(RollOutShippDetails::getBlankOutput)
+                                        .sum();
                                 BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-                                double finalBlankOutput = bd.doubleValue();
+                                totalBlankOutput = bd.doubleValue();
+                                // 统计数量
+                                Integer totalNums = group.stream()
+                                        .mapToInt(detail -> detail.getStackAddr() != null ? 4 : 1).sum();
+                                // 取第一个元素的 ccmNo 作为该分组的 ccmNo
                                 String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
-                                return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                                return new DestinationStatisticsDetails(size, totalNums, totalBlankOutput, ccmNos);
                             }).collect(Collectors.toList());
                     statisticsDetailsList3.addAll(currentList3);
                 }
@@ -1741,8 +1747,6 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         double finalBlankOutputs = mergedList.stream().mapToDouble(DestinationStatisticsDetails::getBlankOutput).sum();
         BigDecimal bd = BigDecimal.valueOf(finalBlankOutputs).setScale(4, BigDecimal.ROUND_HALF_UP);
 
-
-        log.info("{}{}", "当班装运单信息查询结果:", JSON.toJSON(mergedList));
         onDutyStorageBillStatistics.setAllCarNum(allCarNum);
         onDutyStorageBillStatistics.setCounts(finalAmountTotal);
         onDutyStorageBillStatistics.setBlankOutputs(bd);
@@ -1840,7 +1844,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                 stackingDetailStatisticsList.add(detailStatistics);
             }
 
-            stackingSum = stackingSum + stackingUpLogList.size();
+            stackingSum = stackingSum + stackingUpLogList.size() * 4;
         }
 
         // 根据铸机号、班组、班别、时间范围。查询棒一明细表
@@ -1900,26 +1904,9 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                     .mapToDouble(RollClubTwoDetails::getBlankOutput).sum();
             hotChargeTotalWeight = hotChargeTotalWeight + hotChargeTotalBlankOutput;
 
-//            // 棒二堆垛总支数  获取堆垛编号不为空的条数,即为堆垛
-//            int count1 = rollClubTwoDetailsList.stream()
-//                    .filter(details -> details.getStackAddr() != null && !details.getStackAddr().isEmpty())
-//                    .mapToInt(details -> 4)
-//                    .sum();
-//            stackingSum = stackingSum + count1;
-//            // 棒二堆垛出坯量  获取堆垛编号不为空的条数,即为堆垛
-//            double stackingTotalBlankOutput = rollClubTwoDetailsList.stream()
-//                    .filter(details -> details.getStackAddr() != null)
-//                    .mapToDouble(RollClubTwoDetails::getBlankOutput).sum();
-//            stackingTotalWeight = stackingTotalWeight + stackingTotalBlankOutput;
-
             rollClubTwoDetailsList.forEach(x ->{
                 DetailStatistics detailStatistics = new DetailStatistics();
-                if(x.getStackAddr() != null && !x.getStackAddr().isEmpty()){
-//                    detailStatistics.setAmountTotal(4);
-//                    detailStatistics.setBlankOutput(x.getBlankOutput());
-//                    detailStatistics.setSize(x.getSize());
-//                    stackingDetailStatisticsList.add(detailStatistics);
-                }else {
+                if(oConvertUtils.isEmpty(x.getStackAddr())){
                     detailStatistics.setAmountTotal(1);
                     detailStatistics.setBlankOutput(x.getBlankOutput());
                     detailStatistics.setSize(x.getSize());
@@ -1952,26 +1939,9 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                     .mapToDouble(RollClubThreeDetails::getBlankOutput).sum();
             hotChargeTotalWeight = hotChargeTotalWeight + hotChargeTotalBlankOutput;
 
-//            // 棒三堆垛总支数
-//            int count1 = rollClubThreeDetailsList.stream()
-//                    .filter(details -> details.getStackAddr() != null && !details.getStackAddr().isEmpty())
-//                    .mapToInt(details -> 4)
-//                    .sum();
-//            stackingSum = stackingSum + count1;
-//            // 棒三堆垛出坯量
-//            double stackingTotalBlankOutput = rollClubThreeDetailsList.stream()
-//                    .filter(details -> details.getStackAddr() != null)
-//                    .mapToDouble(RollClubThreeDetails::getBlankOutput).sum();
-//            stackingTotalWeight = stackingTotalWeight + stackingTotalBlankOutput;
-
             rollClubThreeDetailsList.forEach(x ->{
                 DetailStatistics detailStatistics = new DetailStatistics();
-                if(x.getStackAddr() != null && !x.getStackAddr().isEmpty()){
-//                    detailStatistics.setAmountTotal(4);
-//                    detailStatistics.setBlankOutput(x.getBlankOutput());
-//                    detailStatistics.setSize(x.getSize());
-//                    stackingDetailStatisticsList.add(detailStatistics);
-                }else {
+                if(oConvertUtils.isEmpty(x.getStackAddr())){
                     detailStatistics.setAmountTotal(1);
                     detailStatistics.setBlankOutput(x.getBlankOutput());
                     detailStatistics.setSize(x.getSize());
@@ -2039,27 +2009,10 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                     .filter(details -> details.getStackAddr() == null)
                     .mapToDouble(RollOutShippDetails::getBlankOutput).sum();
             hotChargeTotalWeight = hotChargeTotalWeight + hotChargeShippTotalWeight;
-//            // 上若堆垛总支数
-//            int count1 = rollOutShippDetailsList.stream()
-//                    .filter(details -> details.getStackAddr() != null && !details.getStackAddr().isEmpty())
-//                    .mapToInt(details -> 4)
-//                    .sum();
-//
-//            stackingSum = stackingSum + count1;
-//            // 上若堆垛出坯量
-//            double stackingShippTotalWeight = rollOutShippDetailsList.stream()
-//                    .filter(details -> details.getStackAddr() != null)
-//                    .mapToDouble(RollOutShippDetails::getBlankOutput).sum();
-//            stackingTotalWeight = stackingTotalWeight + stackingShippTotalWeight;
 
             rollOutShippDetailsList.forEach(x ->{
                 DetailStatistics detailStatistics = new DetailStatistics();
-                if(x.getStackAddr() != null && !x.getStackAddr().isEmpty()){
-//                    detailStatistics.setAmountTotal(4);
-//                    detailStatistics.setBlankOutput(x.getBlankOutput());
-//                    detailStatistics.setSize(x.getSize());
-//                    stackingDetailStatisticsList.add(detailStatistics);
-                }else {
+                if(oConvertUtils.isEmpty(x.getStackAddr())){
                     detailStatistics.setAmountTotal(1);
                     detailStatistics.setBlankOutput(x.getBlankOutput());
                     detailStatistics.setSize(x.getSize());
@@ -2416,12 +2369,15 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
             queryWrapper.eq(BilletHotsendChangeShift::getId, changeShiftId).eq(BilletHotsendChangeShift::getCcmNo, ccmNo);
             billetHotsendChangeShift = billetHotsendChangeShiftService.getOne(queryWrapper);
             if (billetHotsendChangeShift == null){
-                log.info("查询当班装运单信息失败,交班记录为空!{} 失败时间:{}", ccmNo, new Date());
+                log.info("查询当班历史装运单信息失败,交班记录为空!{} 失败时间:{}", ccmNo, new Date());
                 return storageBillStatistics;
             }
             shiftGroup = billetHotsendChangeShift.getShiftGroup();
             shift = billetHotsendChangeShift.getShift();
         }
+        log.info("{}{}", "当班班组班别:", shiftGroup+"#"+shift);
+        log.info("{}{}", "当班信息:", JSON.toJSON(billetHotsendChangeShift));
+
         storageBillStatistics.setShift(ShiftEnum.fromCode(shift).name());
         storageBillStatistics.setShiftGroup(ShiftGroupEnum.fromCode(shiftGroup).name());
 
@@ -2464,6 +2420,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
         List<RollClubThreeDetails> rollClubThreeDetailsListAll = new ArrayList<>();
         List<RollOutShippDetails> rollOutShippDetailsListAll = new ArrayList<>();
 
+        log.info("{}{}", "当班所有装运单信息:", JSON.toJSON(storageBillList));
         for (StorageBill storageBill : storageBillList) {
             if ("棒二".equals(storageBill.getDestination())) {
                 LambdaQueryWrapper<RollClubTwoDetails> queryWrapper3 = new LambdaQueryWrapper<>();
@@ -2481,6 +2438,7 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
                         .eq(RollClubThreeDetails::getShift, shift).eq(RollClubThreeDetails::getShiftGroup, shiftGroup);
                 List<RollClubThreeDetails> rollClubThreeDetailsList = rollClubThreeDetailsService.list(queryWrapper3);
                 if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsList)) {
+                    log.info("{}{}", "装运单对应的棒三明细总数:", rollClubThreeDetailsList.size());
                     rollClubThreeDetailsListAll.addAll(rollClubThreeDetailsList);
                 }
             }
@@ -2496,64 +2454,71 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
             }
         }
         if (oConvertUtils.listIsNotEmpty(rollClubTwoDetailsListAll)){
+            // 分组统计
             List<DestinationStatisticsDetails> currentList1 = rollClubTwoDetailsListAll.stream()
-                    .collect(Collectors.groupingBy(RollClubTwoDetails::getSize, Collectors.toList()))
+                    .collect(Collectors.groupingBy(RollClubTwoDetails::getSize))
                     .entrySet().stream()
                     .map(entry -> {
                         String size = entry.getKey();
                         List<RollClubTwoDetails> group = entry.getValue();
-                        Integer nums = group.size();
-                        boolean shouldMultiply = group.stream().anyMatch(detail -> detail.getStackAddr() != null);
-                        if (shouldMultiply) {
-                            nums = nums * 4;
-                        }
-                        Double totalBlankOutput = group.stream().mapToDouble(RollClubTwoDetails::getBlankOutput).sum();
+                        // 统计 blankOutput 总和
+                        Double totalBlankOutput = group.stream()
+                                .mapToDouble(RollClubTwoDetails::getBlankOutput)
+                                .sum();
                         BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-                        double finalBlankOutput = bd.doubleValue();
+                        totalBlankOutput = bd.doubleValue();
+                        // 统计数量
+                        Integer totalNums = group.stream()
+                                .mapToInt(detail -> detail.getStackAddr() != null ? 4 : 1).sum();
+                        // 取第一个元素的 ccmNo 作为该分组的 ccmNo
                         String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
-                        return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                        return new DestinationStatisticsDetails(size, totalNums, totalBlankOutput, ccmNos);
                     }).collect(Collectors.toList());
             rollClubTwoStatisticsList.addAll(currentList1);
         }
 
         if (oConvertUtils.listIsNotEmpty(rollClubThreeDetailsListAll)){
             List<DestinationStatisticsDetails> currentList2 = rollClubThreeDetailsListAll.stream()
-                    .collect(Collectors.groupingBy(RollClubThreeDetails::getSize, Collectors.toList()))
+                    .collect(Collectors.groupingBy(RollClubThreeDetails::getSize))
                     .entrySet().stream()
                     .map(entry -> {
                         String size = entry.getKey();
                         List<RollClubThreeDetails> group = entry.getValue();
-                        Integer nums = group.size();
-                        boolean shouldMultiply = group.stream().anyMatch(detail -> detail.getStackAddr() != null);
-                        if (shouldMultiply) {
-                            nums = nums * 4;
-                        }
-                        Double totalBlankOutput = group.stream().mapToDouble(RollClubThreeDetails::getBlankOutput).sum();
+                        // 统计 blankOutput 总和
+                        Double totalBlankOutput = group.stream()
+                                .mapToDouble(RollClubThreeDetails::getBlankOutput)
+                                .sum();
                         BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-                        double finalBlankOutput = bd.doubleValue();
+                        totalBlankOutput = bd.doubleValue();
+                        // 统计数量
+                        Integer totalNums = group.stream()
+                                .mapToInt(detail -> detail.getStackAddr() != null ? 4 : 1).sum();
+                        // 取第一个元素的 ccmNo 作为该分组的 ccmNo
                         String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
-                        return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                        return new DestinationStatisticsDetails(size, totalNums, totalBlankOutput, ccmNos);
                     }).collect(Collectors.toList());
             rollClubThreeStatisticsList.addAll(currentList2);
         }
 
         if (oConvertUtils.listIsNotEmpty(rollOutShippDetailsListAll)){
             List<DestinationStatisticsDetails> currentList3 = rollOutShippDetailsListAll.stream()
-                    .collect(Collectors.groupingBy(RollOutShippDetails::getSize, Collectors.toList()))
+                    .collect(Collectors.groupingBy(RollOutShippDetails::getSize))
                     .entrySet().stream()
                     .map(entry -> {
                         String size = entry.getKey();
                         List<RollOutShippDetails> group = entry.getValue();
-                        Integer nums = group.size();
-                        boolean shouldMultiply = group.stream().anyMatch(detail -> detail.getStackAddr() != null);
-                        if (shouldMultiply) {
-                            nums = nums * 4;
-                        }
-                        Double totalBlankOutput = group.stream().mapToDouble(RollOutShippDetails::getBlankOutput).sum();
+                        // 统计 blankOutput 总和
+                        Double totalBlankOutput = group.stream()
+                                .mapToDouble(RollOutShippDetails::getBlankOutput)
+                                .sum();
                         BigDecimal bd = BigDecimal.valueOf(totalBlankOutput).setScale(4, BigDecimal.ROUND_HALF_UP);
-                        double finalBlankOutput = bd.doubleValue();
+                        totalBlankOutput = bd.doubleValue();
+                        // 统计数量
+                        Integer totalNums = group.stream()
+                                .mapToInt(detail -> detail.getStackAddr() != null ? 4 : 1).sum();
+                        // 取第一个元素的 ccmNo 作为该分组的 ccmNo
                         String ccmNos = group.isEmpty() ? null : group.get(0).getCcmNo();
-                        return new DestinationStatisticsDetails(size, nums, finalBlankOutput, ccmNos);
+                        return new DestinationStatisticsDetails(size, totalNums, totalBlankOutput, ccmNos);
                     }).collect(Collectors.toList());
             rollOutShippStatisticsList.addAll(currentList3);
         }