AuthCodeServiceImpl.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package com.inspur.customer.service.authcode;
  2. import com.alibaba.cola.dto.Response;
  3. import com.google.common.collect.Lists;
  4. import com.google.common.collect.Maps;
  5. import com.inspur.customer.client.authcode.AuthCodeService;
  6. import com.inspur.customer.object.user.authcode.AuthCodeCheckDTO;
  7. import com.inspur.customer.object.user.authcode.AuthCodeCheckResponse;
  8. import com.inspur.customer.object.user.authcode.AuthCodeDTO;
  9. import com.inspur.inform.client.email.SmsbEmailService;
  10. import com.inspur.inform.client.sms.SmsbSmsService;
  11. import com.inspur.inform.object.message.EmailMessage;
  12. import com.inspur.inform.object.message.SmsMessage;
  13. import com.inspur.inform.constants.SmsbSmsTemplateType;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.apache.dubbo.config.annotation.DubboReference;
  17. import org.apache.dubbo.config.annotation.DubboService;
  18. import org.springframework.data.redis.core.RedisTemplate;
  19. import javax.annotation.Resource;
  20. import java.util.Map;
  21. import java.util.concurrent.TimeUnit;
  22. /**
  23. * 验证码相关功能实现类
  24. * @version v1.0
  25. * @author joe wan
  26. * @date 2022/6/29 17:22
  27. */
  28. @Slf4j
  29. @DubboService(interfaceClass = AuthCodeService.class)
  30. public class AuthCodeServiceImpl implements AuthCodeService {
  31. @DubboReference
  32. SmsbSmsService smsbSmsService;
  33. @DubboReference
  34. SmsbEmailService smsbEmailService;
  35. @Resource
  36. private RedisTemplate<String, String> redisTemplate;
  37. /**@Description: 电话、邮件发送验证码
  38. * @param[com.inspur.customer.service.dto.AuthCodeDTO]
  39. * @return com.alibaba.cola.dto.Response
  40. * @version v1.0
  41. * @author joe wan
  42. * @date 2022/6/29 17:20
  43. */
  44. @Override
  45. public Response sendAuthCode(AuthCodeDTO authCodeDTO){
  46. try{
  47. //生成一个6位验证码
  48. int authcode = (int)((Math.random() * 9 + 1) * 100000);
  49. //发送邮件
  50. if(StringUtils.isNotBlank(authCodeDTO.getEmail())){
  51. EmailMessage emailMessage = new EmailMessage();
  52. emailMessage.setSubject("浪潮安播云");
  53. emailMessage.setEmailContent("【浪潮安播云】您的验证码"+ authcode +",该验证码5分钟内有效,请勿泄漏于他人!");
  54. emailMessage.setAddressees(Lists.newArrayList(authCodeDTO.getEmail()));
  55. Boolean aBoolean = smsbEmailService.sendEmail(emailMessage);
  56. if(aBoolean) {
  57. redisTemplate.opsForValue().set("smsb:authcode:email:" + authCodeDTO.getEmail(), authcode + "", 5, TimeUnit.MINUTES);
  58. }
  59. }
  60. //发送手机短信
  61. if(StringUtils.isNotBlank(authCodeDTO.getPhoneNum())){
  62. SmsMessage smsMessage = new SmsMessage();
  63. Map<String, String> maps = Maps.newHashMap();
  64. maps.put("MSRcode",""+authcode);
  65. smsMessage.setTemplateParam(maps);
  66. smsMessage.setPhones(Lists.newArrayList(authCodeDTO.getPhoneNum()));
  67. smsMessage.setSignName("浪潮安播云");
  68. smsMessage.setTemplateType(SmsbSmsTemplateType.AUTH_CODE);
  69. Response sendResponse = smsbSmsService.sendWarningMessage(smsMessage);
  70. if (sendResponse.isSuccess()) {
  71. redisTemplate.opsForValue().set("smsb:authcode:phoneNum:" + authCodeDTO.getPhoneNum(), authcode + "", 5, TimeUnit.MINUTES);
  72. }
  73. }
  74. } catch (Exception e){
  75. log.error("发送验证码报错 --》 {}", authCodeDTO, e);
  76. return Response.buildFailure("999","发送失败!");
  77. }
  78. return Response.buildSuccess();
  79. }
  80. /**@Description: 电话、邮件验证码check
  81. * @param[com.inspur.customer.service.dto.AuthCodeCheckDTO]
  82. * @return com.inspur.customer.object.user.authcode.AuthCodeCheckResponse
  83. * @version v1.0
  84. * @author joe wan
  85. * @date 2022/6/30 17:56
  86. */
  87. @Override
  88. public AuthCodeCheckResponse checkAuthCode(AuthCodeCheckDTO authCodeCheckDTO){
  89. AuthCodeCheckResponse result = new AuthCodeCheckResponse();
  90. if (StringUtils.isNotBlank(authCodeCheckDTO.getPhoneNumAuthCode())) {
  91. String authcodePhone = redisTemplate.opsForValue().get("smsb:authcode:phoneNum:" + authCodeCheckDTO.getPhoneNum());
  92. if (authCodeCheckDTO.getPhoneNumAuthCode().equals(authcodePhone)) {
  93. result.setCheckPhoneNum(true);
  94. }
  95. }
  96. if (StringUtils.isNotBlank(authCodeCheckDTO.getEmailAuthCode())) {
  97. String authcodeEmail = redisTemplate.opsForValue().get("smsb:authcode:email:" + authCodeCheckDTO.getEmail());
  98. if (authCodeCheckDTO.getEmailAuthCode().equals(authcodeEmail)) {
  99. result.setCheckEmail(true);
  100. }
  101. }
  102. return result;
  103. }
  104. }