罗展丰
Published on 2026-05-19 / 8 Visits
0
0

编码规则架构设计

编码规则模块架构设计

一、概述

编码规则模块负责管理和生成各种业务编码,支持多种编码段类型的组合,实现灵活的编码规则配置。

二、核心架构

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 新增编码段类型

  1. 实现 ICodeAlgorithm 接口
  2. AlgorithmContext 中注册新类型
  3. 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/                # 种子数据

Comment