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