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.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 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 splitStringWithChar(String source) { return Arrays.stream(StringUtils.split(source, SPLIT_MASK)) .map(String::trim) .collect(Collectors.toList()); } }