docs: 纠正对齐后的文档反向漂移(UNSUPPORTED/CHDT/FDEL/Flyway)

ACM2-83/87/90 落地后 reference、implementation、MsgEvent 与迁移注释仍描述旧行为;拆开 UNSUPPORTED 两行,并写清 V1+V2 与删航班只走 msg。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
windyboy
2026-09-21 14:04:55 +08:00
co-authored by Cursor
parent f9d51399da
commit 2fb9e76919
5 changed files with 14 additions and 10 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ MSGX_MAILBOX_URL=jdbc:mysql://localhost:3306/cdairport?useSSL=false&allowPublicK
MSGX_MAILBOX_USER=msgx_dev
MSGX_MAILBOX_PASSWORD=msgx_dev_pass
# 2. 自有 PostgreSQLdev compose: postgres 服务,应用启动设 MSGX_FLYWAY_ENABLED=true 时由 Flyway 自动执行 V1.0.0 与 V1.1.0 迁移
# 2. 自有 PostgreSQLdev compose: postgres 服务,应用启动设 MSGX_FLYWAY_ENABLED=true 时由 Flyway 执行 V1 + V2
MSGX_PG_URL=jdbc:postgresql://localhost:5432/msgx
MSGX_PG_USER=msgx_dev
MSGX_PG_PASSWORD=msgx_dev_pass
+3 -3
View File
@@ -300,7 +300,7 @@ PG 是航班数据源(`INV-5`);Redis 从 PG 同步,处理完成前写入
| 资源明细表 | 保存登机门、值机柜台、转盘、计划机位、滑槽、延误、靠撤桥、轮挡等变长集合;`SRVT`/`VIPF` 专用明细见 `G-SRVT-VIPF`。主键为 `(FLID, ORDINAL)`。 |
| `FLIGHT_ROUTE_POINT` | ROUT 与 ERUT 两类路线点,使用 `ROUTE_KIND` 区分;主键应包含该列,避免两类路线的序号冲突。 |
| `PROC_STATE` | 信箱消息的处理终态、业务身份幂等记录,以及回填事实(`RECEIVED_AT` / `BACKFILL_*`)。 |
| `MSG_EVENT` | 事务 outbox,承载整态快照变更通知和删除事件(tombstone)。 |
| `MSG_EVENT` | 事务 outbox,承载整态快照变更通知;删航班只走 `msg``C-9`)。 |
| `SCHD_SNAP_LOG` | 日计划处理留痕,只追加、可重建,不参与状态决策。 |
### 11.2 航班身份与运营日
@@ -342,7 +342,7 @@ PG 是航班数据源(`INV-5`);Redis 从 PG 同步,处理完成前写入
- 相同资源号不代表同一条分配,禁止按资源号去重。
- 每次持久化完整航班状态时,明细表按该 `FLID` 先删后插,以完整合并结果为准。
- ROUT 与 ERUT 是两类独立集合,不能因相同序号覆盖彼此。
- `CHDT` 的类字段固定为 `CCLS`/`CTYP`;当前 wire DTO 与持久化列误写成 `CHCLS`/`CHTYP`,见 `G-FLOP-UNMAPPED`
- `CHDT` 的类字段固定为 `CCLS`/`CTYP`wire DTO 与 `flight_chute``ccls`/`ctyp` 已对齐;迁移见 `V2__flight_chute_class_type_rename.sql`
- 主/共享:`MAID` 指向主航班 `FLID``MAFL` 从子航班派生,不入站。
### 11.4 `MAFL`
@@ -395,7 +395,7 @@ PG 是航班数据源(`INV-5`);Redis 从 PG 同步,处理完成前写入
### 12.3 删除与重建
FDEL`ACTIVE→DELETED` tombstone。物理删除仅历史清理成功后(`US-14``D1`)。覆盖范围内快照缺席也标删(`INV-7`)。
FDEL`ACTIVE→DELETED`只登记 `KAFKA:msg` 变更通知(`C-9`;不再写 `schd` tombstone。物理删除仅历史清理成功后(`US-14``D1`)。覆盖范围内快照缺席也标删(`INV-7`)。
ADFTSet-only`US-04` AC2),未带字段不清。有 `SODT` 则算 `OPERATION_DAY`
+2 -1
View File
@@ -137,7 +137,8 @@
| `MALFORMED` | 找不到原文,或 XML、必要字段无效 | 立即记 `DEAD`,停止自动处理 | 否 |
| `PROTOCOL` | 整份报文未通过业务校验,或运营日不一致 | 整份不写数据库,记 `DEAD` | 否 |
| `CODEC_ERROR` | 解码程序尚不能识别报文结构 | 记 `FAILED`,等待后重试 | 是 |
| `UNSUPPORTED` | 当前没有对应处理程序 | 当前代码记 `FAILED` 并重试;`US-03` AC2 要求跳过合法未知类型 | 是 |
| `UNSUPPORTED`(合法未知类型) | 报文种类可识别,但没有对应处理程序`MsgKind.Unsupported` | 记 `SKIPPED`,写回信箱为已处理(`US-03` AC2) | 否(终态,不进重放白名单) |
| `UNSUPPORTED`(参考数据) | 参考数据类别已识别,但处理器尚未落地(`MsgKind.RefData` | 记 `FAILED(UNSUPPORTED)` 并重试 | 是 |
| `INFRA` | 数据库、网络或程序执行出错 | 记 `FAILED`,等待后重试 | 是 |
| `EXHAUSTED` | 自动重试次数已用尽 | 记 `DEAD`;原错误类别被覆盖,原因留在 `LAST_ERROR` | 是 |
@@ -1,6 +1,9 @@
package com.gzzn.omms.msgexchange.domain
/** 事件的两种形态:UPSERT 是新增或更新(可能是整态也可能是变化通知),TOMBSTONE 是删除。 */
/**
* 事件形态。生产路径只写 [UPSERT]:删除通知也走 `KAFKA:msg` 的 UPSERT 变更(`C-9`)。
* [TOMBSTONE] 仍保留在枚举与投递分支里,当前无生产写入方(待 `Q5` 定稿清理或保留)。
*/
enum class EventType { UPSERT, TOMBSTONE }
/** 投递状态:PENDING 待发 → SENT 已发出;发送失败按退避重试,重试次数用尽转 DEAD,留在表里当死信队列。 */
@@ -11,8 +14,8 @@ enum class EventStatus { PENDING, SENT, DEAD }
*
* 写业务数据时在同一个事务里往这里插一行,投递线程随后按行发出,这样业务提交和"该发的事件"
* 不会脱节。KAFKA_SCHD 发完整状态,KAFKA_MSG 只发"这个航班变了"的通知;两个主题之间不保证
* 先后顺序。TOMBSTONE 只在两种情况下登记:航班从在用变成删除,或者被生命周期清理前补发
* 一次删除通知。见 docs/implementation.md「Kafka 与读取」。
* 先后顺序。删航班只登记 `KAFKA:msg``C-9`),不再写 schd tombstone。见
* docs/implementation.md「Kafka 与读取」。
*
* stateVersion 是发布时的航班版本号;同一 FLID 攒了多条待发事件时,只发版本号最新的那条。
*/
+2 -2
View File
@@ -47,8 +47,8 @@ micronaut:
# 管理端点(U03/N32):/env、/beans 默认 sensitive;仅开发/影子环境放开——见 application-dev.yml
# 自有 PostgreSQL:全部内部状态(PIPELINE_LOCK/PROC_STATE/MSG_EVENT/REQ_TRACK/INBOX_CURSOR/
# FLIGHT_SCHD 及明细表/SCHD_SNAP_LOG;迁移为单基线 db/migration/V1__flight_state_baseline.sql
# V2V10 的净结构已合并其中,回填事实与处理终态同表同行)。
# FLIGHT_SCHD 及明细表/SCHD_SNAP_LOG;迁移链:V1__flight_state_baseline.sql(原多版净结构合并)
# + V2__flight_chute_class_type_rename.sqlchute 类字段 CCLS/CTYP);回填事实与处理终态同表同行)。
# 数据层实装前 enabled=falsestub 模式不建连)。
datasources:
default: