提交 e7386bc4 编写于 作者: Chongwen.jiang's avatar Chongwen.jiang

密码登录接口

找回密码接口
微信授权登录接口
统一验证接口
发送验证码接口修改
上级 89b97cc9
流水线 #21905 已失败 于阶段
in 0 second
package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.server.entity.Account;
import com.pica.cloud.account.account.server.entity.AccountInfoEntity;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.entity.AccountUnionEntity;
import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.enums.AccountExceptionEnum;
import com.pica.cloud.account.account.server.enums.AccountTypeEnum;
import com.pica.cloud.account.account.server.enums.BizTypeRespEnum;
import com.pica.cloud.account.account.server.exception.AccountException;
import com.pica.cloud.account.account.server.mapper.AccountInfoDetailMapper;
import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.server.resp.UnifiedVerificationResp;
import com.pica.cloud.account.account.server.service.AccountService;
import com.pica.cloud.account.account.server.service.AccountUnionService;
import com.pica.cloud.account.account.server.service.CaptchaService;
......@@ -25,16 +27,15 @@ import com.pica.cloud.foundation.utils.utils.ValidateUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.logging.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Objects;
@Api(description = "短信验证码资源")
@RestController
public class AutoCodeController extends AccountBaseController {
......@@ -61,10 +62,32 @@ public class AutoCodeController extends AccountBaseController {
@ApiOperation("获取短信验证码,无需图形验证码,如app端")
@PostMapping(value = "/authCode")
public PicaResponse getAuthCode(@RequestBody EncryptEntity entity) throws Exception {
// 验证码类型 0默认 1注册 2微信登录绑定手机 3修改手机
// 4重置密码 5忘记密码 7患者招募提交问卷(效验) 8Appe登录绑定手机
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
AccountUtils.checkMobilePhone(request.getMobile());
processSysCode(request.getMobile(), request.getFlag());
return PicaResponse.toResponse();
if(request.getBizType() != null && request.getBizType().equals(1)){
// TODO 调用风控接口
UnifiedVerificationResp rcResp = rcValidate(request.getMobile(), request.getFlag());
if(rcResp == null){
// 风控接口调用异常也继续后面的逻辑
processSysCode(request.getMobile(), request.getFlag());
return PicaResponse.toResponse();
} else {
if(null == rcResp.getBizCode()){
// 风控校验后允许发送短信验证码
processSysCode(request.getMobile(), request.getFlag());
return PicaResponse.toResponse();
} else {
// 风控接口调用正常,并返回业务提示给前端
return PicaResponse.toResponse(rcResp);
}
}
} else {
// 老版本业务
processSysCode(request.getMobile(), request.getFlag());
return PicaResponse.toResponse();
}
}
@ApiOperation("获取短信验证码,需要图形验证码,如H5端和PC端;验证码类型 0默认 1注册 2微信登录绑定手机 3修改手机 4重置密码 5忘记密码 7患者招募提交问卷(效验)")
......@@ -183,4 +206,66 @@ public class AutoCodeController extends AccountBaseController {
return PicaResponse.toResponse(cacheCode);
}
/**
* @Description 调用风控接口
* @Author Chongwen.jiang
* @Date 2020/2/21 17:12
* @ModifyDate 2020/2/21 17:12
* @Params [mobile]
* @Return com.pica.cloud.account.account.server.resp.UnifiedVerificationResp
*/
private UnifiedVerificationResp rcValidate(String mobile, Integer flag) {
// 调用风控接口
PicaResponse picaResponse = null;
if (picaResponse != null &&
PicaResultCode.SUCCESS.code().equals(picaResponse.getCode())) {
Object data = picaResponse.getData();
if (Objects.nonNull(data)) {
JSONObject respData = JSON.parseObject(
JSON.toJSONString(data), JSONObject.class);
if (StringUtils.isNotEmpty(respData.getString("processCode"))) {
Integer processCode = Integer.valueOf(respData.getString("processCode"));
if (null != processCode) {
if (processCode.equals(BizTypeRespEnum.RC_SEND_FAIL.getCode())) {
UnifiedVerificationResp resp = new UnifiedVerificationResp();
resp.setBizCode(BizTypeRespEnum.RC_SEND_FAIL.getCode());
resp.setBizMsg(BizTypeRespEnum.RC_SEND_FAIL.getMsg());
return resp;
} else if (processCode.equals(BizTypeRespEnum.RC_TRIGGER.getCode())) {
UnifiedVerificationResp resp = new UnifiedVerificationResp();
resp.setBizCode(BizTypeRespEnum.RC_TRIGGER.getCode());
resp.setBizMsg(BizTypeRespEnum.RC_TRIGGER.getMsg());
return resp;
} else if (processCode.equals(BizTypeRespEnum.RC_BLACKLIST.getCode())) {
UnifiedVerificationResp resp = new UnifiedVerificationResp();
resp.setBizCode(BizTypeRespEnum.RC_BLACKLIST.getCode());
resp.setBizMsg(BizTypeRespEnum.RC_BLACKLIST.getMsg());
return resp;
} else if (processCode.equals(BizTypeRespEnum.RC_DAY_LIMIT.getCode())) {
UnifiedVerificationResp resp = new UnifiedVerificationResp();
resp.setBizCode(BizTypeRespEnum.RC_DAY_LIMIT.getCode());
resp.setBizMsg(BizTypeRespEnum.RC_DAY_LIMIT.getMsg());
return resp;
} else if (processCode.equals(BizTypeRespEnum.RC_60_SECOND_LIMIT.getCode())) {
UnifiedVerificationResp resp = new UnifiedVerificationResp();
resp.setBizCode(BizTypeRespEnum.RC_60_SECOND_LIMIT.getCode());
// 获取剩余秒数
Long time = cacheClient.get(this.getAuthCodeKey(mobile, flag.toString()) + "-secure", Long.class);
int remainTime = 59 - (int) (System.currentTimeMillis() - time) / 1000;
if (remainTime > 0) {
resp.setBizMsg(BizTypeRespEnum.RC_60_SECOND_LIMIT.getMsg()
.replace("{remainTime}", String.valueOf(remainTime)));
}
return resp;
}
}
}
}
// processCode=1(允许发送短信验证码)
return new UnifiedVerificationResp();
} else {
return null;
}
}
}
......@@ -15,13 +15,10 @@ import com.pica.cloud.account.account.server.util.CryptoUtil;
import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.redis.CacheClient;
import com.pica.cloud.foundation.redis.ICacheClient;
import com.pica.cloud.foundation.utils.entity.DeviceInfo;
import com.pica.cloud.foundation.utils.utils.CommonUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
......@@ -212,10 +209,7 @@ public class LoginController extends AccountBaseController {
@PostMapping("/unifiedVerification")
public PicaResponse unifiedVerification(@RequestBody EncryptEntity entity) throws Exception{
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
return PicaResponse.toResponse(loginService.preLoginValidate(
request,
super.getDeviceInfo("deviceId"),
super.getIpAddr()));
return PicaResponse.toResponse(loginService.preLoginValidate(request));
}
}
......@@ -3,18 +3,18 @@ package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.server.entity.AccountInfoEntity;
import com.pica.cloud.account.account.server.entity.Doctor;
import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.enums.AccountTypeEnum;
import com.pica.cloud.account.account.server.entity.LoginResult;
import com.pica.cloud.account.account.server.enums.AccountExceptionEnum;
import com.pica.cloud.account.account.server.exception.AccountException;
import com.pica.cloud.account.account.server.mapper.AccountInfoDetailMapper;
import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.server.service.DoctorService;
import com.pica.cloud.account.account.server.service.PasswordService;
import com.pica.cloud.account.account.server.service.RegisterService;
import com.pica.cloud.account.account.server.util.AESUtil;
import com.pica.cloud.account.account.server.util.AccountUtils;
import com.pica.cloud.account.account.server.util.CryptoUtil;
import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.utils.entity.PicaUser;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
......@@ -38,6 +38,8 @@ public class PasswordController extends AccountBaseController {
@Autowired
private DoctorService doctorService;
@Autowired
private RegisterService registerService;
/**
* 重置密码
......@@ -78,19 +80,57 @@ public class PasswordController extends AccountBaseController {
@PostMapping(value = "/reset")
public PicaResponse forgetPassword(@RequestBody EncryptEntity entity) throws Exception {
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
if (super.getSourceType()==2){
if(request.getBizType() != null &&
request.getBizType().equals(1)) {
AccountInfoEntity account = accountInfoDetailMapper.selectByMobile(AESUtil.encryptV0(request.getMobile()));
if(account == null) {
if (super.getSourceType()==2){
accountUtils.checkMobilePhoneAndAuthCode(request.getMobile(), "5", request.getAuthCode());
}else{
accountUtils.checkMobilePhoneAndAuthCode(request.getMobile(), "4", request.getAuthCode());
}
if (StringUtils.isEmpty(request.getPassword())) {
throw new AccountException(AccountExceptionEnum.PICA_PASSWORD_ERROR);
}
// 新版-未注册-则默认注册
LoginResult result = registerService.register(request);
// 已补全密码
result.setEntireFlag(3);
return PicaResponse.toResponse(result);
} else {
// 新版-已注册了的则找回密码
return reSetPwd(request, account);
}
} else {
// 老版
return reSetPwd(request, null);
}
}
/**
* @Description 找回密码
* @Author Chongwen.jiang
* @Date 2020/2/21 20:07
* @ModifyDate 2020/2/21 20:07
* @Params [request, entity]
* @Return com.pica.cloud.foundation.entity.PicaResponse
*/
private PicaResponse reSetPwd(BaseRequest request, AccountInfoEntity entity) {
// 4重置密码 5忘记密码
if (super.getSourceType() == 2){
// ios
accountUtils.checkMobilePhoneAndAuthCode(request.getMobile(), "5", request.getAuthCode());
if (StringUtils.isEmpty(request.getPassword())) {
throw new AccountException(AccountExceptionEnum.PICA_PASSWORD_ERROR);
}
passwordService.forgetPassword(request);
passwordService.forgetPassword(request, entity);
return PicaResponse.toResponse();
}else{
accountUtils.checkMobilePhoneAndAuthCode(request.getMobile(), "4", request.getAuthCode());
if (StringUtils.isEmpty(request.getPassword())) {
throw new AccountException(AccountExceptionEnum.PICA_PASSWORD_ERROR);
}
passwordService.forgetPassword(request);
passwordService.forgetPassword(request, entity);
return PicaResponse.toResponse();
}
}
......
......@@ -30,10 +30,9 @@ public enum AccountExceptionEnum {
PICA_WECHAT_UNBIND("216522", "该微信号已绑定其他云鹊医账户,你可以使用微信登录云鹊医,在「设置」页解除绑定"),
PICA_WECHAT_BIND_OTHER("216524", "该手机号已绑定其他微信号,你可以在「设置」页解除绑定"),
PICA_WECHAT_UNBIND_CURRENT("216523", "正在绑定中,请稍等"),
PICA_PASSWORD_RULE_ERROR("216525","请设置正确的密码格式"),
PICA_PWD_ERROR("216526", "密码错误,请重试"),
PICA_PWD_ERROR_2("216527", "密码错误次数过多,请前往找回密码"),
PICA_APPLE_BIND_OTHER("216528", "该手机号已绑定其他苹果账号"),
PICA_PASSWORD_RULE_ERROR("216525","该手机号{mobile}尚未设置密码,请先设置密码。"),
PICA_PWD_MISMATCH_4("216526", "密码错误,请重试"),
PICA_PWD_MISMATCH_5("216527", "密码错误次数过多,请前往找回密码"),
xxx_xxx("","");
......
......@@ -10,26 +10,22 @@ package com.pica.cloud.account.account.server.enums;
*/
public enum BizTypeRespEnum {
MOBILE_REG_FALSE(1, "请输入正确的手机号"),
MOBILE_REG_TRUE(2, "手机号符合规则"),
// 风控禁止发送
RC_SEND_FAIL(2, "发送失败"),
RC_TRIGGER(3, "需要触发风控滑动验证"),
RC_NOT_TRIGGER(4, "不需要触发风控滑动验证"),
MOBILE_NOT_REGIST(5, "该手机号{mobile}尚未设置密码,请先设置密码。"),
MOBILE_REGISTED(6, "手机号已注册"),
MOBILE_NOT_SETED_PASSWORD(7, "该手机号{mobile}尚未设置密码,请先设置密码。"),
MOBILE_SETED_PASSWORD(8, "手机号已设置密码"),
/*PWD_REG_FALSE(9, "请设置正确的密码格式"),
PWD_REG_TRUE(10, "密码格式正确"),*/
PWD_MATCH_DB(11, "密码正确"),
PWD_MISMATCH_4(12, "密码错误,请重试"),
PWD_MISMATCH_5(13, "密码错误次数过多,请前往找回密码"),
MOBILE_BINDED_WECHAT(14, "该手机号已绑定其他微信号,你可以在「设置」页解除绑定"),
MOBILE_NOT_BINDED_WECHAT(15, "该手机号未绑定微信"),
MOBILE_BINDED_APPLE(16, "该手机号已绑定其他苹果账号"),
MOBILE_NOT_BINDED_APPLE(17, "该手机号未绑定苹果账号"),
XXX(10, "xxxxxx");
// 账号、IP、设备在黑名单内,前端提示发送成功,后端不发送短信
RC_BLACKLIST(4, "发送成功"),
RC_DAY_LIMIT(5, "今日获取验证码次数以超过上限,请使用账户密码登录"),
RC_60_SECOND_LIMIT(6, "验证码发送频率过高,请{remainTime}秒后再试"),
MOBILE_REG_FALSE(7, "请输入正确的手机号"),
MOBILE_REG_TRUE(8, "手机号符合规则"),
MOBILE_NOT_REGIST(9, "该手机号{mobile}尚未设置密码,请先设置密码。"),
MOBILE_NOT_SETED_PASSWORD(10, "该手机号{mobile}尚未设置密码,请先设置密码。"),
MOBILE_SETED_PASSWORD(11, "手机号已设置密码"),
XXX(0, "xxxxxx");
private Integer code;
private String msg;
......
......@@ -36,7 +36,7 @@ public class BaseRequest {
private String captchaAnswer;
@ApiModelProperty("苹果用户id")
private String appleUserId;
@ApiModelProperty("业务类型,1-验证码登录,2-密码登录,3-找回密码,4-微信登录,5-Apple登录")
@ApiModelProperty("业务类型,1-新老业务区分标识,2-手机号格式校验业务,3-密码登录校验业务")
private Integer bizType;
public String getCaptchaToken() {
......
......@@ -65,5 +65,5 @@ public interface LoginService {
* @Params [request]
* @Return com.pica.cloud.foundation.entity.PicaResponse
*/
UnifiedVerificationResp preLoginValidate(BaseRequest request,String deviceId, String ip);
UnifiedVerificationResp preLoginValidate(BaseRequest request);
}
package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.entity.AccountInfoEntity;
import com.pica.cloud.account.account.server.req.BaseRequest;
public interface PasswordService {
......@@ -18,5 +19,5 @@ public interface PasswordService {
*
* @param request 参数模型
*/
void forgetPassword(BaseRequest request);
void forgetPassword(BaseRequest request, AccountInfoEntity entity);
}
......@@ -65,8 +65,10 @@ public class PasswordServiceImpl implements PasswordService {
@Override
@Transactional
public void forgetPassword(BaseRequest request) {
AccountInfoEntity entity = accountInfoDetailMapper.selectByMobile(AESUtil.encryptV0(request.getMobile()));
public void forgetPassword(BaseRequest request, AccountInfoEntity entity) {
if (entity == null) {
entity = accountInfoDetailMapper.selectByMobile(AESUtil.encryptV0(request.getMobile()));
}
if (entity != null) {
String password = request.getPassword();
Integer accId = entity.getId();
......
package com.pica.cloud.account.account.server.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.pica.cloud.account.account.server.controller.AccountController;
import com.pica.cloud.account.account.server.enums.AccountExceptionEnum;
import com.pica.cloud.account.account.server.enums.BizTypeRespEnum;
import com.pica.cloud.account.account.server.mapper.AccountPatientInfoMapper;
import com.pica.cloud.account.account.server.mapper.DoctorMapper;
import com.pica.cloud.account.account.server.resp.UnifiedVerificationResp;
import com.pica.cloud.foundation.entity.PicaException;
import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.entity.PicaResultCode;
import com.pica.cloud.foundation.redis.ICacheClient;
import com.pica.cloud.foundation.utils.utils.ValidateUtils;
......@@ -15,6 +19,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Objects;
import java.util.regex.Pattern;
/**
......@@ -24,7 +29,6 @@ import java.util.regex.Pattern;
public class AccountUtils {
@Autowired
private ICacheClient cacheClient;
private Logger logger = LoggerFactory.getLogger(AccountController.class);
......@@ -141,4 +145,5 @@ public class AccountUtils {
public Long getUserIdByAcctId(Integer productType, Integer AcctId) {
return doctorInfoMapper.selectUserIdByAcctId(AcctId);
}
}
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册