This commit is contained in:
Guoqs
2025-12-16 11:41:15 +08:00
3 changed files with 76 additions and 44 deletions

View File

@@ -185,6 +185,18 @@ public class MemberService {
throw new BusinessException(ReturnCodeEnum.CODE_OPEN_ID_IS_NULL_ERROR); throw new BusinessException(ReturnCodeEnum.CODE_OPEN_ID_IS_NULL_ERROR);
} }
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);
}
// 查询手机号码是否注册过 // 查询手机号码是否注册过
MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(phoneNumber, firstLevelMerchantId); MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(phoneNumber, firstLevelMerchantId);
if (Objects.isNull(memberBasicInfo)) { if (Objects.isNull(memberBasicInfo)) {
@@ -234,6 +246,19 @@ public class MemberService {
String memberToken = JWTUtils.createMemberToken(memberBasicInfo.getMemberId(), memberBasicInfo.getNickName()); String memberToken = JWTUtils.createMemberToken(memberBasicInfo.getMemberId(), memberBasicInfo.getNickName());
// log.info("memToken:{}", memberToken); // log.info("memToken:{}", memberToken);
return 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());
}
}
}
} }
private String generateNewMemberId() { private String generateNewMemberId() {

View File

@@ -420,4 +420,9 @@ public class CacheConstants {
// 保险退保 // 保险退保
public static final String REFUND_INSURANCE = "REFUND_INSURANCE:"; public static final String REFUND_INSURANCE = "REFUND_INSURANCE:";
/**
* 用户app注册
*/
public static final String USER_APP_REGISTER = "user_app_register:";
} }

View File

@@ -22,6 +22,8 @@ public enum ReturnCodeEnum {
CODE_MEMBER_REGISTER_AND_LOGIN_ERROR("00100007", "会员登录注册接口异常"), CODE_MEMBER_REGISTER_AND_LOGIN_ERROR("00100007", "会员登录注册接口异常"),
CODE_MEMBER_REGISTER_AND_LOGIN_PROCESSING("00100007_1", "正在登录/注册中,请稍候..."),
CODE_WECHAT_LOGIN_ERROR("00100008", "微信登录异常"), CODE_WECHAT_LOGIN_ERROR("00100008", "微信登录异常"),