From 49e325f40f9721521de975fdd5f3d37f6fe78852 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期五, 24 十二月 2021 09:15:12 +0800 Subject: [PATCH] [fix] 調整簡訊標題,需中文10字以內並為base64編碼 --- pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java | 113 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 96 insertions(+), 17 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 5280732..343b767 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java @@ -1,48 +1,60 @@ package com.pollex.pam.service; -import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.pollex.pam.config.ApplicationProperties; -import com.pollex.pam.service.dto.SMSDetail; -import com.pollex.pam.service.dto.SendSMSRequest; -import com.pollex.pam.service.dto.SendSMSResponse; +import com.pollex.pam.config.ApplicationProperties.SMS; +import com.pollex.pam.domain.Appointment; +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.http.HttpStatus; 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 java.nio.charset.StandardCharsets; -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Base64; import java.util.Base64.Encoder; import java.util.Collections; +import java.util.List; import java.util.UUID; @Service public class SendMsgService { - private final static Logger log = LoggerFactory.getLogger(SendMsgService.class); + private static final Logger log = LoggerFactory.getLogger(SendMsgService.class); private final Encoder encoder = Base64.getEncoder(); + + private static final String EMAIL_SUBJECT = "靽���像�蝟餌絞�嚗���"; @Autowired ApplicationProperties applicationProperties; - public SendSMSResponse sendMsgBySMS(String subject, String toMobile, String content) throws Exception{ - final String SMS_URL = applicationProperties.getSms().getUrl(); + @Autowired + ConsultantRepository consultantRepository; + + @Autowired + SpringTemplateEngine springTemplateEngine; + + public SendSMSResponse sendMsgBySMS(String toMobile, String content) throws SendSMSFailException { + SMS smsProperties = applicationProperties.getSms(); SendSMSRequest sendSMSRequest = new SendSMSRequest(); sendSMSRequest.setpKey(UUID.randomUUID().toString()); - sendSMSRequest.setSourceCode(applicationProperties.getSms().getSourceCode()); - sendSMSRequest.setSender(applicationProperties.getSms().getSender()); - sendSMSRequest.setMsgTypeSet(applicationProperties.getSms().getSmsType()); + 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(subject); + sendSMSRequest.setSubject(encoder.encodeToString(smsProperties.getSubject().getBytes(StandardCharsets.UTF_8))); sendSMSRequest.setActivityId(""); SMSDetail smsDetail = new SMSDetail(); @@ -51,9 +63,76 @@ sendSMSRequest.setDetail(Collections.singletonList(smsDetail)); - ResponseEntity<SendSMSResponse> responseEntity = HttpRequestUtil.postWithJson(SMS_URL, sendSMSRequest, SendSMSResponse.class); - return responseEntity.getBody(); + try { + ResponseEntity<SendSMSResponse> responseEntity = HttpRequestUtil.postWithJson(smsProperties.getUrl(), sendSMSRequest, SendSMSResponse.class); + + log.debug("response status code = {}", responseEntity.getStatusCode()); + log.debug("smsResponse = {}", responseEntity.getBody()); + + return responseEntity.getBody(); + // todo ����閬�����隤方������葫�� + } + catch (Exception e) { + log.debug("send sms failed!", e); + throw new SendSMSFailException(); + } } + public String sendMsgByHtmlTestTemplateEmail(String from, String to) { + Context context = new Context(); + context.setVariable("content", "閬芣��“��憟踝����蝑�靽���像������\n"); + context.setVariable("urlHint", getAppointmentDetailUrl(0L)); + String content = springTemplateEngine.process("mail/appointmentNotifyEmail", context); + return sendMsgByEmail(from, to, EMAIL_SUBJECT, content, true); + } + + 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 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); + sendMailRequest.setContent(content); + sendMailRequest.setSubject(subject); + sendMailRequest.setSendCCMailAddresses(toCCAddress); + sendMailRequest.setAttachments(attachments); + sendMailRequest.setHtmlFormat(htmlFormat); + sendMailRequest.setFunctionId(applicationProperties.getEmail().getFunctionId()); + + 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); + + SendMailResponse sendMailResponse = new ObjectMapper().readValue(responseEntity.getBody(), SendMailResponse.class); + log.debug("sendMailResponse = {}", sendMailResponse); + +// if(sendMailResponse == null || sendMailResponse.getData() == null || !"ADDED".equalsIgnoreCase(sendMailResponse.getData().getMessageStatus())) { +// throw new SendEmailFailException(); +// } + + return responseEntity.getBody(); + } + catch (SendEmailFailException e) { + throw e; + } + catch (Exception e) { + log.debug("send email failed!", e); + throw new SendEmailFailException(); + } + } + + private String getAppointmentDetailUrl(Long appointmentId) { + return applicationProperties.getFrontEndDomain() + "/myAppointmentList/contactedList?appointmentId=" + appointmentId; + } } -- Gitblit v1.8.0