org.springframework
spring-web
diff --git a/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/config/OssAutoConfigure.java b/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/config/OssAutoConfigure.java
index 725bc196540081934675352df8ca7b60dda81211..fdfdcacabb50203aea1ecefefcba9baf4c0dd3a3 100644
--- a/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/config/OssAutoConfigure.java
+++ b/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/config/OssAutoConfigure.java
@@ -1,6 +1,7 @@
package com.central.oss.config;
import com.central.oss.properties.FileServerProperties;
+import com.central.oss.template.AliOssTemplate;
import com.central.oss.template.FdfsTemplate;
import com.central.oss.template.S3Template;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -14,7 +15,7 @@ import org.springframework.context.annotation.Import;
* Github: https://github.com/zlt2000
*/
@EnableConfigurationProperties(FileServerProperties.class)
-@Import({FdfsTemplate.class, S3Template.class})
+@Import({FdfsTemplate.class, S3Template.class, AliOssTemplate.class})
public class OssAutoConfigure {
}
diff --git a/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/properties/ALiOssProperties.java b/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/properties/ALiOssProperties.java
new file mode 100644
index 0000000000000000000000000000000000000000..b2011bc16895bc2b38257cc2625a0bce92d345c6
--- /dev/null
+++ b/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/properties/ALiOssProperties.java
@@ -0,0 +1,36 @@
+package com.central.oss.properties;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * ali oss协议配置
+ *
+ * @author 杨彬鑫
+ * @date 2021/12/13
+ *
+ */
+@Setter
+@Getter
+public class ALiOssProperties {
+ /**
+ * 密钥key
+ */
+ private String accessKey;
+ /**
+ * 密钥密码
+ */
+ private String accessKeySecret;
+ /**
+ * 端点
+ */
+ private String endpoint;
+ /**
+ * bucket名称
+ */
+ private String bucketName;
+ /**
+ * bucket域名
+ */
+ private String bucketHost;
+}
diff --git a/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/properties/FileServerProperties.java b/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/properties/FileServerProperties.java
index ac5a786dcd85ba710e539e01e9ae5d0a1b7e9fdf..e36b543c1578028e4f1593e13e72151b308df377 100644
--- a/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/properties/FileServerProperties.java
+++ b/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/properties/FileServerProperties.java
@@ -18,6 +18,7 @@ public class FileServerProperties {
public static final String PREFIX = "zlt.file-server";
public static final String TYPE_FDFS = "fastdfs";
public static final String TYPE_S3 = "s3";
+ public static final String TYPE_ALI_OSS = "alioss";
/**
* 为以下2个值,指定不同的自动化配置
@@ -35,4 +36,9 @@ public class FileServerProperties {
* fastDFS配置
*/
FdfsProperties fdfs = new FdfsProperties();
+
+ /**
+ * alibaba oss配置
+ */
+ ALiOssProperties aliOss = new ALiOssProperties();
}
diff --git a/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/template/AliOssTemplate.java b/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/template/AliOssTemplate.java
new file mode 100644
index 0000000000000000000000000000000000000000..e4a0774bb1c55d379082af1d12ce7329c5ebac75
--- /dev/null
+++ b/zlt-commons/zlt-oss-spring-boot-starter/src/main/java/com/central/oss/template/AliOssTemplate.java
@@ -0,0 +1,76 @@
+package com.central.oss.template;
+
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.common.comm.ResponseMessage;
+import com.aliyun.oss.model.PutObjectResult;
+import com.central.oss.model.ObjectInfo;
+import com.central.oss.properties.FileServerProperties;
+import lombok.SneakyThrows;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.UUID;
+
+/**
+ * 阿里oss,文件上传
+ *
+ * @author 杨彬鑫
+ */
+@ConditionalOnClass(OSS.class)
+@ConditionalOnProperty(prefix = FileServerProperties.PREFIX, name = "type", havingValue = FileServerProperties.TYPE_ALI_OSS)
+public class AliOssTemplate {
+ private static final String PATH_SPLIT = "/";
+
+ @Resource
+ private FileServerProperties fileProperties;
+
+ /**
+ * 上传文件
+ *
+ * @param file 文件
+ * @param folder 子目录
+ * @return
+ * @throws IOException
+ */
+ @SneakyThrows
+ public ObjectInfo upload(MultipartFile file, String folder) {
+ // 文件名
+ String fileName = file.getOriginalFilename();
+
+ //获取文件的后缀名 .jpg
+ String newFileName = UUID.randomUUID().toString();
+ String suffix = fileName.substring(fileName.lastIndexOf("."));
+ String filePath = folder + "/" + newFileName + suffix;
+
+ OSS ossClient = new OSSClientBuilder().build(fileProperties.getAliOss().getEndpoint(), fileProperties.getAliOss().getAccessKey(), fileProperties.getAliOss().getAccessKeySecret());
+
+ // 桶名称,地址
+ PutObjectResult putObjectResult = ossClient.putObject(fileProperties.getAliOss().getBucketName(), filePath, file.getInputStream());
+ ResponseMessage response = putObjectResult.getResponse();
+
+ ossClient.shutdown();
+
+ ObjectInfo info = new ObjectInfo();
+ info.setObjectPath(filePath);
+ info.setObjectUrl(fileProperties.getAliOss().getBucketHost() + PATH_SPLIT + info.getObjectPath());
+ return info;
+ }
+
+ /**
+ * 删除对象
+ *
+ * @param objectPath 对象路径
+ */
+ public void delete(String objectPath) {
+ if (!StringUtils.isEmpty(objectPath)) {
+ OSS ossClient = new OSSClientBuilder().build(fileProperties.getAliOss().getEndpoint(), fileProperties.getAliOss().getAccessKey(), fileProperties.getAliOss().getAccessKeySecret());
+
+ ossClient.deleteObject(fileProperties.getAliOss().getBucketName(), objectPath);
+ }
+ }
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/pom.xml b/zlt-commons/zlt-sms-spring-boot-starter/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b024fc1b82f6389acb0d04a0339c66ce113f34ed
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/pom.xml
@@ -0,0 +1,46 @@
+
+
+
+ zlt-commons
+ com.zlt
+ 5.1.0
+
+ 4.0.0
+ jar
+ zlt-sms-spring-boot-starter
+ 短信通用组件
+
+
+
+ org.springframework
+ spring-web
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+ com.aliyun
+ tea-openapi
+ true
+
+
+ com.aliyun
+ dysmsapi20170525
+
+
+
+ com.zlt
+ zlt-common-core
+
+
+ org.apache.httpcomponents
+ httpclient
+
+
+
\ No newline at end of file
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/config/SmsAutoConfigure.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/config/SmsAutoConfigure.java
new file mode 100644
index 0000000000000000000000000000000000000000..846ba2011763e3def2e0c260578f800fe3ac6ce9
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/config/SmsAutoConfigure.java
@@ -0,0 +1,15 @@
+package com.central.sms.config;
+
+import com.central.sms.properties.SmsServerProperties;
+import com.central.sms.template.AliSmsTemplate;
+import com.central.sms.template.WyySmsTemplate;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Import;
+
+/**
+ * @author 杨彬鑫
+ */
+@EnableConfigurationProperties(SmsServerProperties.class)
+@Import({AliSmsTemplate.class, WyySmsTemplate.class})
+public class SmsAutoConfigure {
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/QuerySendInfoCo.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/QuerySendInfoCo.java
new file mode 100644
index 0000000000000000000000000000000000000000..a0b218885bdbb0803efc35540c5bcdeabc3d1195
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/QuerySendInfoCo.java
@@ -0,0 +1,36 @@
+package com.central.sms.model.alisms;
+
+import lombok.Data;
+
+/**
+ * 根据短信发送日期查看发送记录和短信内容,请求参数Co
+ * @author 杨彬鑫
+ */
+@Data
+public class QuerySendInfoCo {
+ /**
+ * 接收短信的手机号码。
+ */
+ private String PhoneNumber;
+ /**
+ * 发送回执ID,即发送流水号
+ */
+ private String BizId;
+ /**
+ * 短信发送日期,支持查询最近30天的记录。
+ *
+ * 注意:格式为yyyyMMdd,例如20181225。
+ */
+ private String SendDate;
+ /**
+ * 分页查看发送记录,指定每页显示的短信记录数量。
+ *
+ * 取值范围为1~50。
+ */
+ private Long PageSize;
+ /**
+ *
+ * 分页查看发送记录,指定发送记录的当前页码。
+ */
+ private Long CurrentPage;
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/QuerySendInfoDto.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/QuerySendInfoDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..e9ee1d4cd3713996eede1f167a2fbf88f1e2369d
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/QuerySendInfoDto.java
@@ -0,0 +1,40 @@
+package com.central.sms.model.alisms;
+
+import com.aliyun.tea.NameInMap;
+import lombok.Data;
+
+/**
+ * 根据短信发送日期查看发送记录和短信内容,返回结果Dto
+ * @author 杨彬鑫
+ */
+@Data
+public class QuerySendInfoDto {
+ /**
+ * 请求状态码。
+ *
+ * 返回OK代表请求成功。
+ */
+ private String code;
+ /**
+ * 状态码的描述。
+ */
+ private String message;
+ /**
+ * 请求ID。
+ */
+ private String requestId;
+
+ private SmsSendDetailDto[] smsSendDetailDTOs;
+
+ @Data
+ class SmsSendDetailDto{
+ public String errCode;
+ public String templateCode;
+ public String outId;
+ public String receiveDate;
+ public String sendDate;
+ public String phoneNum;
+ public String content;
+ public Long sendStatus;
+ }
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/SendBatchSmsCo.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/SendBatchSmsCo.java
new file mode 100644
index 0000000000000000000000000000000000000000..c1e3a87fbf23c74a87d31a6df8a4807508797fcf
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/SendBatchSmsCo.java
@@ -0,0 +1,34 @@
+package com.central.sms.model.alisms;
+
+import lombok.Data;
+
+/**
+ * 批量发送短信,请求参数Co
+ * @author 杨彬鑫
+ */
+@Data
+public class SendBatchSmsCo {
+ /**
+ * 接收短信的手机号码,JSON数组格式。
+ */
+ private String PhoneNumberJson;
+ /**
+ * 短信签名名称,JSON数组格式。
+ *
+ * 注意:必须是已添加、并通过审核的短信签名;且短信签名的个数必须与手机号码的个数相同、内容一一对应。
+ */
+ private String SignNameJson;
+ /**
+ * 短信模板CODE。
+ */
+ private String TemplateCode;
+ /**
+ * 短信模板变量对应的实际值,JSON格式。
+ */
+ private String TemplateParamJson;
+ /**
+ * 上行短信扩展码,JSON数组格式。
+ */
+ private String SmsUpExtendCodeJson;
+
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/SendSmsCo.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/SendSmsCo.java
new file mode 100644
index 0000000000000000000000000000000000000000..412328ceccf2251db381ba247bd2998706dbb7e7
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/SendSmsCo.java
@@ -0,0 +1,35 @@
+package com.central.sms.model.alisms;
+
+import lombok.Data;
+
+/**
+ * 发送短信,请求参数Co
+ * @author 杨彬鑫
+ */
+@Data
+public class SendSmsCo {
+ /**
+ * 接收短信的手机号码
+ */
+ private String PhoneNumbers;
+ /**
+ * 短信签名名称
+ */
+ private String SignName;
+ /**
+ * 短信模板ID
+ */
+ private String TemplateCode;
+ /**
+ * 短信模板变量对应的实际值,JSON格式
+ */
+ private String TemplateParam;
+ /**
+ * 上行短信扩展码
+ */
+ private String SmsUpExtendCode;
+ /**
+ * 外部流水扩展字段
+ */
+ private String OutId;
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/SendSmsDto.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/SendSmsDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d4e849a3b5aaa31e982dbeab03edffab14ec27d
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/alisms/SendSmsDto.java
@@ -0,0 +1,29 @@
+package com.central.sms.model.alisms;
+
+import lombok.Data;
+
+/**
+ * 发送短信,返回结果Dto
+ * @author 杨彬鑫
+ */
+@Data
+public class SendSmsDto {
+ /**
+ * 请求状态码。
+ *
+ * 返回OK代表请求成功。
+ */
+ private String code;
+ /**
+ * 状态码的描述。
+ */
+ private String message;
+ /**
+ * 发送回执ID。
+ */
+ private String bizId;
+ /**
+ * 请求ID。
+ */
+ private String requestId;
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/wyysms/SendSmsCo.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/wyysms/SendSmsCo.java
new file mode 100644
index 0000000000000000000000000000000000000000..c01e27b7ef59671892c263d419d718583af28e66
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/wyysms/SendSmsCo.java
@@ -0,0 +1,27 @@
+package com.central.sms.model.wyysms;
+
+import lombok.Data;
+
+/**
+ * 网易云,发送短信,请求参数
+ * @author 杨彬鑫
+ */
+@Data
+public class SendSmsCo {
+ /**
+ * 随机数
+ */
+ private String nonce;
+ /**
+ * 模板id
+ */
+ private String templateId;
+ /**
+ * 手机号
+ */
+ private String mobile;
+ /**
+ * 验证码长度
+ */
+ private String codeLen;
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/wyysms/SendSmsDto.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/wyysms/SendSmsDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..7fae80dee022f34795cb93f32380a79b6a0b0042
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/wyysms/SendSmsDto.java
@@ -0,0 +1,14 @@
+package com.central.sms.model.wyysms;
+
+import lombok.Data;
+
+/**
+ * 网易,发送短信,返回结果
+ * @author 杨彬鑫
+ */
+@Data
+public class SendSmsDto {
+ private Integer code;
+ private String msg;
+ private String obj;
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/wyysms/VerifyCodeCo.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/wyysms/VerifyCodeCo.java
new file mode 100644
index 0000000000000000000000000000000000000000..6fe3d40e98a28d8ede1aed9ccf6724f72e20fa5d
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/model/wyysms/VerifyCodeCo.java
@@ -0,0 +1,14 @@
+package com.central.sms.model.wyysms;
+
+import lombok.Data;
+
+/**
+ * 校验验证码,请求参数
+ * @author 杨彬鑫
+ */
+@Data
+public class VerifyCodeCo {
+ private String mobile;
+ private String code;
+ private String nonce;
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/properties/AliSmsProperties.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/properties/AliSmsProperties.java
new file mode 100644
index 0000000000000000000000000000000000000000..e76bbf824f0f0d1b251f19ddffd6f0eeae498c88
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/properties/AliSmsProperties.java
@@ -0,0 +1,20 @@
+package com.central.sms.properties;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author 杨彬鑫
+ */
+@Getter
+@Setter
+public class AliSmsProperties {
+ private String accessKeyId;
+
+ private String accessKeySecret;
+
+ /**
+ * 访问的域名
+ */
+ private String endpoint;
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/properties/SmsServerProperties.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/properties/SmsServerProperties.java
new file mode 100644
index 0000000000000000000000000000000000000000..17e3a3262228d46cf2d9bfedde46891aab871b29
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/properties/SmsServerProperties.java
@@ -0,0 +1,36 @@
+package com.central.sms.properties;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * @author 杨彬鑫
+ * @date 2021/12/15
+ *
+ */
+@Setter
+@Getter
+@ConfigurationProperties(prefix = SmsServerProperties.PREFIX)
+public class SmsServerProperties {
+ public static final String PREFIX = "zlt.sms-server";
+ public static final String TYPE_ALI_SMS = "alisms";
+ public static final String TYPE_WYY_SMS = "wyysms";
+
+ /**
+ * 为以下2个值,指定不同的自动化配置
+ * alisms:阿里云短信
+ * wyysms:网易云短信
+ */
+ private String type;
+
+ /**
+ * 阿里云短信配置
+ */
+ AliSmsProperties alisms = new AliSmsProperties();
+
+ /**
+ * 网易云短信配置
+ */
+ WyySmsProperties wyysms = new WyySmsProperties();
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/properties/WyySmsProperties.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/properties/WyySmsProperties.java
new file mode 100644
index 0000000000000000000000000000000000000000..7bf6c51ce888982e34c5f0f799ef29d1d11a9282
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/properties/WyySmsProperties.java
@@ -0,0 +1,13 @@
+package com.central.sms.properties;
+
+import lombok.Data;
+
+/**
+ * 网易云短信
+ * @author 杨彬鑫
+ */
+@Data
+public class WyySmsProperties {
+ private String appKey;
+ private String appSecret;
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/template/AliSmsTemplate.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/template/AliSmsTemplate.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e6eb73c01daeb1380c38da68da12143d235f803
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/template/AliSmsTemplate.java
@@ -0,0 +1,95 @@
+package com.central.sms.template;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.aliyun.dysmsapi20170525.Client;
+import com.aliyun.dysmsapi20170525.models.*;
+import com.aliyun.teaopenapi.models.Config;
+import com.central.common.model.Result;
+import com.central.sms.model.alisms.*;
+import com.central.sms.properties.SmsServerProperties;
+import lombok.SneakyThrows;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+
+/**
+ * @author 杨彬鑫
+ */
+@ConditionalOnClass(Client.class)
+@ConditionalOnProperty(prefix = SmsServerProperties.PREFIX, name = "type", havingValue = "alisms")
+public class AliSmsTemplate implements InitializingBean {
+ private final String SUCCESS = "OK";
+
+ @Autowired
+ private SmsServerProperties smsServerProperties;
+
+ private Client client;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ Config config = new Config()
+ .setAccessKeyId(smsServerProperties.getAlisms().getAccessKeyId())
+ .setAccessKeySecret(smsServerProperties.getAlisms().getAccessKeySecret())
+ .setEndpoint(smsServerProperties.getAlisms().getEndpoint());
+ client = new Client(config);
+ }
+
+ /**
+ * 发送短信
+ *
+ * @param sendSmsCo
+ * @return
+ */
+ @SneakyThrows
+ public Result sendSms(SendSmsCo sendSmsCo) {// 请求参数
+ SendSmsRequest sendSmsRequest = SendSmsRequest.build(BeanUtil.beanToMap(sendSmsCo));
+
+ // 发送请求
+ SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);
+ // 获取响应
+ SendSmsResponseBody body = sendSmsResponse.getBody();
+ SendSmsDto sendSmsDto = BeanUtil.toBean(body, SendSmsDto.class);
+
+ return sendSmsDto.getCode().equals(SUCCESS) ? Result.succeed(sendSmsDto) : Result.failed(sendSmsDto, "发送失败");
+ }
+
+ /**
+ * 批量发送短信
+ *
+ * @param sendBatchSmsCo
+ * @return
+ */
+ @SneakyThrows
+ public Result sendBatchSms(SendBatchSmsCo sendBatchSmsCo) {
+ // 请求参数
+ SendBatchSmsRequest sendBatchSmsRequest = SendBatchSmsRequest.build(BeanUtil.beanToMap(sendBatchSmsCo));
+
+ // 发送请求
+ SendBatchSmsResponse sendBatchSmsResponse = client.sendBatchSms(sendBatchSmsRequest);
+ // 获取响应
+ SendBatchSmsResponseBody body = sendBatchSmsResponse.getBody();
+ SendSmsDto sendSmsDto = BeanUtil.toBean(body, SendSmsDto.class);
+
+ return sendSmsDto.getCode().equals(SUCCESS) ? Result.succeed(sendSmsDto) : Result.failed(sendSmsDto, "发送失败");
+ }
+
+ /**
+ * 根据短信发送日期查看发送记录和短信内容
+ *
+ * @param querySendInfoCo
+ * @return
+ */
+ @SneakyThrows
+ public Result QuerySendInfo(QuerySendInfoCo querySendInfoCo) {
+ // 请求参数
+ QuerySendDetailsRequest querySendDetailsRequest = QuerySendDetailsRequest.build(BeanUtil.beanToMap(querySendInfoCo));
+
+ // 发送请求
+ QuerySendDetailsResponse querySendDetailsResponse = client.querySendDetails(querySendDetailsRequest);
+ // 获取响应
+ QuerySendDetailsResponseBody body = querySendDetailsResponse.getBody();
+ QuerySendInfoDto querySendInfoDto = BeanUtil.toBean(body, QuerySendInfoDto.class);
+ return querySendInfoDto.getCode().equals(SUCCESS) ? Result.succeed(querySendInfoDto) : Result.failed(querySendInfoDto, "发送失败");
+ }
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/template/WyySmsTemplate.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/template/WyySmsTemplate.java
new file mode 100644
index 0000000000000000000000000000000000000000..6dd698ca178174856ecef8302715d503dd3de3b1
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/template/WyySmsTemplate.java
@@ -0,0 +1,130 @@
+package com.central.sms.template;
+
+import com.central.common.model.Result;
+import com.central.common.utils.JsonUtil;
+import com.central.sms.model.wyysms.SendSmsDto;
+import com.central.sms.model.wyysms.SendSmsCo;
+import com.central.sms.model.wyysms.VerifyCodeCo;
+import com.central.sms.properties.SmsServerProperties;
+import com.central.sms.properties.WyySmsProperties;
+import com.central.sms.utils.CheckSumBuilder;
+import lombok.SneakyThrows;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 网易云
+ *
+ * @author 杨彬鑫
+ */
+@ConditionalOnClass(DefaultHttpClient.class)
+@ConditionalOnProperty(prefix = SmsServerProperties.PREFIX, name = "type", havingValue = "wyysms")
+public class WyySmsTemplate {
+ private final Integer SUCCESS = 200;
+
+ @Autowired
+ private SmsServerProperties smsServerProperties;
+
+ /**
+ * 发送短信
+ *
+ * @param sendSmsCo
+ * @return
+ */
+ @SneakyThrows
+ public Result sendSms(SendSmsCo sendSmsCo) {
+ //发送验证码的请求路径URL
+ String SERVER_URL = "https://api.netease.im/sms/sendcode.action";
+ // 请求参数
+ DefaultHttpClient httpClient = new DefaultHttpClient();
+ HttpPost httpPost = new HttpPost(SERVER_URL);
+ String curTime = String.valueOf((new Date()).getTime() / 1000L);
+ /*
+ * 参考计算CheckSum的java代码,在上述文档的参数列表中,有CheckSum的计算文档示例
+ */
+ String checkSum = CheckSumBuilder.getCheckSum(smsServerProperties.getWyysms().getAppSecret(),
+ sendSmsCo.getNonce(), curTime);
+
+ // 设置请求的header
+ httpPost.addHeader("AppKey", smsServerProperties.getWyysms().getAppKey());
+ httpPost.addHeader("Nonce", sendSmsCo.getNonce());
+ httpPost.addHeader("CurTime", curTime);
+ httpPost.addHeader("CheckSum", checkSum);
+ httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
+
+ // 设置请求的的参数,requestBody参数
+ List nvps = new ArrayList();
+ /*
+ * 1.如果是模板短信,请注意参数mobile是有s的,详细参数配置请参考“发送模板短信文档”
+ * 2.参数格式是jsonArray的格式,例如 "['13888888888','13666666666']"
+ * 3.params是根据你模板里面有几个参数,那里面的参数也是jsonArray格式
+ */
+ nvps.add(new BasicNameValuePair("templateid", sendSmsCo.getTemplateId()));
+ nvps.add(new BasicNameValuePair("mobile", sendSmsCo.getMobile()));
+ nvps.add(new BasicNameValuePair("codeLen", sendSmsCo.getCodeLen()));
+
+ httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
+
+ // 执行请求
+ HttpResponse response = httpClient.execute(httpPost);
+ /*获取返回的信息 是一个json字符串*/
+ String responseEntity = EntityUtils.toString(response.getEntity(), "utf-8");
+ SendSmsDto sendSmsDto = JsonUtil.toObject(responseEntity, SendSmsDto.class);
+
+ return sendSmsDto.getCode().equals(SUCCESS) ? Result.succeed(sendSmsDto) : Result.failed(sendSmsDto, "发送失败");
+ }
+
+ /**
+ * 校验验证码
+ *
+ * @return
+ */
+ @SneakyThrows
+ public Result verifyCode(VerifyCodeCo verifyCodeCo) {
+ //发送验证码的请求路径URL
+ String SERVER_URL = "https://api.netease.im/sms/verifycode.action";
+ // 请求参数
+ DefaultHttpClient httpClient = new DefaultHttpClient();
+ HttpPost httpPost = new HttpPost(SERVER_URL);
+ String curTime = String.valueOf((new Date()).getTime() / 1000L);
+ /*
+ * 参考计算CheckSum的java代码,在上述文档的参数列表中,有CheckSum的计算文档示例
+ */
+ String checkSum = CheckSumBuilder.getCheckSum(smsServerProperties.getWyysms().getAppSecret(),
+ verifyCodeCo.getNonce(), curTime);
+
+ // 设置请求的header
+ httpPost.addHeader("AppKey", smsServerProperties.getWyysms().getAppKey());
+ httpPost.addHeader("Nonce", verifyCodeCo.getNonce());
+ httpPost.addHeader("CurTime", curTime);
+ httpPost.addHeader("CheckSum", checkSum);
+ httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
+
+ // 设置请求的的参数,requestBody参数
+ List nvps = new ArrayList<>();
+ nvps.add(new BasicNameValuePair("mobile", verifyCodeCo.getMobile()));
+ nvps.add(new BasicNameValuePair("code", verifyCodeCo.getCode()));
+
+ httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
+
+ // 执行请求
+ HttpResponse response = httpClient.execute(httpPost);
+ /*获取返回的信息 是一个json字符串*/
+ String responseEntity = EntityUtils.toString(response.getEntity(), "utf-8");
+ SendSmsDto sendSmsDto = JsonUtil.toObject(responseEntity, SendSmsDto.class);
+
+ return sendSmsDto.getCode().equals(SUCCESS) ? Result.succeed(sendSmsDto) : Result.failed(sendSmsDto, "校验失败");
+ }
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/utils/CheckSumBuilder.java b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/utils/CheckSumBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..aaab749d4001e8a5aaf67e28b001728f1f349364
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/java/com/central/sms/utils/CheckSumBuilder.java
@@ -0,0 +1,58 @@
+package com.central.sms.utils;
+
+import java.security.MessageDigest;
+
+/**
+ * 网易云短信,请求方式加密
+ */
+public class CheckSumBuilder {
+ /**
+ * 计算并获取CheckSum
+ * @param appSecret
+ * @param nonce
+ * @param curTime
+ * @return
+ */
+ public static String getCheckSum(String appSecret, String nonce, String curTime) {
+ return encode("sha1", appSecret + nonce + curTime);
+ }
+
+
+ /**
+ * 计算并获取md5值
+ * @param requestBody
+ * @return
+ */
+ public static String getMD5(String requestBody) {
+ return encode("md5", requestBody);
+ }
+
+
+ private static String encode(String algorithm, String value) {
+ if (value == null) {
+ return null;
+ }
+ try {
+ MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
+ messageDigest.update(value.getBytes());
+ return getFormattedText(messageDigest.digest());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ private static String getFormattedText(byte[] bytes) {
+ int len = bytes.length;
+ StringBuilder buf = new StringBuilder(len * 2);
+ for (int j = 0; j < len; j++) {
+ buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
+ buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
+ }
+ return buf.toString();
+ }
+
+
+ private static final char[] HEX_DIGITS =
+ {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+}
diff --git a/zlt-commons/zlt-sms-spring-boot-starter/src/main/resources/META-INF/spring.factories b/zlt-commons/zlt-sms-spring-boot-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000000000000000000000000000000000000..4912d27da39034ad78af5c4aeb408aff933bea58
--- /dev/null
+++ b/zlt-commons/zlt-sms-spring-boot-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+com.central.sms.config.SmsAutoConfigure
\ No newline at end of file
diff --git a/zlt-config/pom.xml b/zlt-config/pom.xml
index e5fbb6ca988684e61671e006193bf2833ba1ffc0..13004ba5f53d10e5ccf2305b150d3cbc4f1bc77d 100644
--- a/zlt-config/pom.xml
+++ b/zlt-config/pom.xml
@@ -17,4 +17,60 @@
spring-cloud-starter-alibaba-nacos-config
+
+