VerifyCodeServiceImpl.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package com.fuint.common.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.fuint.common.service.VerifyCodeService;
  4. import com.fuint.framework.exception.BusinessCheckException;
  5. import com.fuint.framework.exception.BusinessRuntimeException;
  6. import com.fuint.repository.mapper.MtVerifyCodeMapper;
  7. import com.fuint.repository.model.MtVerifyCode;
  8. import lombok.AllArgsConstructor;
  9. import org.springframework.stereotype.Service;
  10. import java.text.ParseException;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Date;
  13. import java.util.List;
  14. /**
  15. * 验证码业务实现类
  16. *
  17. * Created by FSQ
  18. * CopyRight https://www.fuint.cn
  19. */
  20. @Service
  21. @AllArgsConstructor
  22. public class VerifyCodeServiceImpl extends ServiceImpl<MtVerifyCodeMapper, MtVerifyCode> implements VerifyCodeService {
  23. private MtVerifyCodeMapper mtVerifyCodeMapper;
  24. /**
  25. * 添加验证码
  26. *
  27. * @param mobile
  28. * @param verifyCode
  29. * @throws BusinessCheckException
  30. */
  31. public MtVerifyCode addVerifyCode(String mobile, String verifyCode, Integer expireSecond) {
  32. if (null == expireSecond || expireSecond<0) {
  33. expireSecond=0;
  34. }
  35. MtVerifyCode reqVerifyCodeDto = new MtVerifyCode();
  36. reqVerifyCodeDto.setMobile(mobile);
  37. reqVerifyCodeDto.setVerifyCode(verifyCode);
  38. reqVerifyCodeDto.setValidFlag("0");
  39. Date now = new Date();
  40. reqVerifyCodeDto.setAddTime(now);
  41. // 验证码过期时间5分钟
  42. Date expireTime = new Date();
  43. expireTime.setTime(expireTime.getTime()+5*60*1000);
  44. reqVerifyCodeDto.setExpireTime(expireTime);
  45. // 发送验证码2分钟后才能继续发送,取最后一条
  46. List<MtVerifyCode> verifyCodeList = mtVerifyCodeMapper.queryVerifyCodeLastRecord(mobile);
  47. if (null == verifyCodeList || verifyCodeList.size() == 0) {
  48. // 没发过短信
  49. this.save(reqVerifyCodeDto);
  50. return reqVerifyCodeDto;
  51. }
  52. MtVerifyCode verifyCodeLastRecord = verifyCodeList.get(0);
  53. Long curInt = reqVerifyCodeDto.getAddTime().getTime(); //时间毫秒,长整型
  54. Long lastInt = verifyCodeLastRecord.getAddTime().getTime();
  55. Integer diffSecond = (int)((curInt-lastInt) / 1000); //间隔秒数
  56. if (diffSecond<expireSecond) {
  57. reqVerifyCodeDto.setValidFlag("1");
  58. return reqVerifyCodeDto;
  59. }
  60. // 2,同一个手机号码新的验证码插入
  61. this.save(reqVerifyCodeDto);
  62. return reqVerifyCodeDto;
  63. }
  64. /**
  65. * 更改验证码状态
  66. *
  67. * @param id
  68. * @param validFlag
  69. * @throws BusinessCheckException
  70. */
  71. @Override
  72. public MtVerifyCode updateValidFlag(Long id, String validFlag) throws BusinessCheckException {
  73. MtVerifyCode mtVerifyCode = mtVerifyCodeMapper.selectById(id);
  74. if (mtVerifyCode == null) {
  75. throw new BusinessCheckException("验证码不存在");
  76. }
  77. mtVerifyCode.setValidFlag(validFlag);
  78. mtVerifyCode.setUsedTime(new Date());
  79. mtVerifyCodeMapper.updateById(mtVerifyCode);
  80. return mtVerifyCode;
  81. }
  82. /**
  83. * 根据手机号,验证码,查询时间
  84. *
  85. * @param mobile 电话号码
  86. * @param verifyCode 验证码
  87. * @throws BusinessCheckException
  88. */
  89. public MtVerifyCode checkVerifyCode(String mobile, String verifyCode) {
  90. MtVerifyCode reVerifyCode;
  91. Date queryTime;
  92. try {
  93. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  94. String dt = sdf.format(new Date());
  95. queryTime = sdf.parse(dt);
  96. } catch (ParseException e) {
  97. throw new BusinessRuntimeException("日期转换异常" + e.getMessage());
  98. }
  99. reVerifyCode = mtVerifyCodeMapper.queryByMobileVerifyCode(mobile, verifyCode, queryTime);
  100. return reVerifyCode;
  101. }
  102. }