package com.template.services.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.tencentcloudapi.sms.v20210111.models.SendStatus;
import com.template.config.MySecurity;
import com.template.mapper.SystemUserMapper;
import com.template.model.pojo.SmsCode;
import com.template.model.pojo.SystemUser;
import com.template.model.result.CommonResult;
import com.template.services.SystemUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.template.common.result.ResponseStatusEnum;
import com.template.common.utils.SendSms;
import com.template.common.utils.ValidateCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
/**
*
* 服务实现类
*
*
* @author ceshi
* @since 2023-03-30
*/
@Service
public class SystemUserServiceImpl extends ServiceImpl implements SystemUserService {
@Autowired
SmsCodeServiceImpl smsCodeService;
/**
* 密钥对象
*/
@Autowired
MySecurity mySecurity;
/**
* 判断手机号是否符合发送验证码的要求
* @param phone
* @return
*/
@Override
@Transactional(rollbackFor=Exception.class )
public CommonResult verifyPhone(String phone) {
// String privateKey = mySecurity.getPrivateKey();
// postman传参会将+转换成空格
// phone=phone.replace(" ","+");
// String decrypt;
// try {
// decrypt = RSAUtils.decrypt(phone, RSAUtils.getPrivateKey(privateKey));
// } catch (Exception e) {
// return CommonResult.fail("500","解密失败");
// }
// phone=decrypt;
if (ObjectUtils.isEmpty(phone) || 11 != phone.length()) {
return CommonResult.resultValue(ResponseStatusEnum.SEND_PARAMS);
}
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SystemUser::getPhoneNumber, phone);
SystemUser one = this.getOne(wrapper);
if (ObjectUtils.isEmpty(one)) {
return CommonResult.resultValue(ResponseStatusEnum.SYSTEM_PHONE_ERROR);
}
LambdaQueryWrapper wrappers=new LambdaQueryWrapper<>();
wrappers.eq(SmsCode::getPhoneNumber,phone);
wrappers.ge(SmsCode::getExpirationTime,new Date());
wrappers.eq(SmsCode::getIsVerify,"0");
int count = smsCodeService.count(wrappers);
if (count>0) {
return CommonResult.fail("500","请不要频繁操作");
}
// 随机验证码
int vode= ValidateCode.generateValidateCode(6);
String code=String.valueOf(vode);
SmsCode smsCode = new SmsCode();
smsCode.setPhoneNumber(phone);
phone = "+86" + phone;
// 发送短信
SendStatus[] ret = SendSms.sendSms(phone,code);
// 获取code
String code1 = ret[0].getCode();
// 判断短信是否发送成功
if ("LimitExceeded.PhoneNumberDailyLimit".equals(code1)) {
return CommonResult.fail("500","手机号已超过发送上限");
}
// 发送成功后存储到短信表
smsCode.setCode(code);
long time = new Date().getTime() + 60000L;
smsCode.setExpirationTime(new Date(time));
smsCode.setIsVerify("0");
smsCode.setDeleted(0L);
smsCodeService.save(smsCode);
return CommonResult.ok();
}
}