mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-06-23 08:39:46 +08:00
update
This commit is contained in:
@@ -70,6 +70,10 @@ import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class MemberService {
|
||||
private static final int MAX_MEMBER_ID_GENERATE_RETRY_TIMES = 20;
|
||||
|
||||
private static final int MAX_MEMBER_REGISTER_RETRY_TIMES = 5;
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
@Autowired
|
||||
@@ -413,14 +417,21 @@ public class MemberService {
|
||||
* @return 注册完成后的会员信息
|
||||
*/
|
||||
private MemberBasicInfo registerMemberForRegisterAndLoginV2(MemberRegisterAndLoginDTO dto) {
|
||||
MemberBasicInfo memberBasicInfo = buildNewMemberForRegisterAndLoginV2(dto);
|
||||
MemberTransactionDTO memberTransactionDTO = buildMemberTransactionForRegisterAndLoginV2(memberBasicInfo, dto.getFirstLevelMerchantId());
|
||||
try {
|
||||
transactionService.createMember(memberTransactionDTO);
|
||||
return memberBasicInfo;
|
||||
} catch (DuplicateKeyException e) {
|
||||
return reloadMemberAfterDuplicateKeyForRegisterAndLoginV2(dto);
|
||||
for (int attempt = 1; attempt <= MAX_MEMBER_REGISTER_RETRY_TIMES; attempt++) {
|
||||
MemberBasicInfo memberBasicInfo = buildNewMemberForRegisterAndLoginV2(dto);
|
||||
MemberTransactionDTO memberTransactionDTO = buildMemberTransactionForRegisterAndLoginV2(memberBasicInfo, dto.getFirstLevelMerchantId());
|
||||
try {
|
||||
transactionService.createMember(memberTransactionDTO);
|
||||
return memberBasicInfo;
|
||||
} catch (DuplicateKeyException e) {
|
||||
MemberBasicInfo existedMember = reloadMemberAfterDuplicateKeyForRegisterAndLoginV2(dto, memberBasicInfo.getMemberId(), attempt);
|
||||
if (existedMember != null) {
|
||||
return existedMember;
|
||||
}
|
||||
}
|
||||
}
|
||||
log.error("会员注册重试多次后仍失败, phoneNumber:{}, merchantId:{}", dto.getMobileNumber(), dto.getFirstLevelMerchantId());
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_MEMBER_REGISTER_AND_LOGIN_ERROR);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -468,12 +479,14 @@ public class MemberService {
|
||||
* @param dto 登录/注册入参
|
||||
* @return 已存在的会员信息
|
||||
*/
|
||||
private MemberBasicInfo reloadMemberAfterDuplicateKeyForRegisterAndLoginV2(MemberRegisterAndLoginDTO dto) {
|
||||
log.warn("会员注册时检测到唯一索引冲突,重新查询已存在的会员, phoneNumber:{}, merchantId:{}", dto.getMobileNumber(), dto.getFirstLevelMerchantId());
|
||||
private MemberBasicInfo reloadMemberAfterDuplicateKeyForRegisterAndLoginV2(MemberRegisterAndLoginDTO dto, String memberId, int attempt) {
|
||||
log.warn("会员注册时检测到唯一索引冲突,重新查询已存在的会员, phoneNumber:{}, merchantId:{}, candidateMemberId:{}, attempt:{}",
|
||||
dto.getMobileNumber(), dto.getFirstLevelMerchantId(), memberId, attempt);
|
||||
MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(dto.getMobileNumber(), dto.getFirstLevelMerchantId());
|
||||
if (memberBasicInfo == null) {
|
||||
log.error("唯一索引冲突后重新查询会员信息为空, phoneNumber:{}, merchantId:{}", dto.getMobileNumber(), dto.getFirstLevelMerchantId());
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_MEMBER_REGISTER_AND_LOGIN_ERROR);
|
||||
log.warn("唯一索引冲突后未查询到手机号对应会员,准备重新生成memberId重试, phoneNumber:{}, merchantId:{}, candidateMemberId:{}, attempt:{}",
|
||||
dto.getMobileNumber(), dto.getFirstLevelMerchantId(), memberId, attempt);
|
||||
return null;
|
||||
}
|
||||
return memberBasicInfo;
|
||||
}
|
||||
@@ -535,14 +548,14 @@ public class MemberService {
|
||||
}
|
||||
|
||||
private String generateNewMemberId() {
|
||||
while (true) {
|
||||
for (int attempt = 1; attempt <= MAX_MEMBER_ID_GENERATE_RETRY_TIMES; attempt++) {
|
||||
String memberId = IdUtils.getMemberId();
|
||||
// 通过memberId查询是否已经存在
|
||||
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(memberId);
|
||||
if (memberVO == null) {
|
||||
if (!memberBasicInfoService.existsByMemberId(memberId)) {
|
||||
return memberId;
|
||||
}
|
||||
log.warn("生成memberId命中已存在记录,准备重试, memberId:{}, attempt:{}", memberId, attempt);
|
||||
}
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_MEMBER_REGISTER_AND_LOGIN_ERROR);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user