diff --git a/austin-common/pom.xml b/austin-common/pom.xml
index 0dadbfd..ab589d0 100644
--- a/austin-common/pom.xml
+++ b/austin-common/pom.xml
@@ -5,11 +5,16 @@
austin
com.java3y.austin
- 0.0.2
+ 0.0.1-SNAPSHOT
4.0.0
austin-common
-
+
+
+ org.projectlombok
+ lombok
+
+
\ No newline at end of file
diff --git a/austin-common/src/main/java/com/java3y/austin/pojo/SmsParam.java b/austin-common/src/main/java/com/java3y/austin/pojo/SmsParam.java
new file mode 100644
index 0000000..0b19f07
--- /dev/null
+++ b/austin-common/src/main/java/com/java3y/austin/pojo/SmsParam.java
@@ -0,0 +1,26 @@
+package com.java3y.austin.pojo;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Set;
+
+/**
+ * @author 3y
+ * @date 2021/11/4
+ * 发送短信参数
+ */
+@Data
+@Builder
+public class SmsParam {
+
+ /**
+ * 需要发送的手机号
+ */
+ private Set phones;
+
+ /**
+ * 发送文案
+ */
+ private String content;
+}
diff --git a/austin-handler/pom.xml b/austin-handler/pom.xml
index 5dc38e5..f059091 100644
--- a/austin-handler/pom.xml
+++ b/austin-handler/pom.xml
@@ -5,17 +5,34 @@
austin
com.java3y.austin
- 0.0.2
+ 0.0.1-SNAPSHOT
4.0.0
austin-handler
-
+
+
+ com.java3y.austin
+ austin-common
+ 0.0.1-SNAPSHOT
+
+
+ com.java3y.austin
+ austin-support
+ 0.0.1-SNAPSHOT
+
+
- org.springframework.boot
- spring-boot-starter
+ com.tencentcloudapi
+ tencentcloud-sdk-java
+
+
+ com.squareup.okio
+ okio
+
+
\ No newline at end of file
diff --git a/austin-handler/src/main/java/com/java3y/austin/script/TencentSmsScript.java b/austin-handler/src/main/java/com/java3y/austin/script/TencentSmsScript.java
new file mode 100644
index 0000000..4703a0d
--- /dev/null
+++ b/austin-handler/src/main/java/com/java3y/austin/script/TencentSmsScript.java
@@ -0,0 +1,82 @@
+package com.java3y.austin.script;
+
+import cn.hutool.core.util.IdUtil;
+import com.alibaba.fastjson.JSON;
+import com.google.common.base.Throwables;
+import com.java3y.austin.pojo.SmsParam;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+import com.tencentcloudapi.common.profile.ClientProfile;
+import com.tencentcloudapi.common.profile.HttpProfile;
+import com.tencentcloudapi.sms.v20210111.SmsClient;
+import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
+import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author 3y
+ * @date 2021/11/6
+ * 1. 发送短信接入文档:https://cloud.tencent.com/document/api/382/55981
+ * 2. 推荐直接使用SDK
+ * 3. 推荐使用API Explorer 生成代码
+ */
+@Service
+@Slf4j
+public class TencentSmsScript {
+
+ /**
+ * api相关
+ */
+ private static final String URL = "sms.tencentcloudapi.com";
+ private static final String REGION = "ap-guangzhou";
+
+ /**
+ * 账号相关 TODO
+ */
+ private final static String SECRET_ID = "//";
+ private final static String SECRET_KEY = "//";
+ private static final String SMS_SDK_APP_ID = "//";
+ private static final String TEMPLATE_ID = "//";
+ private static final String SIGN_NAME = "//";
+
+ public String send(SmsParam smsParam) {
+ try {
+
+ /**
+ * 初始化 client
+ */
+ Credential cred = new Credential(SECRET_ID, SECRET_KEY);
+ HttpProfile httpProfile = new HttpProfile();
+ httpProfile.setEndpoint(URL);
+ ClientProfile clientProfile = new ClientProfile();
+ clientProfile.setHttpProfile(httpProfile);
+ SmsClient client = new SmsClient(cred, REGION, clientProfile);
+
+ /**
+ * 组装发送短信参数
+ */
+ SendSmsRequest req = new SendSmsRequest();
+ String[] phoneNumberSet1 = smsParam.getPhones().toArray(new String[smsParam.getPhones().size() - 1]);
+ req.setPhoneNumberSet(phoneNumberSet1);
+ req.setSmsSdkAppId(SMS_SDK_APP_ID);
+ req.setSignName(SIGN_NAME);
+ req.setTemplateId(TEMPLATE_ID);
+ String[] templateParamSet1 = {smsParam.getContent()};
+ req.setTemplateParamSet(templateParamSet1);
+ req.setSessionContext(IdUtil.fastSimpleUUID());
+
+ /**
+ * 请求,返回结果
+ */
+ SendSmsResponse resp = client.SendSms(req);
+ return SendSmsResponse.toJsonString(resp);
+
+ } catch (TencentCloudSDKException e) {
+ log.error("send tencent sms fail!{},params:{}",
+ Throwables.getStackTraceAsString(e), JSON.toJSONString(smsParam));
+ return null;
+ }
+
+ }
+}
diff --git a/austin-service-api-impl/pom.xml b/austin-service-api-impl/pom.xml
index f091e45..6c14755 100644
--- a/austin-service-api-impl/pom.xml
+++ b/austin-service-api-impl/pom.xml
@@ -5,7 +5,7 @@
austin
com.java3y.austin
- 0.0.2
+ 0.0.1-SNAPSHOT
4.0.0
diff --git a/austin-service-api/pom.xml b/austin-service-api/pom.xml
index 8d2d001..d874b76 100644
--- a/austin-service-api/pom.xml
+++ b/austin-service-api/pom.xml
@@ -5,7 +5,7 @@
austin
com.java3y.austin
- 0.0.2
+ 0.0.1-SNAPSHOT
4.0.0
diff --git a/austin-support/pom.xml b/austin-support/pom.xml
index 93bbfaa..0363790 100644
--- a/austin-support/pom.xml
+++ b/austin-support/pom.xml
@@ -5,18 +5,52 @@
austin
com.java3y.austin
- 0.0.2
+ 0.0.1-SNAPSHOT
4.0.0
austin-support
-
+
+
+ org.springframework.boot
+ spring-boot-starter
+
mysql
mysql-connector-java
+
+ com.squareup.okhttp3
+ okhttp
+
+
+ org.projectlombok
+ lombok
+
+
+ com.google.guava
+ guava
+
+
+ cn.hutool
+ hutool-all
+
+
+
+ com.alibaba
+ fastjson
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
\ No newline at end of file
diff --git a/austin-support/src/main/java/com/java3y/austin/config/OkHttpConfiguration.java b/austin-support/src/main/java/com/java3y/austin/config/OkHttpConfiguration.java
new file mode 100644
index 0000000..ddc9567
--- /dev/null
+++ b/austin-support/src/main/java/com/java3y/austin/config/OkHttpConfiguration.java
@@ -0,0 +1,87 @@
+package com.java3y.austin.config;
+
+
+import okhttp3.ConnectionPool;
+import okhttp3.OkHttpClient;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.net.ssl.*;
+import java.security.*;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * @author 3y
+ * @date 2021/11/4
+ */
+@Configuration
+public class OkHttpConfiguration {
+
+ @Value("${ok.http.connect-timeout}")
+ private Integer connectTimeout;
+
+ @Value("${ok.http.read-timeout}")
+ private Integer readTimeout;
+
+ @Value("${ok.http.write-timeout}")
+ private Integer writeTimeout;
+
+ @Value("${ok.http.max-idle-connections}")
+ private Integer maxIdleConnections;
+
+ @Value("${ok.http.keep-alive-duration}")
+ private Long keepAliveDuration;
+
+ @Bean
+ public OkHttpClient okHttpClient() {
+ return new OkHttpClient.Builder()
+ .sslSocketFactory(sslSocketFactory(), x509TrustManager())
+ .retryOnConnectionFailure(false)
+ .connectionPool(pool())
+ .connectTimeout(connectTimeout, TimeUnit.SECONDS)
+ .readTimeout(readTimeout, TimeUnit.SECONDS)
+ .writeTimeout(writeTimeout,TimeUnit.SECONDS)
+ .hostnameVerifier((hostname, session) -> true)
+ .build();
+ }
+
+ @Bean
+ public X509TrustManager x509TrustManager() {
+ return new X509TrustManager() {
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ }
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType)
+ throws CertificateException {
+ }
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[0];
+ }
+ };
+ }
+
+ @Bean
+ public SSLSocketFactory sslSocketFactory() {
+ try {
+ // 信任任何链接
+ SSLContext sslContext = SSLContext.getInstance("TLS");
+ sslContext.init(null, new TrustManager[]{x509TrustManager()}, new SecureRandom());
+ return sslContext.getSocketFactory();
+ } catch (NoSuchAlgorithmException | KeyManagementException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @Bean
+ public ConnectionPool pool() {
+ return new ConnectionPool(maxIdleConnections, keepAliveDuration, TimeUnit.SECONDS);
+ }
+}
diff --git a/austin-support/src/main/java/com/java3y/austin/utils/OkHttpUtils.java b/austin-support/src/main/java/com/java3y/austin/utils/OkHttpUtils.java
new file mode 100644
index 0000000..8befb83
--- /dev/null
+++ b/austin-support/src/main/java/com/java3y/austin/utils/OkHttpUtils.java
@@ -0,0 +1,195 @@
+package com.java3y.austin.utils;
+
+import cn.hutool.core.map.MapUtil;
+import com.google.common.base.Throwables;
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.*;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+/**
+ * @author 3y
+ * @date 2021/11/4
+ */
+@Slf4j
+@Component
+public class OkHttpUtils {
+ private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
+ private static final MediaType XML = MediaType.parse("application/xml; charset=utf-8");
+
+ @Autowired
+ private OkHttpClient okHttpClient;
+
+ /**
+ * get 请求
+ *
+ * @param url 请求url地址
+ * @return string
+ */
+ public String doGet(String url) {
+ return doGet(url, null, null);
+ }
+
+
+ /**
+ * get 请求
+ *
+ * @param url 请求url地址
+ * @param params 请求参数 map
+ * @return string
+ */
+ public String doGet(String url, Map params) {
+ return doGet(url, params, null);
+ }
+
+ /**
+ * get 请求
+ *
+ * @param url 请求url地址
+ * @param headers 请求头字段 {k1, v1 k2, v2, ...}
+ * @return string
+ */
+ public String doGetWithHeaders(String url, Map headers) {
+ return doGet(url, null, headers);
+ }
+
+
+ /**
+ * get 请求
+ *
+ * @param url 请求url地址
+ * @param params 请求参数 map
+ * @param headers 请求头字段 {k1, v1 k2, v2, ...}
+ * @return string
+ */
+ public String doGet(String url, Map params, Map headers) {
+ StringBuilder sb = new StringBuilder(url);
+ if (params != null && params.keySet().size() > 0) {
+ boolean firstFlag = true;
+ for (String key : params.keySet()) {
+ if (firstFlag) {
+ sb.append("?").append(key).append("=").append(params.get(key));
+ firstFlag = false;
+ } else {
+ sb.append("&").append(key).append("=").append(params.get(key));
+ }
+ }
+ }
+ Request.Builder builder = getBuilderWithHeaders(headers);
+ Request request = builder.url(sb.toString()).build();
+
+ log.info("do get request and url[{}]", sb.toString());
+ return execute(request);
+ }
+
+ /**
+ * post 请求
+ *
+ * @param url 请求url地址
+ * @param params 请求参数 map
+ * @param headers 请求头字段 {k1, v1 k2, v2, ...}
+ * @return string
+ */
+ public String doPost(String url, Map params, Map headers) {
+ FormBody.Builder formBuilder = new FormBody.Builder();
+
+ if (params != null && params.keySet().size() > 0) {
+ for (String key : params.keySet()) {
+ formBuilder.add(key, params.get(key));
+ }
+ }
+ Request.Builder builder = getBuilderWithHeaders(headers);
+
+ Request request = builder.url(url).post(formBuilder.build()).build();
+ log.info("do post request and url[{}]", url);
+
+ return execute(request);
+ }
+
+
+ /**
+ * 获取request Builder
+ *
+ * @param headers 请求头字段 {k1, v1 k2, v2, ...}
+ * @return
+ */
+ private Request.Builder getBuilderWithHeaders(Map headers) {
+ Request.Builder builder = new Request.Builder();
+ if (!MapUtil.isEmpty(headers)) {
+ for (Map.Entry entry : headers.entrySet()) {
+ builder.addHeader(entry.getKey(), entry.getValue());
+ }
+ }
+ return builder;
+ }
+
+
+ /**
+ * post 请求, 请求数据为 json 的字符串
+ *
+ * @param url 请求url地址
+ * @param json 请求数据, json 字符串
+ * @return string
+ */
+ public String doPostJson(String url, String json) {
+ log.info("do post request and url[{}]", url);
+ return executePost(url, json, JSON, null);
+ }
+
+ /**
+ * post 请求, 请求数据为 json 的字符串
+ *
+ * @param url 请求url地址
+ * @param json 请求数据, json 字符串
+ * @param headers 请求头字段 {k1, v1 k2, v2, ...}
+ * @return string
+ */
+ public String doPostJsonWithHeaders(String url, String json, Map headers) {
+ log.info("do post request and url[{}]", url);
+ return executePost(url, json, JSON, headers);
+ }
+
+ /**
+ * post 请求, 请求数据为 xml 的字符串
+ *
+ * @param url 请求url地址
+ * @param xml 请求数据, xml 字符串
+ * @return string
+ */
+ public String doPostXml(String url, String xml) {
+ log.info("do post request and url[{}]", url);
+ return executePost(url, xml, XML, null);
+ }
+
+
+ private String executePost(String url, String data, MediaType contentType, Map headers) {
+ RequestBody requestBody = RequestBody.create(data.getBytes(StandardCharsets.UTF_8), contentType);
+ Request.Builder builder = getBuilderWithHeaders(headers);
+ Request request = builder.url(url).post(requestBody).build();
+
+ return execute(request);
+ }
+
+ private String execute(Request request) {
+ Response response = null;
+ try {
+ response = okHttpClient.newCall(request).execute();
+ if (response.isSuccessful()) {
+ return response.body().string();
+ }
+ } catch (Exception e) {
+ log.error(Throwables.getStackTraceAsString(e));
+ } finally {
+ if (response != null) {
+ response.close();
+ }
+ }
+ return "";
+ }
+
+}
+
diff --git a/austin-web/pom.xml b/austin-web/pom.xml
index 196640b..f7e6db8 100644
--- a/austin-web/pom.xml
+++ b/austin-web/pom.xml
@@ -5,38 +5,38 @@
austin
com.java3y.austin
- 0.0.2
+ 0.0.1-SNAPSHOT
4.0.0
austin-web
-
- org.springframework.boot
- spring-boot-starter
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.projectlombok
- lombok
-
org.springframework.boot
spring-boot-starter-web
- cn.hutool
- hutool-all
-
-
- com.google.guava
- guava
+ com.java3y.austin
+ austin-handler
+ 0.0.1-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
\ No newline at end of file
diff --git a/austin-web/src/main/java/com/java3y/austin/AustinApplication.java b/austin-web/src/main/java/com/java3y/austin/AustinApplication.java
index 58e43ba..cbee8e3 100644
--- a/austin-web/src/main/java/com/java3y/austin/AustinApplication.java
+++ b/austin-web/src/main/java/com/java3y/austin/AustinApplication.java
@@ -1,34 +1,37 @@
package com.java3y.austin;
-import cn.hutool.core.util.ObjectUtil;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.java3y.austin.pojo.SmsParam;
+import com.java3y.austin.script.TencentSmsScript;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+import java.util.Arrays;
+import java.util.HashSet;
+
@SpringBootApplication
@RestController
public class AustinApplication {
- private final Logger logger = LoggerFactory.getLogger(AustinApplication.class);
-
+ @Autowired
+ private TencentSmsScript tencentSmsScript;
public static void main(String[] args) {
SpringApplication.run(AustinApplication.class, args);
}
@GetMapping("/hello")
- public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
+ public String hello() {
+
+ SmsParam smsParam = SmsParam.builder()
+ .phones(new HashSet<>(Arrays.asList("//TODO PHONE ")))
+ .content("3333")
+ .build();
+
+ return tencentSmsScript.send(smsParam);
- logger.error("error logback for austin");
- logger.info("info logback for austin");
- return String.format("Hello %s!", name);
}
}
diff --git a/austin-web/src/main/resources/application.properties b/austin-web/src/main/resources/application.properties
new file mode 100644
index 0000000..82ec95a
--- /dev/null
+++ b/austin-web/src/main/resources/application.properties
@@ -0,0 +1,6 @@
+# ok http配置信息 TODO
+ok.http.connect-timeout=30
+ok.http.read-timeout=30
+ok.http.write-timeout=30
+ok.http.max-idle-connections=200
+ok.http.keep-alive-duration=300
diff --git a/pom.xml b/pom.xml
index 522a1da..990dc0a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
com.java3y.austin
austin
- 0.0.2
+ 0.0.1-SNAPSHOT
austin
austin-message
@@ -37,6 +37,7 @@
mysql
mysql-connector-java
5.1.35
+
@@ -53,30 +54,29 @@
31.0.1-jre
-
+
- org.apache.commons
- commons-collections4
- 4.4
+ com.squareup.okhttp3
+ okhttp
+ 4.9.2
+
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.78
+
+
+
+
+ com.tencentcloudapi
+ tencentcloud-sdk-java
+ 3.1.390
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
- org.projectlombok
- lombok
-
-
-
-
-
-
+