package com.guoke.star.order.service;
import com.deepexi.common.exception.ApplicationExceptionUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RAtomicLong;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class RedissonUtil {
public static final int FORMAT_LENGTH_9 = 9;
/**
* 获取自增序列
*
* @param prefix 前缀
* @param companyId 公司ID
* @param formatLength 数值部分格式化长度
* @return
*/
public static String incr(String prefix, String companyId, Integer formatLength) {
if (StringUtils.isBlank(companyId)) {
ApplicationExceptionUtil.throwBusinessException("公司ID不能为空");
}
if (StringUtils.isBlank(prefix)) {
prefix = "";
}
String key = "INCR:" + companyId + ":" + prefix;
log.info("key={},formatLength={}", key, formatLength);
RedissonClient redissonClient = ApplicationContextUtil.findBean(RedissonClient.class);
RAtomicLong atomicLong = redissonClient.getAtomicLong(key);
long value = atomicLong.incrementAndGet();
String result;
if (formatLength != null && formatLength > 0) {
result = prefix + String.format("%0" + formatLength + "d", value);
} else {
result = prefix + value;
}
log.info("result={}", result);
return result;
}
}
package com.guoke.star.order.service;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextUtil.applicationContext=applicationContext;
}
/**
* 获取bean 实例
* @param clazz
* @return
* @param <T>
*/
public static <T> T findBean(Class<T> clazz){
return applicationContext.getBean(clazz);
}
}