Browse Source

增加 发送短信接口,志愿者认证,增加验证码校验功能

dev_shibei_match
zhangyongzhangyong 5 years ago
parent
commit
3f6b3d6568
  1. 26
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiSendSmsCodeFormDTO.java
  2. 6
      epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiVolunteerAuthenticateFormDTO.java
  3. 16
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java
  4. 11
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java
  5. 64
      epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java

26
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiSendSmsCodeFormDTO.java

@ -0,0 +1,26 @@
package com.epmet.dto.form.resi;
import com.epmet.commons.tools.validator.group.CustomerClientShowGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @Description 居民端-志愿者认证-短信验证码发送接口入参
* @Author zhangyong
* @Date 2020/04/18 10:26
*/
@Data
public class ResiSendSmsCodeFormDTO implements Serializable {
private static final long serialVersionUID = -1852541457359282018L;
/**
* 添加用户操作的用户可见异常分组
* 该分组用于校验需要返回给前端错误信息提示的列需要继承CustomerClientShowGroup
* 返回错误码为8999提示信息为DTO中具体的列的校验注解message的内容
*/
public interface AddUserShowGroup extends CustomerClientShowGroup {
}
@NotBlank(message = "手机号不能为空", groups = {AddUserShowGroup.class})
private String mobile;
}

6
epmet-module/epmet-heart/epmet-heart-client/src/main/java/com/epmet/dto/form/resi/ResiVolunteerAuthenticateFormDTO.java

@ -114,4 +114,10 @@ public class ResiVolunteerAuthenticateFormDTO implements Serializable {
* 志愿者签名
*/
private String volunteerSignature;
/**
* 短信验证码
* 移动端决定是否上送验证码
*/
private String smsCode;
}

16
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/controller/ResiVolunteerController.java

@ -21,6 +21,7 @@ import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.dto.form.resi.ResiSendSmsCodeFormDTO;
import com.epmet.dto.form.resi.ResiVolunteerAuthenticateFormDTO;
import com.epmet.dto.result.resi.ResiVolunteerInfoResultDTO;
import com.epmet.service.VolunteerInfoService;
@ -70,4 +71,19 @@ public class ResiVolunteerController {
public Result<ResiVolunteerInfoResultDTO> selectVolunteerInfo(@LoginUser TokenDto tokenDTO){
return volunteerInfoService.selectVolunteerInfoByUserId(tokenDTO);
}
/**
* 志愿者认证 - 发送短信验证码
*
* @param formDTO
* @return com.epmet.commons.tools.utils.Result
* @Author zhangyong
* @Date 09:47 2020-08-10
**/
@PostMapping(value = "sendsmscode")
public Result sendSmsCode(@RequestBody ResiSendSmsCodeFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO,ResiSendSmsCodeFormDTO.AddUserShowGroup.class);
volunteerInfoService.sendSmsCode(formDTO);
return new Result();
}
}

11
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/VolunteerInfoService.java

@ -22,6 +22,7 @@ import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.dto.VolunteerInfoDTO;
import com.epmet.dto.form.resi.ResiSendSmsCodeFormDTO;
import com.epmet.dto.form.resi.ResiVolunteerAuthenticateFormDTO;
import com.epmet.dto.result.resi.ResiVolunteerInfoResultDTO;
import com.epmet.entity.VolunteerInfoEntity;
@ -57,4 +58,14 @@ public interface VolunteerInfoService extends BaseService<VolunteerInfoEntity> {
* @Date 14:05 2020-07-30
**/
Result<ResiVolunteerInfoResultDTO> selectVolunteerInfoByUserId(TokenDto tokenDto);
/**
* 居民端志愿者认证-发送验证码
*
* @param formDTO
* @return void
* @Author zhangyong
* @Date 09:19 2020-08-10
**/
void sendSmsCode(ResiSendSmsCodeFormDTO formDTO);
}

64
epmet-module/epmet-heart/epmet-heart-server/src/main/java/com/epmet/service/impl/VolunteerInfoServiceImpl.java

@ -18,26 +18,34 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.common.token.constant.LoginConstant;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.MqConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.dto.form.mq.MqBaseMsgDTO;
import com.epmet.commons.tools.dto.form.mq.eventmsg.BasePointEventMsg;
import com.epmet.commons.tools.enums.EventEnum;
import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.utils.SendMqMsgUtils;
import com.epmet.constant.SmsTemplateConstant;
import com.epmet.dao.VolunteerInfoDao;
import com.epmet.dto.HeartUserInfoDTO;
import com.epmet.dto.VolunteerInfoDTO;
import com.epmet.dto.form.SendVerificationCodeFormDTO;
import com.epmet.dto.form.resi.ResiSendSmsCodeFormDTO;
import com.epmet.dto.form.resi.ResiVolunteerAuthenticateFormDTO;
import com.epmet.dto.result.ResiUserBaseInfoResultDTO;
import com.epmet.dto.result.SendVerificationCodeResultDTO;
import com.epmet.dto.result.resi.ResiVolunteerInfoResultDTO;
import com.epmet.entity.VolunteerInfoEntity;
import com.epmet.feign.EpmetMessageOpenFeignClient;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.redis.VolunteerInfoRedis;
import com.epmet.service.HeartUserInfoService;
import com.epmet.service.VolunteerInfoService;
import org.apache.logging.log4j.LogManager;
@ -58,9 +66,12 @@ import java.util.List;
@Service
public class VolunteerInfoServiceImpl extends BaseServiceImpl<VolunteerInfoDao, VolunteerInfoEntity> implements VolunteerInfoService {
private Logger logger = LogManager.getLogger(VolunteerInfoServiceImpl.class);
private static final String SEND_SMS_CODE_ERROR = "发送短信验证码异常,手机号[%s],code[%s],msg[%s]";
@Autowired
private VolunteerInfoRedis volunteerInfoRedis;
/**
* redis 验证码 过期时长为30分钟单位
*/
private final static long MINUTE_THIRTY_EXPIRE = 60 * 30 * 1L;
@Autowired
private EpmetUserOpenFeignClient epmetUserOpenFeignClient;
@ -68,9 +79,24 @@ public class VolunteerInfoServiceImpl extends BaseServiceImpl<VolunteerInfoDao,
@Autowired
private HeartUserInfoService heartUserInfoService;
@Autowired
private RedisUtils redisUtils;
@Autowired
private EpmetMessageOpenFeignClient epmetMessageOpenFeignClient;
@Override
@Transactional(rollbackFor = Exception.class)
public Result authenticate(TokenDto tokenDto, ResiVolunteerAuthenticateFormDTO formDTO) {
// 验证码校验
if (null != formDTO.getSmsCode()){
String smsCodeKey = RedisKeys.getLoginSmsCodeKey(LoginConstant.APP_RESI, LoginConstant.CLIENT_WXMP, formDTO.getMobile());
String rightSmsCode = (String) redisUtils.get(smsCodeKey);
if (!formDTO.getSmsCode().equals(rightSmsCode)) {
logger.error(String.format("验证码错误code[%s],msg[%s]", EpmetErrorCode.MOBILE_CODE_ERROR.getCode(), EpmetErrorCode.MOBILE_CODE_ERROR.getMsg()));
throw new RenException(EpmetErrorCode.MOBILE_CODE_ERROR.getCode());
}
}
formDTO.setUserId(tokenDto.getUserId());
// 检查是否是志愿者
Integer volunteerFlag = baseDao.queryVolunteerFlagByUserId(tokenDto.getUserId());
@ -138,4 +164,36 @@ public class VolunteerInfoServiceImpl extends BaseServiceImpl<VolunteerInfoDao,
}
return new Result<ResiVolunteerInfoResultDTO>().ok(resultDTO);
}
@Override
public void sendSmsCode(ResiSendSmsCodeFormDTO formDTO) {
//1、发送短信验证码
SendVerificationCodeFormDTO sendVerificationCodeFormDTO=new SendVerificationCodeFormDTO();
sendVerificationCodeFormDTO.setMobile(formDTO.getMobile());
sendVerificationCodeFormDTO.setAliyunTemplateCode(SmsTemplateConstant.USER_REGISTER);
Result<SendVerificationCodeResultDTO> smsCodeResult=epmetMessageOpenFeignClient.sendVerificationCode(sendVerificationCodeFormDTO);
if (!smsCodeResult.success()) {
logger.error(String.format(SEND_SMS_CODE_ERROR, formDTO.getMobile(), smsCodeResult.getCode(), smsCodeResult.getMsg()));
throw new RenException(smsCodeResult.getCode());
}
//2、保存短信验证码(删除现有短信验证码、将新的短信验证码存入Redis)
this.saveSmsCode(formDTO, smsCodeResult.getData().getCode());
logger.info(String.format("发送短信验证码成功,手机号[%s]", formDTO.getMobile()));
}
/**
* 保存短信验证码(删除现有短信验证码将新的短信验证码存入Redis)
* 过期时长为30分钟
*
* @param sendSmsCodeFormDTO appclientphone
* @param smsCode 验证码
* @return void
* @Author zhangyong
* @Date 09:43 2020-08-10
**/
public void saveSmsCode(ResiSendSmsCodeFormDTO sendSmsCodeFormDTO, String smsCode) {
String smsCodeKey = RedisKeys.getLoginSmsCodeKey(LoginConstant.APP_RESI, LoginConstant.CLIENT_WXMP, sendSmsCodeFormDTO.getMobile());
logger.info(String.format("短信验证码key=%s", smsCodeKey));
redisUtils.set(smsCodeKey, smsCode, MINUTE_THIRTY_EXPIRE);
}
}

Loading…
Cancel
Save