From 0b6c8d56b38b2e00f52e31b0aa045ef5d3e06e06 Mon Sep 17 00:00:00 2001 From: xueye Date: Fri, 2 Jul 2021 15:00:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=94=B5=E4=BF=A1?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=80=9A=E7=9F=A5=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cicdi/notify/DefaultNotifyType.java | 1 + notify-sms/pom.xml | 43 ++++++++ .../com/cicdi/notify/sms/SmsProvider.java | 28 +++++ .../com/cicdi/notify/sms/SmsTemplate.java | 51 +++++++++ .../sms/telecom/TelecomSmsNotifier.java | 103 ++++++++++++++++++ .../telecom/TelecomSmsNotifierProvider.java | 42 +++++++ .../sms/telecom/TelecomSmsTemplate.java | 34 ++++++ .../com/cicdi/notify/sms/TelecomSmsTest.java | 70 ++++++++++++ pom.xml | 1 + 9 files changed, 373 insertions(+) create mode 100644 notify-sms/pom.xml create mode 100644 notify-sms/src/main/java/com/cicdi/notify/sms/SmsProvider.java create mode 100644 notify-sms/src/main/java/com/cicdi/notify/sms/SmsTemplate.java create mode 100644 notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsNotifier.java create mode 100644 notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsNotifierProvider.java create mode 100644 notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsTemplate.java create mode 100644 notify-sms/src/test/java/com/cicdi/notify/sms/TelecomSmsTest.java diff --git a/notify-core/src/main/java/com/cicdi/notify/DefaultNotifyType.java b/notify-core/src/main/java/com/cicdi/notify/DefaultNotifyType.java index 4f630d1..79132ee 100644 --- a/notify-core/src/main/java/com/cicdi/notify/DefaultNotifyType.java +++ b/notify-core/src/main/java/com/cicdi/notify/DefaultNotifyType.java @@ -8,6 +8,7 @@ package com.cicdi.notify; public enum DefaultNotifyType implements NotifyType { email("邮件"), + sms("短信") ; private final String name; diff --git a/notify-sms/pom.xml b/notify-sms/pom.xml new file mode 100644 index 0000000..f820ae5 --- /dev/null +++ b/notify-sms/pom.xml @@ -0,0 +1,43 @@ + + + + notify + com.cicdi + 1.0-SNAPSHOT + + 4.0.0 + + notify-sms + + + 8 + 8 + + + + + com.cicdi + notify-core + 1.0-SNAPSHOT + + + com.alibaba + fastjson + 1.2.73 + compile + + + com.aliyun + aliyun-java-sdk-core + 4.5.2 + + + junit + junit + 4.12 + test + + + \ No newline at end of file diff --git a/notify-sms/src/main/java/com/cicdi/notify/sms/SmsProvider.java b/notify-sms/src/main/java/com/cicdi/notify/sms/SmsProvider.java new file mode 100644 index 0000000..e4a7e50 --- /dev/null +++ b/notify-sms/src/main/java/com/cicdi/notify/sms/SmsProvider.java @@ -0,0 +1,28 @@ +package com.cicdi.notify.sms; + +import com.cicdi.notify.Provider; + +/** + * @author xueye + */ +public enum SmsProvider implements Provider { + + aliyunSms("阿里云短信服务"), + telecom("电信139短信服务"); + + private final String name; + + SmsProvider(String name) { + this.name = name; + } + + @Override + public String getId() { + return name(); + } + + @Override + public String getName() { + return name; + } +} diff --git a/notify-sms/src/main/java/com/cicdi/notify/sms/SmsTemplate.java b/notify-sms/src/main/java/com/cicdi/notify/sms/SmsTemplate.java new file mode 100644 index 0000000..5e43f5c --- /dev/null +++ b/notify-sms/src/main/java/com/cicdi/notify/sms/SmsTemplate.java @@ -0,0 +1,51 @@ +package com.cicdi.notify.sms; + +import com.cicdi.notify.template.Template; + +import java.util.List; +import java.util.Map; + +/** + * @author xueye + */ +public class SmsTemplate implements Template { + + /** + * 短信文本 + */ + private String text; + + /** + * 收件人 + */ + private List sendTo; + + public String getTextSms(Map context) { + // TODO 对模板参数进行处理 +// return ExpressionUtils.analytical(text, context, "spel"); + return text; + } + + public String[] getSendTo(Map context) { + // TODO 对收件人参数进行处理 +// return sendTo.stream() +// .map(str -> ExpressionUtils.analytical(str, context, "spel")).toArray(String[]::new); + return sendTo.toArray(new String[0]); + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public List getSendTo() { + return sendTo; + } + + public void setSendTo(List sendTo) { + this.sendTo = sendTo; + } +} diff --git a/notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsNotifier.java b/notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsNotifier.java new file mode 100644 index 0000000..be5233b --- /dev/null +++ b/notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsNotifier.java @@ -0,0 +1,103 @@ +package com.cicdi.notify.sms.telecom; + +import com.cicdi.notify.*; +import com.cicdi.notify.sms.SmsProvider; +import com.cicdi.notify.template.TemplateManager; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Map; +import java.util.Objects; + +/** + * @author xueye + */ +public class TelecomSmsNotifier extends AbstractNotifier { + + private String serviceUrl; + private String userId; + private String password; + + private String notifierId; + + public TelecomSmsNotifier(NotifierProperties properties, TemplateManager templateManager) { + super(templateManager); + Map configuration = properties.getConfiguration(); + this.serviceUrl = (String) Objects.requireNonNull(configuration.get("serviceUrl"), "serviceUrl不能为空"); + this.userId = (String) Objects.requireNonNull(configuration.get("userId"), "userId不能为空"); + this.password = (String) Objects.requireNonNull(configuration.get("password"), "password不能为空"); + this.notifierId = properties.getId(); + } + + @Override + public String getNotifierId() { + return null; + } + + @Override + public NotifyType getType() { + return DefaultNotifyType.sms; + } + + @Override + public Provider getProvider() { + return SmsProvider.telecom; + } + + @Override + public void send(TelecomSmsTemplate template, Map context) { + try { + URL obj = new URL(serviceUrl); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + + //添加请求头 + con.setRequestMethod("POST"); +// con.setRequestProperty("User-Agent", USER_AGENT); + con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); + + String urlParameters = "userId=" + + userId + + "&password=" + + password + + "&content=" + + template.getText() + + "&mobile=" + + template.getMobile(); + + //发送Post请求 + con.setDoOutput(true); + DataOutputStream wr = new DataOutputStream(con.getOutputStream()); + wr.writeBytes(urlParameters); + wr.flush(); + wr.close(); + + int responseCode = con.getResponseCode(); + System.out.println("\nSending 'POST' request to URL : " + serviceUrl); + System.out.println("Post parameters : " + urlParameters); + System.out.println("Response Code : " + responseCode); + + BufferedReader in = new BufferedReader( + new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + //打印结果 + System.out.println(response.toString()); + } catch (Exception e) { + + } + } + + @Override + public void close() { + + } +} diff --git a/notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsNotifierProvider.java b/notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsNotifierProvider.java new file mode 100644 index 0000000..e18ce96 --- /dev/null +++ b/notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsNotifierProvider.java @@ -0,0 +1,42 @@ +package com.cicdi.notify.sms.telecom; + +import com.alibaba.fastjson.JSON; +import com.cicdi.notify.*; +import com.cicdi.notify.sms.SmsProvider; +import com.cicdi.notify.sms.aliyun.AliyunSmsNotifier; +import com.cicdi.notify.template.Template; +import com.cicdi.notify.template.TemplateManager; +import com.cicdi.notify.template.TemplateProperties; +import com.cicdi.notify.template.TemplateProvider; + +/** + * @author xueye + */ +public class TelecomSmsNotifierProvider implements NotifierProvider, TemplateProvider { + + private final TemplateManager templateManager; + + public TelecomSmsNotifierProvider(TemplateManager templateManager) { + this.templateManager = templateManager; + } + + @Override + public NotifyType getType() { + return DefaultNotifyType.sms; + } + + @Override + public Provider getProvider() { + return SmsProvider.telecom; + } + + @Override + public Template createTemplate(TemplateProperties properties) { + return JSON.parseObject(properties.getTemplate(), TelecomSmsTemplate.class); + } + + @Override + public Notifier createNotifier(NotifierProperties properties) { + return new TelecomSmsNotifier(properties, templateManager); + } +} diff --git a/notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsTemplate.java b/notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsTemplate.java new file mode 100644 index 0000000..eb81dc8 --- /dev/null +++ b/notify-sms/src/main/java/com/cicdi/notify/sms/telecom/TelecomSmsTemplate.java @@ -0,0 +1,34 @@ +package com.cicdi.notify.sms.telecom; + +import com.cicdi.notify.template.Template; + +/** + * @author xueye + */ +public class TelecomSmsTemplate implements Template { + /** + * 短信文本 + */ + private String text; + + /** + * 手机号码 + */ + private String mobile; + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } +} diff --git a/notify-sms/src/test/java/com/cicdi/notify/sms/TelecomSmsTest.java b/notify-sms/src/test/java/com/cicdi/notify/sms/TelecomSmsTest.java new file mode 100644 index 0000000..e0f7460 --- /dev/null +++ b/notify-sms/src/test/java/com/cicdi/notify/sms/TelecomSmsTest.java @@ -0,0 +1,70 @@ +package com.cicdi.notify.sms; + +import com.cicdi.notify.*; +import com.cicdi.notify.sms.aliyun.AliyunSmsNotifierProvider; +import com.cicdi.notify.sms.telecom.TelecomSmsNotifierProvider; +import com.cicdi.notify.template.AbstractTemplateManager; +import com.cicdi.notify.template.Template; +import com.cicdi.notify.template.TemplateManager; +import com.cicdi.notify.template.TemplateProperties; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author xueye + */ +public class TelecomSmsTest { + @Test + public void test() { + // 通知器配置管理器 + NotifyConfigManager notifyConfigManager = new NotifyConfigManager() { + @Override + public NotifierProperties getNotifyConfig(NotifyType notifyType, String configId) { + NotifierProperties notifierProperties = new NotifierProperties(); + notifierProperties.setType(DefaultNotifyType.sms.getId()); + notifierProperties.setProvider(SmsProvider.telecom.getId()); + notifierProperties.setId("12"); + + Map config = new HashMap<>(); + config.put("serviceUrl", "http://www.js139.com.cn:8022/hysms/SendMsg"); + config.put("userId", "HYjlzx"); + config.put("password", "5CA45EA4944D2C32567E8DBBDDBD65DD"); + + notifierProperties.setConfiguration(config); + + return notifierProperties; + } + }; + + // 模板管理器 + TemplateManager templateManager = new AbstractTemplateManager() { + @Override + protected TemplateProperties getProperties(NotifyType type, String id) { + TemplateProperties templateProperties = new TemplateProperties(); + templateProperties.setType(DefaultNotifyType.sms.getId()); + templateProperties.setProvider(SmsProvider.telecom.getId()); + + templateProperties.setTemplate("{\"text\":\"Hello\",\"mobile\":\"18605120786\"}"); + + return templateProperties; + } + }; + + NotifierManager notifierManager = new DefaultNotifierManager(notifyConfigManager); + + // register + AliyunSmsNotifierProvider aliyunSmsNotifierProvider = new AliyunSmsNotifierProvider(templateManager); + TelecomSmsNotifierProvider telecomSmsNotifierProvider = new TelecomSmsNotifierProvider(templateManager); + + notifierManager.registerProvider(aliyunSmsNotifierProvider); + notifierManager.registerProvider(telecomSmsNotifierProvider); + + templateManager.register(aliyunSmsNotifierProvider); + templateManager.register(telecomSmsNotifierProvider); + + Notifier