From 77649c76ec1c3afcb93e9963243d637665b3a307 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 21 八月 2026 16:56:28 +0800
Subject: [PATCH] update
---
backend/src/main/java/com/tourguide/modules/order/service/GuideTourOrderService.java | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 55 insertions(+), 5 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 214bc65..31135b0 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,9 +8,14 @@
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.user.entity.GuideReceivingSession;
+import com.tourguide.modules.user.mapper.GuideRealtimeStatusMapper;
+import com.tourguide.modules.user.mapper.GuideReceivingSessionMapper;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
+import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.stream.Collectors;
@@ -23,9 +28,14 @@
private static final String TAB_COMPLETED = "completed";
private final TourOrderMapper orderMapper;
+ private final GuideReceivingSessionMapper sessionMapper;
+ private final GuideRealtimeStatusMapper realtimeStatusMapper;
- public GuideTourOrderService(TourOrderMapper orderMapper) {
+ public GuideTourOrderService(TourOrderMapper orderMapper, GuideReceivingSessionMapper sessionMapper,
+ GuideRealtimeStatusMapper realtimeStatusMapper) {
this.orderMapper = orderMapper;
+ this.sessionMapper = sessionMapper;
+ this.realtimeStatusMapper = realtimeStatusMapper;
}
public PageResponse<GuideOrderResponse> page(Long guideId, String tab, long page, long size) {
@@ -41,16 +51,56 @@
}
public GuideOrderResponse detail(Long guideId, Long orderId) {
- TourOrder order = orderMapper.selectOne(new LambdaQueryWrapper<TourOrder>()
- .eq(TourOrder::getId, orderId)
- .eq(TourOrder::getGuideId, guideId)
- .last("LIMIT 1"));
+ TourOrder order = findOwnedOrder(guideId, orderId);
if (order == null) {
throw new BusinessException(404, "订单不存在");
}
return GuideOrderResponse.from(order);
}
+ @Transactional
+ public GuideOrderResponse start(Long guideId, Long orderId) {
+ TourOrder order = findOwnedOrder(guideId, orderId);
+ if (order == null) {
+ throw new BusinessException(404, "订单不存在");
+ }
+ if (OrderStatus.IN_SERVICE.matches(order.getStatus())) {
+ return GuideOrderResponse.from(order);
+ }
+ if (!OrderStatus.PENDING_MEETING.matches(order.getStatus()) || order.getReceivingSessionId() == null) {
+ throw new BusinessException(400, "当前订单不能开始讲解");
+ }
+
+ GuideReceivingSession session = sessionMapper.selectForUpdate(order.getReceivingSessionId(), guideId);
+ if (session == null) {
+ throw new BusinessException(400, "接单会话不存在或已结束");
+ }
+ if ("IN_SERVICE".equals(session.getStatus())) {
+ order.setStatus(OrderStatus.IN_SERVICE.getCode());
+ return GuideOrderResponse.from(order);
+ }
+ if (!"RECEIVING".equals(session.getStatus()) && !"ASSIGNED".equals(session.getStatus())) {
+ throw new BusinessException(400, "接单会话已结束,不能开始讲解");
+ }
+
+ LocalDateTime startedAt = LocalDateTime.now();
+ if (sessionMapper.startSession(session.getId(), guideId) != 1
+ || orderMapper.startSessionOrders(session.getId(), startedAt) == 0) {
+ throw new BusinessException(409, "讲解状态已变化,请刷新后重试");
+ }
+ realtimeStatusMapper.disableReceiving(guideId);
+ order.setStatus(OrderStatus.IN_SERVICE.getCode());
+ order.setServiceStartedAt(startedAt);
+ return GuideOrderResponse.from(order);
+ }
+
+ private TourOrder findOwnedOrder(Long guideId, Long orderId) {
+ return orderMapper.selectOne(new LambdaQueryWrapper<TourOrder>()
+ .eq(TourOrder::getId, orderId)
+ .eq(TourOrder::getGuideId, guideId)
+ .last("LIMIT 1"));
+ }
+
private String normalizeTab(String tab) {
return StringUtils.hasText(tab) ? tab.trim() : TAB_ALL;
}
--
Gitblit v1.7.1