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(); } }