62 lines
5.2 KiB
Markdown
62 lines
5.2 KiB
Markdown
# 运营航班字段语义矩阵(v2 权威口径)
|
||
|
||
状态:2026-09-08 实现核对;以下明确区分当前行为与待验收语义。
|
||
依据:[航班状态设计](flight-state-design-v2.md)、[SIS 规范](legacy/SIS_AODB_RMS-V0.1.md)、`FlightStateEngine` 实现。
|
||
本文是字段语义入口;历史决策不覆盖本文。已发现的不一致和修正计划见 [核查报告](acm2-29-audit-and-simplification.md)。
|
||
|
||
## 1. 命令模型
|
||
|
||
当前 Handler 返回字段集,FlightStateEngine 再解析为命令;仓储仍会解析异常/文本 JSON。显式命令尚未贯通所有边界:
|
||
|
||
| 命令 | 标量 | 集合 |
|
||
|---|---|---|
|
||
| Unchanged(未出现) | 不修改 | 不修改 |
|
||
| Set(value) | 覆盖 | — |
|
||
| Clear | 删除该键,物理列置 NULL | 删除全部明细行 |
|
||
| Replace(list) | — | 同事务 DELETE + 批量 INSERT 整集合替换 |
|
||
| Apply(item, sourceSeq) | — | 引擎内预留,按首个 SOURCE_SEQ 匹配更新,否则追加;无生产调用方,尚非已确认业务协议。 |
|
||
|
||
- 序号属性为 `"0"` 的条目是协议显式清除标记:**仅当集合内全部条目均为 0** 时翻译为 Clear;与常规条目混排属非法结构,fail fast 拒绝。
|
||
- 空数组 `[]` = Replace(空集):明细行清空(区别于 Unchanged 的键缺失)。
|
||
- 验收目标:非法 JSON、未知形状、超容输入不得截断后成功。当前 parseCollection 未校验数组元素必须是对象,仓储会忽略未知属性;该目标尚未完成。
|
||
|
||
## 2. 16 类结构映射
|
||
|
||
| 集合键 | 存储载体 | 序号属性 | 出现语义 | 显式清除 | Apply |
|
||
|---|---|---|---|---|---|
|
||
| GTDT 登机口 | `flight_gate` | GTNO | Replace | GTNO=0 全清 | 支持(GTNO 定位) |
|
||
| CKDT 值机柜台 | `flight_checkin` | CKNO | Replace | CKNO=0 全清 | 支持;同 CHKC 多舱位分配按 CKNO 区分,不按资源号去重 |
|
||
| CLDT 行李转盘 | `flight_belt` | CLNO | Replace | CLNO=0 全清 | 支持 |
|
||
| PSDT 计划机位 | `flight_stand_plan` | PSNO | Replace | PSNO=0 全清 | 支持 |
|
||
| CHDT 行李滑槽 | `flight_chute` | CHNO | Replace | CHNO=0 全清 | 支持 |
|
||
| DELY 延误 | `flight_delay` | 无(仓储残留 DLNO 映射待清理) | Replace(仅保存本次集合,不追加历史) | `[]` 清空 | 不支持(协议无定位键) |
|
||
| ABTM 靠撤桥 | `flight_bridge_op` | ASNO | Replace(操作全集) | ASNO=0 全清 | 支持(ASNO 定位;多次靠/撤桥各占一行) |
|
||
| CHOT 轮挡 | `flight_chock_op` | CSNO | Replace | CSNO=0 全清 | 支持(CHID=ON/OFF 为业务属性,非序号) |
|
||
| ROUT 计划航路 | `flight_route_point(route_kind=ROUT)` | RTNO | Replace | RTNO=0 全清 | 支持 |
|
||
| ERUT 扩展航路 | `flight_route_point(route_kind=ERUT)` | RTNO | Replace | RTNO=0 全清 | 支持 |
|
||
| FDIV 备降 | 主表前缀列 `FDIV_*` | — | Set(对象) | `"null"`/`{}`/空串 → Clear | — |
|
||
| FRET 返航 | 主表前缀列 `FRET_*` | — | Set | 同上 | — |
|
||
| FLAB 中止 | 主表前缀列 `FLAB_*` | — | Set | 同上 | — |
|
||
| SRVT 服务 | 主表 `SRVT_TEXT` | — | Set | 当前字段转换器不将 null/{}/空串转 Clear;显式 ScalarCommand.Clear 可清列 | — |
|
||
| VIPF 贵宾 | 主表 `VIPF_TEXT` | — | Set | 同 SRVT | — |
|
||
| MAFL 共享航班 | 主表 `MAFL_TEXT` | — | Set | 同 SRVT | 无查询需求时维持现有载体 |
|
||
|
||
公共明细列:`FLID`(逻辑归属,当前没有数据库 FK)、`ORDINAL`(输入顺序,1 起)、`SOURCE_SEQ`(字符串、不唯一)、`RECORD_VERSION`、`CREATED_AT/UPDATED_AT`;当前 PK `(FLID, ORDINAL)`。路线表还需将 ROUTE_KIND 纳入主键,避免 ROUT/ERUT 冲突。相同资源号不代表同一条分配记录,禁止按资源号去重。表中“支持 Apply”仅指引擎分支,生产只生成 Replace/Clear。
|
||
|
||
## 3. 清除的库内与线上表达
|
||
|
||
- 库内:标量/异常/文本键 Clear → 对应列 `NULL`;集合键 Clear/Replace(空) → 明细行删除。
|
||
- 线上(KAFKA_SCHD):Clear 会移除键;Replace(空集) 当前仍生成 `[]`,数据库读回却缺键,尚未统一。下游清除契约必须固定黄金样例,再同时修正 nextState、落库读回与 wire;不得宣称已等值。
|
||
- 异常对象 Set 在增量 SQL 中只写出现的属性;旧对象被省略的属性可能残留。这与对象替换目标不一致,待回归修正。
|
||
|
||
## 4. 快照(DNLD)与增量(FLOP/ADFT)
|
||
|
||
- DNLD 事务内核:外层标量字段级合并;出现的集合 Replace;集合缺失 = Unchanged。删除走 `SCHD_GEN` 差集 + `deleteDiffByDay`(FDAY 域化)。真实 XML parser/生产路由仍未接通,不能视为端到端协议已验收。
|
||
- FLOP:字段级合并;Handler 产生的集合键出现即全量替换。
|
||
- 重放判定凭 `schd_gen.last_message_id`(快照)与 `identity_key`(消息去重);版本号只是顺序令牌。锁内 CAS 失败一律回滚 `FAILED(INFRA)`。
|
||
|
||
## 5. 时区与空值
|
||
|
||
- SIS 时间串(`DDMONYYHHMM` 机场当地时)原值保存;类型化提升按查询需要另行定案(ACM2-29 遗留 3)。
|
||
- PG 当前保留字符串空值,集合 JSON null 属性会被解析为空串。Oracle 的空字符串/NULL 等价性还未在目标库验证;显式命令本身不能保证持久化往返保真。
|