Commit 43762b4d authored by zhiguo.liu's avatar zhiguo.liu

# 新 ID 生成器支持 data.center.id 为 0 时的反序列化

parent 1947c464
...@@ -123,7 +123,6 @@ public class DefaultUidGenerator implements UidGenerator, InitializingBean { ...@@ -123,7 +123,6 @@ public class DefaultUidGenerator implements UidGenerator, InitializingBean {
} }
} }
// TODO: 2018/3/5 反序列化 uid
@Override @Override
public String parseUID(String uidStr) { public String parseUID(String uidStr) {
BigInteger bigInteger = new BigInteger(uidStr); BigInteger bigInteger = new BigInteger(uidStr);
...@@ -138,6 +137,9 @@ public class DefaultUidGenerator implements UidGenerator, InitializingBean { ...@@ -138,6 +137,9 @@ public class DefaultUidGenerator implements UidGenerator, InitializingBean {
long sequence = (uid << (totalBits - sequenceBits)) >>> (totalBits - sequenceBits); long sequence = (uid << (totalBits - sequenceBits)) >>> (totalBits - sequenceBits);
long workerId = (uid << (totalBits - workerIdBits - sequenceBits)) >>> (totalBits - workerIdBits); long workerId = (uid << (totalBits - workerIdBits - sequenceBits)) >>> (totalBits - workerIdBits);
long dataCenterId = (uid << (totalBits - dataCenterIdBits - workerIdBits - sequenceBits)) >>> (totalBits - dataCenterIdBits); long dataCenterId = (uid << (totalBits - dataCenterIdBits - workerIdBits - sequenceBits)) >>> (totalBits - dataCenterIdBits);
if (dataCenterIdBits == 0) {
dataCenterId = 0;
}
long deltaSeconds = uid >>> (dataCenterIdBits + workerIdBits + sequenceBits); long deltaSeconds = uid >>> (dataCenterIdBits + workerIdBits + sequenceBits);
Date thatTime = new Date(TimeUnit.SECONDS.toMillis(epochSeconds + deltaSeconds)); Date thatTime = new Date(TimeUnit.SECONDS.toMillis(epochSeconds + deltaSeconds));
String thatTimeStr = DateFormatUtils.format(thatTime, DATETIME_PATTERN); String thatTimeStr = DateFormatUtils.format(thatTime, DATETIME_PATTERN);
...@@ -147,8 +149,11 @@ public class DefaultUidGenerator implements UidGenerator, InitializingBean { ...@@ -147,8 +149,11 @@ public class DefaultUidGenerator implements UidGenerator, InitializingBean {
BigInteger workerBig = getBigIntegerFromLength(workerIdBits).shiftLeft((int) sequenceBits).and(bigInteger); BigInteger workerBig = getBigIntegerFromLength(workerIdBits).shiftLeft((int) sequenceBits).and(bigInteger);
System.out.println(workerBig); System.out.println(workerBig);
long sequence = getBigIntegerFromLength(sequenceBits).and(bigInteger).longValue(); long sequence = getBigIntegerFromLength(sequenceBits).and(bigInteger).longValue();
long workerId = getBigIntegerFromLength(workerIdBits).and(bigInteger.shiftRight((int)sequenceBits)).longValue(); long workerId = getBigIntegerFromLength(workerIdBits).and(bigInteger.shiftRight((int) sequenceBits)).longValue();
long dataCenterId = getBigIntegerFromLength(dataCenterIdBits).and(bigInteger.shiftRight((int)sequenceBits+(int)workerIdBits)).longValue(); long dataCenterId = getBigIntegerFromLength(dataCenterIdBits).and(bigInteger.shiftRight((int) sequenceBits + (int) workerIdBits)).longValue();
if (dataCenterIdBits == 0) {
dataCenterId = 0;
}
long deltaSeconds = bigInteger.shiftRight((int) dataCenterIdBits + (int) workerIdBits + (int) sequenceBits).longValue(); long deltaSeconds = bigInteger.shiftRight((int) dataCenterIdBits + (int) workerIdBits + (int) sequenceBits).longValue();
Date thatTime = new Date(TimeUnit.SECONDS.toMillis(epochSeconds + deltaSeconds)); Date thatTime = new Date(TimeUnit.SECONDS.toMillis(epochSeconds + deltaSeconds));
String thatTimeStr = DateFormatUtils.format(thatTime, DATETIME_PATTERN); String thatTimeStr = DateFormatUtils.format(thatTime, DATETIME_PATTERN);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment