From 6fa4bba623713c396432ba8b863846883d6a1906 Mon Sep 17 00:00:00 2001 From: wayne <wayne8692wayne8692@gmail.com> Date: 星期三, 26 一月 2022 10:52:23 +0800 Subject: [PATCH] Merge branch 'pollex-dev' into sit --- pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java | 205 ++++++++++++++++++++------------------------------- 1 files changed, 81 insertions(+), 124 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 eb758f6..a5be71e 100644 --- a/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java +++ b/pamapi/src/main/java/com/pollex/pam/service/SendMsgService.java @@ -2,31 +2,30 @@ 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.domain.Appointment; +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 io.jsonwebtoken.lang.Assert; 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.springframework.util.StringUtils; -import org.thymeleaf.context.Context; 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.Base64; +import java.util.*; import java.util.Base64.Encoder; -import java.util.Collections; -import java.util.List; -import java.util.UUID; @Service public class SendMsgService { @@ -34,7 +33,7 @@ private static final Logger log = LoggerFactory.getLogger(SendMsgService.class); private final Encoder encoder = Base64.getEncoder(); - private static final String EMAIL_SUBJECT = "靽���像�蝟餌絞�嚗���"; + private static final String SEND_SMS_SUCCESS_CODE = "1"; @Autowired ApplicationProperties applicationProperties; @@ -45,85 +44,19 @@ @Autowired SpringTemplateEngine springTemplateEngine; - public void sendAppointmentNotify(Appointment appointment) { - Assert.notNull(appointment); + @Autowired + Environment environment; - log.debug("is need sending notify msg = {}", applicationProperties.isSendNotifyMsg()); - if(applicationProperties.isSendNotifyMsg()) { - log.debug("sending appointment notify, appointmentId = {}", appointment.getId()); - sendAppointmentNotifyBySMS(appointment); - sendAppointmentNotifyByEmail(appointment); - - // todo ��蝣箄�������瘙蝙�html mail - // sendAppointmentNotifyByHtmlEmail(appointment); - } - } - - private void sendAppointmentNotifyBySMS(Appointment appointment) throws SendSMSFailException { - String msg = getAppointmentNotifyWording(appointment); - String consultantMobile = consultantRepository.findOneByAgentNo(appointment.getAgentNo()).get().getPhoneNumber(); - - try { - sendMsgBySMS(consultantMobile, msg); - } catch (SendSMSFailException e) { - log.debug("send sms failed, appointment Id = {}", appointment.getId(), e); - } - } - - private void sendAppointmentNotifyByEmail(Appointment appointment) { - // todo ��敺靽�頂蝯勗�辣靽∠拳 (銝行�閮剖��葉) - String senderEmail = applicationProperties.getEmail().getSenderEmail(); - String consultantEmail = consultantRepository.findOneByAgentNo(appointment.getAgentNo()).get().getEmail(); - String content = getAppointmentNotifyWording(appointment); - - try { - sendMsgByEmail(senderEmail, consultantEmail, EMAIL_SUBJECT, content, false); - } catch (SendEmailFailException e) { - log.debug("send email failed, appointment Id = {}", appointment.getId(), e); - } - } - - private void sendAppointmentNotifyByHtmlEmail(Appointment appointment) { - // todo ��敺靽�頂蝯勗�辣靽∠拳 (銝行�閮剖��葉) - String senderEmail = applicationProperties.getEmail().getSenderEmail(); - String consultantEmail = consultantRepository.findOneByAgentNo(appointment.getAgentNo()).get().getEmail(); - String customerMobile = appointment.getPhone(); - String normalContent; - - if(StringUtils.hasText(customerMobile)) { - normalContent = "閬芣��“��憟踝����蝑�靽���像������嚗府摰X����Ⅳ�" + customerMobile + "\n"; - } - else { - normalContent = "閬芣��“��憟踝����蝑�靽���像������\n"; - } - - Context context = new Context(); - context.setVariable("content", normalContent); - context.setVariable("urlHint", getAppointmentDetailUrl(appointment.getId())); - String content = springTemplateEngine.process("mail/appointmentNotifyEmail", context); - - try { - sendMsgByEmail(senderEmail, consultantEmail, EMAIL_SUBJECT, content, true); - } catch (SendEmailFailException e) { - log.debug("send email failed, appointment Id = {}", appointment.getId(), e); - } - } - - private String getAppointmentNotifyWording(Appointment appointment) { - String normalContent; - if(StringUtils.hasText(appointment.getPhone())) { - normalContent = "閬芣��“��憟踝����蝑�靽���像������嚗府摰X����Ⅳ�" + appointment.getPhone() + "\n"; - } - else { - normalContent = "閬芣��“��憟踝����蝑�靽���像������\n"; - } - - String urlContent = "暺�雯��嚗�" + getAppointmentDetailUrl(appointment.getId()) + " �����像������"; - return normalContent + urlContent; - } + @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()); @@ -131,7 +64,7 @@ sendSMSRequest.setSender(smsProperties.getSender()); sendSMSRequest.setMsgTypeSet(smsProperties.getSmsType()); sendSMSRequest.setSendTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:00"))); - sendSMSRequest.setSubject(""); + sendSMSRequest.setSubject(encoder.encodeToString(smsProperties.getSubject().getBytes(StandardCharsets.UTF_8))); sendSMSRequest.setActivityId(""); SMSDetail smsDetail = new SMSDetail(); @@ -142,36 +75,38 @@ 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(); - // todo ����閬�����隤方������葫�� - } - catch (Exception e) { - log.debug("send sms failed!", e); - throw new SendSMSFailException(); + } 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 sendMsgByHtmlTestTemplateEmail(String from, String to) { - Context context = new Context(); - context.setVariable("content", "閬芣��“��憟踝����蝑�靽���像������\n"); - context.setVariable("urlHint", getAppointmentDetailUrl(0L)); +// private SendSMSResponse getMockSMSResponse() { +// SendSMSResponse mock = new SendSMSResponse(); +// mock.set +// return null; +// } - String content = springTemplateEngine.process("mail/appointmentNotifyEmail", context); - return sendMsgByEmail(from, to, EMAIL_SUBJECT, content, true); + 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 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 toAddress, String subject, String content, boolean htmlFormat, List<String> toCCAddress, + List<String> attachments) throws SendEmailFailException { + String fromAddress = applicationProperties.getEmail().getSenderEmail(); - 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); @@ -185,31 +120,53 @@ 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); + public String sendMsgByEmail(SendMailRequest sendMailRequest) throws SendEmailFailException{ + final Email emailProperties = applicationProperties.getEmail(); - SendMailResponse sendMailResponse = new ObjectMapper().readValue(responseEntity.getBody(), SendMailResponse.class); - log.debug("sendMailResponse = {}", sendMailResponse); + if(!emailProperties.isSendNotifyMsg()) { + return null; + } -// if(sendMailResponse == null || sendMailResponse.getData() == null || "ADDED".equalsIgnoreCase(sendMailResponse.getData().getMessageStatus())) { -// throw new SendEmailFailException(); -// } + if(emailProperties.getMethod() == SendEmailMsgMethod.POLLEX_GMAIL) { + return sendMsgByPollexGmail(sendMailRequest); + } + else if(emailProperties.getMethod() == SendEmailMsgMethod.PAM_EMAIL_SERVICE) { + return sendMsgByPamEmailService(sendMailRequest); + } - return responseEntity.getBody(); - } - catch (SendEmailFailException e) { - throw e; - } - catch (Exception e) { - log.debug("send email failed!", e); - throw new SendEmailFailException(); - } + return null; } - private String getAppointmentDetailUrl(Long appointmentId) { - return applicationProperties.getFrontEndDomain() + "/myAppointmentList/contactedList?appointmentId=" + appointmentId; + 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