|
@@ -1,6 +1,7 @@
|
|
|
package com.miaxis.app.sms.impl;
|
|
|
|
|
|
import com.miaxis.app.sms.ISmsService;
|
|
|
+import com.miaxis.app.sms.domain.SmsParameter;
|
|
|
import com.miaxis.common.constant.Constants;
|
|
|
import com.miaxis.common.constant.SmsTemplateConstants;
|
|
|
import com.miaxis.common.core.domain.Response;
|
|
@@ -44,29 +45,29 @@ public class SmsServiceImpl implements ISmsService {
|
|
|
|
|
|
/**
|
|
|
* 发送短信验证码
|
|
|
- * @param map
|
|
|
+ * @param smsParameter
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public Response sendVerificationCode(Map map) {
|
|
|
+ public Response sendVerificationCode(SmsParameter smsParameter) {
|
|
|
//字符编码
|
|
|
String charset = "UTF-8";
|
|
|
|
|
|
//type验证
|
|
|
List<String> collect = Arrays.stream(SmsTemplateConstants.smsTemplateType)
|
|
|
.parallel()
|
|
|
- .filter(str -> str.equals(map.get("type")))
|
|
|
+ .filter(str -> str.equals(smsParameter.getType()))
|
|
|
.collect(Collectors.toList());
|
|
|
if (collect.size()==0){
|
|
|
return Response.error(500,"参数{type}类型错误");
|
|
|
}
|
|
|
|
|
|
//手机号格式验证
|
|
|
- if(map.get("phone").toString().length() != 11){
|
|
|
+ if(smsParameter.getPhone().length() != 11){
|
|
|
return Response.error(500,"手机格式错误");
|
|
|
} else {
|
|
|
Pattern pattern = Pattern.compile(MOBILE_REGEX);
|
|
|
- Matcher matcher = pattern.matcher(map.get("phone").toString());
|
|
|
+ Matcher matcher = pattern.matcher(smsParameter.getPhone());
|
|
|
if(!matcher.matches()) {
|
|
|
return Response.error(500,"手机号格式错误");
|
|
|
}
|
|
@@ -74,7 +75,7 @@ public class SmsServiceImpl implements ISmsService {
|
|
|
try{
|
|
|
|
|
|
//验证手机号
|
|
|
- Response resultJson = validateMobile(map);
|
|
|
+ Response resultJson = validateMobile(smsParameter);
|
|
|
if("500".equals(resultJson.getCode().toString())) {
|
|
|
return resultJson;
|
|
|
}
|
|
@@ -84,13 +85,13 @@ public class SmsServiceImpl implements ISmsService {
|
|
|
for (int i=0;i<6;i++){
|
|
|
code += new Random().nextInt(10);
|
|
|
}
|
|
|
- String content = map.get("smsTemplateConstants").toString().replace("code",code);
|
|
|
+ String content = smsParameter.getSmsTemplateConstants().replace("code",code);
|
|
|
|
|
|
// 调用发送接口
|
|
|
Client client = new Client(smsUserName, smsPassword);
|
|
|
String content1 = URLEncoder.encode(content, charset);
|
|
|
String ecodeContent = URLEncoder.encode(content1, charset);
|
|
|
- String result = client.mtData(ecodeContent, map.get("phone").toString(), "", "", "", charset);
|
|
|
+ String result = client.mtData(ecodeContent, smsParameter.getPhone(), "", "", "", charset);
|
|
|
String strCode = result.split("\n")[0];
|
|
|
long codenum = 0;
|
|
|
codenum = Long.valueOf(strCode);
|
|
@@ -98,7 +99,7 @@ public class SmsServiceImpl implements ISmsService {
|
|
|
if (codenum > 0) {//成功提交
|
|
|
Info = "发送成功";
|
|
|
// 写入缓存中
|
|
|
- writeCache(code,map);
|
|
|
+ writeCache(code,smsParameter);
|
|
|
return Response.success(Info);
|
|
|
|
|
|
} else if (codenum == 0) {
|
|
@@ -139,19 +140,19 @@ public class SmsServiceImpl implements ISmsService {
|
|
|
* 手机号验证
|
|
|
* keyPrefix : 缓存key前缀
|
|
|
* verificationCount : 验证次数
|
|
|
- * @param map
|
|
|
+ * @param smsParameter
|
|
|
* @return
|
|
|
*/
|
|
|
- private Response validateMobile(Map map){
|
|
|
+ private Response validateMobile(SmsParameter smsParameter){
|
|
|
|
|
|
- if(redisTemplate.hasKey(map.get("verificationCount") + map.get("phone").toString())){
|
|
|
+ if(redisTemplate.hasKey(smsParameter.getVerificationCount() + smsParameter.getPhone())){
|
|
|
// 验证发送时间
|
|
|
- if (redisTemplate.hasKey(map.get("keyPrefix") + map.get("phone").toString())){
|
|
|
+ if (redisTemplate.hasKey(smsParameter.getKeyPrefix() + smsParameter.getPhone())){
|
|
|
return Response.error(500,"验证码还未过期,不能重新发送!");
|
|
|
}
|
|
|
|
|
|
// 验证发送次数
|
|
|
- Integer count = Integer.valueOf(redisTemplate.opsForValue().get(map.get("verificationCount") + map.get("phone").toString()).toString());
|
|
|
+ Integer count = Integer.valueOf(redisTemplate.opsForValue().get(smsParameter.getVerificationCount() + smsParameter.getPhone()).toString());
|
|
|
if(count >= MAX_COUNT) {
|
|
|
return Response.error(500,"当前手机号发送验证码次数过多!");
|
|
|
}
|
|
@@ -162,31 +163,31 @@ public class SmsServiceImpl implements ISmsService {
|
|
|
|
|
|
/**
|
|
|
* 写入缓存
|
|
|
- * @param map
|
|
|
+ * @param smsParameter
|
|
|
* @param code
|
|
|
*/
|
|
|
- private void writeCache(String code,Map map){
|
|
|
+ private void writeCache(String code,SmsParameter smsParameter){
|
|
|
|
|
|
//该手机号首次获取验证码
|
|
|
- if(!redisTemplate.hasKey(map.get("keyPrefix") + map.get("phone").toString()) && !redisTemplate.hasKey(map.get("verificationCount") + map.get("phone").toString())){
|
|
|
+ if(!redisTemplate.hasKey(smsParameter.getKeyPrefix() + smsParameter.getPhone()) && !redisTemplate.hasKey(smsParameter.getVerificationCount() + smsParameter.getPhone())){
|
|
|
synchronized(this){
|
|
|
//设置该手机号验证码 两分钟过期
|
|
|
- redisTemplate.opsForValue().set(map.get("keyPrefix") + map.get("phone").toString() , code, SEND_INTERVAL, TimeUnit.MINUTES);
|
|
|
+ redisTemplate.opsForValue().set(smsParameter.getKeyPrefix() + smsParameter.getPhone() , code, SEND_INTERVAL, TimeUnit.MINUTES);
|
|
|
//设置该手机号验证次数 一天过期
|
|
|
- redisTemplate.opsForValue().set(map.get("verificationCount") + map.get("phone").toString() , "1",1,TimeUnit.DAYS);
|
|
|
+ redisTemplate.opsForValue().set(smsParameter.getVerificationCount() + smsParameter.getPhone() , "1",1,TimeUnit.DAYS);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//多次获取验证码
|
|
|
- if (redisTemplate.hasKey(map.get("verificationCount") + map.get("phone").toString()) && !redisTemplate.hasKey(map.get("keyPrefix") + map.get("phone").toString())){
|
|
|
+ if (redisTemplate.hasKey(smsParameter.getVerificationCount() + smsParameter.getPhone()) && !redisTemplate.hasKey(smsParameter.getKeyPrefix() + smsParameter.getPhone())){
|
|
|
//判断该手机验证次数
|
|
|
- Integer count = Integer.valueOf(redisTemplate.opsForValue().get(map.get("verificationCount") + map.get("phone").toString()).toString());
|
|
|
+ Integer count = Integer.valueOf(redisTemplate.opsForValue().get(smsParameter.getVerificationCount() + smsParameter.getPhone()).toString());
|
|
|
if (count < MAX_COUNT){
|
|
|
synchronized(this){
|
|
|
//该手机号验证次数+1 一天过期
|
|
|
- redisTemplate.opsForValue().set(map.get("verificationCount") + map.get("phone").toString(),String.valueOf(count+1),1,TimeUnit.DAYS);
|
|
|
+ redisTemplate.opsForValue().set(smsParameter.getVerificationCount() + smsParameter.getPhone(),String.valueOf(count+1),1,TimeUnit.DAYS);
|
|
|
//设置该手机号验证码 两分钟过期
|
|
|
- redisTemplate.opsForValue().set(map.get("keyPrefix") + map.get("phone").toString() , code, SEND_INTERVAL, TimeUnit.MINUTES);
|
|
|
+ redisTemplate.opsForValue().set(smsParameter.getKeyPrefix() + smsParameter.getPhone() , code, SEND_INTERVAL, TimeUnit.MINUTES);
|
|
|
}
|
|
|
}
|
|
|
}
|