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