MessageSenderPluginContext.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package com.ym.mec.thirdparty.message;
  2. import java.io.IOException;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import com.ym.mec.thirdparty.entity.SysEmail;
  6. import com.ym.mec.thirdparty.message.provider.*;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.springframework.beans.BeansException;
  9. import org.springframework.context.ApplicationContext;
  10. import org.springframework.context.ApplicationContextAware;
  11. import org.springframework.stereotype.Component;
  12. import com.ym.mec.thirdparty.exception.ThirdpartyException;
  13. @Component
  14. public class MessageSenderPluginContext implements ApplicationContextAware {
  15. public SysEmail sysEmail = new SysEmail();
  16. public enum MessageSender {
  17. JIGUANG("PUSH"), MOXINGTONG("SMS"), SHIYUAN("SMS"), YIMEI("SMS"), AWSMS("SMS"), EMAIL("EMAIL");
  18. /**
  19. * 发送模式(SMS,PUSH,EMAIL)
  20. */
  21. private String sendMode;
  22. private MessageSender(String sendMode) {
  23. this.sendMode = sendMode;
  24. }
  25. public String getSendMode() {
  26. return sendMode;
  27. }
  28. }
  29. private MessageSenderPlugin messageSenderPlugin;
  30. private ApplicationContext applicationContext;
  31. private final Map<String, String> mapper = new HashMap<String, String>() {
  32. private static final long serialVersionUID = -3964872523891264522L;
  33. {
  34. put(StringUtils.lowerCase(JiguangPushPlugin.getName()), StringUtils.uncapitalize(JiguangPushPlugin.class.getSimpleName()));
  35. put(StringUtils.lowerCase(MOxintongSMSPlugin.getName()), StringUtils.uncapitalize(MOxintongSMSPlugin.class.getSimpleName()));
  36. put(StringUtils.lowerCase(ShiyuanSMSPlugin.getName()), StringUtils.uncapitalize(ShiyuanSMSPlugin.class.getSimpleName()));
  37. put(StringUtils.lowerCase(YimeiSmsPlugin.getName()), StringUtils.uncapitalize(YimeiSmsPlugin.class.getSimpleName()));
  38. put(StringUtils.lowerCase(AwSmsPlugin.getName()), StringUtils.uncapitalize(AwSmsPlugin.class.getSimpleName()));
  39. put(StringUtils.lowerCase(CommEmailPlugin.getName()), StringUtils.uncapitalize(CommEmailPlugin.class.getSimpleName()));
  40. }
  41. };
  42. /**
  43. * 发送消息至目的地
  44. * @param messageSender 消息发送方
  45. * @param subject 消息主题
  46. * @param content 消息内容
  47. * @param receiver 收件人
  48. * @param url 链接地址
  49. * @return 是否发送成功
  50. * @throws IOException
  51. */
  52. public boolean send(MessageSender messageSender, String subject, String content, String receiver, String url, String jpushType,String sound,String channelId) throws Exception {
  53. messageSenderPlugin = getMessageSenderPlugin(messageSender);
  54. return messageSenderPlugin.send(subject, content, receiver, url, jpushType,sound,channelId);
  55. }
  56. /**
  57. * 批量发送消息至目的地
  58. * @param messageSender 消息发送方
  59. * @param subject 消息主题
  60. * @param content 消息内容
  61. * @param receivers 收件人列表
  62. * @param url 链接地址
  63. * @return 是否发送成功
  64. * @throws IOException
  65. */
  66. public boolean batchSend(MessageSender messageSender, String subject, String content, String[] receivers, String url, String jpushType,String sound,String channelId) throws Exception {
  67. messageSenderPlugin = getMessageSenderPlugin(messageSender);
  68. return messageSenderPlugin.batchSend(subject, content, receivers, url, jpushType,sound,channelId);
  69. }
  70. @Override
  71. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  72. this.applicationContext = applicationContext;
  73. }
  74. private MessageSenderPlugin getMessageSenderPlugin(MessageSender messageSender) {
  75. String beanId = mapper.get(StringUtils.lowerCase(messageSender.name()));
  76. if (StringUtils.isBlank(beanId)) {
  77. throw new ThirdpartyException("消息提供方:{}不存在", beanId);
  78. }
  79. MessageSenderPlugin messageSenderPlugin = applicationContext.getBean(beanId, MessageSenderPlugin.class);
  80. injectEmailAttribute(messageSenderPlugin);
  81. return messageSenderPlugin;
  82. }
  83. private void injectEmailAttribute(MessageSenderPlugin messageSenderPlugin) {
  84. if (messageSenderPlugin.getClass() == CommEmailPlugin.class) {
  85. CommEmailPlugin commEmailPlugin = (CommEmailPlugin) messageSenderPlugin;
  86. commEmailPlugin.setHostName(sysEmail.getHostName());
  87. commEmailPlugin.setSmtpPort(sysEmail.getSmtpPort());
  88. commEmailPlugin.setUserName(sysEmail.getUserName());
  89. commEmailPlugin.setPassword(sysEmail.getPassword());
  90. commEmailPlugin.setFrom(sysEmail.getFrom());
  91. commEmailPlugin.setFromName(sysEmail.getFromName());
  92. }
  93. }
  94. }