|  |  |  | 
|---|
|  |  |  | package com.dy.common.util; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.stereotype.Component; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.util.Calendar; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Slf4j | 
|---|
|  |  |  | @Component | 
|---|
|  |  |  | public class IDLongGenerator { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static final Object synObj = new Object() ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static final int yearLenght = 4 ;//4:年度取四位, 3:年度取三位, 2:年度取两位, 1:年度取一位, 0:年度取0位 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | *  23 10 28 09 14 40 00000 | 
|---|
|  |  |  | * 长度16的ID,年度取两位,长度18的ID,年度取四位,17位数字超出了javascript的表数范围,javascript会表数不正确 | 
|---|
|  |  |  | *  2023 10 28 09 14 40 00000 | 
|---|
|  |  |  | * 长度19的ID,年度取两位,长度18的ID,年度取四位,17位数字超出了javascript的表数范围,javascript会表数不正确 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public Long generate(){ | 
|---|
|  |  |  | return doGenerate() ; | 
|---|
|  |  |  | synchronized (synObj){ | 
|---|
|  |  |  | //Long id = doGenerate() ; | 
|---|
|  |  |  | //log.info("产生ID = " + id); | 
|---|
|  |  |  | //return id ; | 
|---|
|  |  |  | return doGenerate() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 设置后缀,不同子系统设置不同的后缀 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 执行生成 | 
|---|
|  |  |  | * @return ID | 
|---|
|  |  |  | * @return ID 20231218 104504 06900 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private synchronized Long doGenerate(){ | 
|---|
|  |  |  | private Long doGenerate(){ | 
|---|
|  |  |  | long id ; | 
|---|
|  |  |  | long now = current() ; | 
|---|
|  |  |  | if(now != last){ | 
|---|