提交 35610edb authored 作者: huyufan's avatar huyufan

ID生成

上级 1075bda9
......@@ -33,64 +33,53 @@ public class OrderGoodsIdGenerate {
public long getOrderGoodsId(Integer size) {
long baseStart = Long.parseLong(DateUtils.formatDate(LocalDate.now(), "yyyyMMdd").get() + "00001");
Object o = redisTemplate.opsForValue().get(RedisConstants.ORDER_GOODS_ID_GENERATE);
if (o == null) {
RLock rLock = null;
try {
rLock = redissonClient.getLock(RedisConstants.ORDER_NO_BLOCK + type);
rLock.lock(5, TimeUnit.SECONDS);
o = redisTemplate.opsForValue().get(RedisConstants.ORDER_GOODS_ID_GENERATE);
if (o == null) {
Long maxOrderGoodsId = null;
String maxID = orderGoodsDao.getMaxOrderGoodsId();
if (StringUtils.isNotBlank(maxID)) {
maxOrderGoodsId = Long.valueOf(maxID.substring(2));
}
RLock rLock = null;
try {
rLock = redissonClient.getLock(RedisConstants.ORDER_NO_BLOCK + type);
rLock.lock(5, TimeUnit.SECONDS);
long baseStart = Long.parseLong(DateUtils.formatDate(LocalDate.now(), "yyyyMMdd").get() + "00001");
Object o = redisTemplate.opsForHash().get(RedisConstants.ORDER_GOODS_ID, type);
if (o == null) {
Long maxOrderGoodsId = null;
String maxID = orderGoodsDao.getMaxOrderGoodsId();
if (StringUtils.isNotBlank(maxID)) {
maxOrderGoodsId = Long.valueOf(maxID.substring(2));
}
if (maxOrderGoodsId == null) {
maxOrderGoodsId = baseStart;
}
if (baseStart == maxOrderGoodsId) {
redisTemplate.opsForValue().increment(RedisConstants.ORDER_GOODS_ID_GENERATE, size);
return baseStart;
} else {
redisTemplate.opsForValue().increment(RedisConstants.ORDER_GOODS_ID_GENERATE, size);
return maxOrderGoodsId;
}
if (maxOrderGoodsId == null) {
maxOrderGoodsId = 0L;
}
if (baseStart > maxOrderGoodsId) {
redisTemplate.opsForHash().put(RedisConstants.ORDER_GOODS_ID, type, String.valueOf(baseStart + size));
return baseStart;
} else {
long redisOrderGoodsId = Long.parseLong(o.toString());
if (redisOrderGoodsId < baseStart) {
redisOrderGoodsId = baseStart;
}
redisTemplate.opsForValue().increment(RedisConstants.ORDER_GOODS_ID_GENERATE, size);
return redisOrderGoodsId;
long orderGoodsId = maxOrderGoodsId + size;
redisTemplate.opsForHash().put(RedisConstants.ORDER_GOODS_ID, type, String.valueOf(orderGoodsId));
return maxOrderGoodsId + 1;
}
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_GOODS_ID_GENERATE_LOCK, e.getMessage());
} finally {
try {
if (rLock != null && rLock.isLocked()) {
rLock.unlock();
}
log.info("锁释放完成货单ID生成");
} catch (Exception e) {
log.error("redis 货单ID生成 分布式锁释放异常!", e);
} else {
long redisOrderGoodsId = Long.parseLong(o.toString());
if (redisOrderGoodsId < baseStart) {
redisOrderGoodsId = baseStart;
}
long orderGoodsId = redisOrderGoodsId + size;
redisTemplate.opsForHash().put(RedisConstants.ORDER_GOODS_ID, type, String.valueOf(orderGoodsId));
return redisOrderGoodsId;
}
} else {
long redisOrderGoodsId = Long.parseLong(o.toString());
if (redisOrderGoodsId < baseStart) {
redisOrderGoodsId = baseStart;
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_GOODS_ID_GENERATE_LOCK, e.getMessage());
} finally {
try {
if (rLock != null && rLock.isLocked()) {
rLock.unlock();
}
log.info("锁释放完成货单ID生成");
} catch (Exception e) {
log.error("redis 货单ID生成 分布式锁释放异常!", e);
}
redisTemplate.opsForValue().increment(RedisConstants.ORDER_GOODS_ID_GENERATE, size);
return redisOrderGoodsId;
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论