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!");
|
}
|
}
|
}
|