status: done created: 2026-07-18 complexity: 🟡中等
编码规则流水号段当前只有“排除 I / O / Z”总开关,管理员无法只排除其中一个或两个字符。本变更将配置改为 I、O、Z 三个独立选项,并让预览、真实生成、容量计算和持久化使用同一份字符集合。
完成后应满足:
excludeAmbiguous=1 且没有新字段的数据继续等价于同时排除 I/O/Z;forge-admin-ui/src/views/app-center/components/CodeRuleSegmentEditor.vue:流水号段高级配置当前使用单个 n-switch 修改 excludeAmbiguous。forge-admin-ui/src/views/app-center/code-rule-utils.js:新分段、回显归一化和预览载荷只维护 0/1 总开关。CodeRuleService / CodeRuleSegmentMapper.xml:分段保存到 ai_code_rule_segment.exclude_ambiguous。CodeRuleEngine / CodeRuleRadixCodec:用 boolean 决定是否一次性移除 I/O/Z。CodeRuleRadixCodec#alphabet(String, boolean) 在开关为 true 时固定移除 I/O/Z 及小写。AiCodeRuleSegment 与 CodeRuleSegmentDTO 没有具体字符集合字段。V1.0.36__add_structured_code_rule_segments.sql 中 exclude_ambiguous 是历史兼容字段。1 的语义从“全部排除”变成“只排除 I”,不可接受。excludeAmbiguous=1 时按 I/O/Z 全选处理;新字段非空时以新字段为准。excludeAmbiguous 字段保留:全选时同步为 1,其余组合为 0,供旧协议兼容读取。| 操作 | 表名 | 字段/索引 | 说明 |
|---|---|---|---|
| 新增字段 | ai_code_rule_segment |
excluded_characters varchar(16) |
保存规范化字符集合,如 I,O,Z |
| 数据回填 | ai_code_rule_segment |
excluded_characters |
历史 exclude_ambiguous=1 回填为 I,O,Z |
| 操作 | 接口 | 方法 | 变更内容 |
|---|---|---|---|
| 兼容扩展 | /system/code-rule 详情/新增/更新 |
GET/POST/PUT | 分段新增 excludedCharacters 字符串;保留 excludeAmbiguous |
| 兼容扩展 | /system/code-rule/preview、/ai/code-rule/preview |
POST | 预览按具体字符集合生成 |
ai_code_rule_segment Flyway 增量迁移。V1.0.36/V1.0.37,新增更高版本迁移。excludedCharacters 字符串协议并保留旧 0/1 字段,避免位掩码破坏历史语义。CodeRuleRadixCodec,引擎、容量与缓存统一消费规范值。| Task | 状态 | 实际改动文件 | 备注 |
|---|---|---|---|
| 建立基线 | 完成 | 本目录四份 SDD 文档 | 复用 2026-07-17 编码规则验证基线 |
| 前后端实现 | 完成 | UI、DTO/Entity、Codec/Engine、Service/Mapper、V1.0.39 | 旧总开关兼容为全选 |
| 增量验证 | 完成 | Test、Lint、Build、Playwright、静态检查 | 详细证据见 execution-log.md |