Ver Fonte

update优化

qiangxuan há 4 meses atrás
pai
commit
61e0dbce7a

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

@@ -67,6 +67,7 @@ import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -1821,23 +1822,36 @@ public class StorageBillServiceImpl extends ServiceImpl<StorageBillMapper, Stora
 
         List<StackingUpLog> stackingUpLogList = stackingUpLogService.list(stackingUpLogQueryWrapper);
         if (oConvertUtils.listIsNotEmpty(stackingUpLogList)) {
+            // 收集所有的 billetNo
+            Set<String> allBilletNos = new HashSet<>();
+            for (StackingUpLog stackingUpLog : stackingUpLogList) {
+                if (oConvertUtils.isNotEmpty(stackingUpLog.getBilletNo())) {
+                    String[] billetNoArray = stackingUpLog.getBilletNo().split(",");
+                    allBilletNos.addAll(Arrays.asList(billetNoArray));
+                }
+            }
+            // 一次性查询所有相关的 BilletBasicInfo
+            LambdaQueryWrapper<BilletBasicInfo> basicInfoQueryWrapper = new LambdaQueryWrapper<>();
+            basicInfoQueryWrapper.in(BilletBasicInfo::getBilletNo, allBilletNos);
+            List<BilletBasicInfo> billetBasicInfos = billetBasicInfoService.list(basicInfoQueryWrapper);
+
+            // 将 BilletBasicInfo 列表转换为以 billetNo 为键的映射
+            Map<String, BilletBasicInfo> billetBasicInfoMap = billetBasicInfos.stream()
+                    .collect(Collectors.toMap(BilletBasicInfo::getBilletNo, Function.identity()));
 
             for (StackingUpLog stackingUpLog : stackingUpLogList) {
                 DetailStatistics detailStatistics = new DetailStatistics();
                 if (oConvertUtils.isNotEmpty(stackingUpLog.getBilletNo())) {
-
                     List<String> billetNoList = Arrays.asList(stackingUpLog.getBilletNo().split(","));
-                    LambdaQueryWrapper<BilletBasicInfo> basicInfoQueryWrapper = new LambdaQueryWrapper<>();
-                    basicInfoQueryWrapper.in(BilletBasicInfo::getBilletNo, billetNoList);
-                    List<BilletBasicInfo> billetBasicInfos = billetBasicInfoService.list(basicInfoQueryWrapper);
-                    if (oConvertUtils.isNotEmpty(billetBasicInfos)) {
-                        double stackingTotalBlankOutput = billetBasicInfos.stream()
-                                .mapToDouble(BilletBasicInfo::getBilletWeight).sum();
-
-                        stackingTotalWeight = stackingTotalWeight + stackingTotalBlankOutput;
-                        detailStatistics.setBlankOutput(stackingTotalBlankOutput);
-
+                    double stackingTotalBlankOutput = 0;
+                    for (String billetNo : billetNoList) {
+                        BilletBasicInfo info = billetBasicInfoMap.get(billetNo);
+                        if (info != null) {
+                            stackingTotalBlankOutput += info.getBilletWeight();
+                        }
                     }
+                    stackingTotalWeight = stackingTotalWeight + stackingTotalBlankOutput;
+                    detailStatistics.setBlankOutput(stackingTotalBlankOutput);
                     detailStatistics.setAmountTotal(billetNoList.size());
                 }
                 detailStatistics.setSize(stackingUpLog.getSize());