记得上下班打卡 | git大法好,push需谨慎

Commit 52f00ce0 authored by 张国柄's avatar 张国柄

fix.lock for member no;

parent d2b3306c
......@@ -84,11 +84,11 @@ public interface IAdamRdmService {
void delShotMemberOrderVoByOrderNo(String uid, String orderNo);
boolean setMemberNoByMemberId(String memberId, long val);
boolean setMaxMemberNo(int val);
long incrMemberNoByMemberId(String memberId);
int incrMemberNo();
Object getMemberMaxNoByMemberId(String memberId);
int getMaxMemberNo();
boolean setMemberCodeVoByCode(String memberCode, AdamMemberCodeVo vo);
......
......@@ -17,7 +17,15 @@
<dependencies>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-adam-api</artifactId>
<artifactId>liquidnet-common-swagger</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-web</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-mq</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
......@@ -27,10 +35,16 @@
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-mq</artifactId>
<artifactId>liquidnet-common-cache-redisson</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-adam-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-api-feign-kylin</artifactId>
......
......@@ -34,7 +34,7 @@ public class AdamRedisConst {
public static final String INCR = ADAM.concat("incr:");
public static final String INCR_MEMBER_NO = INCR.concat(":member_no:");
public static final String INCR_MEMBER_NO = INCR.concat("member_no");
public static final String INFO_MEMBERS = ADAM.concat(":list:members");
public static final String INFO_MEMBERS_INFO = ADAM.concat(":list:members:info:");
......
......@@ -370,18 +370,19 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
}
@Override
public boolean setMemberNoByMemberId(String memberId, long val) {
return redisUtil.set(AdamRedisConst.INCR_MEMBER_NO.concat(memberId), val);
public boolean setMaxMemberNo(int val) {
return redisUtil.set(AdamRedisConst.INCR_MEMBER_NO, val);
}
@Override
public long incrMemberNoByMemberId(String memberId) {
return redisUtil.incr(AdamRedisConst.INCR_MEMBER_NO.concat(memberId), 1);
public int incrMemberNo() {
return (int) redisUtil.incr(AdamRedisConst.INCR_MEMBER_NO, 1);
}
@Override
public Object getMemberMaxNoByMemberId(String memberId) {
return redisUtil.get(AdamRedisConst.INCR_MEMBER_NO.concat(memberId));
public int getMaxMemberNo() {
Object o = redisUtil.get(AdamRedisConst.INCR_MEMBER_NO);
return null == o ? -1 : (int) o;
}
@Override
......
package com.liquidnet.service.adam.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.common.cache.redisson.util.RedisLockUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.entity.AdamUserMember;
......@@ -25,32 +27,38 @@ public class AdamUserMemberServiceImpl extends ServiceImpl<AdamUserMemberMapper,
@Autowired
IAdamRdmService adamRdmService;
private static final String LOCK_KEY_UMEMBER_NO = "adam:lk:member_no";
@Override
public String getNextMemberNo(String memberId) {
Object memberMaxNoByMemberId = adamRdmService.getMemberMaxNoByMemberId(memberId);
if (null == memberMaxNoByMemberId) {
// TODO: 2021/6/8 +锁:查取MONGO当前最大会员号
Query query = Query.query(Criteria.where("memberId").is(memberId)).with(Sort.by(Sort.Direction.DESC, "memberNo")).limit(1);
int memberMaxNo = adamRdmService.getMaxMemberNo();
if (-1 == memberMaxNo) {
if (RedisLockUtil.tryLock(LOCK_KEY_UMEMBER_NO, 1, 3000)) {
memberMaxNo = adamRdmService.getMaxMemberNo();
if (-1 == memberMaxNo) {
Query query = Query.query(Criteria.where("memberId").is(memberId)).with(Sort.by(Sort.Direction.DESC, "memberNo")).limit(1);
AdamUserMemberVo latestMaxMemberNoVo = mongoTemplate.findOne(query, AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName());
AdamUserMemberVo latestMaxMemberNoVo = mongoTemplate.findOne(query, AdamUserMemberVo.class, AdamUserMemberVo.class.getSimpleName());
if (null == latestMaxMemberNoVo) {
AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(memberId);
if (null == latestMaxMemberNoVo) {
AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(memberId);
adamRdmService.setMemberNoByMemberId(memberId, memberVo.getStartNo());
adamRdmService.setMaxMemberNo(memberVo.getStartNo());
} else {
adamRdmService.setMaxMemberNo(Integer.parseInt(latestMaxMemberNoVo.getMemberNo()));
}
}
RedisLockUtil.unlock(LOCK_KEY_UMEMBER_NO);
} else {
adamRdmService.setMemberNoByMemberId(memberId, Long.parseLong(latestMaxMemberNoVo.getMemberNo()));
return null;
}
return String.valueOf(adamRdmService.incrMemberNoByMemberId(memberId));
} else {
String nextMemberNoStr = String.valueOf(adamRdmService.incrMemberNoByMemberId(memberId));
if (Pattern.matches("([\\d])\\1{" + (nextMemberNoStr.length() - 1) + "}", nextMemberNoStr)) {
// 不能是完全相同的数字
nextMemberNoStr = String.valueOf(adamRdmService.incrMemberNoByMemberId(memberId));
}
return nextMemberNoStr;
}
String nextMemberNoStr = String.valueOf(adamRdmService.incrMemberNo());
if (Pattern.matches("([\\d])\\1{" + (nextMemberNoStr.length() - 1) + "}", nextMemberNoStr)) {
// 不能是完全相同的数字
nextMemberNoStr = String.valueOf(adamRdmService.incrMemberNo());
}
return nextMemberNoStr;
}
// @Override
......
......@@ -17,14 +17,7 @@
</modules>
<dependencies>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-swagger</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-web</artifactId>
</dependency>
</dependencies>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment