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<GuideApplication>()
|
.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";
|
}
|
}
|