package com.pollex.pam.service;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.pollex.pam.config.ApplicationProperties;
|
import com.pollex.pam.config.ApplicationProperties.SMS;
|
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.http.ResponseEntity;
|
import org.springframework.stereotype.Service;
|
import org.thymeleaf.spring5.SpringTemplateEngine;
|
|
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;
|
|
public SendSMSResponse 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(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!");
|
}
|
}
|
|
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);
|
}
|
|
public String sendMsgByEmail(SendMailRequest sendMailRequest) throws SendEmailFailException{
|
try {
|
ResponseEntity<String> responseEntity =
|
HttpRequestUtil.postWithJson( applicationProperties.getEmail().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!");
|
}
|
}
|
}
|