From 73307b0ada907f8ac857b3dfc4e7d50e3b7b92e9 Mon Sep 17 00:00:00 2001
From: Tomas <tomasysh@gmail.com>
Date: 星期一, 24 一月 2022 16:24:52 +0800
Subject: [PATCH] Merge branch 'Phase3' of https://dev.pollex.com.tw:8443/r/pcalife/PAM into Phase3

---
 pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java |  205 ++++++++++++++++++++-------------------------------
 1 files changed, 81 insertions(+), 124 deletions(-)

diff --git a/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java b/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java
index 9f44d91..a5be71e 100644
--- a/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java
+++ b/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java
@@ -2,31 +2,30 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.pollex.pam.config.ApplicationProperties;
+import com.pollex.pam.config.ApplicationProperties.Email;
 import com.pollex.pam.config.ApplicationProperties.SMS;
-import com.pollex.pam.domain.Appointment;
+import com.pollex.pam.config.Constants;
+import com.pollex.pam.enums.SendEmailMsgMethod;
 import com.pollex.pam.repository.ConsultantRepository;
 import com.pollex.pam.service.dto.*;
 import com.pollex.pam.service.util.HttpRequestUtil;
 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;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.Profiles;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
-import org.thymeleaf.context.Context;
 import org.thymeleaf.spring5.SpringTemplateEngine;
+import tech.jhipster.config.JHipsterConstants;
 
 import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Base64;
+import java.util.*;
 import java.util.Base64.Encoder;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
 
 @Service
 public class SendMsgService {
@@ -34,7 +33,7 @@
     private static final Logger log = LoggerFactory.getLogger(SendMsgService.class);
     private final Encoder encoder = Base64.getEncoder();
 
-    private static final String EMAIL_SUBJECT = "靽���像�蝟餌絞�嚗���";
+    private static final String SEND_SMS_SUCCESS_CODE = "1";
 
     @Autowired
     ApplicationProperties applicationProperties;
@@ -45,85 +44,19 @@
     @Autowired
     SpringTemplateEngine springTemplateEngine;
 
-    public void sendAppointmentNotify(Appointment appointment) {
-        Assert.notNull(appointment);
+    @Autowired
+    Environment environment;
 
-        log.debug("is need sending notify msg = {}", applicationProperties.isSendNotifyMsg());
-        if(applicationProperties.isSendNotifyMsg()) {
-            log.debug("sending appointment notify, appointmentId = {}", appointment.getId());
-            sendAppointmentNotifyBySMS(appointment);
-            sendAppointmentNotifyByEmail(appointment);
-
-            // todo ��蝣箄�������瘙蝙�html mail
-            // sendAppointmentNotifyByHtmlEmail(appointment);
-        }
-    }
-
-    private void sendAppointmentNotifyBySMS(Appointment appointment) throws SendSMSFailException {
-        String msg = getAppointmentNotifyWording(appointment);
-        String consultantMobile = consultantRepository.findOneByAgentNo(appointment.getAgentNo()).get().getPhoneNumber();
-
-        try {
-            sendMsgBySMS(consultantMobile, msg);
-        } catch (SendSMSFailException e) {
-            log.debug("send sms failed, appointment Id = {}", appointment.getId(), e);
-        }
-    }
-
-    private void sendAppointmentNotifyByEmail(Appointment appointment) {
-        // todo ��敺靽�頂蝯勗�辣靽∠拳 (銝行�閮剖��葉)
-        String senderEmail = applicationProperties.getEmail().getSenderEmail();
-        String consultantEmail = consultantRepository.findOneByAgentNo(appointment.getAgentNo()).get().getEmail();
-        String content = getAppointmentNotifyWording(appointment);
-
-        try {
-            sendMsgByEmail(senderEmail, consultantEmail, EMAIL_SUBJECT, content, false);
-        } catch (SendEmailFailException e) {
-            log.debug("send email failed, appointment Id = {}", appointment.getId(), e);
-        }
-    }
-
-    private void sendAppointmentNotifyByHtmlEmail(Appointment appointment) {
-        // todo ��敺靽�頂蝯勗�辣靽∠拳 (銝行�閮剖��葉)
-        String senderEmail = applicationProperties.getEmail().getSenderEmail();
-        String consultantEmail = consultantRepository.findOneByAgentNo(appointment.getAgentNo()).get().getEmail();
-        String customerMobile = appointment.getPhone();
-        String normalContent;
-
-        if(StringUtils.hasText(customerMobile)) {
-            normalContent = "閬芣��“��憟踝����蝑�靽���像������嚗府摰X����Ⅳ�" + customerMobile + "\n";
-        }
-        else {
-            normalContent = "閬芣��“��憟踝����蝑�靽���像������\n";
-        }
-
-        Context context = new Context();
-        context.setVariable("content", normalContent);
-        context.setVariable("urlHint", getAppointmentDetailUrl(appointment.getId()));
-        String content = springTemplateEngine.process("mail/appointmentNotifyEmail", context);
-
-        try {
-            sendMsgByEmail(senderEmail, consultantEmail, EMAIL_SUBJECT, content, true);
-        } catch (SendEmailFailException e) {
-            log.debug("send email failed, appointment Id = {}", appointment.getId(), e);
-        }
-    }
-
-    private String getAppointmentNotifyWording(Appointment appointment) {
-        String normalContent;
-        if(StringUtils.hasText(appointment.getPhone())) {
-            normalContent = "閬芣��“��憟踝����蝑�靽���像������嚗府摰X����Ⅳ�" + appointment.getPhone() + "\n";
-        }
-        else {
-            normalContent = "閬芣��“��憟踝����蝑�靽���像������\n";
-        }
-
-        String urlContent = "暺�雯��嚗�" + getAppointmentDetailUrl(appointment.getId()) + " �����像������";
-        return normalContent + urlContent;
-    }
+    @Autowired
+    MailService mailService;
 
     public SendSMSResponse sendMsgBySMS(String toMobile, String content) throws SendSMSFailException {
+
         SMS smsProperties = applicationProperties.getSms();
+        if(!smsProperties.isSendNotifyMsg()) {
+//    		return getMockSMSResponse();
+            return null;
+        }
 
         SendSMSRequest sendSMSRequest = new SendSMSRequest();
         sendSMSRequest.setpKey(UUID.randomUUID().toString());
@@ -131,7 +64,7 @@
         sendSMSRequest.setSender(smsProperties.getSender());
         sendSMSRequest.setMsgTypeSet(smsProperties.getSmsType());
         sendSMSRequest.setSendTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:00")));
-        sendSMSRequest.setSubject(smsProperties.getSubject());
+        sendSMSRequest.setSubject(encoder.encodeToString(smsProperties.getSubject().getBytes(StandardCharsets.UTF_8)));
         sendSMSRequest.setActivityId("");
 
         SMSDetail smsDetail = new SMSDetail();
@@ -142,36 +75,38 @@
 
         try {
             ResponseEntity<SendSMSResponse> responseEntity = HttpRequestUtil.postWithJson(smsProperties.getUrl(), sendSMSRequest, SendSMSResponse.class);
+            SendSMSResponse response = responseEntity.getBody();
 
             log.debug("response status code = {}", responseEntity.getStatusCode());
             log.debug("smsResponse = {}", responseEntity.getBody());
 
+            if(!SEND_SMS_SUCCESS_CODE.equals(response.getReturnCode())) {
+                throw new SendSMSFailException("sms service return code = " + response.getReturnCode() + ", error_msg = " + response.getErrorMsg());
+            }
+
             return responseEntity.getBody();
-            // todo ����閬�����隤方������葫��
-        }
-        catch (Exception e) {
-            log.debug("send sms failed!", e);
-            throw new SendSMSFailException();
+        } catch (SendSMSFailException e) {
+            throw e;
+        } catch (Exception e) {
+            log.warn("send sms fail by other reason!", e);
+            throw new SendSMSFailException("send sms fail by other reason!");
         }
     }
 
-    public String sendMsgByHtmlTestTemplateEmail(String from, String to) {
-        Context context = new Context();
-        context.setVariable("content", "閬芣��“��憟踝����蝑�靽���像������\n");
-        context.setVariable("urlHint", getAppointmentDetailUrl(0L));
+//    private SendSMSResponse getMockSMSResponse() {
+//    	SendSMSResponse mock = new SendSMSResponse();
+//    	mock.set
+//		return null;
+//	}
 
-        String content = springTemplateEngine.process("mail/appointmentNotifyEmail", context);
-        return sendMsgByEmail(from, to, EMAIL_SUBJECT, content, true);
+	public String sendMsgByEmail(String to, String subject, String content, boolean htmlFormat) throws SendEmailFailException{
+        return sendMsgByEmail(to, subject, content, htmlFormat, Collections.emptyList(), Collections.emptyList());
     }
 
-    public String sendMsgByEmail(String from, String to, String subject, String content, boolean htmlFormat) throws SendEmailFailException{
-        return sendMsgByEmail(from, to, subject, content, htmlFormat, Collections.emptyList(), Collections.emptyList());
-    }
+    public String sendMsgByEmail(String toAddress, String subject, String content, boolean htmlFormat, List<String> toCCAddress,
+        List<String> attachments) throws SendEmailFailException {
+    	String fromAddress = applicationProperties.getEmail().getSenderEmail();
 
-    public String sendMsgByEmail(
-        String fromAddress, String toAddress, String subject, String content, boolean htmlFormat, List<String> toCCAddress,
-        List<String> attachments) throws SendEmailFailException
-    {
         SendMailRequest sendMailRequest = new SendMailRequest();
         sendMailRequest.setSendMailAddresses(Collections.singletonList(toAddress));
         sendMailRequest.setFrom(fromAddress);
@@ -185,31 +120,53 @@
         return sendMsgByEmail(sendMailRequest);
     }
 
-    private String sendMsgByEmail(SendMailRequest sendMailRequest) throws SendEmailFailException{
-        try {
-            ResponseEntity<String> responseEntity =
-                HttpRequestUtil.postWithJson( applicationProperties.getEmail().getUrl(), sendMailRequest, String.class);
-            log.debug("responseEntity = {}", responseEntity);
+    public String sendMsgByEmail(SendMailRequest sendMailRequest) throws SendEmailFailException{
+        final Email emailProperties = applicationProperties.getEmail();
 
-            SendMailResponse sendMailResponse = new ObjectMapper().readValue(responseEntity.getBody(), SendMailResponse.class);
-            log.debug("sendMailResponse = {}", sendMailResponse);
+        if(!emailProperties.isSendNotifyMsg()) {
+            return null;
+        }
 
-//            if(sendMailResponse == null || sendMailResponse.getData() == null || "ADDED".equalsIgnoreCase(sendMailResponse.getData().getMessageStatus())) {
-//                throw new SendEmailFailException();
-//            }
+        if(emailProperties.getMethod() == SendEmailMsgMethod.POLLEX_GMAIL) {
+            return sendMsgByPollexGmail(sendMailRequest);
+        }
+        else if(emailProperties.getMethod() == SendEmailMsgMethod.PAM_EMAIL_SERVICE) {
+            return sendMsgByPamEmailService(sendMailRequest);
+        }
 
-            return responseEntity.getBody();
-        }
-        catch (SendEmailFailException e) {
-            throw e;
-        }
-        catch (Exception e) {
-            log.debug("send email failed!", e);
-            throw new SendEmailFailException();
-        }
+        return null;
     }
 
-    private String getAppointmentDetailUrl(Long appointmentId) {
-        return applicationProperties.getFrontEndDomain() + "/myAppointmentList/contactedList?appointmentId=" + appointmentId;
+    private String sendMsgByPollexGmail(SendMailRequest sendMailRequest) {
+        String subject = sendMailRequest.getSubject();
+        String content = sendMailRequest.getContent();
+        boolean isHtml = sendMailRequest.isHtmlFormat();
+        sendMailRequest.getSendMailAddresses().forEach(receiver -> mailService.sendEmail(receiver, subject, content, false, isHtml));
+
+        return null;
+    }
+
+    private String sendMsgByPamEmailService(SendMailRequest sendMailRequest) {
+        final Email emailProperties = applicationProperties.getEmail();
+        try {
+            ResponseEntity<String> responseEntity =
+                HttpRequestUtil.postWithJson(emailProperties.getUrl(), sendMailRequest, String.class);
+            log.debug("responseEntity = {}", responseEntity);
+
+            String rawResponseString = responseEntity.getBody();
+            SendMailResponse sendMailResponse = new ObjectMapper().readValue(rawResponseString, SendMailResponse.class);
+            log.debug("sendMailResponse = {}", sendMailResponse);
+
+            if (sendMailResponse == null || sendMailResponse.getData() == null || !"ADDED".equalsIgnoreCase(sendMailResponse.getData().getMessageStatus())) {
+                throw new SendEmailFailException("send email service return error msg! raw response string= " + rawResponseString);
+            }
+
+            return responseEntity.getBody();
+        } catch (SendEmailFailException e) {
+            throw e;
+        } catch (Exception e) {
+            log.warn("send email fail by other reason", e);
+            throw new SendEmailFailException("send email failed!");
+        }
     }
 }

--
Gitblit v1.8.0