package com.java110.common.util; import com.java110.common.cache.MappingCache; import com.java110.common.constant.MappingConstant; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 生成序列工具类 * Created by wuxw on 2017/2/27. */ public class SequenceUtil { private static final long ONE_STEP = 1000000; private static final Lock LOCK = new ReentrantLock(); private static short lastCount = 1; private static int count = 0; private static final String first = "10"; /** * * 只有在不调用服务生成ID时有用 */ private static Map prefixMap = null; static { prefixMap = new HashMap(); //10+yyyymmdd+八位序列 prefixMap.put("oId","10"); //(20+yyyymmdd+八位序列) prefixMap.put("bId","20"); //(11+yyyymmdd+八位序列) prefixMap.put("attrId","11"); prefixMap.put("transactionId","1000001"); prefixMap.put("dataFlowId","2000"); } private static String PLATFORM_CODE = "0001"; @SuppressWarnings("finally") public static String nextId(String idLength) { LOCK.lock(); try { if (lastCount == ONE_STEP) { lastCount = 1; } count = lastCount++; } finally { LOCK.unlock(); return String.format(idLength, count); } } public static String nextId(){ return nextId("%06d"); } /** * 获取交易流水ID * * @return */ public static String getTransactionId() { //从内存中获取平台随机码 return prefixMap.get("transactionId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId(); } public static String getOId(){ if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){ return prefixMap.get("oId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%08d"); } //调用服务 return null; } public static String getBId(){ if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){ return prefixMap.get("bId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%08d"); } //调用服务 return null; } public static String getAttrId(){ if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){ return prefixMap.get("attrId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%08d"); } //调用服务 return null; } public static String getDataFlowId(){ if(!MappingConstant.VALUE_ON.equals(MappingCache.getValue(MappingConstant.KEY_NEED_INVOKE_GENERATE_ID))){ return prefixMap.get("dataFlowId") + DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_H) + nextId("%08d"); } return null; } }