生成自增的编号:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
/**
* 生成工单编码
*
* @param workSheetType
* 工单类型
* @param systemName
* 系统名称
* @param cityCode
* 城市编码
* @return 形如AAA-BBB-CC-081127-0029
*/
public
synchronized
String nextWorkSheetNum(String workSheetType, String systemName, String cityCode)
{
String seqName = workSheetType + SEPARATOR + systemName + SEPARATOR + cityCode;
int
nextSequnceValue = nextDailySequnceValue(seqName);
String result = seqName + SEPARATOR + todayStr() + SEPARATOR + leftPadWithZero(nextSequnceValue, PAD4);
return
result;
}
//org.apache.commons.lang.StringUtils
//num为原数字,padwith为总共补齐的位数,0 为用什么补齐。 leftPad 是在左边用0补齐。
return
StringUtils.leftPad(String.valueOf(num), padWith,
'0'
);
//存储编号的类
public
class
IdSequnce {
private
String name;
private
int
curVal;
private
Date updatedAt;
....
}
/**
* 下一序列值,以天为周期
*
* @param name
* 序列名
* @return int数值>=1
*/
public
int
nextDailySequnceValue(String name)
{
IdSequnce seq = idSequnceDAO.getSequnceByName(name);
if
(seq ==
null
)
{
seq =
new
IdSequnce();
seq.setName(name);
seq.setCurVal(
0
);
seq.setUpdatedAt(
new
Date());
try
{
idSequnceDAO.insert(seq);
}
catch
(Exception e)
{
// 集群环境并发情况下,已被别应用服初始化该记录
seq = idSequnceDAO.getSequnceByName(name);
}
}
if
(seq.getUpdatedAt() !=
null
&& DateUtil.isBeforeToday(seq.getUpdatedAt()))
//(修改日期不为空,并且是今天之前修改的)所以,今天还没有编号
{
DevLog.debug(
"initial seq value"
);
seq.setCurVal(
0
);
}
seq.setUpdatedAt(
new
Date());
idSequnceDAO.increaseSequnce(seq);
return
seq.getCurVal();
}
/**
* 今天之前的日期
*
* @return boolean
*/
public
static
boolean
isBeforeToday(Date date) {
Date todayZero = getTodayZeroClock();
return
isBefore(date, todayZero);
}
//编号加一
public
void
increaseSequnce(IdSequnce sequnce){
sequnce.setCurVal(sequnce.getCurVal()+
1
);
update(sequnce);
}
说明:IdSequnce 创建了一个表,一个类,用来存储当前的最大的编号。
结果为:形如AAA-BBB-CC-
081127
-
0005
|
本文转自建波李 51CTO博客,原文链接:http://blog.51cto.com/jianboli/1895193,如需转载请自行联系原作者