文档版本:1.0 编写日期:2026-07-16 状态:已实现
本文档描述 Forge 平台「编码规则设定」功能的功能性需求,作为产品验收、用户使用及后续迭代的依据。
Forge 原有编码规则能力(ai_code_rule)采用单表+模板字符串方式(如 WL${yyyyMMdd}${seq:3}),仅满足简单自动编号场景。面对 MES/ERP/WMS 等企业级场景,业务方对编码规则提出了更结构化、可视化、分段可控的要求,包括按段定义、实时预览、流水号重置与分组计数等。
为此,平台将编码规则重构为分段式模型(主表 + 分段明细子表),升级为平台级基础能力,统一服务于单据编号、载具编码、料箱编码、物料编码等所有业务模块。
| 角色 | 权限范围 | 典型场景 |
|---|---|---|
| 系统管理员 | 规则的新增/修改/删除/启停/预览/生成 | 配置载具编码、料箱编码、单据编号等平台规则 |
| 业务系统(调用方) | 调用生成接口获取编号 | 低代码业务对象新增时自动编号、单据生成时取号 |
| 普通用户 | 查看启用规则列表 | 业务表单中选择/查看可用编码规则 |
需求描述:系统管理员可对编码规则主记录进行新增、修改、删除、分页查询、查看详情及启用/停用操作。
功能要点:
模块_实体_ID(如 CARRIER_ID、PO_ORDER_NO)验收标准:
需求描述:在规则编辑界面内,以可视化表格形式维护编码规则的分段明细,支持动态增删与排序。
功能要点:
验收标准:
需求描述:系统支持五种段类型,覆盖企业编码的全部场景。
| 段类型 | 说明 | 格式值示例 | 典型用途 |
|---|---|---|---|
| DATE 日期变数 | 按当前时间格式化 | yyyyMMdd、yyyyMM、yyyy |
单据日期前缀 |
| FIXED 固定字元 | 常量字符串直接拼接 | WL、HT、CG |
业务标识前缀 |
| SEQ 顺序位数 | 流水号递增 | DECIMAL、HEX、ALPHA_UPPER、ALPHA_LOWER、ALPHANUMERIC |
序号、字母递增编码 |
| VARIABLE 变量值 | 运行时由调用方传入变量取值(合并原字典值与字段引用) | warehouseCode、warehouseType |
按业务字段/字典分类编码、分组计数 |
| SYS_VAR 系统变量 | 取当前系统上下文值 | tenantId、orgCode、userId |
租户/组织维度 |
功能要点:
DECIMAL 十进制:0-9(最常用,如 0001、9999)HEX 十六进制:0-9A-F(如 000A、00FF)ALPHA_UPPER 大写字母:默认 A-Z 全集26个字符;可选去除易混淆字符后为 A-H、J-N、P-Y 共23个字符ALPHA_LOWER 小写字母:默认 a-z 全集26个字符;可选去除易混淆字符后为 a-h、j-n、p-y 共23个字符ALPHANUMERIC 字母数字:默认 0-9A-Z 全集36个字符;可选去除易混淆字符后为 0-9 + A-H + J-N + P-Y 共33个字符(容量最大)excludeAmbiguous(Y/N),开启后字母进制去除 I、O、Z(及小写 i、o、z),因与数字 1、0、2 相似易混淆;默认关闭(使用完整字符集)0)与溢出检测(超出长度范围时报错)seg_format 填写变量名(即取值 key),可表示业务字段(如 warehouseCode)或字典分类(如 warehouseType),长度按需设置fields 统一传入,不在规则中固定;不再区分 dictValues 与 fieldsseg_format(变量名)从 fields Map 取值并拼入编码变量值[xxx]未提供,调用方必须提供warehouseCode, 长度4) + SEQ(DECIMAL, 3位);调用传入 fields: { "warehouseCode": "WH01" } -> WHWH01001warehouseType, 长度2) + SEQ(DECIMAL, 4位);调用传入 fields: { "warehouseType": "01" } -> M010001、M010002orgCode, 前置码=Y) + DATE(yyyyMMdd) + SEQ(DECIMAL, 4位, 按日);不同 orgCode 各自独立计数典型场景:
CG0001、CG0002AA、AB、AC(适用于货架库位编码;可开启去除易混淆字符避免 I/O/Z 与 1/0/2 混淆)0001、000A、000F、0010流水号进制组合示例:
下表针对 SEQ 段的 5 种进制,分别给出「规则配置 + 前 5 个生成序列 + 溢出边界」的完整示例,便于直观理解每种进制的递增与进位规则。
| 进制类型 | 规则组合(段配置) | 补位 | 长度 | 生成序列示例(前5个) | 进位示例 | 最大值(溢出边界) | 适用场景 |
|---|---|---|---|---|---|---|---|
DECIMAL十进制 0-9 |
FIXED("C") + SEQ(DECIMAL) | 左补 0 |
6 | C000001→C000002→C000003→C000004→C000005 |
C000009→C000010(9→10 进位) |
C999999(第 100 万个后溢出报错) |
客户编码、采购单号、出库单号 |
DECIMAL十进制 0-9 |
FIXED("CG") + DATE(yyyyMMdd) + SEQ(DECIMAL) | 左补 0 |
4 | CG202607160001→...0002→...0003→...0004→...0005 |
...0009→...0010 |
CG202607169999(当日第 1 万个溢出) |
按日重置的日单据编号 |
HEX十六进制 0-9A-F |
SEQ(HEX) | 左补 0 |
4 | 0000→0001→0002→...0009→000A |
000F→0010(F→10 进位) |
FFFF(65536 个后溢出) |
短码高容量编号(如二维码批次号) |
HEX十六进制 0-9A-F |
FIXED("BX") + SEQ(HEX) | 左补 0 |
3 | BX000→BX001→...BX009→BX00A→BX00B |
BX00F→BX010 |
BXFFF(4096 个后溢出) |
料箱批次编码 |
ALPHA_UPPER大写字母 A-Z |
FIXED("A") + SEQ(ALPHA_UPPER) | 左补 A |
2 | AA->AB->AC->AD->AE |
AZ->BA(Z->A 进位,十位+1) |
ZZ(676 个后溢出) |
货架库位编码(A区-AA货架) |
ALPHA_UPPER大写字母 去除IOZ |
FIXED("A") + SEQ(ALPHA_UPPER, excludeAmbiguous=Y) | 左补 A |
2 | AA->AB->AC->AD->AE |
AY->BA(Y->A 进位) |
YY(529 个后溢出) |
需避免 I/O/Z 与 1/0/2 混淆的场景 |
ALPHA_UPPER大写字母 A-Z |
SEQ(ALPHA_UPPER) | 左补 A |
3 | AAA→AAB→AAC→AAD→AAE |
AAZ→ABA;AZZ→BAA |
ZZZ(17576 个后溢出) |
仓库分区/库区三级编码 |
ALPHA_LOWER小写字母 a-z |
FIXED("b") + SEQ(ALPHA_LOWER) | 左补 a |
2 | baa->bab->bac->bad->bae |
baz->bba(z->a 进位) |
bzz(676 个后溢出) |
内部短码、与大小写敏感场景区分 |
ALPHA_LOWER小写字母 去除ioz |
FIXED("b") + SEQ(ALPHA_LOWER, excludeAmbiguous=Y) | 左补 a |
2 | baa->bab->bac->bad->bae |
bay->bba(y->a 进位) |
byy(529 个后溢出) |
需避免 i/o/z 混淆的内部短码 |
ALPHANUMERIC字母数字 0-9A-Z |
SEQ(ALPHANUMERIC) | 左补 0 |
4 | 0000->0001->0002->...0009->000A |
000Z->0010(Z->10 进位) |
ZZZZ(约 168 万个后溢出,容量最大) |
高容量短码(如券码、兑换码) |
ALPHANUMERIC字母数字 去除IOZ |
SEQ(ALPHANUMERIC, excludeAmbiguous=Y) | 左补 0 |
4 | 0000->0001->...0009->000A |
000Y->0010(Y->10 进位) |
YYYY(约 119 万个后溢出) |
高容量短码且避免混淆字符 |
ALPHANUMERIC字母数字 0-9A-Z |
FIXED("Q") + SEQ(ALPHANUMERIC) | 左补 0 |
3 | Q000→Q001→...Q009→Q00A→Q00B |
Q00Z→Q010 |
QZZZ(46656 个后溢出) |
优惠券/兑换券编码 |
进位规则说明:
DECIMAL:逢 10 进 1(9→10)HEX:逢 16 进 1(F→10)ALPHA_UPPER/ALPHA_LOWER:默认逢 26 进 1(Z->BA);开启去除易混淆字符后逢 23 进 1(Y->BA)ALPHANUMERIC:默认逢 36 进 1(Z->10);开启去除易混淆字符后逢 33 进 1(Y->10)- 补位字符:DECIMAL/HEX/ALPHANUMERIC 默认补
0;ALPHA_UPPER 默认补A;ALPHA_LOWER 默认补a
验收标准:
需求描述:顺序位数(SEQ)段支持按时间周期重置与按业务字段分组独立计数两个维度。
功能要点:
NONE 不重置YEAR 按年重置(如合同编号、年度单号)MONTH 按月重置(如月结单据)DAY 按日重置(最常用,如出库单/采购单/调拨单)HOUR 按时重置(高频编码场景)典型场景:
C000001(不重置):FIXED("C") + SEQ(6位, 不重置),跨年不归零HT202600001(按年):FIXED("HT") + DATE(yyyy) + SEQ(5位, 按年)CG202607140001(按日):FIXED("CG") + DATE(yyyyMMdd) + SEQ(4位, 按日)ORG001202607140001(按日+分组):SYS_VAR(orgCode) + DATE(yyyyMMdd) + SEQ(4位, 按日, group=orgCode)重置周期 × 分组字段 组合示例:
下表覆盖「重置周期」与「分组字段」两个维度的全部组合,每行给出规则配置、计数 key 结构与生成序列示例。
| 重置周期 | 分组字段 | 规则配置 | 计数 key(period/group) | 生成序列示例 | 场景说明 |
|---|---|---|---|---|---|
NONE 不重置 |
无 | FIXED("C") + SEQ(DECIMAL, 6位, reset=N) | ...:global:global |
C000001->C000002->...->C000099(跨年持续) |
客户/物料/供应商主数据编码,永不归零 |
NONE 不重置 |
有 (warehouseCode) |
FIXED("WH") + VARIABLE(warehouseCode, 前置码=Y) + SEQ(DECIMAL, 3位, reset=N) | ...:WH001:global...:WH002:global |
仓库WH001:WHWH001001->001002仓库WH002: WHWH002001->001002 |
按仓库独立计数,各仓库从1开始且永不归零 |
YEAR 按年 |
无 | FIXED("HT") + DATE(yyyy) + SEQ(DECIMAL, 5位, reset=Y, policy=YEAR) | ...:global:2026...:global:2027 |
2026年:HT202600001->00022027年1月: HT202700001(归零) |
合同编号、年度单据,每年从1开始 |
YEAR 按年 |
有 (deptCode) |
FIXED("HT") + DATE(yyyy) + SEQ(DECIMAL, 4位, reset=Y, policy=YEAR, group=deptCode) | ...:D001:2026...:D002:2026 |
部门D001:HT2026D0010001->0002部门D002: HT2026D0020001(独立) |
按部门分组的年度合同,各部门每年独立从1开始 |
MONTH 按月 |
无 | FIXED("MJ") + DATE(yyyyMM) + SEQ(DECIMAL, 4位, reset=Y, policy=MONTH) | ...:global:202607...:global:202608 |
7月:MJ2026070001->00028月1日: MJ2026080001(归零) |
月结单据,每月从1开始 |
MONTH 按月 |
有 (warehouseCode) |
FIXED("MJ") + DATE(yyyyMM) + SEQ(DECIMAL, 3位, reset=Y, policy=MONTH, group=warehouseCode) | ...:WH01:202607...:WH02:202607 |
仓库WH01 7月:MJ202607WH01001仓库WH02 7月: MJ202607WH02001 |
按仓库分组的月结单,各仓库每月独立 |
DAY 按日 |
无 | FIXED("CG") + DATE(yyyyMMdd) + SEQ(DECIMAL, 4位, reset=Y, policy=DAY) | ...:global:20260716...:global:20260717 |
7/16:CG202607160001->00027/17: CG202607170001(归零) |
采购单/出库单/调拨单,每天从1开始 |
DAY 按日 |
有 (orgCode) |
SYS_VAR(orgCode) + DATE(yyyyMMdd) + SEQ(DECIMAL, 4位, reset=Y, policy=DAY, group=orgCode) | ...:ORG001:20260716...:ORG002:20260716 |
组织ORG001 7/16:ORG001202607160001组织ORG002 7/16: ORG002202607160001 |
组织日流水,各组织每天独立从1开始 |
HOUR 按时 |
无 | FIXED("HF") + DATE(yyyyMMddHH) + SEQ(DECIMAL, 3位, reset=Y, policy=HOUR) | ...:global:2026071614...:global:2026071615 |
14时:HF2026071614001->00215时: HF2026071615001(归零) |
高频编码(如扫码批次),每小时从1开始 |
HOUR 按时 |
有 (lineCode) |
FIXED("HF") + DATE(yyyyMMddHH) + SEQ(DECIMAL, 3位, reset=Y, policy=HOUR, group=lineCode) | ...:L01:2026071614...:L02:2026071614 |
产线L01 14时:HF2026071614L01001产线L02 14时: HF2026071614L02001 |
按产线分组的高频编码,各产线每小时独立 |
计数 key 结构说明:
sys-code-rule:{租户ID}:{规则ID}:seg{段序号}:{分组值}:{周期}
- 不重置时:分组值=
global、周期=global,key 永不变(全局递增)- 重置时:周期随时间变化(YEAR->
2026、MONTH->202607、DAY->20260716、HOUR->2026071614)- 分组时:分组值为字段值(如
WH001),不同值各自独立计数
验收标准:
需求描述:在规则编辑过程中,实时预览当前配置产出的编码效果。
功能要点:
y + M + xxxxx)、生成示例值(如 25M00001)、总长度、分段彩色标识验收标准:
需求描述:提供统一的编码生成接口,供业务系统调用以获取下一个编号。
功能要点:
fields 传入变量,系统按段配置的 seg_format(变量名)从 fields Map 取值;取不到时报错fields 传入变量,系统按前置码段值作为分组维度计算计数 key调用示例:
POST /system/code-rule/generate
{
"ruleCode": "PURCHASE_NO",
"fields": {
"warehouseCode": "WH001",
"supplierCode": "SUP001",
"warehouseType": "01"
}
}
说明:fields 统一传入 VARIABLE 段及 SEQ 分组所需变量(含业务字段与字典分类值),SYS_VAR 段由系统自动取登录信息,调用方无需传入。
验收标准:
需求描述:提供编码规则的分页查询、启用列表查询与详情查询能力。
功能要点:
验收标准:
需求描述:提供接口返回系统支持的所有段类型及可用格式符,供前端动态渲染提示。
功能要点:
验收标准:
需求描述:在应用中心下提供「编码规则」菜单入口,并配置相应操作权限。
功能要点:
/app-center/code-rules(恢复原路径,便于用户习惯)system:codeRule:list/add/edit/remove验收标准:
需求描述:将旧 ai_code_rule 表中的编码规则数据平滑迁移到新分段式模型。
功能要点:
验收标准:
需求描述:保持低代码业务对象字段「自动编号」能力正常工作。
功能要点:
/ai/code-rule 接口保留为兼容层(list/preview/generate),供低代码设计器继续引用验收标准:
| 类别 | 要求 |
|---|---|
| 并发安全 | 流水号生成基于分布式锁,并发场景不产生重复编号 |
| 数据安全 | 接口支持请求加解密;写操作记录操作日志;权限校验 |
| 参数校验 | 接口入参使用 JSR303 校验,非法参数拒绝处理 |
| 兼容性 | 旧接口保留兼容层,平滑过渡,不中断现有业务 |
| 可扩展性 | 编码分类、段类型、进制类型均支持字典扩展 |
| 性能 | 预览接口防抖处理;生成接口基于 Redis 高性能计数 |
| 数据完整性 | 分段保存采用事务,主表与子表一致;逻辑删除保留历史 |
0,FIXED 段无需补位sys-code-rule:{租户ID}:{规则ID}:seg{段序号}:{分组值}:{周期}| 术语 | 说明 |
|---|---|
| 编码规则 | 一套编码生成规则,由若干分段组成 |
| 分段(Segment) | 编码规则的一个组成部分,如日期段、流水号段 |
| 段类型 | 分段的类型,共5种:DATE/FIXED/SEQ/VARIABLE/SYS_VAR |
| 流水号(SEQ) | 顺序递增的序号段,支持进制转换与补位 |
| 重置周期 | 流水号归零的时间维度:年/月/日/时 |
| 分组字段 | 流水号按该字段值独立计数的维度;本功能中通过将该段标记为"前置码"实现分组 |
| 前置码(is_prefix) | 分段的分组标记,标记为前置码的段其值作为 SEQ 流水号的分组依据;前置码即分组 |
| 进制 | 流水号数字的表示方式,字母也是其中一种:十进制(0-9)/十六进制(0-9A-F)/大写字母(A-Z)/小写字母(a-z)/字母数字(0-9A-Z) |
| 易混淆字符(excludeAmbiguous) | SEQ 段可选开关,开启后字母进制去除 I/O/Z(及小写 i/o/z),避免与数字 1/0/2 混淆;默认关闭 |
| 内置规则 | 系统预置的编码规则,不可删除 |
| 上下文(Context) | 调用生成接口时由调用方传入的变量集合(fields Map),供 VARIABLE 段及 SEQ 分组取值;SYS_VAR 段由系统自动取登录信息,无需传入 |