From 7eb57571830d0677857cea565b09c4f38d286b8d Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期三, 29 十二月 2021 10:31:36 +0800
Subject: [PATCH] [update] 調整預約單通知的簡訊與email文案,並重購SendMsgService

---
 pamapi/src/main/java/com/pollex/pam/service/AppointmentService.java |   84 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 82 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..ad552b0 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,10 @@
 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 io.jsonwebtoken.lang.Assert;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +27,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 +40,9 @@
 
     private static final Logger log = LoggerFactory.getLogger(AppointmentService.class);
 
-	@Autowired
+    private static final String NOTIFY_EMAIL_SUBJECT = "靽���像�蝟餌絞�嚗���";
+
+    @Autowired
 	AppointmentRepository appointmentRepository;
 
 	@Autowired
@@ -52,6 +59,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 +171,68 @@
         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 {
+            sendMsgService.sendMsgBySMS(consultantMobile, msg);
+        } catch (Exception 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() + "\n\n";
+        }
+        else {
+            normalContent = "閬芣��“��憟踝����蝑�靽�犖憯賢��像�����n\n";
+        }
+
+        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 {
+            sendMsgService.sendMsgByEmail(senderEmail, consultantEmail, NOTIFY_EMAIL_SUBJECT, content, true);
+        } catch (SendEmailFailException e) {
+            log.warn("send email failed, appointment Id = {}", appointment.getId(), e);
+        }
+    }
+
+    public String getAppointmentDetailUrl(Long appointmentId) {
+        return applicationProperties.getFrontEndDomain() + "/myAppointmentList/contactedList?appointmentId=" + appointmentId;
+    }
 }

--
Gitblit v1.8.0