import java.math.BigDecimal;
import java.util.concurrent.TimeUnit;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import com.va.mapper.common.ApplicationContextRegister;
public class OrderNumUtil {
private static StringRedisTemplate stringRedisTemplate;
public static BigDecimal getOrderNumByCurrentTimeMillis(Environment environment) {
EnvConfig.setEnvironment(environment);
return getOrderNumByCurrentTimeMillis();
}
public static BigDecimal getOrderNumByCurrentTimeMillis() {
long currentTime = System.currentTimeMillis();
long orderNum = getOrderNum("" + currentTime, TimeUnit.MILLISECONDS);
return new BigDecimal(currentTime + orderNum / 1000000.0);
}
public static long getOrderNum(String key, TimeUnit expireTimeUnit) {
if (!EnvConfig.getRedisEnable()) {
return 0;
}
try {
if (stringRedisTemplate == null) {
stringRedisTemplate = ApplicationContextRegister.getBean(StringRedisTemplate.class);
}
if (stringRedisTemplate == null) {
return 0;
}
RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, stringRedisTemplate.getConnectionFactory());
long increment = entityIdCounter.getAndIncrement();
if (increment == 0) {
entityIdCounter.expire(1, expireTimeUnit);
}
return increment;
} catch (Exception e) {
return 0;
}
}
}
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
@Component
@Lazy(false)
public class ApplicationContextRegister implements ApplicationContextAware {
private static ApplicationContext APPLICATION_CONTEXT;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
APPLICATION_CONTEXT = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return APPLICATION_CONTEXT;
}
public static <T> T getBean(Class<T> type) {
try {
return APPLICATION_CONTEXT.getBean(type);
} catch (Exception e) {
return null;
}
}
public static Object getBean(String beanName) {
try {
return APPLICATION_CONTEXT.getBean(beanName);
} catch (Exception e) {
return null;
}
}
public static <T> T getBean(String beanName, Class<T> clazz) {
try {
return APPLICATION_CONTEXT.getBean(beanName, clazz);
} catch (Exception e) {
return null;
}
}
}