AuthCodeServiceImpl.java 4.8 KB

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