mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 02:55:04 +08:00
bugfix 注册加锁
This commit is contained in:
@@ -185,55 +185,80 @@ public class MemberService {
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_OPEN_ID_IS_NULL_ERROR);
|
||||
}
|
||||
|
||||
// 查询手机号码是否注册过
|
||||
MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(phoneNumber, firstLevelMerchantId);
|
||||
if (Objects.isNull(memberBasicInfo)) {
|
||||
// 不存在则新增数据
|
||||
String memberId = generateNewMemberId();
|
||||
memberBasicInfo = new MemberBasicInfo();
|
||||
memberBasicInfo.setStatus(Constants.ONE);
|
||||
memberBasicInfo.setMemberId(memberId);
|
||||
memberBasicInfo.setNickName("会员" + memberId);
|
||||
memberBasicInfo.setMobileNumber(phoneNumber);
|
||||
memberBasicInfo.setMerchantId(Long.valueOf(firstLevelMerchantId));
|
||||
if (AdapayPayChannelEnum.WX_LITE.getValue().equals(dto.getRequestSource()) && StringUtils.isNotBlank(openId)) {
|
||||
memberBasicInfo.setOpenId(openId);
|
||||
}
|
||||
if (AdapayPayChannelEnum.ALIPAY_LITE.getValue().equals(dto.getRequestSource()) && StringUtils.isNotBlank(buyerId)) {
|
||||
memberBasicInfo.setBuyerId(buyerId);
|
||||
String lockKey = CacheConstants.USER_APP_REGISTER + phoneNumber;
|
||||
String requestId = IdUtils.fastUUID();
|
||||
Boolean isLock = false;
|
||||
try {
|
||||
// 获取锁,防止注册创建重复账户,锁超时时间10秒
|
||||
isLock = redisCache.lock(lockKey, requestId, 10);
|
||||
if (!isLock) {
|
||||
// 获取锁失败,说明有其他请求正在处理,提示用户稍候
|
||||
log.warn("获取注册锁失败,可能有并发请求正在处理, phoneNumber:{}", phoneNumber);
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_MEMBER_REGISTER_AND_LOGIN_PROCESSING);
|
||||
}
|
||||
|
||||
MemberTransactionDTO memberTransactionDTO = new MemberTransactionDTO();
|
||||
memberTransactionDTO.setMemberBasicInfo(memberBasicInfo);
|
||||
// 首次新建会员,同时新建会员钱包
|
||||
if (MerchantUtils.isXiXiaoMerchant(firstLevelMerchantId)) {
|
||||
MemberWalletInfo memberWalletInfo = MemberWalletInfo.builder()
|
||||
.memberId(memberId)
|
||||
.merchantId(MerchantUtils.XIXIAO_MERCHANT_ID)
|
||||
.walletCode(memberBasicInfoService.generateWalletCode())
|
||||
.build();
|
||||
memberTransactionDTO.setMemberWalletInfo(memberWalletInfo);
|
||||
// 查询手机号码是否注册过
|
||||
MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(phoneNumber, firstLevelMerchantId);
|
||||
if (Objects.isNull(memberBasicInfo)) {
|
||||
// 不存在则新增数据
|
||||
String memberId = generateNewMemberId();
|
||||
memberBasicInfo = new MemberBasicInfo();
|
||||
memberBasicInfo.setStatus(Constants.ONE);
|
||||
memberBasicInfo.setMemberId(memberId);
|
||||
memberBasicInfo.setNickName("会员" + memberId);
|
||||
memberBasicInfo.setMobileNumber(phoneNumber);
|
||||
memberBasicInfo.setMerchantId(Long.valueOf(firstLevelMerchantId));
|
||||
if (AdapayPayChannelEnum.WX_LITE.getValue().equals(dto.getRequestSource()) && StringUtils.isNotBlank(openId)) {
|
||||
memberBasicInfo.setOpenId(openId);
|
||||
}
|
||||
if (AdapayPayChannelEnum.ALIPAY_LITE.getValue().equals(dto.getRequestSource()) && StringUtils.isNotBlank(buyerId)) {
|
||||
memberBasicInfo.setBuyerId(buyerId);
|
||||
}
|
||||
|
||||
MemberTransactionDTO memberTransactionDTO = new MemberTransactionDTO();
|
||||
memberTransactionDTO.setMemberBasicInfo(memberBasicInfo);
|
||||
// 首次新建会员,同时新建会员钱包
|
||||
if (MerchantUtils.isXiXiaoMerchant(firstLevelMerchantId)) {
|
||||
MemberWalletInfo memberWalletInfo = MemberWalletInfo.builder()
|
||||
.memberId(memberId)
|
||||
.merchantId(MerchantUtils.XIXIAO_MERCHANT_ID)
|
||||
.walletCode(memberBasicInfoService.generateWalletCode())
|
||||
.build();
|
||||
memberTransactionDTO.setMemberWalletInfo(memberWalletInfo);
|
||||
}
|
||||
transactionService.createMember(memberTransactionDTO);
|
||||
} else {
|
||||
boolean updateFlag = false;
|
||||
if (AdapayPayChannelEnum.WX_LITE.getValue().equals(dto.getRequestSource()) && !StringUtils.equals(memberBasicInfo.getOpenId(), openId)) {
|
||||
// openId变化就更新
|
||||
memberBasicInfo.setOpenId(openId);
|
||||
updateFlag = true;
|
||||
}
|
||||
if (AdapayPayChannelEnum.ALIPAY_LITE.getValue().equals(dto.getRequestSource()) && !StringUtils.equals(memberBasicInfo.getBuyerId(), buyerId)) {
|
||||
memberBasicInfo.setBuyerId(buyerId);
|
||||
updateFlag = true;
|
||||
}
|
||||
if (updateFlag) {
|
||||
memberBasicInfoService.updateMemberBasicInfo(memberBasicInfo);
|
||||
}
|
||||
}
|
||||
transactionService.createMember(memberTransactionDTO);
|
||||
} else {
|
||||
boolean updateFlag = false;
|
||||
if (AdapayPayChannelEnum.WX_LITE.getValue().equals(dto.getRequestSource()) && !StringUtils.equals(memberBasicInfo.getOpenId(), openId)) {
|
||||
// openId变化就更新
|
||||
memberBasicInfo.setOpenId(openId);
|
||||
updateFlag = true;
|
||||
}
|
||||
if (AdapayPayChannelEnum.ALIPAY_LITE.getValue().equals(dto.getRequestSource()) && !StringUtils.equals(memberBasicInfo.getBuyerId(), buyerId)) {
|
||||
memberBasicInfo.setBuyerId(buyerId);
|
||||
updateFlag = true;
|
||||
}
|
||||
if (updateFlag) {
|
||||
memberBasicInfoService.updateMemberBasicInfo(memberBasicInfo);
|
||||
// 服务器生成token返给前端
|
||||
String memberToken = JWTUtils.createMemberToken(memberBasicInfo.getMemberId(), memberBasicInfo.getNickName());
|
||||
// log.info("memToken:{}", memberToken);
|
||||
return memberToken;
|
||||
} finally {
|
||||
// 释放锁
|
||||
if (isLock) {
|
||||
try {
|
||||
Object lockValue = redisCache.getCacheObject(lockKey);
|
||||
if (lockValue != null && requestId.equals(lockValue.toString())) {
|
||||
redisCache.unLock(lockKey);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("释放注册锁失败, phoneNumber:{}, error:{}", phoneNumber, e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
// 服务器生成token返给前端
|
||||
String memberToken = JWTUtils.createMemberToken(memberBasicInfo.getMemberId(), memberBasicInfo.getNickName());
|
||||
// log.info("memToken:{}", memberToken);
|
||||
return memberToken;
|
||||
}
|
||||
|
||||
private String generateNewMemberId() {
|
||||
|
||||
Reference in New Issue
Block a user