package com.inspur.customer.service.authcode; import com.alibaba.cola.dto.Response; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.inspur.customer.service.client.authcode.AuthCodeService; import com.inspur.customer.service.dto.AuthCodeCheckDTO; import com.inspur.customer.service.dto.AuthCodeCheckResponse; import com.inspur.customer.service.dto.AuthCodeDTO; import com.inspur.inform.client.email.SmsbEmailService; import com.inspur.inform.client.sms.SmsbSmsService; import com.inspur.inform.object.message.EmailMessage; import com.inspur.inform.object.message.SmsMessage; import com.inspur.inform.object.message.sms.SmsbSmsMessageResponse; import com.inspur.inform.object.message.sms.SmsbSmsTemplateType; 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.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 { @DubboReference SmsbSmsService smsbSmsService; @DubboReference SmsbEmailService smsbEmailService; @Resource private RedisTemplate redisTemplate; /**@Description: 电话、邮件发送验证码 * @param[com.inspur.customer.service.dto.AuthCodeDTO] * @return com.alibaba.cola.dto.Response * @version v1.0 * @author joe wan * @date 2022/6/29 17:20 */ @Override public Response sendAuthCode(AuthCodeDTO authCodeDTO){ try{ //生成一个6位验证码 int authcode = (int)((Math.random() * 9 + 1) * 100000); //发送邮件 if(StringUtils.isNotBlank(authCodeDTO.getEmail())){ EmailMessage emailMessage = new EmailMessage(); emailMessage.setSubject("浪潮安播云"); emailMessage.setEmailContent("【浪潮安播云】您的验证码"+ authcode +",该验证码5分钟内有效,请勿泄漏于他人!"); emailMessage.setAddressees(Lists.newArrayList(authCodeDTO.getEmail())); Boolean aBoolean = smsbEmailService.sendEmail(emailMessage); if(aBoolean) { redisTemplate.opsForValue().set("smsb:authcode:email:" + authCodeDTO.getEmail(), authcode + "", 5, TimeUnit.MINUTES); } } //发送手机短信 if(StringUtils.isNotBlank(authCodeDTO.getPhoneNum())){ SmsMessage smsMessage = new SmsMessage(); Map maps = Maps.newHashMap(); maps.put("MSRcode",""+authcode); smsMessage.setTemplateParam(maps); smsMessage.setPhones(Lists.newArrayList(authCodeDTO.getPhoneNum())); smsMessage.setSignName("浪潮安播云"); smsMessage.setTemplateType(SmsbSmsTemplateType.AUTH_CODE); Response sendResponse = smsbSmsService.sendWarningMessage(smsMessage); if (sendResponse.isSuccess()) { redisTemplate.opsForValue().set("smsb:authcode:phoneNum:" + authCodeDTO.getPhoneNum(), authcode + "", 5, TimeUnit.MINUTES); } } } catch (Exception e){ log.error("发送验证码报错 --》 {}", authCodeDTO, e); return Response.buildFailure("999","发送失败!"); } return Response.buildSuccess(); } /**@Description: 电话、邮件验证码check * @param[com.inspur.customer.service.dto.AuthCodeCheckDTO] * @return com.inspur.customer.object.user.authcode.AuthCodeCheckResponse * @version v1.0 * @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("smsb:authcode:phoneNum:" + authCodeCheckDTO.getPhoneNum()); if (authCodeCheckDTO.getPhoneNumAuthCode().equals(authcodePhone)) { result.setCheckPhoneNum(true); } } if (StringUtils.isNotBlank(authCodeCheckDTO.getEmailAuthCode())) { String authcodeEmail = redisTemplate.opsForValue().get("smsb:authcode:email:" + authCodeCheckDTO.getEmail()); if (authCodeCheckDTO.getEmailAuthCode().equals(authcodeEmail)) { result.setCheckEmail(true); } } return result; } }