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

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

fix.lock for member no;

parent d2b3306c
...@@ -84,11 +84,11 @@ public interface IAdamRdmService { ...@@ -84,11 +84,11 @@ public interface IAdamRdmService {
void delShotMemberOrderVoByOrderNo(String uid, String orderNo); 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); boolean setMemberCodeVoByCode(String memberCode, AdamMemberCodeVo vo);
......
...@@ -17,7 +17,15 @@ ...@@ -17,7 +17,15 @@
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.liquidnet</groupId> <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> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
...@@ -27,10 +35,16 @@ ...@@ -27,10 +35,16 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.liquidnet</groupId> <groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-mq</artifactId> <artifactId>liquidnet-common-cache-redisson</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-adam-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency> <dependency>
<groupId>com.liquidnet</groupId> <groupId>com.liquidnet</groupId>
<artifactId>liquidnet-api-feign-kylin</artifactId> <artifactId>liquidnet-api-feign-kylin</artifactId>
......
...@@ -34,7 +34,7 @@ public class AdamRedisConst { ...@@ -34,7 +34,7 @@ public class AdamRedisConst {
public static final String INCR = ADAM.concat("incr:"); 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 = ADAM.concat(":list:members");
public static final String INFO_MEMBERS_INFO = ADAM.concat(":list:members:info:"); public static final String INFO_MEMBERS_INFO = ADAM.concat(":list:members:info:");
......
...@@ -370,18 +370,19 @@ public class AdamRdmServiceImpl implements IAdamRdmService { ...@@ -370,18 +370,19 @@ public class AdamRdmServiceImpl implements IAdamRdmService {
} }
@Override @Override
public boolean setMemberNoByMemberId(String memberId, long val) { public boolean setMaxMemberNo(int val) {
return redisUtil.set(AdamRedisConst.INCR_MEMBER_NO.concat(memberId), val); return redisUtil.set(AdamRedisConst.INCR_MEMBER_NO, val);
} }
@Override @Override
public long incrMemberNoByMemberId(String memberId) { public int incrMemberNo() {
return redisUtil.incr(AdamRedisConst.INCR_MEMBER_NO.concat(memberId), 1); return (int) redisUtil.incr(AdamRedisConst.INCR_MEMBER_NO, 1);
} }
@Override @Override
public Object getMemberMaxNoByMemberId(String memberId) { public int getMaxMemberNo() {
return redisUtil.get(AdamRedisConst.INCR_MEMBER_NO.concat(memberId)); Object o = redisUtil.get(AdamRedisConst.INCR_MEMBER_NO);
return null == o ? -1 : (int) o;
} }
@Override @Override
......
package com.liquidnet.service.adam.service.impl; package com.liquidnet.service.adam.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.AdamMemberVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo; import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.entity.AdamUserMember; import com.liquidnet.service.adam.entity.AdamUserMember;
...@@ -25,32 +27,38 @@ public class AdamUserMemberServiceImpl extends ServiceImpl<AdamUserMemberMapper, ...@@ -25,32 +27,38 @@ public class AdamUserMemberServiceImpl extends ServiceImpl<AdamUserMemberMapper,
@Autowired @Autowired
IAdamRdmService adamRdmService; IAdamRdmService adamRdmService;
private static final String LOCK_KEY_UMEMBER_NO = "adam:lk:member_no";
@Override @Override
public String getNextMemberNo(String memberId) { public String getNextMemberNo(String memberId) {
Object memberMaxNoByMemberId = adamRdmService.getMemberMaxNoByMemberId(memberId); int memberMaxNo = adamRdmService.getMaxMemberNo();
if (null == memberMaxNoByMemberId) { if (-1 == memberMaxNo) {
// TODO: 2021/6/8 +锁:查取MONGO当前最大会员号 if (RedisLockUtil.tryLock(LOCK_KEY_UMEMBER_NO, 1, 3000)) {
memberMaxNo = adamRdmService.getMaxMemberNo();
Query query = Query.query(Criteria.where("memberId").is(memberId)).with(Sort.by(Sort.Direction.DESC, "memberNo")).limit(1); 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) { if (null == latestMaxMemberNoVo) {
AdamMemberVo memberVo = adamRdmService.getMemberVoByMemberId(memberId); 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 { } 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 // @Override
......
...@@ -17,14 +17,7 @@ ...@@ -17,14 +17,7 @@
</modules> </modules>
<dependencies> <dependencies>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-swagger</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-web</artifactId>
</dependency>
</dependencies> </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