|
@@ -68,7 +68,7 @@ public class DeviceIdGenerator {
|
|
|
//当前日期
|
|
//当前日期
|
|
|
LocalDate now = LocalDate.now();
|
|
LocalDate now = LocalDate.now();
|
|
|
//下一个序列
|
|
//下一个序列
|
|
|
- int sequence = getNextSequence(now);
|
|
|
|
|
|
|
+ int sequence = getNextSequence(areaCode, kind, now);
|
|
|
//组装id
|
|
//组装id
|
|
|
return String.format("%03d%02d%s%04d", areaCode.getCode(), kind.getCode(), now.format(formatter), sequence);
|
|
return String.format("%03d%02d%s%04d", areaCode.getCode(), kind.getCode(), now.format(formatter), sequence);
|
|
|
}
|
|
}
|
|
@@ -76,17 +76,20 @@ public class DeviceIdGenerator {
|
|
|
/**
|
|
/**
|
|
|
* 获取下一个序号
|
|
* 获取下一个序号
|
|
|
*
|
|
*
|
|
|
- * @param date 时间
|
|
|
|
|
|
|
+ * @param areaCode 区号
|
|
|
|
|
+ * @param kind 种类
|
|
|
|
|
+ * @param date 时间
|
|
|
* @return 序号
|
|
* @return 序号
|
|
|
*/
|
|
*/
|
|
|
- private synchronized int getNextSequence(LocalDate date) {
|
|
|
|
|
|
|
+ private synchronized int getNextSequence(AreaCode areaCode, DeviceKind kind, LocalDate date) {
|
|
|
synchronized (repository) {
|
|
synchronized (repository) {
|
|
|
//自增
|
|
//自增
|
|
|
- repository.incrementSeqBYDate(date);
|
|
|
|
|
|
|
+ repository.incrementSeqBYDate(areaCode.getCode(), kind.getCode(), date);
|
|
|
|
|
|
|
|
//获取序号
|
|
//获取序号
|
|
|
- Integer seq = repository.findSeqByDate(date);
|
|
|
|
|
- if (seq == null) seq = repository.save(DeviceSequences.of(date, 1)).getSeq();
|
|
|
|
|
|
|
+ Integer seq = repository.findSeqByDate(areaCode.getCode(), kind.getCode(), date);
|
|
|
|
|
+ if (seq == null)
|
|
|
|
|
+ seq = repository.save(DeviceSequences.of(areaCode.getCode(), kind.getCode(), date, 1)).getSeq();
|
|
|
|
|
|
|
|
//检查序号是否超出范围
|
|
//检查序号是否超出范围
|
|
|
if (9999 < seq) throw new IllegalStateException("当日设备序号已用尽,无法生成新的设备ID");
|
|
if (9999 < seq) throw new IllegalStateException("当日设备序号已用尽,无法生成新的设备ID");
|