package com.tourguide.modules.user.dto; import com.tourguide.modules.user.entity.GuideScenicConfig; import com.tourguide.modules.user.entity.GuideUser; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Period; import java.util.List; import java.util.stream.Collectors; public class GuideUserDetailResponse { private final Long id; private final String username; private final String realName; private final String mobile; private final String avatar; private final String certificateNo; private final Integer gender; private final LocalDate birthDate; private final Integer age; private final Integer workYears; private final String idCardNo; private final String idCardFrontUrl; private final String idCardBackUrl; private final String guideCertificateUrl; private final String qualificationCertificateUrl; private final Long teamId; private final String teamName; private final String teamType; private final Long acceptedOrderCount; private final Long currentMonthOrderCount; private final BigDecimal rating; private final boolean autoDisableWhitelisted; private final String wechatOpenId; private final Integer status; private final LocalDateTime createdAt; private final List scenicConfigs; public GuideUserDetailResponse(GuideUser user, String teamName, List scenicConfigs) { this(user, teamName, scenicConfigs, user.getBirthDate(), user.getWorkYears()); } public GuideUserDetailResponse(GuideUser user, String teamName, List scenicConfigs, LocalDate birthDate, Integer workYears) { this.id = user.getId(); this.username = user.getUsername(); this.realName = user.getRealName(); this.mobile = user.getMobile(); this.avatar = user.getAvatar(); this.certificateNo = user.getCertificateNo(); this.gender = user.getGender(); this.birthDate = birthDate; this.age = birthDate == null ? null : Period.between(birthDate, LocalDate.now()).getYears(); this.workYears = workYears; this.idCardNo = user.getIdCardNo(); this.idCardFrontUrl = user.getIdCardFrontUrl(); this.idCardBackUrl = user.getIdCardBackUrl(); this.guideCertificateUrl = user.getGuideCertificateUrl(); this.qualificationCertificateUrl = user.getQualificationCertificateUrl(); this.teamId = user.getTeamId(); this.teamName = teamName; this.teamType = user.getTeamId() == null ? "个人" : "讲解队"; this.acceptedOrderCount = user.getAcceptedOrderCount() == null ? 0L : user.getAcceptedOrderCount(); this.currentMonthOrderCount = user.getCurrentMonthOrderCount() == null ? 0L : user.getCurrentMonthOrderCount(); this.rating = user.getRating() == null ? BigDecimal.ZERO : user.getRating(); this.autoDisableWhitelisted = user.getAutoDisableWhitelisted() != null && user.getAutoDisableWhitelisted() == 1; this.wechatOpenId = user.getWechatOpenId(); this.status = user.getStatus(); this.createdAt = user.getCreatedAt(); this.scenicConfigs = scenicConfigs.stream().map(GuideScenicConfigResponse::new).collect(Collectors.toList()); } public Long getId() { return id; } public String getUsername() { return username; } public String getRealName() { return realName; } public String getMobile() { return mobile; } public String getAvatar() { return avatar; } public String getCertificateNo() { return certificateNo; } public Integer getGender() { return gender; } public LocalDate getBirthDate() { return birthDate; } public Integer getAge() { return age; } public Integer getWorkYears() { return workYears; } public String getIdCardNo() { return idCardNo; } public String getIdCardFrontUrl() { return idCardFrontUrl; } public String getIdCardBackUrl() { return idCardBackUrl; } public String getGuideCertificateUrl() { return guideCertificateUrl; } public String getQualificationCertificateUrl() { return qualificationCertificateUrl; } public Long getTeamId() { return teamId; } public String getTeamName() { return teamName; } public String getTeamType() { return teamType; } public Long getAcceptedOrderCount() { return acceptedOrderCount; } public Long getCurrentMonthOrderCount() { return currentMonthOrderCount; } public BigDecimal getRating() { return rating; } public boolean isAutoDisableWhitelisted() { return autoDisableWhitelisted; } public String getWechatOpenId() { return wechatOpenId; } public Integer getStatus() { return status; } public LocalDateTime getCreatedAt() { return createdAt; } public List getScenicConfigs() { return scenicConfigs; } }