fix(acm2-107): finalize /all/flights contract and FLTR JSON payload
Close Q21 into C-11 and emit day-schedule FLTR-shaped JSON for Redis, schd, and query responses. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+18
-20
@@ -47,7 +47,7 @@
|
||||
### 2.2 上游(AODB / SIS)
|
||||
|
||||
- **C-3** 一条报文的身份 = `SNDR` + `TYPE` + `STYP` + `SEQN`。`SEQN` 自增,极少在消息服务器重启时重置;重置后不与历史冲突。
|
||||
- **C-4** 出站请求写入 `COUTMSGS`;本系统只保证写入信箱,不保证 AODB 收到。编码:`SNDR=OMMS`;`SEQN` 本系统生成;`DTTM` 北京时间 `YYYYMMDDHHMMSS`;`RQRD` 共 14 种子类型(以 SIS 为准);`RQFD` 的 `STYP=NONE`,全量不带 `STDB`/`STDE` 筛选。
|
||||
- **C-4** 出站请求写入 `COUTMSGS`;本系统只保证写入信箱,不保证 AODB 收到。编码:`SNDR=OMMS`;`SEQN` 本系统生成;`DTTM` 北京时间 `YYYYMMDDHHMMSS`;`RQRD` 共 14 种子类型(以 SIS 为准);`RQFD` 的 `STYP=NONE`,全量不带 `STDB`/`STDE` 筛选。季度计划不属本系统出站范围(`Q25`)。
|
||||
- **C-5** 删航班只打删除标记;主航班与共享航班各自独立标记。
|
||||
- **C-6** 日计划快照里没带的字段,视为 AODB 已删掉该值,本地也清掉(`US-07` AC3)。
|
||||
|
||||
@@ -55,15 +55,13 @@
|
||||
|
||||
- **C-7** `POST /cminmsgs/send`:XML 写进入站信箱,与 adapter 走同一套处理。成功返回消息编号(只表示已写入、尚未处理);失败不返回编号。接受 `text/xml`、`application/xml`、`text/plain`(UTF-8);拒收空报文、超长、非法 XML;解析禁止访问外部资源。内网访问由网络层控制;仅供内部联调。
|
||||
- 待确认:大小上限、HTTP 状态码与响应体 → `Q15`。
|
||||
- **C-8** `POST /schd/sync`:登记一次 `RQFD` 日计划请求。同类型若还有未处理完的请求,新请求先不写信箱,等旧的处理完再写 `COUTMSGS`(`US-09` AC1)。
|
||||
- 待确认:请求参数与 HTTP 响应 → `Q16`。
|
||||
- **C-8** `POST /schd/sync`:登记一次 `RQFD` 日计划请求。请求体为空、请求全量(`C-4`);成功返回请求编号,已有未结案请求时返回 `409`(`Q16`)。同类型若还有未处理完的请求,新请求先不写信箱,等旧的处理完再写 `COUTMSGS`(`US-09` AC1)。
|
||||
|
||||
### 2.4 下游(admin-api、网页客户端)
|
||||
|
||||
- **C-9** 航班变更发 Kafka:`msg` 一条变更一条消息;`schd` 把两轮采集之间积累的变化合成一条消息,内容是 `SCHD.FLTR` JSON 数组。空字段不输出,没变化不发;删航班只走 `msg`;不设 message key;可能重复投递(待确认 `Q1`)。
|
||||
- **C-9** 航班变更发 Kafka:`msg` 一条变更一条消息,消息体是整条 `MSG` 的 JSON(`META` 加对应业务体),变更与删除由 `META` 的类型与子类型区分(`Q5`);`schd` 把两轮采集之间积累的变化合成一条消息,内容是 `SCHD.FLTR` JSON 数组,条数不设上限(`Q1`)。空字段不输出,没变化不发;删航班只走 `msg`;不设 message key;可能重复投递。
|
||||
- **C-10** 静态参考数据写本系统库,admin-api 只读;本系统不调用 admin-api。
|
||||
- **C-11** 航班快照写 Redis;`GET /all/flights` 与网页客户端读同一份;JSON 由报文 XML 转换。
|
||||
- 待确认:`MAFL` 是否一并提供(`Q6`);状态码与响应包装(`Q21`)。
|
||||
- **C-11** 航班快照写 Redis;网页客户端经 `GET /all/flights` 读这一份,不直连 Redis;共享航班(`MAID` 非空)不单列返回(是否以主航班 `MAFL` 提供见 `Q6`)。成功 HTTP 200 返回裸 JSON 数组(不套旧 `ResponseDto`),不分页;失败 HTTP 503,JSON 对象 `{"error":"FLIGHT_PROJECTION_UNAVAILABLE","reason":"<细节>"}`;投影读失败不得返回 200 空数组(`INV-11`)。投影 value、`KAFKA:schd` 数组元素与查询成功体元素同形:都是日计划一条 `FLTR` 转成的 JSON(字段名与 [XSD](legacy/unisysaodbsis.xsd) `FLTR` 一致,空字段不输出,与 `C-9` 相同);由自有 PG 当前态重建,不是另起包装。
|
||||
|
||||
## 3. 前提
|
||||
|
||||
@@ -113,12 +111,12 @@
|
||||
|
||||
| 编号 | 状态 | 事项 | 说明 |
|
||||
|---|---|---|---|
|
||||
| Q1 | 待对方 | `schd` 一条 Kafka 消息里装多少变更 | 见 `C-9` |
|
||||
| Q2 | 待对方 | FLOP 里 `SRVT`/`VIPF` 等集合段缺席是否等于删除 | 见 `G-SRVT-VIPF` |
|
||||
| Q3 | 待对方 | SIS 没写明的 FLOP 子类型怎么解析、处理完算啥 | 按现有逻辑处理(`US-05` AC1);见 `G-FLOP-SEMANTICS`、`CLM-1` |
|
||||
| Q4 | 待对方 | 上游重发时会不会改正文 | 假定内容不变,只认身份;改正文会被当重复跳过 |
|
||||
| Q5 | 待对方 | `msg` 消息体格式、变更与删除怎么区分 | 沿用旧系统 JSON(接口契约「Kafka」) |
|
||||
| Q6 | 待对方 | 网页客户端怎么读 Redis 快照 | 见 `C-11`;`MAFL` 是否提供未定 |
|
||||
| Q1 | 已定 | `schd` 一条 Kafka 消息里装多少变更 | 两轮发送之间积累的全部变更合成一条,条数不设上限(`C-9`) |
|
||||
| Q2 | 待对方 | FLOP 里 `SRVT`/`VIPF` 等集合段缺席是否等于删除 | 见 `G-SRVT-VIPF`;旧系统不解析这两段,无法对拍 |
|
||||
| Q3 | 待对方 | SIS 没写明的 FLOP 子类型怎么解析、处理完算啥 | 按现有逻辑处理(`US-05` AC1);见 `G-FLOP-SEMANTICS`、`CLM-1`。旧系统找不到对应处理器时按失败兜底,仍写回处理时间且无业务改动 |
|
||||
| Q4 | 待对方 | 上游重发时会不会改正文 | 假定内容不变,只认身份;改正文会被当重复跳过。旧系统不比较正文 |
|
||||
| Q5 | 已定 | `msg` 消息体格式、变更与删除怎么区分 | 整条 `MSG` 的 JSON,空字段不输出;删除由 `META` 的类型与子类型标识(`C-9`) |
|
||||
| Q6 | 本系统 | 网页客户端怎么读 Redis 快照 | 经 `GET /all/flights` 读、不直连 Redis(`C-11`);`MAFL` 是否随主航班返回仍待定,旧系统提供 |
|
||||
| Q7 | 已定 | 信箱编号只增不减、不重用 | `INV-1`、`CLM-2`、`US-01` AC3 |
|
||||
| Q8 | 已定 | 入站处理时间列名 `CMINMSGS_DATE_PROCESSED` | 术语「处理标记」、`US-10` |
|
||||
| Q9 | 已定 | 入站行删除条件与保留期 | 本系统只写回处理标记、不删除;清除与保留期由库方负责(`C-1`) |
|
||||
@@ -127,17 +125,17 @@
|
||||
| Q12 | 已定 | 主航班与共享航班删除联动 | `US-06` AC2 |
|
||||
| Q13 | 已定 | `RQRD` / `RQFD` 编码字段 | `C-4` |
|
||||
| Q14 | 本系统 | 生产用 PostgreSQL 还是 Oracle 11g | Oracle 未验证前不作支持承诺 |
|
||||
| Q15 | 本系统 | `POST /cminmsgs/send` HTTP 约定 | 大小上限、状态码、响应体;见 `C-7` |
|
||||
| Q16 | 本系统 | `POST /schd/sync` 请求与响应 | 见 `C-8` |
|
||||
| Q17 | 本系统 | 人工发 `RQRD` 的入口 | `US-09` 要求能人工发,HTTP 清单里没有 |
|
||||
| Q18 | 本系统 | 回退时正在处理的消息怎么办 | 见 `OPS-4` |
|
||||
| Q15 | 本系统 | `POST /cminmsgs/send` HTTP 约定 | 大小上限、状态码、最终响应体;见 `C-7`。旧系统成功响应是 `ResponseDto`(`err_code=1`,`body` 为信箱编号),且未配置大小上限 |
|
||||
| Q16 | 已定 | `POST /schd/sync` 请求与响应 | 请求体为空、请求全量(`C-4`);成功返回请求编号,开放请求未结案返回 `409`(`C-8`) |
|
||||
| Q17 | 本系统 | 人工发 `RQRD` 的入口 | `US-09` 要求能人工发,HTTP 清单里没有;旧系统也没有 |
|
||||
| Q18 | 已定 | 回退时正在处理的消息怎么办 | 未写回处理标记的消息仍算未处理,由旧系统继续;旧系统停机只等在途任务跑完(`OPS-4`) |
|
||||
| Q19 | — | (未分配) | — |
|
||||
| Q20 | — | (未分配) | — |
|
||||
| Q21 | 本系统 | `GET /all/flights` HTTP 约定 | 见 `C-11` |
|
||||
| Q21 | 已定 | `GET /all/flights` HTTP 约定 | 成功裸数组、失败 503 与错误对象;见 `C-11` |
|
||||
| Q22 | 已定 | 静态参考数据对应哪些表 | `C-10`;物理为 schema `basicdata` 多表(非 `REF_MASTER` 单表),映射见 `implementation.md`「静态参考数据」 |
|
||||
| Q23 | 本系统 | Elasticsearch 历史怎么写、保留多久 | 见 `US-14`、`G-FLIGHT-HIST-RETENTION` |
|
||||
| Q24 | 本系统 | `REQ_TRACK` 已结案记录保留多久 | 见 `G-REQ-TRACK-RETENTION` |
|
||||
| Q25 | 本系统 | 季度计划从哪来、什么格式 | SIS 只有日计划;旧系统读 Oracle 季度表 |
|
||||
| Q23 | 本系统 | Elasticsearch 历史怎么写、保留多久 | 见 `US-14`、`G-FLIGHT-HIST-RETENTION`。旧系统按 `SODT`+`FLID` 写入 `flight_hts`,保留期未实现 |
|
||||
| Q24 | 本系统 | `REQ_TRACK` 已结案记录保留多久 | 见 `G-REQ-TRACK-RETENTION`;旧系统没有对等记录,只有 `COUTMSGS` 的 ACK 列 |
|
||||
| Q25 | 已定 | 季度计划从哪来、什么格式 | 不属本系统范围:admin-api 从 Oracle `FIMS_FLIGHTSCHD_SEASON` 读(`C-4`) |
|
||||
|
||||
状态说明:**待对方** = 需对接方确认;**已定** = 结论已写入 `C-x`/`INV-x`;**本系统** = 由本系统与需求方决定;**—** = 编号保留未用。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user