保誠-保戶業務員媒合平台
pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
@@ -8,7 +8,9 @@
import com.pollex.pam.config.ApplicationProperties;
import com.pollex.pam.service.dto.AppointmentUpdateDTO;
import com.pollex.pam.service.dto.InterviewRecordDTO;
import com.pollex.pam.web.rest.errors.SendEmailFailException;
import com.pollex.pam.web.rest.errors.SendSMSFailException;
import io.jsonwebtoken.lang.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -18,7 +20,9 @@
import com.pollex.pam.domain.Appointment;
import com.pollex.pam.domain.AppointmentCustomerView;
import com.pollex.pam.domain.InterviewRecord;
import com.pollex.pam.enums.ContactStatusEnum;
import com.pollex.pam.enums.InterviewRecordStatusEnum;
import com.pollex.pam.repository.AppointmentCustomerViewRepository;
import com.pollex.pam.repository.AppointmentRepository;
import com.pollex.pam.security.SecurityUtils;
@@ -68,6 +72,9 @@
    @Autowired
    SpringTemplateEngine springTemplateEngine;
    @Autowired
    InterviewRecordService interviewRecordService;
   public Appointment customerCreateAppointment(AppointmentCreateDTO appointmentCreateDTO) {
      Appointment appointment = appointmentDTOMapper.toAppointment(appointmentCreateDTO);
@@ -119,15 +126,22 @@
        AppointmentCustomerViewDTO dto = appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointment);
        setSatisfactionScore(dto, appointmentId);
//        setInterviewRecordDTO(dto);
      return dto;
   }
    public List<AppointmentCustomerViewDTO> getConsultantAvailableAppointments(String agentNo) {
    public void setInterviewRecordDTO(AppointmentCustomerViewDTO dto) {
       List<InterviewRecordDTO> interviewRecords = interviewRecordService.findByAppointmentIdAndStatus(dto.getId(), InterviewRecordStatusEnum.AVAILABLE);
       dto.setInterviewRecordDTOs(interviewRecords);
    }
   public List<AppointmentCustomerViewDTO> getConsultantAvailableAppointments(String agentNo) {
        return appointmentCustomerViewRepository.findByAgentNo(agentNo).stream()
            .filter(appointment -> appointment.getStatus() == AVAILABLE)
            .map(appointmentCustomerView -> {
                AppointmentCustomerViewDTO dto = appointmentCustomerViewMapper.toAppointmentCustomerViewDTO(appointmentCustomerView);
                setSatisfactionScore(dto, appointmentCustomerView.getId());
                return dto;
            })
            .collect(Collectors.toList());
@@ -188,8 +202,12 @@
        String consultantMobile = consultantService.findByAgentNo(appointment.getAgentNo()).getPhoneNumber();
        try {
            if(!StringUtils.hasText(consultantMobile)) {
                throw new SendSMSFailException("the consultant does not have mobile!");
            }
            sendMsgService.sendMsgBySMS(consultantMobile, msg);
        } catch (Exception e) {
        } catch (SendSMSFailException e) {
            log.warn("send appointment notify by sms was fail, appointment Id = {}", appointment.getId(), e);
        }
    }
@@ -197,13 +215,13 @@
    private String getAppointmentNotifyWording(Appointment appointment) {
        String normalContent;
        if(StringUtils.hasText(appointment.getPhone())) {
            normalContent = "親愛的顧問您好,您有一筆來自保誠人壽媒合平台的預約,預約客戶手機號碼為" + appointment.getPhone() + "\n\n";
            normalContent = "親愛的顧問您好,您有一筆來自保誠人壽媒合平台的預約,預約客戶手機號碼為" + appointment.getPhone();
        }
        else {
            normalContent = "親愛的顧問您好,您有一筆來自保誠人壽媒合平台的預約\n\n";
            normalContent = "親愛的顧問您好,您有一筆來自保誠人壽媒合平台的預約";
        }
        String urlContent = "請點擊網址:" + getAppointmentDetailUrl(appointment.getId()) + " 查看,並安排聯絡訪談,謝謝!";
        String urlContent = ",請點擊網址:" + getAppointmentDetailUrl(appointment.getId()) + "查看,並安排聯絡訪談,謝謝!";
        return normalContent + urlContent;
    }
@@ -214,10 +232,10 @@
        String normalContent;
        if(StringUtils.hasText(customerMobile)) {
            normalContent = "親愛的顧問您好:您有一筆來自保誠人壽媒合平台的預約,預約客戶手機號碼為" + customerMobile + "";
            normalContent = "親愛的顧問您好:您有一筆來自保誠人壽媒合平台的預約,預約客戶手機號碼為" + customerMobile + ",";
        }
        else {
            normalContent = "親愛的顧問您好:您有一筆來自保誠人壽媒合平台的預約";
            normalContent = "親愛的顧問您好:您有一筆來自保誠人壽媒合平台的預約,";
        }
        Context context = new Context();
@@ -226,13 +244,22 @@
        String content = springTemplateEngine.process("mail/appointmentNotifyEmail", context);
        try {
            if(!StringUtils.hasText(consultantEmail)) {
                throw new SendEmailFailException("the consultant does not have email!");
            }
            sendMsgService.sendMsgByEmail(senderEmail, consultantEmail, NOTIFY_EMAIL_SUBJECT, content, true);
        } catch (SendEmailFailException e) {
            log.warn("send email failed, appointment Id = {}", appointment.getId(), e);
            log.warn("send appointment notify by email was fail, appointment Id = {}", appointment.getId(), e);
        }
    }
    public String getAppointmentDetailUrl(Long appointmentId) {
        return applicationProperties.getFrontEndDomain() + "/myAppointmentList/contactedList?appointmentId=" + appointmentId;
    }
    public Appointment findById(Long id) {
       return appointmentRepository.findById(id)
             .orElseThrow(AppointmentNotFoundException::new);
    }
}