提交 8f015820 编写于 作者: rushui.chen's avatar rushui.chen

201911017 注册接口幂等性校验

上级 1dd0b78f
流水线 #15943 已失败 于阶段
in 0 second
...@@ -2,16 +2,21 @@ package com.pica.cloud.account.account.server.controller; ...@@ -2,16 +2,21 @@ package com.pica.cloud.account.account.server.controller;
import com.pica.cloud.account.account.server.entity.EncryptEntity; import com.pica.cloud.account.account.server.entity.EncryptEntity;
import com.pica.cloud.account.account.server.entity.LoginResult; 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.enums.AccountTypeEnum; import com.pica.cloud.account.account.server.enums.AccountTypeEnum;
import com.pica.cloud.account.account.server.exception.AccountException;
import com.pica.cloud.account.account.server.req.BaseRequest; import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.common.req.OCINRequest; 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.service.RegisterService;
import com.pica.cloud.account.account.server.util.AccountUtils; import com.pica.cloud.account.account.server.util.AccountUtils;
import com.pica.cloud.account.account.server.util.CryptoUtil; import com.pica.cloud.account.account.server.util.CryptoUtil;
import com.pica.cloud.foundation.entity.PicaResponse; import com.pica.cloud.foundation.entity.PicaResponse;
import com.pica.cloud.foundation.redis.ICacheClient;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; 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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -22,31 +27,47 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -22,31 +27,47 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/register") @RequestMapping("/register")
public class RegisterController extends AccountBaseController { public class RegisterController extends AccountBaseController {
private final String REPEAT_REGISTER_PREFIX = "repeat-register—";
@Autowired @Autowired
private RegisterService registerService; private RegisterService registerService;
@Autowired @Autowired
private AccountUtils accountUtils; private AccountUtils accountUtils;
@Autowired
@Qualifier("cacheMigrateClient")
private ICacheClient redisClient;
@ApiOperation("PC端,移动端注册接口") @ApiOperation("PC端,移动端注册接口")
@PostMapping(value = "") @PostMapping(value = "")
public PicaResponse<LoginResult> register(@RequestBody EncryptEntity entity) throws Exception { public PicaResponse<LoginResult> register(@RequestBody EncryptEntity entity) throws Exception {
BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class); BaseRequest request = CryptoUtil.decrypt(entity, BaseRequest.class);
accountUtils.checkMobilePhoneAndAuthCode(request.getMobile(),AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode()+"", request.getAuthCode()); 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());
accountUtils.checkPassword(request.getPassword()); accountUtils.checkPassword(request.getPassword());
request.setFlag(AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode()); request.setFlag(AccountTypeEnum.SYSCODE_TYPE_REGISTER.getCode());
request.setProductType(super.getProductType()); request.setProductType(super.getProductType());
request.setSourceType(super.getSourceType()); request.setSourceType(super.getSourceType());
request.setLoginIp(super.getIpAddr()); request.setLoginIp(super.getIpAddr());
LoginResult result = registerService.register(request); LoginResult result = registerService.register(request);
redisClient.del(REPEAT_REGISTER_PREFIX + mobile);
return PicaResponse.toResponse(result); return PicaResponse.toResponse(result);
}else{
return PicaResponse.toResponse(null,AccountExceptionEnum.PICA_ALREADY_REGISTER.getCode(),AccountExceptionEnum.PICA_ALREADY_REGISTER.getMessage());
}
} }
//"sourceType":6 表示长海项目 //"sourceType":6 表示长海项目
@ApiOperation("OCIN项目") @ApiOperation("OCIN项目")
@PostMapping(value = "/ocin") @PostMapping(value = "/ocin")
public PicaResponse register(@RequestBody OCINRequest ocinRequest) throws Exception { public PicaResponse register(@RequestBody OCINRequest ocinRequest) {
registerService.ocinRegister(ocinRequest); PicaResponse picaResponse = registerService.ocinRegister(ocinRequest);
return PicaResponse.toResponse(); return picaResponse;
} }
} }
...@@ -72,4 +72,11 @@ public interface DoctorMapper { ...@@ -72,4 +72,11 @@ public interface DoctorMapper {
int unbindWeChat(@Param("acctId") int acctId); int unbindWeChat(@Param("acctId") int acctId);
PICAPDoctor queryDoctor(long doctorId); PICAPDoctor queryDoctor(long doctorId);
/**
* 通过手机号获取用户id
* @param mobile
* @return
*/
Long selectDoctorIdByMobile(String mobile);
} }
\ No newline at end of file
...@@ -3,6 +3,7 @@ package com.pica.cloud.account.account.server.service; ...@@ -3,6 +3,7 @@ package com.pica.cloud.account.account.server.service;
import com.pica.cloud.account.account.server.entity.LoginResult; import com.pica.cloud.account.account.server.entity.LoginResult;
import com.pica.cloud.account.account.server.req.BaseRequest; import com.pica.cloud.account.account.server.req.BaseRequest;
import com.pica.cloud.account.account.common.req.OCINRequest; import com.pica.cloud.account.account.common.req.OCINRequest;
import com.pica.cloud.foundation.entity.PicaResponse;
public interface RegisterService { public interface RegisterService {
...@@ -21,7 +22,7 @@ public interface RegisterService { ...@@ -21,7 +22,7 @@ public interface RegisterService {
* *
* @param request * @param request
*/ */
void ocinRegister(OCINRequest request); PicaResponse ocinRegister(OCINRequest request);
} }
...@@ -18,6 +18,7 @@ import com.pica.cloud.account.account.server.util.ExecutorServiceUtils; ...@@ -18,6 +18,7 @@ import com.pica.cloud.account.account.server.util.ExecutorServiceUtils;
import com.pica.cloud.account.account.server.util.TokenUtils; import com.pica.cloud.account.account.server.util.TokenUtils;
import com.pica.cloud.base.doctor.doctor.client.DoctorServiceClient; import com.pica.cloud.base.doctor.doctor.client.DoctorServiceClient;
import com.pica.cloud.base.doctor.doctor.common.req.PrefectInfoReq; import com.pica.cloud.base.doctor.doctor.common.req.PrefectInfoReq;
import com.pica.cloud.foundation.entity.PicaResponse;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -33,7 +34,7 @@ import java.util.concurrent.ExecutorService; ...@@ -33,7 +34,7 @@ import java.util.concurrent.ExecutorService;
@Service @Service
public class RegisterServiceImpl implements RegisterService { public class RegisterServiceImpl implements RegisterService {
private Logger logger= LoggerFactory.getLogger(this.getClass()); private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired @Autowired
private AccountInfoDetailMapper accountInfoDetailMapper; private AccountInfoDetailMapper accountInfoDetailMapper;
...@@ -65,6 +66,9 @@ public class RegisterServiceImpl implements RegisterService { ...@@ -65,6 +66,9 @@ public class RegisterServiceImpl implements RegisterService {
@Autowired @Autowired
private DoctorServiceClient doctorServiceClient; private DoctorServiceClient doctorServiceClient;
@Autowired
private DoctorMapper doctorMapper;
/** /**
* 1)注册功能:默认未完善信息; * 1)注册功能:默认未完善信息;
* 2)注册成功后发送mq消息,让别的服务初始化数据; * 2)注册成功后发送mq消息,让别的服务初始化数据;
...@@ -78,7 +82,6 @@ public class RegisterServiceImpl implements RegisterService { ...@@ -78,7 +82,6 @@ public class RegisterServiceImpl implements RegisterService {
String mobile = baseRequest.getMobile(); String mobile = baseRequest.getMobile();
String mobileEncrypt = AESUtil.encryptV0(mobile); String mobileEncrypt = AESUtil.encryptV0(mobile);
AccountInfoEntity accountInfoEntity = accountInfoDetailMapper.selectByMobile(mobileEncrypt); AccountInfoEntity accountInfoEntity = accountInfoDetailMapper.selectByMobile(mobileEncrypt);
if (accountInfoEntity == null) { if (accountInfoEntity == null) {
Date currentTime = new Date(); Date currentTime = new Date();
int productType = baseRequest.getProductType(); int productType = baseRequest.getProductType();
...@@ -159,13 +162,14 @@ public class RegisterServiceImpl implements RegisterService { ...@@ -159,13 +162,14 @@ public class RegisterServiceImpl implements RegisterService {
/** /**
* 长海项目医生自动注册,并完善信息 * 长海项目医生自动注册,并完善信息
*
* @param request * @param request
*/ */
@Override @Override
public void ocinRegister(OCINRequest request) { public PicaResponse ocinRegister(OCINRequest request) {
String mobile = request.getMobile(); String mobile = request.getMobile();
AccountInfoEntity accountInfoEntity = accountInfoDetailMapper.selectByMobile(mobile); AccountInfoEntity accountInfoEntity = accountInfoDetailMapper.selectByMobile(mobile);
if (accountInfoEntity==null){ if (accountInfoEntity == null) {
Date currentTime = new Date(); Date currentTime = new Date();
int productType = request.getProductType(); int productType = request.getProductType();
int sourceType = request.getSourceType(); int sourceType = request.getSourceType();
...@@ -203,10 +207,11 @@ public class RegisterServiceImpl implements RegisterService { ...@@ -203,10 +207,11 @@ public class RegisterServiceImpl implements RegisterService {
prefectInfoReq.setHospitalId(request.getHospitalId().longValue()); prefectInfoReq.setHospitalId(request.getHospitalId().longValue());
prefectInfoReq.setName(request.getName()); prefectInfoReq.setName(request.getName());
doctorServiceClient.prefectInfo(prefectInfoReq); doctorServiceClient.prefectInfo(prefectInfoReq);
}else{ return PicaResponse.toResponse();
throw new AccountException(AccountExceptionEnum.PICA_ALREADY_REGISTER); } else {
Long id = doctorMapper.selectDoctorIdByMobile(mobile);
return PicaResponse.toResponse(id, AccountExceptionEnum.PICA_ALREADY_REGISTER.getCode(), AccountExceptionEnum.PICA_ALREADY_REGISTER.getCode());
} }
} }
/** /**
......
...@@ -82,6 +82,14 @@ ...@@ -82,6 +82,14 @@
and delete_flag = 1 and delete_flag = 1
</select> </select>
<!--通过手机号查询用户id-->
<select id="selectDoctorIdByMobile" parameterType="java.lang.String" resultType="java.lang.Long">
SELECT id
FROM p_doctor
where mobile_phone = #{mobile}
and delete_flag = 1
</select>
<!--通过手机号码查询医生信息--> <!--通过手机号码查询医生信息-->
<select id="getDoctorInfoByMobile" parameterType="java.lang.String" resultMap="BaseResultMap"> <select id="getDoctorInfoByMobile" parameterType="java.lang.String" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/> SELECT <include refid="Base_Column_List"/>
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册