liujie
2026-09-14 15defa991fcd30b9fa60bab17d2230b5929bf2a2
backend/src/main/java/com/tourguide/modules/user/service/GuideReceivingService.java
@@ -14,6 +14,7 @@
import com.tourguide.modules.order.domain.OrderStatus;
import com.tourguide.modules.order.entity.TourOrder;
import com.tourguide.modules.order.mapper.TourOrderMapper;
import com.tourguide.modules.order.service.GuideSessionTransitionService;
import com.tourguide.modules.user.dto.GuideReceivingOptionResponse;
import com.tourguide.modules.user.dto.GuideReceivingStartRequest;
import com.tourguide.modules.user.entity.GuideRealtimeStatus;
@@ -48,12 +49,14 @@
    private final GuideRealtimeStatusMapper realtimeStatusMapper;
    private final PlatformSettingsService platformSettingsService;
    private final TourOrderMapper orderMapper;
    private final GuideSessionTransitionService sessionTransitionService;
    public GuideReceivingService(GuideUserService guideUserService, GuideScenicConfigMapper guideScenicMapper,
                                 GuideTeamScenicConfigMapper teamScenicMapper, OperationScenicSpotMapper scenicMapper,
                                 ScenicMeetingPointMapper meetingPointMapper, ScenicPricingMapper pricingMapper,
                                 GuideReceivingSessionMapper sessionMapper, GuideRealtimeStatusMapper realtimeStatusMapper,
                                 PlatformSettingsService platformSettingsService, TourOrderMapper orderMapper) {
                                 PlatformSettingsService platformSettingsService, TourOrderMapper orderMapper,
                                 GuideSessionTransitionService sessionTransitionService) {
        this.guideUserService = guideUserService;
        this.guideScenicMapper = guideScenicMapper;
        this.teamScenicMapper = teamScenicMapper;
@@ -64,6 +67,7 @@
        this.realtimeStatusMapper = realtimeStatusMapper;
        this.platformSettingsService = platformSettingsService;
        this.orderMapper = orderMapper;
        this.sessionTransitionService = sessionTransitionService;
    }
    public GuideReceivingOptionResponse options(Long guideId) {
@@ -92,7 +96,8 @@
                            item.getDurationMinutes(), item.getMinParticipants(), item.getMaxParticipants(),
                            item.getOriginalPrice(), item.getDiscountPrice()))
                    .collect(Collectors.toList());
            rows.add(new GuideReceivingOptionResponse.ScenicOption(scenic.getId(), scenic.getScenicName(), points, services));
            rows.add(new GuideReceivingOptionResponse.ScenicOption(scenic.getId(), scenic.getScenicName(),
                    positive(scenic.getFirstOrderLeadMinutes(), 15), points, services));
        }
        return new GuideReceivingOptionResponse(premiumEnabled, value(settings.getPreciseDispatchOrderCount()),
                settings.getPreciseDispatchRating(), rows);
@@ -133,8 +138,8 @@
        if (session == null) {
            return null;
        }
        if ("IN_SERVICE".equals(session.getStatus())) {
            return hasActiveServiceOrder(session) ? session : null;
        if (hasActiveServiceOrder(session)) {
            return session;
        }
        GuideRealtimeStatus realtimeStatus = realtimeStatusMapper.selectById(guideId);
@@ -168,20 +173,9 @@
        }
        LocalDateTime now = LocalDateTime.now();
        int orderCount = orderMapper.completeSessionOrders(guideId, session.getId(), now);
        if (orderCount == 0) {
        if (!sessionTransitionService.completeSession(session, now)) {
            throw new BusinessException(400, "no active service order");
        }
        sessionMapper.update(null, new LambdaUpdateWrapper<GuideReceivingSession>()
                .eq(GuideReceivingSession::getId, session.getId())
                .eq(GuideReceivingSession::getGuideId, guideId)
                .eq(GuideReceivingSession::getStatus, "IN_SERVICE")
                .set(GuideReceivingSession::getStatus, "STOPPED"));
        realtimeStatusMapper.update(null, new LambdaUpdateWrapper<GuideRealtimeStatus>()
                .eq(GuideRealtimeStatus::getGuideId, guideId)
                .set(GuideRealtimeStatus::getOnlineStatus, 0)
                .set(GuideRealtimeStatus::getAvailableStatus, 0));
    }
    private Set<String> configuredScenicNames(GuideUser guide) {
@@ -299,4 +293,8 @@
    }
    private long value(Integer number) { return number == null ? 0L : number.longValue(); }
    private int positive(Integer number, int fallback) {
        return number == null || number < 1 ? fallback : number;
    }
}