SystemUserServiceImpl.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package com.template.services.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  4. import com.tencentcloudapi.sms.v20210111.models.SendStatus;
  5. import com.template.config.MySecurity;
  6. import com.template.mapper.SystemUserMapper;
  7. import com.template.model.pojo.SmsCode;
  8. import com.template.model.pojo.SystemUser;
  9. import com.template.model.result.CommonResult;
  10. import com.template.services.SystemUserService;
  11. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  12. import com.template.common.result.ResponseStatusEnum;
  13. import com.template.common.utils.SendSms;
  14. import com.template.common.utils.ValidateCode;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.util.Date;
  19. /**
  20. * <p>
  21. * 服务实现类
  22. * </p>
  23. *
  24. * @author ceshi
  25. * @since 2023-03-30
  26. */
  27. @Service
  28. public class SystemUserServiceImpl extends ServiceImpl<SystemUserMapper, SystemUser> implements SystemUserService {
  29. @Autowired
  30. SmsCodeServiceImpl smsCodeService;
  31. /**
  32. * 密钥对象
  33. */
  34. @Autowired
  35. MySecurity mySecurity;
  36. /**
  37. * 判断手机号是否符合发送验证码的要求
  38. * @param phone
  39. * @return
  40. */
  41. @Override
  42. @Transactional(rollbackFor=Exception.class )
  43. public CommonResult verifyPhone(String phone) {
  44. // String privateKey = mySecurity.getPrivateKey();
  45. // postman传参会将+转换成空格
  46. // phone=phone.replace(" ","+");
  47. // String decrypt;
  48. // try {
  49. // decrypt = RSAUtils.decrypt(phone, RSAUtils.getPrivateKey(privateKey));
  50. // } catch (Exception e) {
  51. // return CommonResult.fail("500","解密失败");
  52. // }
  53. // phone=decrypt;
  54. if (ObjectUtils.isEmpty(phone) || 11 != phone.length()) {
  55. return CommonResult.resultValue(ResponseStatusEnum.SEND_PARAMS);
  56. }
  57. LambdaQueryWrapper<SystemUser> wrapper = new LambdaQueryWrapper<>();
  58. wrapper.eq(SystemUser::getPhoneNumber, phone);
  59. SystemUser one = this.getOne(wrapper);
  60. if (ObjectUtils.isEmpty(one)) {
  61. return CommonResult.resultValue(ResponseStatusEnum.SYSTEM_PHONE_ERROR);
  62. }
  63. LambdaQueryWrapper<SmsCode> wrappers=new LambdaQueryWrapper<>();
  64. wrappers.eq(SmsCode::getPhoneNumber,phone);
  65. wrappers.ge(SmsCode::getExpirationTime,new Date());
  66. wrappers.eq(SmsCode::getIsVerify,"0");
  67. int count = smsCodeService.count(wrappers);
  68. if (count>0) {
  69. return CommonResult.fail("500","请不要频繁操作");
  70. }
  71. // 随机验证码
  72. int vode= ValidateCode.generateValidateCode(6);
  73. String code=String.valueOf(vode);
  74. SmsCode smsCode = new SmsCode();
  75. smsCode.setPhoneNumber(phone);
  76. phone = "+86" + phone;
  77. // 发送短信
  78. SendStatus[] ret = SendSms.sendSms(phone,code);
  79. // 获取code
  80. String code1 = ret[0].getCode();
  81. // 判断短信是否发送成功
  82. if ("LimitExceeded.PhoneNumberDailyLimit".equals(code1)) {
  83. return CommonResult.fail("500","手机号已超过发送上限");
  84. }
  85. // 发送成功后存储到短信表
  86. smsCode.setCode(code);
  87. long time = new Date().getTime() + 60000L;
  88. smsCode.setExpirationTime(new Date(time));
  89. smsCode.setIsVerify("0");
  90. smsCode.setDeleted(0L);
  91. smsCodeService.save(smsCode);
  92. return CommonResult.ok();
  93. }
  94. }