From aaecf82f25933bb655f20c126be00fb348e42186 Mon Sep 17 00:00:00 2001
From: OuGaoHao <1910919520@qq.com>
Date: Mon, 7 Mar 2022 22:43:20 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9F=AD=E4=BF=A1=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=E5=8F=8A=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/resources/application-dev.yml | 14 +-
.../service/impl/RegisterServiceImpl.java | 6 +-
numone-common/pom.xml | 7 +
.../numone/common/utils/sms/SmsConfig.java | 62 ++++---
.../utils/sms/server/SmsServerUtil.java | 157 ++++++++++++++----
.../mapper/system/AppUserInfoMapper.xml | 76 ++++-----
6 files changed, 227 insertions(+), 95 deletions(-)
diff --git a/numone-admin/src/main/resources/application-dev.yml b/numone-admin/src/main/resources/application-dev.yml
index 6cb05d0..de29acf 100644
--- a/numone-admin/src/main/resources/application-dev.yml
+++ b/numone-admin/src/main/resources/application-dev.yml
@@ -89,12 +89,16 @@ minio:
# 阿里云短信
-aliyun:
+tencent:
sms:
- product: Dysmsapi
- domain: dysmsapi.aliyuncs.com
- accessKeyId: 1400641801
- accessKeySecret: 2c3b97ed0de8681ba6d3099d0a6b2069
+ sdkAppId: 1400640652 #短信应用ID
+ appKey: 22b7addedb6a231f5a00a128761fcef4 # App Key
+ signName: #短信签名内容
+ templateId: #模板 ID
+ secretId: #秘钥id
+ secretKey: #密钥对
+
+
#小程序配置
wx:
diff --git a/numone-business/src/main/java/com/numone/system/service/impl/RegisterServiceImpl.java b/numone-business/src/main/java/com/numone/system/service/impl/RegisterServiceImpl.java
index 8ebd329..eeb7a78 100644
--- a/numone-business/src/main/java/com/numone/system/service/impl/RegisterServiceImpl.java
+++ b/numone-business/src/main/java/com/numone/system/service/impl/RegisterServiceImpl.java
@@ -123,9 +123,9 @@ public class RegisterServiceImpl implements RegisterService {
throw new AppException("手机号未注册");
}
}
-// if (!smsServerUtil.sendSms(phonenumberParams.getPhonenumber(), newCode, smsServerUtil.REG_CODE)){
-// throw new AppException("验证码发送失败");
-// }
+ if (!smsServerUtil.sendSms(phonenumberParams.getPhonenumber(), newCode, smsServerUtil.REG_CODE)){
+ throw new AppException("验证码发送失败");
+ }
redisCache.setCacheObject(RedisCacheConstant.SMS_CAPTCHA_CODE_KEY + phonenumberParams.getPhonenumber(), newCode, RedisCacheConstant.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
return newCode;
diff --git a/numone-common/pom.xml b/numone-common/pom.xml
index d04569b..c473d29 100644
--- a/numone-common/pom.xml
+++ b/numone-common/pom.xml
@@ -165,6 +165,13 @@
5.6.3
+
+
+ com.tencentcloudapi
+ tencentcloud-sdk-java
+ 3.1.270
+
+
\ No newline at end of file
diff --git a/numone-common/src/main/java/com/numone/common/utils/sms/SmsConfig.java b/numone-common/src/main/java/com/numone/common/utils/sms/SmsConfig.java
index 5fa7a21..de5402a 100644
--- a/numone-common/src/main/java/com/numone/common/utils/sms/SmsConfig.java
+++ b/numone-common/src/main/java/com/numone/common/utils/sms/SmsConfig.java
@@ -11,48 +11,68 @@ import org.springframework.stereotype.Component;
* 阿里云短信配置信息
*/
@Component
-@ConfigurationProperties(prefix = "aliyun.sms")
+@ConfigurationProperties(prefix = "tencent.sms")
public class SmsConfig {
- private String product ;
+ private String sdkAppId ;
- private String domain ;
+ private String appKey ;
- private String accessKeyId ;
+ private String secretId ;
- private String accessKeySecret ;
+ private String secretKey ;
+ private String signName;
- public String getProduct() {
- return product;
+ private String templateId;
+
+ public String getSdkAppId() {
+ return sdkAppId;
+ }
+
+ public void setSdkAppId(String sdkAppId) {
+ this.sdkAppId = sdkAppId;
+ }
+
+ public String getAppKey() {
+ return appKey;
}
- public void setProduct(String product) {
- this.product = product;
+ public void setAppKey(String appKey) {
+ this.appKey = appKey;
}
- public String getDomain() {
- return domain;
+ public String getSecretId() {
+ return secretId;
}
- public void setDomain(String domain) {
- this.domain = domain;
+ public void setSecretId(String secretId) {
+ this.secretId = secretId;
}
- public String getAccessKeyId() {
- return accessKeyId;
+ public String getSecretKey() {
+ return secretKey;
}
- public void setAccessKeyId(String accessKeyId) {
- this.accessKeyId = accessKeyId;
+ public void setSecretKey(String secretKey) {
+ this.secretKey = secretKey;
}
- public String getAccessKeySecret() {
- return accessKeySecret;
+ public String getSignName() {
+ return signName;
}
- public void setAccessKeySecret(String accessKeySecret) {
- this.accessKeySecret = accessKeySecret;
+ public void setSignName(String signName) {
+ this.signName = signName;
+ }
+
+ public String getTemplateId() {
+ return templateId;
+ }
+
+ public void setTemplateId(String templateId) {
+ this.templateId = templateId;
}
}
+
diff --git a/numone-common/src/main/java/com/numone/common/utils/sms/server/SmsServerUtil.java b/numone-common/src/main/java/com/numone/common/utils/sms/server/SmsServerUtil.java
index 04024c5..7f49b09 100644
--- a/numone-common/src/main/java/com/numone/common/utils/sms/server/SmsServerUtil.java
+++ b/numone-common/src/main/java/com/numone/common/utils/sms/server/SmsServerUtil.java
@@ -3,13 +3,21 @@ package com.numone.common.utils.sms.server;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
-import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
-import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+
+
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.numone.common.exception.UtilException;
import com.numone.common.utils.sms.SmsConfig;
+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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -37,7 +45,6 @@ public class SmsServerUtil {
*/
public static final String REG_CODE = "";
-
/**
* 根据手机号码发送code
*
@@ -46,33 +53,127 @@ public class SmsServerUtil {
* @return
* @throws ClientException
*/
- public boolean sendSms(String phone, String code, String smsTempCode) throws ClientException {
- //初始化acsClient,暂不支持region化
- System.out.println(smsConfig.getAccessKeyId());
- IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", smsConfig.getAccessKeyId(), smsConfig.getAccessKeySecret());
- DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", smsConfig.getProduct(), smsConfig.getDomain());
- IAcsClient acsClient = new DefaultAcsClient(profile);
-
- SendSmsRequest request = new SendSmsRequest();
- //必填:待发送手机号
- request.setPhoneNumbers(phone);
- //必填:短信签名-可在短信控制台中找到
- request.setSignName("一号藏馆");
- //必填:短信模板-可在短信控制台中找到
- request.setTemplateCode(smsTempCode);
- //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
- request.setTemplateParam("{'code':'" + code + "'}");
-
- SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
-
- if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
- logger.debug(" 短信:" + phone + " 验证码: " + code + " 发送成功");
- return true;
- } else {
- logger.debug(" 短信:" + phone + " 验证码: " + code + " 发送失败");
- throw new UtilException(sendSmsResponse.getMessage(), null);
+ public boolean sendSms(String phone, String code, String smsTempCode){
+ try {
+ /* 必要步骤:
+ * 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
+ * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
+ * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
+ * 以免泄露密钥对危及你的财产安全。
+ * SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi */
+ Credential cred = new Credential(smsConfig.getSecretId(),smsConfig.getSecretKey());
+
+ // 实例化一个http选项,可选,没有特殊需求可以跳过
+ HttpProfile httpProfile = new HttpProfile();
+ // 设置代理
+ // httpProfile.setProxyHost("真实代理ip");
+ // httpProfile.setProxyPort(真实代理端口);
+ /* SDK默认使用POST方法。
+ * 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */
+ httpProfile.setReqMethod("POST");
+ /* SDK有默认的超时时间,非必要请不要进行调整
+ * 如有需要请在代码中查阅以获取最新的默认值 */
+ httpProfile.setConnTimeout(60);
+ /* 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com */
+ httpProfile.setEndpoint("sms.tencentcloudapi.com");
+
+ /* 非必要步骤:
+ * 实例化一个客户端配置对象,可以指定超时时间等配置 */
+ ClientProfile clientProfile = new ClientProfile();
+ /* SDK默认用TC3-HMAC-SHA256进行签名
+ * 非必要请不要修改这个字段 */
+ clientProfile.setSignMethod("HmacSHA256");
+ clientProfile.setHttpProfile(httpProfile);
+ /* 实例化要请求产品(以sms为例)的client对象
+ * 第二个参数是地域信息,可以直接填写字符串ap-guangzhou,支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 */
+ SmsClient client = new SmsClient(cred, "ap-guangzhou",clientProfile);
+ /* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
+ * 你可以直接查询SDK源码确定接口有哪些属性可以设置
+ * 属性可能是基本类型,也可能引用了另一个数据结构
+ * 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明 */
+ SendSmsRequest req = new SendSmsRequest();
+
+ /* 填充请求参数,这里request对象的成员变量即对应接口的入参
+ * 你可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
+ * 基本类型的设置:
+ * 帮助链接:
+ * 短信控制台: https://console.cloud.tencent.com/smsv2
+ * sms helper: https://cloud.tencent.com/document/product/382/3773 */
+
+ /* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
+ String sdkAppId = smsConfig.getSdkAppId();
+ req.setSmsSdkAppId(sdkAppId);
+
+ /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */
+ String signName = smsConfig.getSignName();
+ req.setSignName(signName);
+
+
+ /* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
+ String templateId = smsConfig.getTemplateId();
+ req.setTemplateId(templateId);
+
+ /* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
+ * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号 */
+ String[] phoneNumberSet = {"+86"+code};
+ req.setPhoneNumberSet(phoneNumberSet);
+
+ /* 模板参数: 若无模板参数,则设置为空 */
+ String[] templateParamSet = {""};
+ req.setTemplateParamSet(templateParamSet);
+
+ /* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
+ * 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
+ SendSmsResponse res = client.SendSms(req);
+
+ // 输出json格式的字符串回包
+ System.out.println(SendSmsResponse.toJsonString(res));
+
+ // 也可以取出单个值,你可以通过官网接口文档或跳转到response对象的定义处查看返回字段的定义
+ System.out.println(res.getRequestId());
+
+ } catch (TencentCloudSDKException e) {
+ e.printStackTrace();
}
+ return true;
}
+// /**
+// * 根据手机号码发送code
+// *
+// * @param phone
+// * @param code
+// * @return
+// * @throws ClientException
+// */
+// public boolean sendSms(String phone, String code, String smsTempCode) throws ClientException {
+// //初始化acsClient,暂不支持region化
+// System.out.println(smsConfig.getAccessKeyId());
+// IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", smsConfig.getAccessKeyId(), smsConfig.getAccessKeySecret());
+// DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", smsConfig.getProduct(), smsConfig.getDomain());
+// IAcsClient acsClient = new DefaultAcsClient(profile);
+//
+// SendSmsRequest request = new SendSmsRequest();
+// //必填:待发送手机号
+// request.setPhoneNumbers(phone);
+// //必填:短信签名-可在短信控制台中找到
+// request.setSignName("一号藏馆");
+// //必填:短信模板-可在短信控制台中找到
+// request.setTemplateCode(smsTempCode);
+// //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
+// request.setTemplateParam("{'code':'" + code + "'}");
+//
+// SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
+//
+// if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
+// logger.debug(" 短信:" + phone + " 验证码: " + code + " 发送成功");
+// return true;
+// } else {
+// logger.debug(" 短信:" + phone + " 验证码: " + code + " 发送失败");
+// throw new UtilException(sendSmsResponse.getMessage(), null);
+// }
+// }
+
+
}
diff --git a/numone-system/src/main/resources/mapper/system/AppUserInfoMapper.xml b/numone-system/src/main/resources/mapper/system/AppUserInfoMapper.xml
index 72a2730..7a1035b 100644
--- a/numone-system/src/main/resources/mapper/system/AppUserInfoMapper.xml
+++ b/numone-system/src/main/resources/mapper/system/AppUserInfoMapper.xml
@@ -115,57 +115,57 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
END sexName,
CASE
WHEN t2.stone_num >= 1
- AND t2.stone_num <= 50 THEN
+ AND t2.stone_num <= 500 THEN
"炼气期"
- WHEN t2.stone_num >= 51
- AND t2.stone_num <= 100 THEN
+ WHEN t2.stone_num >= 501
+ AND t2.stone_num <= 2000 THEN
"筑基期"
- WHEN t2.stone_num >= 101
- AND t2.stone_num <= 300 THEN
+ WHEN t2.stone_num >= 2001
+ AND t2.stone_num <= 8000 THEN
"金丹期"
- WHEN t2.stone_num >= 301
- AND t2.stone_num <= 800 THEN
+ WHEN t2.stone_num >= 8001
+ AND t2.stone_num <= 20000 THEN
"元婴期"
- WHEN t2.stone_num >= 801
- AND t2.stone_num <= 1500 THEN
+ WHEN t2.stone_num >= 20001
+ AND t2.stone_num <= 50000 THEN
"化神期"
- WHEN t2.stone_num >= 1501
- AND t2.stone_num <= 3000 THEN
+ WHEN t2.stone_num >= 50001
+ AND t2.stone_num <= 10000 THEN
"合体期"
- WHEN t2.stone_num >= 3001
- AND t2.stone_num <= 5000 THEN
+ WHEN t2.stone_num >= 10001
+ AND t2.stone_num <= 500000 THEN
"渡劫期"
- WHEN t2.stone_num >= 5001
- AND t2.stone_num <= 9999 THEN
+ WHEN t2.stone_num >= 500001
+ AND t2.stone_num <= 999999 THEN
"大乘期"
ELSE
"虚仙"
END realm,
CASE
WHEN t2.stone_num >= 1
- AND t2.stone_num <= 50 THEN
- 50
- WHEN t2.stone_num >= 51
- AND t2.stone_num <= 100 THEN
- 100
- WHEN t2.stone_num >= 101
- AND t2.stone_num <= 300 THEN
- 300
- WHEN t2.stone_num >= 301
- AND t2.stone_num <= 800 THEN
- 800
- WHEN t2.stone_num >= 801
- AND t2.stone_num <= 1500 THEN
- 1500
- WHEN t2.stone_num >= 1501
- AND t2.stone_num <= 3000 THEN
- 3000
- WHEN t2.stone_num >= 3001
- AND t2.stone_num <= 5000 THEN
- 5000
- WHEN t2.stone_num >= 5001
- AND t2.stone_num <= 9999 THEN
- 9999
+ AND t2.stone_num <= 500 THEN
+ 500
+ WHEN t2.stone_num >= 501
+ AND t2.stone_num <= 2000 THEN
+ 2000
+ WHEN t2.stone_num >= 2001
+ AND t2.stone_num <= 8000 THEN
+ 8000
+ WHEN t2.stone_num >= 8001
+ AND t2.stone_num <= 20000 THEN
+ 20000
+ WHEN t2.stone_num >= 20001
+ AND t2.stone_num <= 50000 THEN
+ 50000
+ WHEN t2.stone_num >= 50001
+ AND t2.stone_num <= 10000 THEN
+ 10000
+ WHEN t2.stone_num >= 100001
+ AND t2.stone_num <= 500000 THEN
+ 500000
+ WHEN t2.stone_num >= 500001
+ AND t2.stone_num <= 999999 THEN
+ 999999
ELSE
10000
END boundary,