提交 856efd9b 编写于 作者: rushui.chen's avatar rushui.chen

20191018 注册接口的幂等性处理

上级 3e0ec820
流水线 #16007 已失败 于阶段
in 0 second
......@@ -10,6 +10,7 @@ import com.pica.cloud.account.account.common.req.OCINRequest;
import com.pica.cloud.account.account.server.service.RegisterService;
import com.pica.cloud.account.account.server.util.AccountUtils;
import com.pica.cloud.account.account.server.util.CryptoUtil;
import com.pica.cloud.foundation.entity.PicaException;
import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.redis.ICacheClient;
import io.swagger.annotations.Api;
......@@ -22,7 +23,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(description="注册资源")
@Api(description = "注册资源")
@RestController
@RequestMapping("/register")
public class RegisterController extends AccountBaseController {
......@@ -47,19 +48,28 @@ public class RegisterController extends AccountBaseController {
String mobile = request.getMobile();
//接口幂等性处理(redis中没有就进行注册逻辑,如果已经存在,就不处理)
String exist = redisClient.get(REPEAT_REGISTER_PREFIX + mobile);
if (StringUtils.isBlank(exist)){
redisClient.set(REPEAT_REGISTER_PREFIX + mobile,mobile);
accountUtils.checkMobilePhoneAndAuthCode(mobile,AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode()+"", request.getAuthCode());
if (StringUtils.isBlank(exist)) {
accountUtils.checkMobilePhoneAndAuthCode(mobile, AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode() + "", request.getAuthCode());
accountUtils.checkPassword(request.getPassword());
request.setFlag(AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode());
request.setProductType(super.getProductType());
request.setSourceType(super.getSourceType());
request.setLoginIp(super.getIpAddr());
LoginResult result = registerService.register(request);
redisClient.set(REPEAT_REGISTER_PREFIX + mobile, mobile, 30);
LoginResult result = null;
try {
request.setFlag(AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode());
request.setProductType(super.getProductType());
request.setSourceType(super.getSourceType());
request.setLoginIp(super.getIpAddr());
result = registerService.register(request);
} catch (Exception e) {
//向上抛出异常,让异常处理框架捕获到
throw new AccountException(AccountExceptionEnum.PICA_REGISTER_FAIL);
} finally {
//如果在注册过程中抛出异常,就删除redis中的注册标记
redisClient.del(REPEAT_REGISTER_PREFIX + mobile);
}
redisClient.del(REPEAT_REGISTER_PREFIX + mobile);
return PicaResponse.toResponse(result);
}else{
return PicaResponse.toResponse(null,AccountExceptionEnum.PICA_ALREADY_REGISTER.getCode(),AccountExceptionEnum.PICA_ALREADY_REGISTER.getMessage());
} else {
return PicaResponse.toResponse(null, AccountExceptionEnum.PICA_ALREADY_REGISTER.getCode(), "正在注册中,请勿重复提交");
}
}
......
......@@ -24,7 +24,8 @@ public enum AccountExceptionEnum {
PICA_MOBILE_SAME("216516", "新手机号与旧手机号不能相同"),
PICA_PARAMS_ERROR("216517", "传递参数有误"),
PICA_SYSCODE_RETRY("216518", "请X秒后重试"),
PICA_NOT_EXIST("216519", "该用户不存在");
PICA_NOT_EXIST("216519", "该用户不存在"),
PICA_REGISTER_FAIL("216520", "注册失败");
private String code;
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册