package com.pollex.pam.service.mapper;
|
|
import com.pollex.pam.domain.Appointment;
|
import com.pollex.pam.domain.Consultant;
|
import com.pollex.pam.domain.CustomerFavoriteConsultant;
|
import com.pollex.pam.enums.ContactStatusEnum;
|
import com.pollex.pam.service.AppointmentService;
|
import com.pollex.pam.service.dto.ConsultantDTO;
|
import com.pollex.pam.service.dto.ConsultantDetailDTO;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.stereotype.Service;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class ConsultantMapper {
|
|
private final static Character SPLIT_MASK = ',';
|
|
private final AppointmentService appointmentService;
|
|
public ConsultantMapper(AppointmentService appointmentService) {
|
this.appointmentService = appointmentService;
|
}
|
|
public ConsultantDTO toDto(Consultant source) {
|
ConsultantDTO consultantDTO = new ConsultantDTO();
|
consultantDTO.setAgentNo(source.getAgentNo());
|
consultantDTO.setName(source.getName());
|
consultantDTO.setAvgScore(source.getAvgScore());
|
consultantDTO.setSeniority(source.getSeniority());
|
consultantDTO.setExpertise(splitStringWithChar(source.getExpertise()));
|
consultantDTO.setImg(source.getPhotoPath());
|
consultantDTO.setRole(source.getRole());
|
|
consultantDTO.setContactStatus(null);
|
consultantDTO.setUpdateTime(null);
|
consultantDTO.setLatestAppointmentId(null);
|
|
return consultantDTO;
|
}
|
|
public ConsultantDTO toDto(CustomerFavoriteConsultant customerFavoriteConsultant) {
|
Consultant consultant = customerFavoriteConsultant.getConsultant();
|
ConsultantDTO dto = toDto(consultant);
|
|
final Optional<Appointment> latestAppointmentOptional = appointmentService.findByAgentNoAndCustomerId(consultant.getAgentNo(), customerFavoriteConsultant.getCustomerId())
|
.stream()
|
.max(Comparator.comparing(Appointment::getAppointmentDate));
|
|
if(latestAppointmentOptional.isPresent()) {
|
Appointment latestAppointment = latestAppointmentOptional.get();
|
dto.setContactStatus(latestAppointment.getCommunicateStatus());
|
dto.setLatestAppointmentId(latestAppointment.getId());
|
dto.setUpdateTime(latestAppointment.getAppointmentDate());
|
}
|
else {
|
dto.setContactStatus(ContactStatusEnum.PICKED);
|
dto.setLatestAppointmentId(null);
|
dto.setUpdateTime(customerFavoriteConsultant.getLastModifiedDate());
|
}
|
|
return dto;
|
}
|
|
public ConsultantDetailDTO toDetailDto(Consultant source) {
|
ConsultantDetailDTO consultantDetailDTO = new ConsultantDetailDTO();
|
consultantDetailDTO.setName(source.getName());
|
consultantDetailDTO.setAgentNo(source.getAgentNo());
|
consultantDetailDTO.setRole(source.getRole());
|
consultantDetailDTO.setAvgScore(source.getAvgScore());
|
consultantDetailDTO.setTitle(source.getTitle());
|
consultantDetailDTO.setPhoneNumber(source.getPhoneNumber());
|
consultantDetailDTO.setServeArea(source.getServeArea());
|
consultantDetailDTO.setCompanyAddress(source.getCompanyAddress());
|
consultantDetailDTO.setLatestLoginTime(source.getLatestLoginTime());
|
consultantDetailDTO.setSeniority(source.getSeniority());
|
consultantDetailDTO.setConcept(source.getConcept());
|
consultantDetailDTO.setAwards(source.getAward());
|
consultantDetailDTO.setImage(source.getPhotoPath());
|
|
// todo 決定匹配程度
|
consultantDetailDTO.setSuitability(50);
|
consultantDetailDTO.setEvaluation(50);
|
consultantDetailDTO.setExpertises(splitStringWithChar(source.getExpertise()));
|
consultantDetailDTO.setExperiences(splitStringWithChar(source.getExperience()));
|
|
return consultantDetailDTO;
|
}
|
|
private List<String> splitStringWithChar(String source) {
|
return Arrays.stream(StringUtils.split(source, SPLIT_MASK))
|
.map(String::trim)
|
.collect(Collectors.toList());
|
}
|
}
|