From a3716f72066d25d745f4d5103ff23a553c3e102b Mon Sep 17 00:00:00 2001
From: wayne <wayne8692wayne8692@gmail.com>
Date: 星期四, 17 二月 2022 11:41:19 +0800
Subject: [PATCH] Merge branch 'sit' into uat

---
 pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java |  172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 172 insertions(+), 0 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
new file mode 100644
index 0000000..a5be71e
--- /dev/null
+++ b/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java
@@ -0,0 +1,172 @@
+package com.pollex.pam.service;
+
+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.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 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.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.*;
+import java.util.Base64.Encoder;
+
+@Service
+public class SendMsgService {
+
+    private static final Logger log = LoggerFactory.getLogger(SendMsgService.class);
+    private final Encoder encoder = Base64.getEncoder();
+
+    private static final String SEND_SMS_SUCCESS_CODE = "1";
+
+    @Autowired
+    ApplicationProperties applicationProperties;
+
+    @Autowired
+    ConsultantRepository consultantRepository;
+
+    @Autowired
+    SpringTemplateEngine springTemplateEngine;
+
+    @Autowired
+    Environment environment;
+
+    @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());
+        sendSMSRequest.setSourceCode(smsProperties.getSourceCode());
+        sendSMSRequest.setSender(smsProperties.getSender());
+        sendSMSRequest.setMsgTypeSet(smsProperties.getSmsType());
+        sendSMSRequest.setSendTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:00")));
+        sendSMSRequest.setSubject(encoder.encodeToString(smsProperties.getSubject().getBytes(StandardCharsets.UTF_8)));
+        sendSMSRequest.setActivityId("");
+
+        SMSDetail smsDetail = new SMSDetail();
+        smsDetail.setMobile(toMobile);
+        smsDetail.setContent(encoder.encodeToString(content.getBytes(StandardCharsets.UTF_8)));
+
+        sendSMSRequest.setDetail(Collections.singletonList(smsDetail));
+
+        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();
+        } 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!");
+        }
+    }
+
+//    private SendSMSResponse getMockSMSResponse() {
+//    	SendSMSResponse mock = new SendSMSResponse();
+//    	mock.set
+//		return null;
+//	}
+
+	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 toAddress, String subject, String content, boolean htmlFormat, List<String> toCCAddress,
+        List<String> attachments) throws SendEmailFailException {
+    	String fromAddress = applicationProperties.getEmail().getSenderEmail();
+
+        SendMailRequest sendMailRequest = new SendMailRequest();
+        sendMailRequest.setSendMailAddresses(Collections.singletonList(toAddress));
+        sendMailRequest.setFrom(fromAddress);
+        sendMailRequest.setContent(content);
+        sendMailRequest.setSubject(subject);
+        sendMailRequest.setSendCCMailAddresses(toCCAddress);
+        sendMailRequest.setAttachments(attachments);
+        sendMailRequest.setHtmlFormat(htmlFormat);
+        sendMailRequest.setFunctionId(applicationProperties.getEmail().getFunctionId());
+
+        return sendMsgByEmail(sendMailRequest);
+    }
+
+    public String sendMsgByEmail(SendMailRequest sendMailRequest) throws SendEmailFailException{
+        final Email emailProperties = applicationProperties.getEmail();
+
+        if(!emailProperties.isSendNotifyMsg()) {
+            return null;
+        }
+
+        if(emailProperties.getMethod() == SendEmailMsgMethod.POLLEX_GMAIL) {
+            return sendMsgByPollexGmail(sendMailRequest);
+        }
+        else if(emailProperties.getMethod() == SendEmailMsgMethod.PAM_EMAIL_SERVICE) {
+            return sendMsgByPamEmailService(sendMailRequest);
+        }
+
+        return null;
+    }
+
+    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