mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-05-17 08:18:34 +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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1594,7 +1594,8 @@ public class TempService {
|
||||
return ImportMemberBalanceItemResultDTO.success(phone);
|
||||
} catch (Exception e) {
|
||||
logger.error("导入会员余额失败, phone:{}, param:{}", phone, JSON.toJSONString(memberBalanceDTO), e);
|
||||
return ImportMemberBalanceItemResultDTO.fail(phone, e.getMessage());
|
||||
String errorMessage = e.getClass().getSimpleName() + ": " + e.getMessage();
|
||||
return ImportMemberBalanceItemResultDTO.fail(phone, errorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1613,6 +1614,8 @@ public class TempService {
|
||||
|
||||
// 1. 根据手机号查询万车充会员信息;不存在则静默注册一个属于万车充体系的会员。
|
||||
MemberBasicInfo memberBasicInfo = findOrCreateJsowellMember(phone);
|
||||
logger.info("导入会员余额-会员准备完成, phone:{}, memberId:{}, memberMerchantId:{}, balance:{}",
|
||||
phone, memberBasicInfo.getMemberId(), memberBasicInfo.getMerchantId(), balance);
|
||||
|
||||
// 2. 给“南通晨鸣中锦置业有限责任公司”运营商钱包增加本金余额。
|
||||
increaseMemberWalletBalance(memberBasicInfo.getMemberId(), balance);
|
||||
@@ -1653,6 +1656,8 @@ public class TempService {
|
||||
* <p>如果该运营商钱包不存在,现有余额逻辑会自动创建钱包并记录流水。</p>
|
||||
*/
|
||||
private void increaseMemberWalletBalance(String memberId, BigDecimal balance) {
|
||||
logger.info("导入会员余额-开始增加钱包余额, memberId:{}, targetMerchantId:{}, balance:{}",
|
||||
memberId, NANTONG_CHENMING_WALLET_MERCHANT_ID, balance);
|
||||
UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder()
|
||||
.memberId(memberId)
|
||||
.type(MemberWalletEnum.TYPE_IN.getValue())
|
||||
@@ -1661,6 +1666,8 @@ public class TempService {
|
||||
.targetMerchantId(NANTONG_CHENMING_WALLET_MERCHANT_ID)
|
||||
.build();
|
||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||
logger.info("导入会员余额-钱包余额增加完成, memberId:{}, targetMerchantId:{}, balance:{}",
|
||||
memberId, NANTONG_CHENMING_WALLET_MERCHANT_ID, balance);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user