编码规则模块架构设计
一、概述
编码规则模块负责管理和生成各种业务编码,支持多种编码段类型的组合,实现灵活的编码规则配置。
二、核心架构
2.1 架构层次
┌─────────────────────────────────────────────────────────────────┐
│ Controller 层 │
│ EncoderRuleController / EncoderRuleConfigController / ... │
├─────────────────────────────────────────────────────────────────┤
│ Service 层 │
│ EncoderRuleService / EncoderGeneratorService / ... │
├─────────────────────────────────────────────────────────────────┤
│ 编码生成器 (Algorithm) │
│ ICodeAlgorithm / FixCharAlgorithm / DateCodeAlgorithm / ... │
├─────────────────────────────────────────────────────────────────┤
│ Mapper 层 │
│ EncoderRuleMapper / EncoderRuleDetailMapper / ... │
├─────────────────────────────────────────────────────────────────┤
│ 数据库层 │
│ sys_encoder_rule / sys_encoder_rule_detail / ... │
└─────────────────────────────────────────────────────────────────┘
2.2 核心组件
| 组件 | 职责 | 文件路径 |
|---|---|---|
| EncoderRuleService | 编码规则 CRUD 管理 | service/EncoderRuleService.java |
| EncoderGeneratorService | 编码生成核心逻辑 | service/EncoderGeneratorService.java |
| EncoderGeneratorProxyService | 编码生成代理服务 | service/EncoderGeneratorProxyService.java |
| ICodeAlgorithm | 编码段算法接口 | service/impl/encodergenerator/ICodeAlgorithm.java |
| EncoderSeedDataLoader | 种子数据加载器 | seed/EncoderSeedDataLoader.java |
三、数据表关系
3.1 核心表结构
sys_encoder_rule (编码规则主表)
├── encoder_rule_id (主键)
├── code (规则编码)
├── name (规则名称)
├── state (状态: 草稿/发布)
└── ...
sys_encoder_rule_detail (编码段明细表)
├── encoder_rule_detail_id (主键)
├── encoder_rule_id (关联主表)
├── segment_type (编码段类型)
├── sort_num (排序号)
└── segment_config (段配置 JSON)
sys_encoder_sequence (流水号表)
├── encoder_sequence_id (主键)
├── encoder_rule_id (关联规则)
├── current_value (当前值)
├── max_value (最大值)
└── ...
sys_encoder_rule_config (编码规则配置)
├── encoder_rule_config_id (主键)
├── encoder_rule_id (关联规则)
├── site_id (工厂ID)
└── ...
3.2 表关系图
sys_encoder_rule 1 ─── * sys_encoder_rule_detail
│
├── 1 ─── * sys_encoder_sequence
└── 1 ─── * sys_encoder_rule_config
│
└── 1 ─── * sys_encoder_rule_config_site
四、编码段类型
4.1 支持的编码段类型
| 类型代码 | 类型名称 | 算法类 | 说明 |
|---|---|---|---|
fixchar |
固定字符 | FixCharAlgorithm | 固定不变的字符段 |
datecode |
日期码 | DateCodeAlgorithm | 日期时间格式 |
sequence |
流水号 | SequenceAlgorithm | 自增序列 |
snow |
雪花算法 | SnowAlgorithm | UUID风格 |
custom |
自定义 | CustomAlgorithm | 动态传入参数 |
4.2 日期格式枚举 (DateFormatEnum)
| 代码 | 格式 | 示例 |
|---|---|---|
| 0 | yyyyMMddHHmmss | 20240101120000 |
| 2 | yyyyMMdd | 20240101 |
| 4 | yyyyMM | 202401 |
| 7 | yyyyww | 202401 (年周) |
五、编码生成流程
5.1 流程图
请求生成编码
│
▼
┌──────────────────────┐
│ 1. 获取编码规则 │
│ (EncoderRuleView) │
└──────────────────────┘
│
▼
┌──────────────────────┐
│ 2. 验证规则状态 │
│ (必须为发布状态) │
└──────────────────────┘
│
▼
┌──────────────────────┐
│ 3. 创建算法实例 │
│ (按段类型创建) │
└──────────────────────┘
│
▼
┌──────────────────────┐
│ 4. 各段并行生成 │
│ (generateSegment) │
└──────────────────────┘
│
▼
┌──────────────────────┐
│ 5. 拼接编码结果 │
│ (StringBuilder) │
└──────────────────────┘
│
▼
返回编码列表
5.2 核心代码流程
// EncoderGeneratorServiceImpl.generateEncoder()
1. EncoderRuleValidator.validate(encoderRuleViewDTO) // 验证
2. createAlgorithms(encoderRuleViewDTO) // 创建算法实例
3. algorithm.generateSegment(count, map) // 各段生成
4. StringBuilder 拼接所有段 // 拼接结果
5. algorithm.removeThreadLocal() // 清理资源
六、关键设计模式
6.1 策略模式 (Strategy Pattern)
编码段算法使用策略模式,ICodeAlgorithm 为策略接口,各具体算法为策略实现:
ICodeAlgorithm (策略接口)
│
├── FixCharAlgorithm
├── DateCodeAlgorithm
├── SequenceAlgorithm
├── SnowAlgorithm
└── CustomAlgorithm
6.2 工厂模式 (Factory Pattern)
AlgorithmContext 根据段类型创建对应的算法实例:
public ICodeAlgorithm getAlgorithm(String segmentType) {
switch(segmentType) {
case "fixchar": return new FixCharAlgorithm();
case "datecode": return new DateCodeAlgorithm();
// ...
}
}
七、扩展机制
7.1 新增编码段类型
- 实现
ICodeAlgorithm接口 - 在
AlgorithmContext中注册新类型 - 在
EncoderSegmentEnum中添加枚举值
7.2 种子数据扩展
实现 SeedCoderRuleInitial 接口,在 encoder/seed/ 下创建种子数据类:
@Component
public class MyEncoderRuleSeed implements SeedCoderRuleInitial {
@Override
public List<?> getSeedData() {
// 返回 EncoderRuleSeedDTO 或 EncoderRuleConfigSeedDTO 列表
}
}
八、目录结构
encoder/
├── controller/ # REST API 控制层
├── service/ # 业务服务层
│ └── impl/
│ └── encodergenerator/ # 编码生成算法实现
├── mapper/ # 数据访问层
├── entity/ # 数据库实体
├── dto/ # 数据传输对象
├── convert/ # 对象转换
├── enums/ # 枚举定义
├── errors/ # 错误定义
└── seed/ # 种子数据