package com.pollex.pam.service;
|
|
import com.pollex.pam.config.ApplicationProperties;
|
import com.pollex.pam.config.ApplicationProperties.SMS;
|
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.http.ResponseEntity;
|
import org.springframework.stereotype.Service;
|
|
import java.nio.charset.StandardCharsets;
|
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 static final Logger log = LoggerFactory.getLogger(SendMsgService.class);
|
private final Encoder encoder = Base64.getEncoder();
|
|
@Autowired
|
ApplicationProperties applicationProperties;
|
|
public void sendMsgBySMS(String toMobile, String content) throws SendSMSFailException{
|
SMS smsProperties = applicationProperties.getSms();
|
|
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("");
|
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);
|
|
log.debug("response status code = {}", responseEntity.getStatusCode());
|
log.debug("smsResponse = {}", responseEntity.getBody());
|
|
// todo 可能需要再補上後續錯誤處理,但要先測通
|
}
|
catch (Exception e) {
|
log.debug("send sms failed!", e);
|
throw new SendSMSFailException();
|
}
|
}
|
|
public void sendMsgByEmail(String from, String to, String subject, String content, boolean htmlFormat) throws SendEmailFailException{
|
sendMsgByEmail(from, to, subject, content, htmlFormat, Collections.emptyList(), Collections.emptyList());
|
}
|
|
public void 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());
|
|
sendMsgByEmail(sendMailRequest);
|
}
|
|
public void sendMsgByEmail(SendMailRequest sendMailRequest) throws SendEmailFailException{
|
try {
|
ResponseEntity<SendMailResponse> responseEntity =
|
HttpRequestUtil.postWithJson( applicationProperties.getEmail().getUrl(), sendMailRequest, SendMailResponse.class);
|
|
SendMailResponse sendMailResponse = responseEntity.getBody();
|
log.debug("response status code = {}", responseEntity.getStatusCode());
|
log.debug("emailResponse = {}", responseEntity.getBody());
|
|
if(sendMailResponse == null || sendMailResponse.getData() == null || "ADDED".equalsIgnoreCase(sendMailResponse.getData().getMessageStatus())) {
|
throw new SendEmailFailException();
|
}
|
}
|
catch (SendEmailFailException e) {
|
throw e;
|
}
|
catch (Exception e) {
|
log.debug("send email failed!", e);
|
throw new SendEmailFailException();
|
}
|
}
|
}
|