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 extends Template> 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 notifier = notifierManager.getNotifier(DefaultNotifyType.sms, "123");
+ notifier.send(templateManager.getTemplate(DefaultNotifyType.sms, "124"), new HashMap<>());
+ }
+}
diff --git a/pom.xml b/pom.xml
index 83dd1f8..3ca1eb2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,6 +11,7 @@
notify-core
notify-email
+ notify-sms