AuthCodeServiceImpl.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package com.inspur.customer.service.authcode;
  2. import com.alibaba.cola.dto.Response;
  3. import com.inspur.customer.client.authcode.AuthCodeService;
  4. import com.inspur.customer.object.user.authcode.AuthCodeCheckDTO;
  5. import com.inspur.customer.object.user.authcode.AuthCodeCheckResponse;
  6. import com.inspur.customer.object.user.authcode.AuthCodeDTO;
  7. import com.inspur.inform.client.CommonInformService;
  8. import com.inspur.inform.object.message.AbstractBaseInformMessage;
  9. import com.inspur.inform.object.message.EmailInformMessage;
  10. import com.inspur.inform.object.message.SmsInformMessage;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.apache.dubbo.config.annotation.DubboReference;
  14. import org.apache.dubbo.config.annotation.DubboService;
  15. import org.springframework.data.redis.core.RedisTemplate;
  16. import javax.annotation.Resource;
  17. import java.util.Collections;
  18. import java.util.HashMap;
  19. import java.util.Map;
  20. import java.util.concurrent.TimeUnit;
  21. /**
  22. * 验证码相关功能实现类
  23. * @version v1.0
  24. * @author joe wan
  25. * @date 2022/6/29 17:22
  26. */
  27. @Slf4j
  28. @DubboService(interfaceClass = AuthCodeService.class)
  29. public class AuthCodeServiceImpl implements AuthCodeService {
  30. private static final String AUTH_CODE_MESSAGE_TEMPLATE = "auth_code";
  31. private static final String AUTH_CODE_CACHE_KEY = "msr:authCode:";
  32. @DubboReference
  33. private CommonInformService commonInformService;
  34. @Resource
  35. private RedisTemplate<String, String> redisTemplate;
  36. /**
  37. * 电话、邮件发送验证码
  38. * @return com.alibaba.cola.dto.Response
  39. * @author joe wan
  40. * @date 2022/6/29 17:20
  41. */
  42. @Override
  43. public Response sendAuthCode(AuthCodeDTO authCodeDTO){
  44. try{
  45. //生成一个6位验证码
  46. String authCode = StringUtils.left(String.valueOf(((Math.random() * 9 + 1) * 100000)), 6);
  47. Boolean sendResult = commonInformService.sendMessage(AUTH_CODE_MESSAGE_TEMPLATE, getMessage(authCode, authCodeDTO));
  48. if (Boolean.TRUE.equals(sendResult)) {
  49. redisTemplate.opsForValue().set(AUTH_CODE_CACHE_KEY + authCodeDTO.getEmail(), authCode, 5, TimeUnit.MINUTES);
  50. return Response.buildSuccess();
  51. } else {
  52. return Response.buildFailure("500", "send auth code fail");
  53. }
  54. } catch (Exception e){
  55. log.error("auth code message: {}", authCodeDTO);
  56. log.error("fail message: {}", e.getMessage(), e);
  57. return Response.buildFailure("500","send auth code fail");
  58. }
  59. }
  60. private AbstractBaseInformMessage getMessage(String authCode, AuthCodeDTO authCodeDTO) {
  61. if (StringUtils.isNotBlank(authCodeDTO.getEmail())) {
  62. log.info("email auth code");
  63. EmailInformMessage emailInformMessage = new EmailInformMessage();
  64. Map<String, String> params = new HashMap<>(1);
  65. params.put("\\{MSR_AUTH_CODE}", String.valueOf(authCode));
  66. emailInformMessage.setContentParams(params);
  67. emailInformMessage.setAddressees(Collections.singletonList(authCodeDTO.getEmail()));
  68. return emailInformMessage;
  69. } else {
  70. log.info("sms auth code");
  71. SmsInformMessage smsInformMessage = new SmsInformMessage();
  72. Map<String, String> params = new HashMap<>(1);
  73. params.put("MSRcode", String.valueOf(authCode));
  74. smsInformMessage.setContentParams(params);
  75. smsInformMessage.setAddressees(Collections.singletonList(authCodeDTO.getPhoneNum()));
  76. return smsInformMessage;
  77. }
  78. }
  79. /**
  80. * 电话、邮件验证码check
  81. * @return com.inspur.customer.object.user.authcode.AuthCodeCheckResponse
  82. * @author joe wan
  83. * @date 2022/6/30 17:56
  84. */
  85. @Override
  86. public AuthCodeCheckResponse checkAuthCode(AuthCodeCheckDTO authCodeCheckDTO){
  87. AuthCodeCheckResponse result = new AuthCodeCheckResponse();
  88. if (StringUtils.isNotBlank(authCodeCheckDTO.getPhoneNumAuthCode())) {
  89. String authcodePhone = redisTemplate.opsForValue().get(AUTH_CODE_CACHE_KEY + authCodeCheckDTO.getPhoneNum());
  90. if (authCodeCheckDTO.getPhoneNumAuthCode().equals(authcodePhone)) {
  91. result.setCheckPhoneNum(true);
  92. }
  93. }
  94. if (StringUtils.isNotBlank(authCodeCheckDTO.getEmailAuthCode())) {
  95. String authcodeEmail = redisTemplate.opsForValue().get(AUTH_CODE_CACHE_KEY + authCodeCheckDTO.getEmail());
  96. if (authCodeCheckDTO.getEmailAuthCode().equals(authcodeEmail)) {
  97. result.setCheckEmail(true);
  98. }
  99. }
  100. return result;
  101. }
  102. }