|
@@ -1,69 +0,0 @@
|
|
-package com.diagbot.idc;
|
|
|
|
-
|
|
|
|
-import com.diagbot.util.DateUtil;
|
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
|
-import org.apache.commons.lang3.RandomUtils;
|
|
|
|
-import org.apache.commons.lang3.time.DateUtils;
|
|
|
|
-
|
|
|
|
-import java.util.Calendar;
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * @Description: 可见id每秒递增
|
|
|
|
- * @author: gaodm
|
|
|
|
- * @time: 2018/9/5 10:45
|
|
|
|
- */
|
|
|
|
-@Slf4j
|
|
|
|
-public class VisibleIdShortCreater extends AbstractIdCreater<Integer> {
|
|
|
|
-
|
|
|
|
- private long lastTimestamp = -1L;
|
|
|
|
-
|
|
|
|
- private long sequence = 0L;
|
|
|
|
- private long sequenceMask = 9999;
|
|
|
|
-
|
|
|
|
- public VisibleIdShortCreater(int machineId, int dataCenterId) {
|
|
|
|
- super(machineId, dataCenterId);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- /**
|
|
|
|
- * 对外id生成规则
|
|
|
|
- * 1809051234550001
|
|
|
|
- * 180905 - 12345 - 1 - 0001
|
|
|
|
- * 日期 - 秒数 - 业务 - 秒内自增
|
|
|
|
- * @param type 业务id 1.订单 2.交易 3.退款
|
|
|
|
- * @return 生成的id
|
|
|
|
- */
|
|
|
|
- public synchronized Long getNextId(Integer type) {
|
|
|
|
-
|
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
|
-
|
|
|
|
- long timestamp = timeGen() / 1000;
|
|
|
|
-
|
|
|
|
- if (timestamp < lastTimestamp) {
|
|
|
|
- log.error(String.format("clock is moving backwards. Rejecting requests until %d.", lastTimestamp));
|
|
|
|
- throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (lastTimestamp == timestamp) {
|
|
|
|
- sequence = (sequence + 1);
|
|
|
|
- if (sequence > sequenceMask) {
|
|
|
|
- //timestamp = tilNextMillis(lastTimestamp);
|
|
|
|
- log.error(String.format("id creater sequence is full. wait to next time"));
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- sequence = getNewSequence();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- lastTimestamp = timestamp;
|
|
|
|
-
|
|
|
|
- String date = DateUtil.format(calendar.getTime(), "yyMMdd");
|
|
|
|
- long seconds = DateUtils.getFragmentInSeconds(calendar, Calendar.DAY_OF_YEAR);
|
|
|
|
-
|
|
|
|
- return Long.valueOf(date + String.format("%05d", seconds) + String.valueOf(type) + sequence);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private long getNewSequence() {
|
|
|
|
- return RandomUtils.nextInt(1000, 2000);
|
|
|
|
- }
|
|
|
|
-}
|
|
|