From 31882052fe91dd110e909a63132c4f2d012422fe Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 14 九月 2026 13:50:22 +0800
Subject: [PATCH] update
---
backend/src/main/java/com/tourguide/modules/order/service/GuideTourOrderService.java | 72 ++++++++++++++++++++++++++++++++++--
1 files changed, 68 insertions(+), 4 deletions(-)
diff --git a/backend/src/main/java/com/tourguide/modules/order/service/GuideTourOrderService.java b/backend/src/main/java/com/tourguide/modules/order/service/GuideTourOrderService.java
index 4ec380a..4cd3c9b 100644
--- a/backend/src/main/java/com/tourguide/modules/order/service/GuideTourOrderService.java
+++ b/backend/src/main/java/com/tourguide/modules/order/service/GuideTourOrderService.java
@@ -8,7 +8,9 @@
import com.tourguide.modules.order.dto.GuideOrderResponse;
import com.tourguide.modules.order.entity.TourOrder;
import com.tourguide.modules.order.mapper.TourOrderMapper;
+import com.tourguide.modules.operation.entity.ScenicMeetingPoint;
import com.tourguide.modules.operation.entity.ScenicPricing;
+import com.tourguide.modules.operation.mapper.ScenicMeetingPointMapper;
import com.tourguide.modules.operation.mapper.ScenicPricingMapper;
import com.tourguide.modules.user.entity.GuideReceivingSession;
import com.tourguide.modules.user.mapper.GuideRealtimeStatusMapper;
@@ -21,6 +23,7 @@
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -39,20 +42,29 @@
private final GuideReceivingSessionMapper sessionMapper;
private final GuideRealtimeStatusMapper realtimeStatusMapper;
private final ScenicPricingMapper pricingMapper;
+ private final ScenicMeetingPointMapper meetingPointMapper;
public GuideTourOrderService(TourOrderMapper orderMapper, GuideReceivingSessionMapper sessionMapper,
GuideRealtimeStatusMapper realtimeStatusMapper) {
- this(orderMapper, sessionMapper, realtimeStatusMapper, null);
+ this(orderMapper, sessionMapper, realtimeStatusMapper, null, null);
+ }
+
+ public GuideTourOrderService(TourOrderMapper orderMapper, GuideReceivingSessionMapper sessionMapper,
+ GuideRealtimeStatusMapper realtimeStatusMapper,
+ ScenicPricingMapper pricingMapper) {
+ this(orderMapper, sessionMapper, realtimeStatusMapper, pricingMapper, null);
}
@Autowired
public GuideTourOrderService(TourOrderMapper orderMapper, GuideReceivingSessionMapper sessionMapper,
GuideRealtimeStatusMapper realtimeStatusMapper,
- ScenicPricingMapper pricingMapper) {
+ ScenicPricingMapper pricingMapper,
+ ScenicMeetingPointMapper meetingPointMapper) {
this.orderMapper = orderMapper;
this.sessionMapper = sessionMapper;
this.realtimeStatusMapper = realtimeStatusMapper;
this.pricingMapper = pricingMapper;
+ this.meetingPointMapper = meetingPointMapper;
}
public PageResponse<GuideOrderResponse> page(Long guideId, String tab, long page, long size) {
@@ -63,9 +75,12 @@
.orderByDesc(TourOrder::getId);
Page<TourOrder> result = orderMapper.selectPage(new Page<TourOrder>(page, size), query);
Map<Long, Integer> durationByPackageId = durationByPackageId(result.getRecords());
+ Map<Long, ScenicMeetingPoint> meetingPointByOrderId = meetingPointByOrderId(result.getRecords());
return new PageResponse<GuideOrderResponse>(
result.getRecords().stream()
- .map(order -> GuideOrderResponse.from(order, durationByPackageId.get(order.getServicePackageId())))
+ .map(order -> GuideOrderResponse.from(order,
+ durationByPackageId.get(order.getServicePackageId()),
+ meetingPointByOrderId.get(order.getId())))
.collect(Collectors.toList()),
result.getTotal(), result.getCurrent(), result.getSize());
}
@@ -121,7 +136,56 @@
ScenicPricing pricing = pricingMapper.selectById(order.getServicePackageId());
durationMinutes = pricing == null ? null : pricing.getDurationMinutes();
}
- return GuideOrderResponse.from(order, durationMinutes);
+ ScenicMeetingPoint meetingPoint = meetingPointByOrderId(Collections.singletonList(order)).get(order.getId());
+ return GuideOrderResponse.from(order, durationMinutes, meetingPoint);
+ }
+
+ private Map<Long, ScenicMeetingPoint> meetingPointByOrderId(List<TourOrder> orders) {
+ if (meetingPointMapper == null || orders == null || orders.isEmpty()) {
+ return Collections.emptyMap();
+ }
+ Set<Long> meetingPointIds = orders.stream()
+ .map(TourOrder::getMeetingPointId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ Set<Long> scenicSpotIds = orders.stream()
+ .map(TourOrder::getScenicSpotId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+ if (meetingPointIds.isEmpty() && scenicSpotIds.isEmpty()) {
+ return Collections.emptyMap();
+ }
+
+ Map<Long, ScenicMeetingPoint> pointsById = new HashMap<Long, ScenicMeetingPoint>();
+ if (!meetingPointIds.isEmpty()) {
+ meetingPointMapper.selectBatchIds(meetingPointIds)
+ .forEach(point -> pointsById.put(point.getId(), point));
+ }
+
+ Map<String, ScenicMeetingPoint> pointsByScenicAndName = new HashMap<String, ScenicMeetingPoint>();
+ if (!scenicSpotIds.isEmpty()) {
+ meetingPointMapper.selectList(new LambdaQueryWrapper<ScenicMeetingPoint>()
+ .in(ScenicMeetingPoint::getScenicSpotId, scenicSpotIds))
+ .forEach(point -> pointsByScenicAndName.put(
+ meetingPointKey(point.getScenicSpotId(), point.getPointName()), point));
+ }
+
+ Map<Long, ScenicMeetingPoint> result = new HashMap<Long, ScenicMeetingPoint>();
+ for (TourOrder order : orders) {
+ ScenicMeetingPoint point = pointsById.get(order.getMeetingPointId());
+ if (point == null) {
+ point = pointsByScenicAndName.get(
+ meetingPointKey(order.getScenicSpotId(), order.getMeetingPointName()));
+ }
+ if (point != null && order.getId() != null) {
+ result.put(order.getId(), point);
+ }
+ }
+ return result;
+ }
+
+ private String meetingPointKey(Long scenicSpotId, String meetingPointName) {
+ return String.valueOf(scenicSpotId) + '\u0000' + String.valueOf(meetingPointName);
}
private Map<Long, Integer> durationByPackageId(List<TourOrder> orders) {
--
Gitblit v1.7.1