From ac594e4efb30ba28776d74b0fb08ab34d7c32023 Mon Sep 17 00:00:00 2001
From: HelenHuang <LinHuang@pollex.com.tw>
Date: 星期四, 30 十二月 2021 15:20:08 +0800
Subject: [PATCH] Merge branch 'Phase2'

---
 pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java |   93 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 91 insertions(+), 2 deletions(-)

diff --git a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
index ec045e3..f79a9c8 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java
@@ -6,8 +6,11 @@
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-import com.pollex.pam.domain.Satisfaction;
+import com.pollex.pam.config.ApplicationProperties;
 import com.pollex.pam.service.dto.AppointmentUpdateDTO;
+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;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +28,9 @@
 import com.pollex.pam.service.mapper.AppointmentCustomerViewMapper;
 import com.pollex.pam.service.mapper.AppointmentDTOMapper;
 import com.pollex.pam.web.rest.errors.AppointmentNotFoundException;
+import org.springframework.util.StringUtils;
+import org.thymeleaf.context.Context;
+import org.thymeleaf.spring5.SpringTemplateEngine;
 
 import static com.pollex.pam.enums.AppointmentStatusEnum.AVAILABLE;
 import static com.pollex.pam.enums.AppointmentStatusEnum.DELETED;
@@ -35,7 +41,9 @@
 
     private static final Logger log = LoggerFactory.getLogger(AppointmentService.class);
 
-	@Autowired
+    private static final String NOTIFY_EMAIL_SUBJECT = "靽���像�蝟餌絞�嚗���";
+
+    @Autowired
 	AppointmentRepository appointmentRepository;
 
 	@Autowired
@@ -52,6 +60,15 @@
 
 	@Autowired
 	SatisfactionService satisfactionService;
+
+    @Autowired
+    SendMsgService sendMsgService;
+
+    @Autowired
+    ApplicationProperties applicationProperties;
+
+    @Autowired
+    SpringTemplateEngine springTemplateEngine;
 
 	public Appointment customerCreateAppointment(AppointmentCreateDTO appointmentCreateDTO) {
 		Appointment appointment = appointmentDTOMapper.toAppointment(appointmentCreateDTO);
@@ -155,4 +172,76 @@
         consultantNotViewAppointments.forEach(appointment -> appointment.setConsultantViewTime(Instant.now()));
         appointmentRepository.saveAll(consultantNotViewAppointments);
     }
+
+    public void sendAppointmentNotify(Appointment appointment) {
+        Assert.notNull(appointment, "appointment entity cannot be null");
+
+        log.debug("is need send appointment notify msg? = {}", applicationProperties.isSendNotifyMsg());
+        if(applicationProperties.isSendNotifyMsg()) {
+            log.debug("sending appointment notify, appointmentId = {}", appointment.getId());
+            sendAppointmentNotifyBySMS(appointment);
+            sendAppointmentNotifyByHtmlEmail(appointment);
+        }
+    }
+
+    private void sendAppointmentNotifyBySMS(Appointment appointment) {
+        String msg = getAppointmentNotifyWording(appointment);
+        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 (SendSMSFailException e) {
+            log.warn("send appointment notify by sms was fail, appointment Id = {}", appointment.getId(), e);
+        }
+    }
+
+    private String getAppointmentNotifyWording(Appointment appointment) {
+        String normalContent;
+        if(StringUtils.hasText(appointment.getPhone())) {
+            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像��������恥�����Ⅳ�" + appointment.getPhone();
+        }
+        else {
+            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像������";
+        }
+
+        String urlContent = "嚗���雯��嚗�" + getAppointmentDetailUrl(appointment.getId()) + "����蒂摰�蝯∟赤隢�����";
+        return normalContent + urlContent;
+    }
+
+    private void sendAppointmentNotifyByHtmlEmail(Appointment appointment) {
+        String senderEmail = applicationProperties.getEmail().getSenderEmail();
+        String consultantEmail = consultantService.findByAgentNo(appointment.getAgentNo()).getEmail();
+        String customerMobile = appointment.getPhone();
+        String normalContent;
+
+        if(StringUtils.hasText(customerMobile)) {
+            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像��������恥�����Ⅳ�" + customerMobile + "嚗�";
+        }
+        else {
+            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像�������";
+        }
+
+        Context context = new Context();
+        context.setVariable("content", normalContent);
+        context.setVariable("urlHint", getAppointmentDetailUrl(appointment.getId()));
+        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 appointment notify by email was fail, appointment Id = {}", appointment.getId(), e);
+        }
+    }
+
+    public String getAppointmentDetailUrl(Long appointmentId) {
+        return applicationProperties.getFrontEndDomain() + "/myAppointmentList/contactedList?appointmentId=" + appointmentId;
+    }
 }

--
Gitblit v1.8.0