This commit is contained in:
dute7liang
2024-01-21 22:05:02 +08:00
parent 9a904f0c0c
commit a585537c91
9 changed files with 263 additions and 14 deletions

View File

@@ -12,5 +12,7 @@ import com.ruoyi.cai.enums.CodeEnum;
*/
public interface SmsVerifyService extends IService<SmsVerify> {
boolean check(CodeEnum codeEnum, String mobile, String code);
void put(CodeEnum codeEnum, String mobile);
}

View File

@@ -1,12 +1,23 @@
package com.ruoyi.cai.service.impl;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.SmsVerify;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.domain.UserInfo;
import com.ruoyi.cai.enums.CodeEnum;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.kit.AliSmsKit;
import com.ruoyi.cai.manager.CodeManager;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.mapper.SmsVerifyMapper;
import com.ruoyi.cai.service.SmsVerifyService;
import com.ruoyi.cai.service.UserInfoService;
import com.ruoyi.cai.service.UserService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.ServletUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -24,19 +35,85 @@ public class SmsVerifyServiceImpl extends ServiceImpl<SmsVerifyMapper,SmsVerify>
@Autowired
private CodeManager codeManager;
@Autowired
private UserInfoService userInfoService;
@Autowired
private UserService userService;
@Autowired
private AliSmsKit aliSmsKit;
@Autowired
private SystemConfigManager systemConfigManager;
@Override
public boolean check(CodeEnum codeEnum, String mobile, String code){
String smsAdmin = systemConfigManager.getSystemConfig(SystemConfigEnum.SMS_CODE_ADMIN);
if(StringUtils.isNotEmpty(smsAdmin) && smsAdmin.equals(code)){
return true;
}
SmsVerify one = this.getOne(Wrappers.lambdaQuery(SmsVerify.class)
.eq(SmsVerify::getType, codeEnum)
.eq(SmsVerify::getReceivePhone, mobile)
.eq(SmsVerify::getStatus, 1)
.gt(SmsVerify::getOverTime, LocalDateTime.now())
.orderByDesc(SmsVerify::getId)
.last("limit 1"));
if(one == null){
return false;
}
if(one.getVerifyCode().equals(code)){
return true;
}
// codeManager.check(codeEnum,mobile,code);
return false;
}
@Override
public void put(CodeEnum codeEnum,String mobile){
String code = codeManager.put(codeEnum, mobile);
String clientIP = ServletUtils.getClientIP();
if(codeEnum == CodeEnum.REGISTER){
long count = userService.count(Wrappers.lambdaQuery(User.class)
.eq(User::getMobile, mobile));
if(count > 0){
throw new ServiceException("手机号已经被注册使用!");
}
}else if(codeEnum == CodeEnum.RESET_PASSWORD){
long count = userService.count(Wrappers.lambdaQuery(User.class)
.eq(User::getMobile, mobile));
if(count == 0){
throw new ServiceException("手机号未注册!");
}
}
LocalDateTime now = LocalDateTime.now();
SmsVerify one = this.getOne(Wrappers.lambdaQuery(SmsVerify.class)
.eq(SmsVerify::getType, codeEnum.name())
.eq(SmsVerify::getReceivePhone, mobile)
.eq(SmsVerify::getStatus, 1)
.gt(SmsVerify::getOverTime, now)
.last("limit 1"));
if(one != null){
long diff = now.until(one.getCreateTime(), ChronoUnit.SECONDS);
if(diff < 60){
throw new ServiceException(""+diff+"秒之后再重试发送!");
}
}
long count = userInfoService.count(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getRegIp, clientIP));
if(count > 8){
throw new ServiceException("验证码发送失败2"+count);
}
String code = RandomUtil.randomNumbers(6);
SmsVerify smsVerify = new SmsVerify();
smsVerify.setType(codeEnum.name());
smsVerify.setType(codeEnum.getName());
smsVerify.setReceivePhone(mobile);
smsVerify.setVerifyCode(code);
smsVerify.setSendInterface("阿里云");
smsVerify.setOperateIp(ServletUtils.getClientIP());
smsVerify.setOverTime(LocalDateTime.now().plus(3, ChronoUnit.MINUTES));
smsVerify.setOperateIp(clientIP);
smsVerify.setOverTime(LocalDateTime.now().plus(1, ChronoUnit.MINUTES));
this.save(smsVerify);
boolean boo = aliSmsKit.sendMessage(mobile, codeEnum.getAliTemplate(), code, false);
if(!boo){
this.removeById(smsVerify);
}
// String code = codeManager.put(codeEnum, mobile);
}
}