package com.tourguide.modules.guide.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tourguide.modules.guide.dto.GuideWorkbenchResponse; import com.tourguide.modules.operation.dto.PlatformSettingsResponse; import com.tourguide.modules.operation.service.PlatformSettingsService; import com.tourguide.modules.order.dto.GuideTodayStatsResponse; import com.tourguide.modules.order.mapper.TourOrderMapper; import com.tourguide.modules.system.service.GuideNotificationService; import com.tourguide.modules.user.dto.GuideUserResponse; import com.tourguide.modules.user.entity.GuideApplication; import com.tourguide.modules.user.entity.GuideUser; import com.tourguide.modules.user.mapper.GuideApplicationMapper; import com.tourguide.modules.user.service.GuideUserService; import org.springframework.stereotype.Service; @Service public class GuideWorkbenchService { private final GuideUserService guideUserService; private final GuideApplicationMapper applicationMapper; private final TourOrderMapper orderMapper; private final GuideNotificationService notificationService; private final PlatformSettingsService settingsService; public GuideWorkbenchService(GuideUserService guideUserService, GuideApplicationMapper applicationMapper, TourOrderMapper orderMapper, GuideNotificationService notificationService, PlatformSettingsService settingsService) { this.guideUserService = guideUserService; this.applicationMapper = applicationMapper; this.orderMapper = orderMapper; this.notificationService = notificationService; this.settingsService = settingsService; } public GuideWorkbenchResponse get(Long guideId) { GuideUser guide = guideUserService.findById(guideId); GuideTodayStatsResponse stats = orderMapper.selectGuideTodayStats(guideId); if (stats == null) stats = new GuideTodayStatsResponse(); GuideApplication application = latestApplication(guide); PlatformSettingsResponse settings = settingsService.getSettings(); return new GuideWorkbenchResponse( stats.getTodayOrderCount(), stats.getTodayPeopleCount(), notificationService.unreadCount(guideId), resolveAccountState(guide, application), application == null ? null : application.getAuditRemark(), settings.getCustomerServiceWechat(), settings.getCustomerServicePhone(), GuideUserResponse.from(guide)); } private GuideApplication latestApplication(GuideUser guide) { if (guide.getMobile() == null || guide.getMobile().trim().isEmpty()) return null; return applicationMapper.selectOne(new LambdaQueryWrapper() .eq(GuideApplication::getMobile, guide.getMobile()) .orderByDesc(GuideApplication::getCreatedAt) .last("LIMIT 1")); } private String resolveAccountState(GuideUser guide, GuideApplication application) { if (guide.getStatus() == null || guide.getStatus() == 0) return "disabled"; if (application == null || application.getAuditStatus() == null || application.getAuditStatus() == 1) { return "approved"; } if (application.getAuditStatus() == 2) return "rejected"; return "pending"; } }