Browse Source

no message

FengChaoYu 1 week ago
parent
commit
4ac444c803

+ 43 - 10
mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/OrderBaseEsLogic.java

@@ -1042,7 +1042,7 @@ public class OrderBaseEsLogic {
                 .eq(WorkerOrder::getPayStatus, MaterialExamineStatusEnum.PAID.getKey())
                 .select(WorkerOrder::getWorkerOrderId, WorkerOrder::getTotalAmount).list();
 
- /*       List<OperatorLogBean> operatorList = new ArrayList<>();
+        List<OperatorLogBean> operatorList = new ArrayList<>();
         if (CollectionUtil.isNotEmpty(orderBaseIds)) {
             log.info("最后访问记录开始时间{}", DateUtil.formatDateTime(DateUtil.date()));
             final List<List<String>> pageList = ListUtil.split(orderBaseIds, 10000);
@@ -1056,21 +1056,54 @@ public class OrderBaseEsLogic {
         if (CollectionUtil.isNotEmpty(operatorList)) {
             operatorMap = operatorList.stream()
                     .collect(Collectors.groupingBy(OperatorLogBean::getOrderBaseId));
-        }*/
+        }
 
-//        log.info("最后访问记录注入orderBaseVO开始时间{}", DateUtil.formatDateTime(DateUtil.date()));
-        for (OrderBaseVO orderBaseVO : orderBaseVOS1) {
+        log.info("最后访问记录注入orderBaseVO开始时间{}", DateUtil.formatDateTime(DateUtil.date()));
 
-            List<WorkerOrder> workerOrders = workerOrderList.stream()
-                    .filter(item -> item.getWorkerOrderId().equals(orderBaseVO.getId())).collect(Collectors.toList());
-            if (!CollectionUtils.isEmpty(workerOrderList)) {
-                BigDecimal bigDecimal = workerOrders.stream().map(WorkerOrder::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-                orderBaseVO.setWorkerPrice(bigDecimal);
-            }
+        // 预处理:将workerOrderList按workerOrderId分组(O(m)时间复杂度)
+        Map<String, List<WorkerOrder>> workerOrderMap = workerOrderList.stream()
+                .collect(Collectors.groupingBy(WorkerOrder::getWorkerOrderId));
+
+        // 预处理:operatorMap若每个orderBaseId只有一条记录,可简化为直接存储内容(根据业务逻辑调整)
+        Map<String, String> operatorContentMap = operatorMap != null ?
+                operatorMap.entrySet().stream()
+                        .collect(Collectors.toMap(
+                                Map.Entry::getKey,
+                                entry -> entry.getValue().get(0).getContent() // 假设每个ID只有一条记录
+                        )) :
+                Collections.emptyMap();
+
+        // 提前判断workerOrderList是否为空(避免循环内重复判断)
+        boolean isWorkerOrderListEmpty = CollectionUtils.isEmpty(workerOrderList);
 
+        for (OrderBaseVO orderBaseVO : orderBaseVOS1) {
+
+//            List<WorkerOrder> workerOrders = workerOrderList.stream()
+//                    .filter(item -> item.getWorkerOrderId().equals(orderBaseVO.getId())).collect(Collectors.toList());
+//            if (!CollectionUtils.isEmpty(workerOrderList)) {
+//                BigDecimal bigDecimal = workerOrders.stream().map(WorkerOrder::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+//                orderBaseVO.setWorkerPrice(bigDecimal);
+//            }
+//
 //            if (Objects.nonNull(operatorMap) && operatorMap.containsKey(orderBaseVO.getId())) {
 //                orderBaseVO.setLastFeedbackRecord(operatorMap.get(orderBaseVO.getId()).get(0).getContent());
 //            }
+            // 从Map中直接获取匹配的WorkerOrder列表(O(1)时间复杂度)
+            List<WorkerOrder> workerOrders = workerOrderMap.getOrDefault(orderBaseVO.getId(), Collections.emptyList());
+
+            // 计算总金额(若workerOrderList非空时才执行)
+            if (!isWorkerOrderListEmpty && !workerOrders.isEmpty()) {
+                BigDecimal bigDecimal = workerOrders.stream()
+                        .map(WorkerOrder::getTotalAmount)
+                        .reduce(BigDecimal::add)
+                        .orElse(BigDecimal.ZERO);
+                orderBaseVO.setWorkerPrice(bigDecimal);
+            }
+
+            // 直接从简化后的operatorContentMap获取内容(O(1)时间复杂度)
+            if (operatorContentMap.containsKey(orderBaseVO.getId())) {
+                orderBaseVO.setLastFeedbackRecord(operatorContentMap.get(orderBaseVO.getId()));
+            }
         }
         log.info("最后访问记录注入orderBaseVO结束时间{}", DateUtil.formatDateTime(DateUtil.date()));