Package io.leandev.appfuse.serial
package io.leandev.appfuse.serial
序號生成模組
提供業務序號(如訂單編號、客戶編號)的生成介面和上下文。
模組內容
SerialNumberGenerator- 序號生成器介面SerialNumberContext- 序號生成上下文
設計原則
此模組遵循「介面定義契約」的設計原則:
- 框架只定義生成介面,不提供具體實作
- 應用層根據業務需求實作生成策略
- 支援多租戶環境透過
SerialNumberContext傳遞資訊
常見序號格式
- 訂單編號:{租戶代碼}-{YYYYMMDD}-{序號} → T001-20250113-0001
- 客戶編號:{租戶代碼}-CUST-{序號} → T001-CUST-0001
- 產品編號:{前綴}{序號} → PRD-0001
使用範例
- 實作 SerialNumberGenerator:
@Component
public class OrderSerialNumberGenerator implements SerialNumberGenerator {
private final OrderRepository orderRepository;
@Override
public String generate(SerialNumberContext context) {
String prefix = context.fullPrefix();
Integer maxSeq = orderRepository.findMaxSequence(prefix);
int nextSeq = (maxSeq == null ? 0 : maxSeq) + 1;
return String.format("%s%0" + context.sequenceLength() + "d", prefix, nextSeq);
}
}
- 在 Service 中使用:
@Service
public class OrderService {
private final SerialNumberGenerator orderSerialNumberGenerator;
public Order create(CreateOrderRequest request) {
Order order = new Order();
SerialNumberContext context = SerialNumberContext.builder()
.tenantCode(tenant.getCode())
.dateFormat("yyyyMMdd")
.sequenceLength(4)
.build();
order.setOrderNumber(orderSerialNumberGenerator.generate(context));
return orderRepository.save(order);
}
}
- See Also:
-
ClassDescription序號生成上下文Builder 類別序號生成器介面