Interface SerialNumberGenerator
- Functional Interface:
- This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
序號生成器介面
定義業務序號(如訂單編號、客戶編號)的生成策略。 框架只提供介面定義,具體的生成邏輯由應用層實作。
設計原則:
- 介面定義序號生成契約
- 應用層實作具體的生成策略(如序號、UUID、日期格式等)
- 支援多租戶環境(透過
SerialNumberContext傳遞租戶資訊)
實作範例 - 序號式編碼:
@Component
public class OrderSerialNumberGenerator implements SerialNumberGenerator {
private final OrderRepository orderRepository;
@Override
public String generate(SerialNumberContext context) {
// 格式:{租戶代碼}-{日期}-{序號}
// 例如:T001-20250113-0001
String prefix = context.tenantCode() + "-" + context.datePart() + "-";
// 查詢當前最大序號
Integer maxSeq = orderRepository.findMaxOrderNumberSequence(prefix);
int nextSeq = (maxSeq == null ? 0 : maxSeq) + 1;
return String.format("%s%0" + context.sequenceLength() + "d", prefix, nextSeq);
}
}
實作範例 - UUID 式編碼:
@Component
public class UuidSerialNumberGenerator implements SerialNumberGenerator {
@Override
public String generate(SerialNumberContext context) {
// 格式:{前綴}-{UUID}
// 例如:ORD-550e8400-e29b-41d4-a716-446655440000
return context.prefix() + UUID.randomUUID().toString();
}
}
Service 層使用範例:
@Service
@RequiredArgsConstructor
public class OrderService {
private final SerialNumberGenerator orderSerialNumberGenerator; // 注入實作
public Order create(CreateOrderRequest request) {
Order order = new Order();
// 生成訂單編號
SerialNumberContext context = SerialNumberContext.builder()
.tenantCode(tenant.getCode())
.entityType("Order")
.prefix("ORD-")
.dateFormat("yyyyMMdd")
.sequenceLength(4)
.build();
order.setOrderNumber(orderSerialNumberGenerator.generate(context));
return orderRepository.save(order);
}
}
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptiongenerate(SerialNumberContext context) 生成業務序號static SerialNumberGenerator建立帶日期的生成器static SerialNumberGeneratorwithPrefix(Supplier<Integer> sequenceSupplier) 建立簡單的前綴式生成器
-
Method Details
-
generate
生成業務序號- Parameters:
context- 序號生成上下文,包含租戶、前綴、格式等資訊- Returns:
- 生成的業務序號
-
withPrefix
建立簡單的前綴式生成器
格式:{prefix}{sequence}
- Parameters:
sequenceSupplier- 序號提供者- Returns:
- SerialNumberGenerator 實例
-
withDate
建立帶日期的生成器
格式:{tenantCode}-{datePart}-{sequence}
- Parameters:
sequenceSupplier- 序號提供者(接收前綴,返回下一序號)- Returns:
- SerialNumberGenerator 實例
-