From 3fc8398a9da85854e5e95c2c4cca14389d5dd5f8 Mon Sep 17 00:00:00 2001 From: HelenHuang <LinHuang@pollex.com.tw> Date: 星期三, 16 二月 2022 15:02:49 +0800 Subject: [PATCH] Fixed#135481 修正[ 顧問管理流程 ] 滿意度 : 顧問把預約單結案後,客戶端的顧問清單會顯示該顧問預約單狀態為「進行預約」正確 , 但是卻顯示「給予滿意度評分」的連結。填寫滿意度後無法送出 --- pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java | 90 +++++++++++++++++++++++++++++++++++++-------- 1 files changed, 74 insertions(+), 16 deletions(-) diff --git a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java index 91e1ba3..6044a45 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/ConsultantService.java @@ -30,7 +30,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.time.Instant; @@ -39,6 +38,7 @@ import java.util.Objects; import java.util.stream.Collectors; +import static com.pollex.pam.consts.SeniorityQueryConst.*; import static com.pollex.pam.enums.ContactStatusEnum.*; @Service @@ -73,21 +73,24 @@ @Autowired ApplicationProperties applicationProperty; - + @Autowired SendMsgService sendMsgService; - + @Autowired SpringTemplateEngine springTemplateEngine; - + @Autowired ApplicationProperties applicationProperties; - + @Autowired ConsultantService consultantService; - + @Autowired SatisfactionRepository satisfactionRepository; + + @Autowired + PersonalNotificationService personalNotificationService; public List<CustomerFavoriteConsultantDTO> getMyConsultantList() { Long customerId = SecurityUtils.getCustomerDBId(); @@ -105,7 +108,7 @@ dto, appointmentService.findAvailableByAgentNoAndCustomerId(consultant.getAgentNo(), customerId) ); - + setFavoriteConsultantUpdatedTime(relation, dto); return dto; @@ -137,8 +140,7 @@ if (!appointments.isEmpty()) { AppointmentCustomerView latestAvailableAppointment = appointments.get(0); ContactStatusEnum latestStatus = latestAvailableAppointment.getCommunicateStatus(); - if( latestStatus != ContactStatusEnum.DONE - || latestStatus != ContactStatusEnum.CLOSED) + if(latestStatus != ContactStatusEnum.DONE && latestStatus != ContactStatusEnum.CLOSED) customerFavoriteConsultantDTO.setContactStatus(latestStatus); else customerFavoriteConsultantDTO.setContactStatus(PICKED); @@ -157,8 +159,60 @@ public List<ConsultantDTO> strictQueryConsultant(StrictQueryConsultantParam param) { return consultantRepository.findAll(ConsultantQuerySpec.getStrictQuerySpec(param)) .stream() - .map(consultantMapper::toDto) + .map(consultant -> { + int suitabilityScore = getStrictQuerySuitabilityScore(param, consultant); + + ConsultantDTO dto = consultantMapper.toDto(consultant); + dto.setSuitability(suitabilityScore); + + return dto; + }) .collect(Collectors.toList()); + } + + private int getStrictQuerySuitabilityScore(StrictQueryConsultantParam param, Consultant consultant) { + Float queryAvgScore = param.getAvgScore(); + String querySeniority = param.getSeniority(); + List<String> queryRequirements = param.getRequirements(); + + int score = 0; + if(isConsultantGreaterThanScore(queryAvgScore, consultant.getAvgScore())) { + score += 30; + } + + if(isConsultantInSeniority(querySeniority, consultant.getSeniorityYear())) { + score += 20; + } + + if(isAllRequirementsIncludeConsultant(queryRequirements, consultant.getExpertise())) { + score += 50; + } + + return score; + } + + private boolean isAllRequirementsIncludeConsultant(List<String> queryRequirements, String consultantExpertise) { + return queryRequirements + .stream() + .allMatch(queryRequirement -> consultantExpertise.matches(".*"+queryRequirement+".*")); + } + + private boolean isConsultantInSeniority(String querySeniority, Long consultantSeniorityYear) { + switch (querySeniority == null ? "" : querySeniority) { + case YOUNG: + return consultantSeniorityYear < 5; + case SENIOR: + return consultantSeniorityYear > 5; + case UNLIMITED: + case "": + return true; + default: + return false; + } + } + + private boolean isConsultantGreaterThanScore(Float queryAvgScore, Float consultantAvgScore) { + return Objects.isNull(queryAvgScore) || queryAvgScore < consultantAvgScore; } public List<ConsultantDTO> fastQueryConsultant(FastQueryConsultantParam param) { @@ -248,7 +302,9 @@ .orElseThrow(ConsultantNotFoundException::new); consultantDTOMapper.copyToConsultant(editDTO, consultant); FileUtil.base64ToFile(editDTO.getPhotoBase64(), editDTO.getPhotoFileName(), applicationProperty.getFileFolderPath()); - return consultantRepository.save(consultant); + consultantRepository.save(consultant); + personalNotificationService.createEditConsultantToConsultant(consultant); + return consultant; } public InputStream getAvatarImage(String agentNo) { @@ -266,17 +322,19 @@ public void sendSatisfactionToClient(Appointment appointment) { String subject = "皛踵�漲憛怠神�"; - + if(StringUtils.hasText(appointment.getEmail())) { String content = genSendSatisfactionEmailContent(appointment); sendMsgService.sendMsgByEmail(appointment.getEmail(), subject, content, true); - + }if(StringUtils.hasText(appointment.getPhone())) { String content = genSendSatisfactionSMSContent(appointment); sendMsgService.sendMsgBySMS(appointment.getPhone(), content); } + + personalNotificationService.createSendSatisfactionToClientToCustomer(appointment); } - + private String genSendSatisfactionSMSContent(Appointment appointment) { String agentNo = appointment.getAgentNo(); Consultant consultant = consultantService.findByAgentNo(agentNo); @@ -298,7 +356,7 @@ public String getSendSatisfactionToClientUrl(Long appointmentId) { return applicationProperties.getFrontEndDomain() + "/?appointmentId=" + appointmentId; } - + public void setConsultantAvgScore(Satisfaction satisfaction) { float avgScore = getAgentAvgScore(satisfaction.getAgentNo()); Consultant consultant = consultantRepository.findOneByAgentNo(satisfaction.getAgentNo()) @@ -310,7 +368,7 @@ public float getAgentAvgScore(String agentNo) { Float avgScore = satisfactionRepository.getAgentScoreAvg(agentNo); if(avgScore==null)return 0; - BigDecimal bigDecimal = new BigDecimal(avgScore); + BigDecimal bigDecimal = new BigDecimal(avgScore); return avgScore = bigDecimal.setScale(1,BigDecimal.ROUND_HALF_UP).floatValue(); } } -- Gitblit v1.8.0