package com.cmos.ngoccore.util;
import java.util.Date;
import java.util.Random;
import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.util.StringUtils;
import com.cmos.cache.redis.JedisClusterFactory;
import com.cmos.core.logger.Logger;
import com.cmos.core.logger.LoggerFactory;
import redis.clients.jedis.JedisCluster;
public class SequenceUtils {
private static final Logger LOGGER = LoggerFactory.getUtilLog(SequenceUtils.class);
/**
* 鏍规嵁redis閿�鑾峰彇搴忓垪鍞竴鏍囪瘑
* @param key 缂撳瓨閿�
* @return 搴忓垪鍞竴鏍囪瘑
*/
public static String getSequence(String key) throws CustomerException {
int length=30;
if (StringUtils.isEmpty(key)) {
LOGGER.error("REDIS KEY IS NOT EXIST");
return null;
}
String datePattern="yyyyMMddHHmmssSSS";
int randomLength=length-datePattern.length();
String id = null;
try {
LOGGER.info("寮�鑾峰彇涓婚敭 "+ "key=" + key);
JedisCluster jedisCluster=JedisClusterFactory.getJedisCluster();
String redisValue=jedisCluster.incr(key).toString();
id = DateFormatUtils.format(new Date(), datePattern) +redisValue;
LOGGER.info("鑾峰彇涓婚敭鎴愬姛"+"id=" + id);
} catch (Exception e) {
id = DateFormatUtils.format(new Date(), datePattern)+getRandomStringByLength(randomLength);
LOGGER.error("NOT ERROR! 涓婚敭鑾峰彇鎴愬姛"+"key=" + key + ",id=" + id,e);
}
return id;
}
/**
* 鎸囧畾闀垮害锛岄�杩囧綋鍓嶆椂闂�闅忔満鏁拌幏鍙栧敮涓�簭鍒楁爣璇�
* @param length 鎸囧畾瀛楃涓查暱搴�
* @return 鍞竴搴忓垪鏍囪瘑
*/
public static String getSequence(int length) throws CustomerException {
String datePattern="yyyyMMddHHmmssSSS";
int randomLength=length-datePattern.length();
if (randomLength<=0) {
LOGGER.error("获取流水号失败!");
return null;
}
String id = DateFormatUtils.format(new Date(), datePattern)+getRandomStringByLength(randomLength);
return id;
}
/**
* 鑾峰彇涓�畾闀垮害鐨勯殢鏈哄瓧绗︿覆
* @param length 鎸囧畾瀛楃涓查暱搴�
* @return 涓�畾闀垮害鐨勫瓧绗︿覆
*/
public static String getRandomStringByLength(int length) {
String base = "0123456789";
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
}