| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package com.inspur.customer.service.authcode;
- import com.alibaba.cola.dto.Response;
- import com.inspur.customer.client.authcode.AuthCodeService;
- import com.inspur.customer.object.user.authcode.AuthCodeCheckDTO;
- import com.inspur.customer.object.user.authcode.AuthCodeCheckResponse;
- import com.inspur.customer.object.user.authcode.AuthCodeDTO;
- import com.inspur.inform.client.CommonInformService;
- import com.inspur.inform.object.message.AbstractBaseInformMessage;
- import com.inspur.inform.object.message.EmailInformMessage;
- import com.inspur.inform.object.message.SmsInformMessage;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.dubbo.config.annotation.DubboReference;
- import org.apache.dubbo.config.annotation.DubboService;
- import org.springframework.data.redis.core.RedisTemplate;
- import javax.annotation.Resource;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.concurrent.TimeUnit;
- /**
- * 验证码相关功能实现类
- * @version v1.0
- * @author joe wan
- * @date 2022/6/29 17:22
- */
- @Slf4j
- @DubboService(interfaceClass = AuthCodeService.class)
- public class AuthCodeServiceImpl implements AuthCodeService {
- private static final String AUTH_CODE_MESSAGE_TEMPLATE = "auth_code";
- private static final String AUTH_CODE_CACHE_KEY = "msr:authCode:";
- @DubboReference
- private CommonInformService commonInformService;
- @Resource
- private RedisTemplate<String, String> redisTemplate;
- /**
- * 电话、邮件发送验证码
- * @return com.alibaba.cola.dto.Response
- * @author joe wan
- * @date 2022/6/29 17:20
- */
- @Override
- public Response sendAuthCode(AuthCodeDTO authCodeDTO){
- try{
- //生成一个6位验证码
- String authCode = StringUtils.left(String.valueOf(((Math.random() * 9 + 1) * 100000)), 6);
- Boolean sendResult = commonInformService.sendMessage(AUTH_CODE_MESSAGE_TEMPLATE, getMessage(authCode, authCodeDTO));
- if (Boolean.TRUE.equals(sendResult)) {
- redisTemplate.opsForValue().set(AUTH_CODE_CACHE_KEY + authCodeDTO.getEmail(), authCode, 5, TimeUnit.MINUTES);
- return Response.buildSuccess();
- } else {
- return Response.buildFailure("500", "send auth code fail");
- }
- } catch (Exception e){
- log.error("auth code message: {}", authCodeDTO);
- log.error("fail message: {}", e.getMessage(), e);
- return Response.buildFailure("500","send auth code fail");
- }
- }
- private AbstractBaseInformMessage getMessage(String authCode, AuthCodeDTO authCodeDTO) {
- if (StringUtils.isNotBlank(authCodeDTO.getEmail())) {
- log.info("email auth code");
- EmailInformMessage emailInformMessage = new EmailInformMessage();
- Map<String, String> params = new HashMap<>(1);
- params.put("\\{MSR_AUTH_CODE}", String.valueOf(authCode));
- emailInformMessage.setContentParams(params);
- emailInformMessage.setAddressees(Collections.singletonList(authCodeDTO.getEmail()));
- return emailInformMessage;
- } else {
- log.info("sms auth code");
- SmsInformMessage smsInformMessage = new SmsInformMessage();
- Map<String, String> params = new HashMap<>(1);
- params.put("MSRcode", String.valueOf(authCode));
- smsInformMessage.setContentParams(params);
- smsInformMessage.setAddressees(Collections.singletonList(authCodeDTO.getPhoneNum()));
- return smsInformMessage;
- }
- }
- /**
- * 电话、邮件验证码check
- * @return com.inspur.customer.object.user.authcode.AuthCodeCheckResponse
- * @author joe wan
- * @date 2022/6/30 17:56
- */
- @Override
- public AuthCodeCheckResponse checkAuthCode(AuthCodeCheckDTO authCodeCheckDTO){
- AuthCodeCheckResponse result = new AuthCodeCheckResponse();
- if (StringUtils.isNotBlank(authCodeCheckDTO.getPhoneNumAuthCode())) {
- String authcodePhone = redisTemplate.opsForValue().get(AUTH_CODE_CACHE_KEY + authCodeCheckDTO.getPhoneNum());
- if (authCodeCheckDTO.getPhoneNumAuthCode().equals(authcodePhone)) {
- result.setCheckPhoneNum(true);
- }
- }
- if (StringUtils.isNotBlank(authCodeCheckDTO.getEmailAuthCode())) {
- String authcodeEmail = redisTemplate.opsForValue().get(AUTH_CODE_CACHE_KEY + authCodeCheckDTO.getEmail());
- if (authCodeCheckDTO.getEmailAuthCode().equals(authcodeEmail)) {
- result.setCheckEmail(true);
- }
- }
- return result;
- }
- }
|