feat(acm2-76): 联调栈数据库自动初始化——基础数据/字典/信箱报文/历史索引

- postgres-init:02 建 basicdata schema 与 25 张基础数据表(表列对齐
  admin-api secondary 实体注解),03 灌双流 T2 种子(fims_* 待 Q25 不造数);
  独立 schema 避免 public 非空导致 Flyway 首次 migrate 失败
- admin-mysql-init:原样引入 admin-api 仓库 adminapi_* 建表与字典/UI 种子,
  v0.0.2 补 FLIGHT_TASK/FLIGHT_TYPE 条目;compose 强制 utf8mb4 并设 LANG,
  防 initdb 客户端落 latin1 造成中文双重编码
- es-init 一次性服务:按 admin-api mapping 建 flight_hts2(别名 flight_hts),
  副本置 0 保持单节点 green
- dev/mysql-init:CMINMSGS 5 条样例报文(SCHD/FLOP×2/REGN/ARPT),
  REGN/ARPT 标注现状预期(SKIPPED / DEAD(EXHAUSTED))
- seed-flight.sql:Flyway 建表后手动执行,8 条航班 6 场景 + 资源明细
- admin-api.yml secondary 加 currentSchema=basicdata,public
- README:初始化/种子/重建卷/验收边界说明

已用 podman compose 重建数据卷全链实测;ACM2-76 有评审与验收全记录。
This commit is contained in:
windyboy
2026-09-19 11:09:58 +08:00
parent abf598a250
commit 25cc967bd2
12 changed files with 2245 additions and 10 deletions
+16 -1
View File
@@ -90,12 +90,16 @@ services:
admin-mysql:
image: mysql:8.4
restart: unless-stopped
command: ["--mysql-native-password=ON"]
# mysql-native-password:兼容 admin-api 旧 MySQL JDBC 的认证方式;
# 字符集双保险:服务端默认 utf8mb4LANG 让 initdb 的 mysql 客户端
# 不落到 latin1(否则 UTF-8 种子双重编码成 mojibake)。
command: ["--mysql-native-password=ON", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
environment:
MYSQL_ROOT_PASSWORD: admin_root_dev_pass
MYSQL_DATABASE: adminapi
MYSQL_USER: admin_dev
MYSQL_PASSWORD: admin_dev_pass
LANG: C.UTF-8
ports:
- "0.0.0.0:13307:3306"
volumes:
@@ -131,6 +135,17 @@ services:
retries: 30
start_period: 30s
# 一次性建历史索引 flight_hts(别名→flight_hts2),映射取自 admin-api 仓库。
es-init:
image: curlimages/curl:8.10.1
restart: "no"
depends_on:
elasticsearch:
condition: service_healthy
volumes:
- ./deploy/integration/es-init:/init:ro,Z
entrypoint: ["/bin/sh", "/init/init-flight-hts.sh"]
volumes:
admin_mysql_data:
es_data:
@@ -0,0 +1,205 @@
-- =====================================================================
-- deploy/dev/mysql-init/02-mailbox-messages.sqlACM2-76
-- 共享信箱 CMINMSGS 测试报文种子(DEV ONLY)。本目录被 dev 与 integration
-- 两个 compose 共用,脚本只在空数据卷首启时执行;已有卷不补种,需删卷重建。
--
-- 报文格式:SIS 接口规范(docs/legacy/SIS_AODB_RMS-V0.1.mdMETA + 类型体,
-- XML 按 docs/legacy/unisysaodbsis.xsd;只 INSERT 契约内列,不建表不变更(C-2)。
-- INBOX_CURSOR 初值 W=0,应用首启即全部消费。SEQN 15,与 01-mailbox.sql
-- (仅建表、无数据)无冲突。
--
-- 两条参考数据报文验证的是【现状行为】,US-13 落地后行为会变,需同步更新:
-- · REGN/DNLD:命中 US-04 忽略清单(IgnoreRules)→ SKIPPED + 回填;
-- · ARPT/DNLD:合法但不支持(codec 只认 SCHD/FLOP)→ FAILED(UNSUPPORTED)
-- → 退避约 15smax-attempts=5)→ DEAD(EXHAUSTED) → 回填;
-- 排在种子最后(MSG_ID 最大),避免压住队头挡住 SCHD/FLOPUS-03 AC1)。
-- 航班 FLID 用 800001/800002,与 seed-flight.sql 的 9000190008 互不干扰。
-- =====================================================================
USE `cdairport`;
-- ① SCHD/DNLD:一进一出两条 FLTR(覆盖 ROUT/ERUT/GTDT/CKDT/CHDT/CLDT/PSDT 子段)
INSERT INTO CMINMSGS
(CMINMSGS_CLOB_MSG, CMINMSGS_SUBSYSTEM_TYPE, CMINMSGS_SUBSYSTEM_SUBTYPE,
CMINMSGS_SUBSYSTEM_NAME, CMINMSGS_SUBSYSTEM_SEQUENCE, CMINMSGS_SUBSYSTEM_DATE_SENT)
VALUES
('<?xml version="1.0" encoding="UTF-8"?>
<MSG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="unisysaodbsis.xsd">
<META>
<SNDR>AODB</SNDR>
<SEQN>1</SEQN>
<DTTM>20260919120001</DTTM>
<TYPE>SCHD</TYPE>
<STYP>DNLD</STYP>
</META>
<SCHD>
<RECS>2</RECS>
<FLTR>
<FLID>800001</FLID>
<ALCD>CA</ALCD>
<FLNO>CA4104</FLNO>
<MVIN>A</MVIN>
<SODT>20SEP261235</SODT>
<FLTY>S</FLTY>
<FLIN>D</FLIN>
<ROUT RTNO="1"><APCD>PEK</APCD><SCAT></SCAT><SCDT>20SEP261015</SCDT></ROUT>
<ROUT RTNO="2"><APCD>CTU</APCD><SCAT>20SEP261235</SCAT><SCDT></SCDT></ROUT>
<ACFT>738</ACFT>
<RENO>B-2087</RENO>
<TRML>T2</TRML>
<MAXP>264</MAXP>
<CLDT CLNO="1">
<BELT>4</BELT>
<BCLS>X</BCLS>
<PCOT>20SEP261240</PCOT>
<PCCT>20SEP261340</PCCT>
<BTYP>D</BTYP>
</CLDT>
<PSDT PSNO="1">
<PSST>105</PSST>
<STST>20SEP261240</STST>
<STET>20SEP261340</STET>
</PSDT>
<ERUT RTNO="1"><APCD>PEK</APCD><SCAT></SCAT><SCDT>20SEP261015</SCDT></ERUT>
<ERUT RTNO="2"><APCD>CTU</APCD><SCAT>20SEP261235</SCAT><SCDT></SCDT></ERUT>
</FLTR>
<FLTR>
<FLID>800002</FLID>
<ALCD>3U</ALCD>
<FLNO>3U8885</FLNO>
<MVIN>D</MVIN>
<SODT>20SEP261510</SODT>
<FLTY>S</FLTY>
<FLIN>D</FLIN>
<ROUT RTNO="1"><APCD>CTU</APCD><SCAT></SCAT><SCDT>20SEP261510</SCDT></ROUT>
<ROUT RTNO="2"><APCD>SZX</APCD><SCAT>20SEP261750</SCAT><SCDT></SCDT></ROUT>
<ACFT>320</ACFT>
<RENO>B-8690</RENO>
<TRML>T2</TRML>
<MAXP>158</MAXP>
<GTDT GTNO="1">
<GATE>D06</GATE>
<PGOT>20SEP261410</PGOT>
<PGCT>20SEP261510</PGCT>
<GTYP>D</GTYP>
</GTDT>
<CKDT CKNO="1">
<CHKC>C05</CHKC>
<CCLS>Y</CCLS>
<PCOT>20SEP261310</PCOT>
<PCCT>20SEP261440</PCCT>
<CTYP>D</CTYP>
</CKDT>
<CKDT CKNO="2">
<CHKC>C06</CHKC>
<CCLS>X</CCLS>
<PCOT>20SEP261310</PCOT>
<PCCT>20SEP261440</PCCT>
<CTYP>D</CTYP>
</CKDT>
<CHDT CHNO="1">
<CHUT>CH04</CHUT>
<CCLS>X</CCLS>
<PCBT>20SEP261340</PCBT>
<PCET>20SEP261500</PCET>
<CTYP>D</CTYP>
</CHDT>
<PSDT PSNO="1">
<PSST>101</PSST>
<STST>20SEP261330</STST>
<STET>20SEP261525</STET>
</PSDT>
<ERUT RTNO="1"><APCD>CTU</APCD><SCAT></SCAT><SCDT>20SEP261510</SCDT></ERUT>
<ERUT RTNO="2"><APCD>SZX</APCD><SCAT>20SEP261750</SCAT><SCDT></SCDT></ERUT>
</FLTR>
</SCHD>
</MSG>', 'SCHD', 'DNLD', 'AODB', 1, '2026-09-19 12:00:01'),
-- ② FLOP/ACTT800001 实际到达时间
('<?xml version="1.0" encoding="UTF-8"?>
<MSG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="unisysaodbsis.xsd">
<META>
<SNDR>AODB</SNDR>
<SEQN>2</SEQN>
<DTTM>20260919120002</DTTM>
<TYPE>FLOP</TYPE>
<STYP>ACTT</STYP>
</META>
<FLOP>
<FLID>800001</FLID>
<FFID>CA-CA4104-A-20SEP261235-D</FFID>
<ACTT>20SEP261228</ACTT>
</FLOP>
</MSG>', 'FLOP', 'ACTT', 'AODB', 2, '2026-09-19 12:00:02'),
-- ③ FLOP/GTDT800002 登机门改派 D06 → D08
('<?xml version="1.0" encoding="UTF-8"?>
<MSG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="unisysaodbsis.xsd">
<META>
<SNDR>AODB</SNDR>
<SEQN>3</SEQN>
<DTTM>20260919120003</DTTM>
<TYPE>FLOP</TYPE>
<STYP>GTDT</STYP>
</META>
<FLOP>
<FLID>800002</FLID>
<FFID>3U-3U8885-D-20SEP261510-D</FFID>
<GTDT GTNO="1">
<GATE>D08</GATE>
<PGOT>20SEP261410</PGOT>
<PGCT>20SEP261510</PGCT>
<GTYP>D</GTYP>
</GTDT>
</FLOP>
</MSG>', 'FLOP', 'GTDT', 'AODB', 3, '2026-09-19 12:00:03'),
-- ④ REGN/DNLD:现状行为 = 命中 US-04 忽略清单 → SKIPPED + 回填(US-13 后不再跳过)
('<?xml version="1.0" encoding="UTF-8"?>
<MSG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="unisysaodbsis.xsd">
<META>
<SNDR>AODB</SNDR>
<SEQN>4</SEQN>
<DTTM>20260919120004</DTTM>
<TYPE>REGN</TYPE>
<STYP>DNLD</STYP>
</META>
<RECS>2</RECS>
<REGN>
<RNUM>B-8692</RNUM>
<ITAT>320</ITAT>
<ACAL>3U</ACAL>
<MAXP>158</MAXP>
</REGN>
<REGN>
<RNUM>B-32D1</RNUM>
<ITAT>321</ITAT>
<ACAL>3U</ACAL>
<MAXP>199</MAXP>
</REGN>
</MSG>', 'REGN', 'DNLD', 'AODB', 4, '2026-09-19 12:00:04'),
-- ⑤ ARPT/DNLD 排最后:现状行为 = 合法但不支持 → FAILED(UNSUPPORTED)
-- → 退避约 15s → DEAD(EXHAUSTED) → 回填;US-13 后预期改为 SKIPPED
('<?xml version="1.0" encoding="UTF-8"?>
<MSG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="unisysaodbsis.xsd">
<META>
<SNDR>AODB</SNDR>
<SEQN>5</SEQN>
<DTTM>20260919120005</DTTM>
<TYPE>ARPT</TYPE>
<STYP>DNLD</STYP>
</META>
<RECS>1</RECS>
<ARPT>
<ITCD>CTU</ITCD>
<ICCD>ZUUU</ICCD>
<ANAM>CHENGDU SHUANGLIU INTERNATIONAL</ANAM>
<ANMC>成都双流国际机场</ANMC>
<BDIS>12</BDIS>
<CTRY>CN</CTRY>
<ACTY>CTU</ACTY>
<ATYP>D</ATYP>
<HAUL>L</HAUL>
</ARPT>
</MSG>', 'ARPT', 'DNLD', 'AODB', 5, '2026-09-19 12:00:05');
+46 -8
View File
@@ -8,12 +8,12 @@
| 服务 | 用途 |
| --- | --- |
| postgres | msgexchange-v2 自有业务数据库;admin-api 使用只读账号 |
| postgres | msgexchange-v2 自有业务数据库;admin-api 使用只读账号;基础数据表见 `basicdata` schema |
| mysql | 本地共享信箱模拟,复用 `deploy/dev/mysql-init`,不修改外部邮箱结构 |
| admin-mysql | admin-api Primary 数据源,独立空库,不与共享信箱混用 |
| admin-mysql | admin-api Primary 数据源,首启自动建 `adminapi_*` 表与字典/UI 种子,不与共享信箱混用 |
| redis | 保留开发栈的 Valkey 服务,不改变当前应用的数据归属 |
| kafka | INTERNAL 用于容器健康检查,EXTERNAL 通告服务器地址 |
| elasticsearch | admin-api 历史查询依赖;预建索引或导入数据 |
| elasticsearch | admin-api 历史查询依赖;es-init 预建索引 `flight_hts`,写入待 US-14 交付 |
端口和测试凭据在 `compose.integration.yaml`,应用对应值在本目录配置文件。
Elasticsearch 旧版本仅用于兼容验证,Apple Silicon 需要 amd64 模拟支持;镜像配置参考 [Elastic Docker 文档](https://www.elastic.co/guide/en/elasticsearch/reference/6.4/docker.html)。
@@ -30,10 +30,47 @@ docker compose -f compose.integration.yaml ps
```
该命令创建独立项目的容器、网络和数据卷,不启动两个 Java 应用。
首次初始化时创建 PG 只读用户,为随后由 `msgx_dev` 创建的 public 表和视图授予 SELECT;不授予写入权限。
首次初始化时创建 PG 只读用户,为随后由 `msgx_dev` 创建的 public 表和视图授予 SELECT`02` 脚本另建测试 schema `basicdata` 并授予同权限。均不授予写入权限。
初始化脚本只对空数据卷执行,已有卷不会自动补执行或修改密码。
SELinux 环境下,初始化目录挂载通过 `Z` 设置容器专用标签;与开发栈共用的信箱目录使用 `z` 共享标签,保持只读挂载。
## 测试数据库初始化与种子数据
计划与评审记录见 Plane `ACM2-76``basicdata` 是 admin-api 联调的基础数据承载,表列对齐其实体注解,不预设 `REF_MASTER` 物理形态。
**随首次初始化自动执行**(空卷时):
- `postgres-init/02-basicdata-schema.sql`:建 schema `basicdata` 与 25 张基础数据表;表与列取自 admin-api `domain/secondary/entity``@Table`/`@Column` 注解(`C-10`)。独立 schema 而非 `public`,否则首次 Flyway migrate 因 public 非空且无 history 表失败。
- `postgres-init/03-basicdata-seed.sql``basicdata` 的双流 T2 语境种子,编码与信箱报文一致;季度计划表不造数(`Q25`)。
- `../dev/mysql-init/02-mailbox-messages.sql`:向共享信箱 `cdairport.CMINMSGS` 插 5 条样例报文(SCHD/FLOP×2/REGN/ARPT)。该目录与开发栈共用,dev 侧已有卷同样不会自动补种。
- `admin-mysql-init/v0.0.1.20190110_adminapi_ddl.sql``..._initdata.sql`:原样执行 admin-api 仓库迁移脚本,建 4 张 `adminapi_*` 表并灌字典分组/条目(含 `ROUTE_TYPE`)与 UI 默认设置,覆盖 `/dictionary/*``/settings/*`
- `admin-mysql-init/v0.0.2_adminapi_dict_extra.sql`:自造字典补充种子,补齐 `FLIGHT_TYPE`(对齐 `sys_flight_type` 的 S/N/C/F)与 `FLIGHT_TASK` 四条;服务端以 compose 强制 utf8mb4、容器设 `LANG=C.UTF-8` 防 initdb 客户端落 latin1 造成中文双重编码。
- `es-init`(compose 一次性服务):按 admin-api 仓库的 `v1.2.0_20190428_flightHstMapping.json` 建索引 `flight_hts2`(别名 `flight_hts`)并把副本置 0(单节点保持 green);索引为空,写入待 US-14,已存在则跳过。
**应用首启后手动执行**(Flyway 建完 16 张业务表之后):
```sh
psql -h 127.0.0.1 -p 15432 -U msgx_dev -d msgx -f deploy/integration/seed-flight.sql
```
`seed-flight.sql` 在事务内写入 6 个场景共 8 条航班(进港/离港/主共享对/延误/取消/过站)及资源明细,可重复执行。
**重建数据卷**(破坏性操作,仅限测试环境;初始化与种子脚本只在空卷时生效):
```sh
docker compose -f compose.integration.yaml down
docker volume rm msgx-integration_pg_data # 基础数据表与种子需重建 PG 卷
docker volume rm msgx-integration_mysql_data # 信箱报文种子另需重建 MySQL 卷
docker volume rm msgx-integration_admin_mysql_data # 字典/UI 种子另需重建 admin MySQL 卷
docker volume rm msgx-integration_es_data # flight_hts 索引另需重建 ES 卷
docker compose -f compose.integration.yaml up -d
```
开发栈要补信箱报文,同样删除其 mysql 卷后重启(卷名见 `compose.yaml`)。
本文 `docker compose` 命令对 `podman compose` 同样适用;podman 需先启动用户级 API socket`systemctl --user start podman.socket`)。
**预期行为**(现状口径,US-13 落地后需更新):应用消费信箱后,SCHD/FLOP 落 `FLIGHT_SCHD` 与明细;REGN 命中忽略清单 `SKIPPED` 并回填;ARPT 按合法但不支持处理,`FAILED(UNSUPPORTED)` 退避约 15 秒后 `DEAD(EXHAUSTED)` 再回填。admin-api 读 `basicdata``REF_MASTER` 读取契约待 `Q22`/`C-10` 定稿(参考数据的 SIS 落库本身也是 `G-REF-DATA` 缺口)。
## 运行 msgexchange-v2
在应用机器的仓库根目录,用项目要求的 JDK 执行:
@@ -62,17 +99,18 @@ java -jar /home/fengzhiqiang/project/airport/chengdu/admin-api/target/admin-api-
独立 profile 避免加载内置 dev/test/pro 地址,关闭 Eureka 和自动建表,日志只输出控制台。
两个 JPA 数据源不能全局强设 PG 方言;启动日志需确认 Primary 为 MySQL、Secondary 为 PostgreSQL。
Secondary URL 带 `currentSchema=basicdata,public``/basicdata/*` 解析到 `basicdata` 的基础数据表。
sys-api 不在本栈,依赖它的操作日志开关接口不可用,不以假响应掩盖缺失依赖。
## 数据准备与验收边界
本栈提供数据库连接环境,不等于完整业务联调环境;空库上的基础数据、季度计划、字典和历史查询可能报缺表或缺索引
admin-api Primary 需导入经确认的测试结构与脱敏数据,仅导入 `admin-mysql`,不得导入信箱实例
Secondary 的表与列需匹配 admin-api 实体;参考数据读取契约尚待 `Q22` 定稿,季度计划来源尚待 `Q25` 确认,不根据实体臆造生产迁移或测试数据
本栈提供数据库连接环境,不等于完整业务联调环境。首启已自动覆盖:字典与 UI 设置(admin-mysql 种子)、历史索引 `flight_hts`(空,返回空列表而非 500)、基础数据表与种子(`basicdata`
剩余边界:季度计划 `fims_*` 只建空表不造数(供数方待 `Q25`),查询返回空;历史数据写入待 US-14 交付
`basicdata` 只对齐 admin-api `domain/secondary/entity` 的表列,不预设 `REF_MASTER` 物理形态(`Q22` 未定稿)
`G-REF-DATA` 标记的静态数据处理缺口不由 Compose 解决。
验收顺序:服务健康 → 应用驱动和方言 → 确认的表结构及数据 → 基础数据查询 → 季度计划日期与经停关联 → 接口返回对比。
PG 只读账号可以查询当前 public 内部表;这是联调权限范围,不是生产最小权限方案
PG 只读账号可以查询 public 内部表`basicdata` 测试表(权限范围,不代表 admin-api 已接入 `REF_MASTER`;见上一节)
## 停止与排查
+2 -1
View File
@@ -25,7 +25,8 @@ spring:
test-on-borrow: true
validation-query: SELECT 1
secondary:
url: jdbc:postgresql://${TEST_SERVER_HOST}:15432/msgx
# currentSchema:基础数据表在 basicdatapublic 兜底;不设则默认只找 public。
url: jdbc:postgresql://${TEST_SERVER_HOST}:15432/msgx?currentSchema=basicdata,public
username: admin_reader
password: admin_reader_dev_pass
driver: org.postgresql.Driver
@@ -0,0 +1,35 @@
CREATE TABLE `adminapi_datadic_groups` (
`group_code` varchar(20) NOT NULL DEFAULT '' COMMENT '分组代码,字典分组代码',
`group_name` varchar(50) DEFAULT NULL COMMENT '分组名称,字典分组名称',
PRIMARY KEY (`group_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典分组表,字典的分组描述表';
CREATE TABLE `adminapi_datadic_items` (
`dataitem_code` varchar(20) NOT NULL DEFAULT '' COMMENT '字典代码,字典代码code',
`dataitem_name` varchar(50) DEFAULT NULL COMMENT '字典名称,字典名称',
`dataitem_desc` varchar(500) DEFAULT NULL COMMENT '字典描述,字典描述字段',
`group_code` varchar(20) DEFAULT NULL COMMENT '字典分组Code,字典分组Code',
PRIMARY KEY (`dataitem_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典表,字典描述表';
CREATE TABLE `adminapi_uisettings` (
`id` varchar(64) NOT NULL,
`userid` varchar(64) NOT NULL COMMENT '用户id,用户id',
`env_code` varchar(64) NOT NULL COMMENT '环境配置code , web - 大屏幕环境 mobile - 移动小屏幕 ',
`group_code` varchar(64) NOT NULL COMMENT '设置分组,设置分组比如msgalert 消息提醒',
`setting_content` varchar(20000) NOT NULL COMMENT '具体的设置内容,json格式的设置内容。不超过60KB',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ui设置表,用户个人的UI设置习惯';
CREATE TABLE `adminapi_uisettings_default` (
`id` varchar(64) NOT NULL,
`env_code` varchar(64) NOT NULL COMMENT '环境配置code , web - 大屏幕环境 mobile - 移动小屏幕 ',
`group_code` varchar(64) NOT NULL COMMENT '设置分组,设置分组比如msgalert 消息提醒',
`setting_content` varchar(20000) NOT NULL COMMENT '具体的设置内容,json格式的设置内容。不超过60KB',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ui默认设置表,UI的默认设置';
File diff suppressed because one or more lines are too long
@@ -0,0 +1,23 @@
-- =====================================================================
-- deploy/integration/admin-mysql-init/v0.0.2_adminapi_dict_extra.sql
-- 字典补充种子(本仓库自造,非 admin-api 原件):补齐 FLIGHT_TASK 与
-- FLIGHT_TYPE 分组的条目,原 initdata 只建了分组没有条目,只能冒烟
-- ROUTE_TYPE。文件名以 v0.0.2 起头,保证在 v0.0.1_* 之后执行(字典
-- 分组已由原 initdata 建好,这里只插条目)。
--
-- 取值口径:FLIGHT_TYPE 对齐 basicdata.sys_flight_type 种子(S/N/C/F);
-- FLIGHT_TASK 是人造测试值(admin-api 源码无权威取值表,仅季度计划列
-- FLIGHT_TASK 引用该分组),业务联调前需按确认口径替换。
-- =====================================================================
SET NAMES utf8mb4;
INSERT INTO `adminapi_datadic_items` (`dataitem_code`, `dataitem_name`, `dataitem_desc`, `group_code`) VALUES
('S', '定期航班', '航班类别:定期(对齐 sys_flight_type', 'FLIGHT_TYPE'),
('N', '非定期航班', '航班类别:非定期(对齐 sys_flight_type', 'FLIGHT_TYPE'),
('C', '包机', '航班类别:包机(对齐 sys_flight_type', 'FLIGHT_TYPE'),
('F', '调机', '航班类别:调机(对齐 sys_flight_type', 'FLIGHT_TYPE'),
('PAX', '客运', '航班任务:客运(人造测试值)', 'FLIGHT_TASK'),
('CGO', '货运', '航班任务:货运(人造测试值)', 'FLIGHT_TASK'),
('BIZ', '公务', '航班任务:公务(人造测试值)', 'FLIGHT_TASK'),
('TRN', '训练', '航班任务:训练(人造测试值)', 'FLIGHT_TASK');
@@ -0,0 +1,23 @@
#!/bin/sh
# =====================================================================
# deploy/integration/es-init/init-flight-hts.shACM2-76
# 一次性初始化 ES 历史索引 flight_hts:建 flight_hts2、挂别名、套 mapping。
# 幂等:索引已存在即整体跳过;可随 `compose up` 重复执行。
# 映射文件 v1.2.0_20190428_flightHstMapping.json 原样取自 admin-api 仓库
# src/main/resources/es/CRLF、自带 PUT 命令行),此处只提取 JSON 体。
# =====================================================================
set -e
ES="http://elasticsearch:9200"
if curl -fsS -o /dev/null "$ES/_cat/indices/flight_hts2"; then
echo "flight_hts2 已存在,跳过初始化"
exit 0
fi
curl -fsS -X PUT "$ES/flight_hts2"; echo
curl -fsS -X PUT "$ES/flight_hts2/_alias/flight_hts"; echo
tr -d '\r' < /init/v1.2.0_20190428_flightHstMapping.json | sed -n '/^{/,$p' > /tmp/flight_hts_mapping.json
curl -fsS -X PUT -H 'Content-Type: application/json' --data-binary @/tmp/flight_hts_mapping.json "$ES/flight_hts2/_doc/_mapping"; echo
# 单节点联调栈:副本置 0,避免未分配副本分片让集群一直 yellow。
curl -fsS -X PUT -H 'Content-Type: application/json' "$ES/flight_hts2/_settings" -d '{"index":{"number_of_replicas":0}}'; echo
echo "flight_hts 初始化完成"
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,356 @@
-- =====================================================================
-- deploy/integration/postgres-init/02-basicdata-schema.sql
-- 联调栈基础数据表:admin-api 只读(`C-10`)。
--
-- 权威口径:表与列直接取自 admin-api 实体
-- com.gzzn.omms.adminapi.domain.secondary.entity.baiscdata / .schedule
-- 的 @Table / @Column 注解,不改名、不合并、不按 SIS 标签重排。
-- 基础数据数据集见 docs/requirements.md「查询侧(admin-api)的数据面」。
-- 本 schema 是 admin-api 联调的唯一测试承载;`REF_MASTER` 的物理形态
-- 仍待 `Q22` 定稿,定稿前不以本表冒充。
--
-- 为什么独立 schema 而不是 public
-- public 由应用 Flyway 管辖,docker-entrypoint 先在里面建表会让首次
-- migrate 命中「非空 schema 无 history 表」而失败(baselineOnMigrate=false)。
-- admin-api 侧用 secondary URL 的 currentSchema=basicdata,public 解析表名。
--
-- 执行环境:docker-entrypoint-initdb.d,仅空卷首启时以 msgx_dev 运行;
-- admin_reader 角色由 01-admin-reader.sql 先建。
-- =====================================================================
CREATE SCHEMA IF NOT EXISTS basicdata;
COMMENT ON SCHEMA basicdata IS
'联调栈基础数据(admin-api 实体口径,只读;表列取自 admin-api secondary 实体注解)。';
GRANT USAGE ON SCHEMA basicdata TO admin_reader;
ALTER DEFAULT PRIVILEGES FOR ROLE msgx_dev IN SCHEMA basicdata
GRANT SELECT ON TABLES TO admin_reader;
SET search_path = basicdata;
-- ① 国家 SYS_COUNTRYadmin-api SysCountry
CREATE TABLE sys_country (
COUNTRY_ID BIGINT NOT NULL PRIMARY KEY,
COUNTRY_CODE VARCHAR(16),
COUNTRY_NAME_CHN VARCHAR(64),
COUNTRY_NAME_ENG VARCHAR(64),
OPERATE SMALLINT
);
-- ② 城市 SYS_CITYSysCity
CREATE TABLE sys_city (
CITY_ID BIGINT NOT NULL PRIMARY KEY,
CITY_CODE VARCHAR(16),
CITY_ICCDE VARCHAR(16),
CITY_NAME_CHN VARCHAR(64),
CITY_NAME_ENG VARCHAR(64),
COUNTRY_ID BIGINT,
MAIN_CITY_TAG NUMERIC(18,0),
OPERATE NUMERIC(18,0),
TEL_CITY_CODE VARCHAR(16)
);
-- ③ 机场集团 SYS_AIRPORTGROUPSysAirportGroup
CREATE TABLE sys_airportgroup (
AIRPORT_GROUP_ID BIGINT NOT NULL PRIMARY KEY,
AIRPORT_GROUP_CODE VARCHAR(16),
AIRPORT_GROUP_NAME VARCHAR(64)
);
-- ④ 机场 SYS_AIRPORTSysAirporthaul/operate 为无注解字段,列名即字段名)
CREATE TABLE sys_airport (
AIRPORT_ID BIGINT NOT NULL PRIMARY KEY,
AIRPORT_CODE VARCHAR(16),
AIRPORT_CODE_CAA VARCHAR(16),
AIRPORT_CODE_IATA VARCHAR(16),
AIRPORT_CODE_ICAO VARCHAR(16),
AIRPORT_GROUP_ID BIGINT,
AIRPORT_NAME_CHN VARCHAR(64),
AIRPORT_NAME_ENG VARCHAR(64),
BRIEF_NAME_CHN VARCHAR(64),
BRIEF_NAME_CHN_COPY VARCHAR(64),
BRIEF_NAME_ENG VARCHAR(64),
CITY_ID BIGINT,
HAUL VARCHAR(8),
HOST_FLAG NUMERIC(18,0),
INTERNATIONAL_FLAG NUMERIC(18,0),
OPERATE NUMERIC(18,0)
);
-- ⑤ 航空集团 SYS_AIRLINEGROUPSysAirlineGroup
CREATE TABLE sys_airlinegroup (
AIRLINE_GROUP_ID BIGINT NOT NULL PRIMARY KEY,
AIRLINE_GROUP_CODE VARCHAR(16),
AIRLINE_GROUP_NAME VARCHAR(64),
AIRLINE_GROUP_CODE_CAA VARCHAR(16),
AIRLINE_GROUP_CODE_IATA VARCHAR(16),
AIRLINE_GROUP_CODE_ICAO VARCHAR(16)
);
-- ⑥ 航空公司 SYS_AIRLINESysAirlinecode/namc/name/operate 为无注解字段)
CREATE TABLE sys_airline (
AIRLINE_ID BIGINT NOT NULL PRIMARY KEY,
AIRLINE_CODE VARCHAR(16),
AIRLINE_CODE_CAA VARCHAR(16),
AIRLINE_CODE_IATA VARCHAR(16),
AIRLINE_CODE_ICAO VARCHAR(16),
AIRLINE_GROUP_ID BIGINT,
AIRLINE_NAME VARCHAR(64),
AIRLINE_NAME_ENG VARCHAR(64),
BRIEF_NAME_CHN VARCHAR(64),
BRIEF_NAME_ENG VARCHAR(64),
CODE VARCHAR(16),
COUNTRY_ID BIGINT,
HOST_FLAG NUMERIC(18,0),
INTERNATIONAL_FLAG NUMERIC(18,0),
NAMC VARCHAR(64),
NAME VARCHAR(64),
OPERATE NUMERIC(18,0),
PARENT_AIRLINE_ID BIGINT
);
-- ⑦ 机型分组 SYS_AIRCRAFTTYPEGROUPSysAircrafttypeGroup
CREATE TABLE sys_aircrafttypegroup (
AIRCRAFTTYPEGROUP_ID BIGINT NOT NULL PRIMARY KEY,
AIRCRAFTTYPEGROUP_CODE VARCHAR(16),
AIRCRAFTTYPEGROUP_NAME VARCHAR(64)
);
-- ⑧ 机型 SYS_AIRCRAFTTYPESysAircrafttypechap/operate/transitstoptime 无注解)
CREATE TABLE sys_aircrafttype (
AIRCRAFT_TYPE_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
AIRCRAFT_HEIGHT NUMERIC(18,4),
AIRCRAFT_LENGTH NUMERIC(18,4),
AIRCRAFT_TYPE_CODE_CAA VARCHAR(16),
AIRCRAFT_TYPE_CODE_IATA VARCHAR(16),
AIRCRAFT_TYPE_CODE_ICAO VARCHAR(16),
AIRCRAFT_TYPE_NAME VARCHAR(64),
AIRCRAFT_WIDTH NUMERIC(18,4),
AIRCRAFTTYPEGROUP_ID BIGINT,
CHAP VARCHAR(16),
MAX_AIRBRIDGES NUMERIC(18,0),
MAX_FREIGHT_WEIGHT NUMERIC(18,4),
MAX_PASSENGERS NUMERIC(18,0),
MAX_TAKEOFF_WEIGHT NUMERIC(18,4),
OPERATE NUMERIC(18,0),
TRANSITSTOPTIME NUMERIC(18,0)
);
-- ⑨ 机号 SYS_AIRCRAFTSysAircraftoperate/owid 无注解)
CREATE TABLE sys_aircraft (
AIRCRAFT_ID BIGINT NOT NULL PRIMARY KEY,
AIRCRAFT_NUMBER VARCHAR(32),
AIRCRAFT_OWNER_CODE VARCHAR(16),
AIRCRAFT_TYPE_CODE VARCHAR(16),
AIRLINE_CODE VARCHAR(16),
MAX_AIRBRIDGES NUMERIC(18,0),
MAX_FREIGHT_WEIGHT NUMERIC(18,4),
MAX_PASSENGERS NUMERIC(18,0),
MAX_TAKEOFF_WEIGHT NUMERIC(18,4),
OPERATE NUMERIC(18,0),
OWID NUMERIC(18,0)
);
-- ⑩ 航班类型 SYS_FLIGHT_TYPESysFlightTypeByte 映射 SMALLINT
CREATE TABLE sys_flight_type (
FLIGHT_TYPE_CODE VARCHAR(8) NOT NULL PRIMARY KEY,
FLIGHT_TYPE_CAA_CODE VARCHAR(8),
FLIGHT_TYPE_NAME VARCHAR(64),
C_TAG VARCHAR(8),
VIP_TAG VARCHAR(8),
FLIGHT_TYPE_NAME_CN VARCHAR(64),
OPERATE SMALLINT
);
-- ⑪ 航班外部状态码 SYS_FLIGHT_STATUSSysFlightStatus
CREATE TABLE sys_flight_status (
STTC VARCHAR(16) NOT NULL PRIMARY KEY,
ABNS VARCHAR(64),
STDC VARCHAR(64),
STTD VARCHAR(8)
);
-- ⑫ 航班代理单位 SYS_FLIGHTAGENTSysFlightAgent
CREATE TABLE sys_flightagent (
FLIGHTAGENT_ID VARCHAR(32) NOT NULL PRIMARY KEY,
FLIGHTAGENT_NAME VARCHAR(64),
OGID VARCHAR(32)
);
-- ⑬ 延误异常定义 FIMS_FLIGHTSTATUS_DEFINITIONFimsFlightStatusDefinition
CREATE TABLE fims_flightstatus_definition (
FLIGHTSTATUSDEF_REC_ID BIGINT NOT NULL PRIMARY KEY,
FLIGHT_STATUS VARCHAR(16),
FLIGHT_STATUS_TYPE VARCHAR(16),
FLIGHT_STATUS_DESC VARCHAR(128),
ENABLED_FLAG VARCHAR(16),
DCOD VARCHAR(16),
DCDN BIGINT,
DDES VARCHAR(128),
DDSC VARCHAR(128),
OPERATE SMALLINT
);
-- ⑭ 航站楼 ORMS_TERMINALOrmsTerminaloperate 无注解)
CREATE TABLE orms_terminal (
TERMINAL_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
OPERATE NUMERIC(18,0),
TERMINAL_NAME VARCHAR(64)
);
-- ⑮ 航站楼区域 ORMS_TERMINALAREAOrmsTerminalarea
CREATE TABLE orms_terminalarea (
TERMINAL_AREA_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
ROUTE_TYPE VARCHAR(8),
TERMINAL_AREA_NAME VARCHAR(64),
TERMINAL_CODE VARCHAR(16)
);
-- ⑯ 机位类型 ORMS_STANDTYPEOrmsStandType
CREATE TABLE orms_standtype (
STAND_TYPE VARCHAR(32) NOT NULL PRIMARY KEY,
STAND_TYPE_DESC VARCHAR(64)
);
-- ⑰ 机位 ORMS_STANDOrmsStandddgt/digt/maxflightnum/operate/satc/stml 无注解)
CREATE TABLE orms_stand (
STAND_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
CURRENT_FLIGHT_ID BIGINT,
DDGT VARCHAR(16),
DIGT VARCHAR(16),
FSTAND_CODE VARCHAR(16),
ICON_LENGTH NUMERIC(18,4),
ICON_WIDTH NUMERIC(18,4),
LSTAND_CODE VARCHAR(16),
MAX_PERMIT NUMERIC(18,0),
MAXFLIGHTNUM NUMERIC(18,0),
OPERATE NUMERIC(18,0),
PIER_CODE VARCHAR(16),
POS_X NUMERIC(18,4),
POS_Y NUMERIC(18,4),
RSTAND_CODE VARCHAR(16),
SATC VARCHAR(16),
STAND_AREA_CODE VARCHAR(16),
STAND_LAYOUTED NUMERIC(18,0),
STAND_LENGTH NUMERIC(18,4),
STAND_NAME VARCHAR(64),
STAND_ORDER NUMERIC(18,0),
STAND_STATUS NUMERIC(18,0),
STAND_TYPE VARCHAR(16),
STAND_WIDTH NUMERIC(18,4),
STML VARCHAR(16),
TERMINAL_AREA_CODE VARCHAR(16)
);
-- ⑱ 机位廊桥 ORMS_STAND_AIRBRIDGEOrmsStandAirbridge + OrmsStandAirbridgePK
CREATE TABLE orms_stand_airbridge (
STAND_CODE VARCHAR(16) NOT NULL,
AIRBRIDGE_CODE VARCHAR(16) NOT NULL,
PRIMARY KEY (STAND_CODE, AIRBRIDGE_CODE)
);
-- ⑲ 登机门 ORMS_GATEOrmsGategtml/operate 无注解)
CREATE TABLE orms_gate (
GATE_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
ACTION_ORDER NUMERIC(18,0),
GATE_CATEGORY VARCHAR(8),
GATE_NAME VARCHAR(64),
GATE_STATUS NUMERIC(18,0),
GATE_TYPE VARCHAR(8),
GTML VARCHAR(16),
ICON_LENGTH NUMERIC(18,4),
ICON_WIDTH NUMERIC(18,4),
OPERATE NUMERIC(18,0),
PIER_CODE VARCHAR(16),
POS_X NUMERIC(18,4),
POS_Y NUMERIC(18,4),
STAND_LAYOUTED NUMERIC(18,0),
TERMINAL_AREA_CODE VARCHAR(16)
);
-- ⑳ 行李滑槽 ORMS_CHUTOrmsChutbcat/btml/operate 无注解)
CREATE TABLE orms_chut (
CHUT_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
BCAT VARCHAR(16),
BTML VARCHAR(16),
CHUT_LENGTH NUMERIC(18,4),
CHUT_NAME VARCHAR(64),
CHUT_STATUS VARCHAR(8),
OPERATE NUMERIC(18,0)
);
-- ㉑ 值机柜台 ORMS_CHECKINDESKOrmsCheckindeskccat/ctra/operate 无注解)
CREATE TABLE orms_checkindesk (
CHECKINDESK_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
CCAT VARCHAR(16),
CHECKIN_GROUP_CODE VARCHAR(16),
CHECKINDESK_NAME VARCHAR(64),
CHECKINDESK_STATUS VARCHAR(8),
CHUT_CODE VARCHAR(16),
CTRA VARCHAR(8),
NEXTCHECKINDESK_CODE VARCHAR(16),
OPERATE NUMERIC(18,0),
TERMINAL_AREA_CODE VARCHAR(16)
);
-- ㉒ 值机岛 ORMS_CHECKIN_GROUPCheckinGroup
CREATE TABLE orms_checkin_group (
CHECKIN_GROUP_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
CHECKIN_GROUP_NAME VARCHAR(64)
);
-- ㉓ 行李转盘 ORMS_CAROUSELOrmsCarouselbcls 无注解)
CREATE TABLE orms_carousel (
CAROUSEL_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
ACTION_ORDER NUMERIC(18,0),
BCLS VARCHAR(16),
CAROUSEL_NAME VARCHAR(64),
CAROUSEL_STATUS VARCHAR(32),
ICON_LENGTH NUMERIC(18,4),
ICON_WIDTH NUMERIC(18,4),
POS_X NUMERIC(18,4),
POS_Y NUMERIC(18,4),
STAND_LAYOUTED NUMERIC(18,0),
TERMINAL_AREA_CODE VARCHAR(16)
);
-- ㉔ 季度计划 FIMS_FLIGHTSCHD_SEASONFimsFlightschdSeasonremarks 无注解)
-- 供数方待定(`Q25`),本轮只建空表,不造数。
CREATE TABLE fims_flightschd_season (
SEASONFLIGHT_ID BIGINT NOT NULL PRIMARY KEY,
AIRCRAFT_TYPE_CODE VARCHAR(16),
AIRLINE_ID BIGINT,
ARRI_OR_DEPT VARCHAR(4),
ARRIVAL_TIME VARCHAR(8),
DEPARTURE_TIME VARCHAR(8),
END_AIRPORT VARCHAR(16),
END_DATE DATE,
FLIGHT_NUMBER VARCHAR(16),
FLIGHT_TASK VARCHAR(16),
FLIGHT_TYPE_CODE VARCHAR(8),
FLYING_DISTANCE NUMERIC(18,4),
FLYING_TIME NUMERIC(18,4),
INTERNATIONAL_CODE VARCHAR(8),
OPERATION_DAYS VARCHAR(32),
REMARKS VARCHAR(256),
ROUTE_TYPE VARCHAR(8),
SEASON_NAME VARCHAR(32),
SEASON_REC_ID BIGINT,
START_AIRPORT VARCHAR(16),
START_DATE DATE,
SUB_AIRLINE_ID BIGINT
);
-- ㉕ 季度计划经停 FIMS_MIDAIRPORTS_SEASONFimsMidairportsSeasonorderno 无注解)
CREATE TABLE fims_midairports_season (
MIDAIRPORTS_REC_ID BIGINT NOT NULL PRIMARY KEY,
AIRPORT_ID BIGINT,
ARRIVAL_TIME VARCHAR(8),
DEPARTURE_TIME VARCHAR(8),
ORDERNO NUMERIC(18,0),
SEASONFLIGHT_ID BIGINT
);
CREATE INDEX idx_fims_midairports_season_flight
ON fims_midairports_season (SEASONFLIGHT_ID);
@@ -0,0 +1,142 @@
-- =====================================================================
-- deploy/integration/postgres-init/03-basicdata-seed.sql
-- 基础数据测试种子(联调栈,DEV ONLY):成都双流 T2 语境的人造数据,
-- 不是生产数据,仅供 admin-api `/basicdata/*` 与手工查验。
--
-- 与 deploy/dev/mysql-init/02-mailbox-messages.sql
-- 对齐同一套编码:登机门 D06/D08、值机柜台 C05/C06、滑槽 CH04、转盘 4、
-- 机号 B-2087/B-8690、机型 320/738/321。
-- 季度计划(fims_*)不造数,供数方待定(`Q25`)。
-- 执行环境:docker-entrypoint-initdb.d,仅空卷首启时以 msgx_dev 运行。
-- =====================================================================
SET search_path = basicdata;
INSERT INTO sys_country (COUNTRY_ID, COUNTRY_CODE, COUNTRY_NAME_CHN, COUNTRY_NAME_ENG, OPERATE) VALUES
(1, 'CN', '中国', 'China', 1),
(2, 'US', '美国', 'United States', 1),
(3, 'JP', '日本', 'Japan', 1),
(4, 'KR', '韩国', 'Korea', 1),
(5, 'SG', '新加坡', 'Singapore', 1),
(6, 'TH', '泰国', 'Thailand', 1);
INSERT INTO sys_city (CITY_ID, CITY_CODE, CITY_ICCDE, CITY_NAME_CHN, CITY_NAME_ENG, COUNTRY_ID, MAIN_CITY_TAG, OPERATE, TEL_CITY_CODE) VALUES
(1, 'CTU', 'ZUUU', '成都', 'Chengdu', 1, 1, 1, '028'),
(2, 'PEK', 'ZBAA', '北京', 'Beijing', 1, 1, 1, '010'),
(3, 'SHA', 'ZSSS', '上海', 'Shanghai', 1, 1, 1, '021'),
(4, 'CAN', 'ZGGG', '广州', 'Guangzhou', 1, 1, 1, '020'),
(5, 'SZX', 'ZGSZ', '深圳', 'Shenzhen', 1, 1, 1, '0755'),
(6, 'SIN', 'WSSS', '新加坡', 'Singapore', 5, 1, 1, NULL);
INSERT INTO sys_airportgroup (AIRPORT_GROUP_ID, AIRPORT_GROUP_CODE, AIRPORT_GROUP_NAME) VALUES
(1, 'CDIA', '成都双流国际机场集团');
INSERT INTO sys_airport (AIRPORT_ID, AIRPORT_CODE, AIRPORT_CODE_CAA, AIRPORT_CODE_IATA, AIRPORT_CODE_ICAO, AIRPORT_GROUP_ID, AIRPORT_NAME_CHN, AIRPORT_NAME_ENG, BRIEF_NAME_CHN, BRIEF_NAME_CHN_COPY, BRIEF_NAME_ENG, CITY_ID, HAUL, HOST_FLAG, INTERNATIONAL_FLAG, OPERATE) VALUES
(1, 'CTU', 'CTU', 'CTU', 'ZUUU', 1, '成都双流国际机场', 'Chengdu Shuangliu International Airport', '双流', '成都', 'Shuangliu', 1, 'L', 1, 1, 1),
(2, 'TFU', 'TFU', 'TFU', 'ZUTF', 1, '成都天府国际机场', 'Chengdu Tianfu International Airport', '天府', '成都', 'Tianfu', 1, 'L', 1, 1, 1),
(3, 'PEK', 'PEK', 'PEK', 'ZBAA', NULL, '北京首都国际机场', 'Beijing Capital International Airport', '首都', '北京', 'Capital', 2, 'L', 0, 1, 1),
(4, 'SZX', 'SZX', 'SZX', 'ZGSZ', NULL, '深圳宝安国际机场', 'Shenzhen Baoan International Airport', '宝安', '深圳', 'Baoan', 5, 'L', 0, 1, 1),
(5, 'SIN', 'SIN', 'SIN', 'WSSS', NULL, '新加坡樟宜机场', 'Singapore Changi Airport', '樟宜', '新加坡', 'Changi', 6, 'L', 0, 1, 1);
INSERT INTO sys_airlinegroup (AIRLINE_GROUP_ID, AIRLINE_GROUP_CODE, AIRLINE_GROUP_NAME, AIRLINE_GROUP_CODE_CAA, AIRLINE_GROUP_CODE_IATA, AIRLINE_GROUP_CODE_ICAO) VALUES
(1, 'CA', '中国国际航空集团', 'CA', 'CA', 'CCA'),
(2, 'CZ', '中国南方航空集团', 'CZ', 'CZ', 'CSN'),
(3, '3U', '四川航空集团', '3U', '3U', 'CSC');
INSERT INTO sys_airline (AIRLINE_ID, AIRLINE_CODE, AIRLINE_CODE_CAA, AIRLINE_CODE_IATA, AIRLINE_CODE_ICAO, AIRLINE_GROUP_ID, AIRLINE_NAME, AIRLINE_NAME_ENG, BRIEF_NAME_CHN, BRIEF_NAME_ENG, CODE, COUNTRY_ID, HOST_FLAG, INTERNATIONAL_FLAG, NAMC, NAME, OPERATE, PARENT_AIRLINE_ID) VALUES
(1, 'CA', 'CA', 'CA', 'CCA', 1, '中国国际航空股份有限公司', 'Air China', '国航', 'Air China', 'CA', 1, 0, 1, NULL, NULL, 1, 1),
(2, 'CZ', 'CZ', 'CZ', 'CSN', 2, '中国南方航空股份有限公司', 'China Southern', '南航', 'China Southern', 'CZ', 1, 0, 1, NULL, NULL, 1, 2),
(3, '3U', '3U', '3U', 'CSC', 3, '四川航空股份有限公司', 'Sichuan Airlines', '川航', 'Sichuan Airlines', '3U', 1, 1, 1, NULL, NULL, 1, 3),
(4, 'MU', 'MU', 'MU', 'CES', NULL, '中国东方航空股份有限公司', 'China Eastern', '东航', 'China Eastern', 'MU', 1, 0, 1, NULL, NULL, 1, NULL);
INSERT INTO sys_aircrafttypegroup (AIRCRAFTTYPEGROUP_ID, AIRCRAFTTYPEGROUP_CODE, AIRCRAFTTYPEGROUP_NAME) VALUES
(1, 'A320', '空客 A320 系列'),
(2, 'B737', '波音 737 系列'),
(3, 'A350', '空客 A350 系列');
INSERT INTO sys_aircrafttype (AIRCRAFT_TYPE_CODE, AIRCRAFT_HEIGHT, AIRCRAFT_LENGTH, AIRCRAFT_TYPE_CODE_CAA, AIRCRAFT_TYPE_CODE_IATA, AIRCRAFT_TYPE_CODE_ICAO, AIRCRAFT_TYPE_NAME, AIRCRAFT_WIDTH, AIRCRAFTTYPEGROUP_ID, CHAP, MAX_AIRBRIDGES, MAX_FREIGHT_WEIGHT, MAX_PASSENGERS, MAX_TAKEOFF_WEIGHT, OPERATE, TRANSITSTOPTIME) VALUES
('320', 11.76, 37.57, '320', '320', 'A320', '空客 A320', 34.10, 1, 'C', 1, 20000, 158, 78000, 1, 45),
('321', 11.76, 44.51, '321', '321', 'A321', '空客 A321', 34.10, 1, 'C', 1, 25000, 199, 93500, 1, 50),
('738', 12.50, 39.50, '738', '738', 'B738', '波音 737-800', 35.80, 2, 'C', 1, 20000, 189, 79000, 1, 45),
('359', 17.05, 66.80, '359', '359', 'A359', '空客 A350-900', 64.75, 3, 'C', 2, 40000, 312, 280000, 1, 60);
INSERT INTO sys_aircraft (AIRCRAFT_ID, AIRCRAFT_NUMBER, AIRCRAFT_OWNER_CODE, AIRCRAFT_TYPE_CODE, AIRLINE_CODE, MAX_AIRBRIDGES, MAX_FREIGHT_WEIGHT, MAX_PASSENGERS, MAX_TAKEOFF_WEIGHT, OPERATE, OWID) VALUES
(1, 'B-2087', 'CA', '738', 'CA', 1, 20000, 189, 79000, 1, NULL),
(2, 'B-8690', '3U', '320', '3U', 1, 20000, 158, 78000, 1, NULL),
(3, 'B-8692', '3U', '320', '3U', 1, 20000, 158, 78000, 1, NULL),
(4, 'B-32D1', '3U', '321', '3U', 1, 25000, 199, 93500, 1, NULL);
INSERT INTO sys_flight_type (FLIGHT_TYPE_CODE, FLIGHT_TYPE_CAA_CODE, FLIGHT_TYPE_NAME, C_TAG, VIP_TAG, FLIGHT_TYPE_NAME_CN, OPERATE) VALUES
('S', 'S', 'Scheduled', 'N', 'N', '定期航班', 1),
('N', 'N', 'Non-scheduled', 'N', 'N', '非定期航班', 1),
('C', 'C', 'Charter', 'N', 'N', '包机', 1),
('F', 'F', 'Ferry', 'N', 'N', '调机', 1);
INSERT INTO sys_flight_status (STTC, ABNS, STDC, STTD) VALUES
('SCH', 'Scheduled', '计划', 'N'),
('EST', 'Estimated', '预计', 'N'),
('ACT', 'Actual', '实际', 'N'),
('DLY', 'Delayed', '延误', 'Y'),
('CNL', 'Cancelled', '取消', 'Y'),
('DIV', 'Diverted', '备降', 'Y');
INSERT INTO sys_flightagent (FLIGHTAGENT_ID, FLIGHTAGENT_NAME, OGID) VALUES
('AG01', '成都双流机场地面服务有限公司', 'OG01'),
('AG02', '四川机场集团航空服务有限公司', 'OG02');
INSERT INTO fims_flightstatus_definition (FLIGHTSTATUSDEF_REC_ID, FLIGHT_STATUS, FLIGHT_STATUS_TYPE, FLIGHT_STATUS_DESC, ENABLED_FLAG, DCOD, DCDN, DDES, DDSC, OPERATE) VALUES
(1, '气象延误', 'DELY', '天气原因延误', 'Enabled', 'WX', 1, 'Weather delay', '气象延误', 1),
(2, '旅客延误', 'DELY', '旅客原因延误', 'Enabled', 'PA', 2, 'Passenger delay', '旅客延误', 1),
(3, '流量延误', 'DELY', '流量控制原因延误', 'Enabled', 'FC', 3, 'Flow control delay', '流量延误', 1),
(4, '机务延误', 'DELY', '机务原因延误', 'Enabled', 'MT', 4, 'Maintenance delay', '机务延误', 1);
INSERT INTO orms_terminal (TERMINAL_CODE, OPERATE, TERMINAL_NAME) VALUES
('T1', 1, '成都双流 T1 航站楼'),
('T2', 1, '成都双流 T2 航站楼');
INSERT INTO orms_terminalarea (TERMINAL_AREA_CODE, ROUTE_TYPE, TERMINAL_AREA_NAME, TERMINAL_CODE) VALUES
('T2C', 'D', 'T2 国内指廊 C', 'T2'),
('T2D', 'D', 'T2 国内指廊 D', 'T2'),
('T1I', 'I', 'T1 国际指廊', 'T1');
INSERT INTO orms_standtype (STAND_TYPE, STAND_TYPE_DESC) VALUES
('bridge', '靠桥机位'),
('remote', '远机位'),
('near', '近机位'),
('night', '过夜机位'),
('specific', '专机位');
INSERT INTO orms_stand (STAND_CODE, CURRENT_FLIGHT_ID, DDGT, DIGT, FSTAND_CODE, ICON_LENGTH, ICON_WIDTH, LSTAND_CODE, MAX_PERMIT, MAXFLIGHTNUM, OPERATE, PIER_CODE, POS_X, POS_Y, RSTAND_CODE, SATC, STAND_AREA_CODE, STAND_LAYOUTED, STAND_LENGTH, STAND_NAME, STAND_ORDER, STAND_STATUS, STAND_TYPE, STAND_WIDTH, STML, TERMINAL_AREA_CODE) VALUES
('101', NULL, 'D06', NULL, NULL, 40, 20, NULL, 264, 1, 1, 'C', 100, 200, NULL, '738', 'T2C', 1, 60, '101 号机位', 1, 0, 'bridge', 45, 'T2', 'T2C'),
('102', NULL, 'D06', NULL, NULL, 40, 20, NULL, 264, 1, 1, 'C', 140, 200, NULL, '738', 'T2C', 1, 60, '102 号机位', 2, 0, 'bridge', 45, 'T2', 'T2C'),
('105', NULL, 'D08', NULL, NULL, 40, 20, NULL, 199, 1, 1, 'D', 200, 300, NULL, '321', 'T2D', 1, 55, '105 号机位', 3, 0, 'bridge', 45, 'T2', 'T2D'),
('201', NULL, NULL, NULL, NULL, 40, 20, NULL, 312, 2, 1, 'C', 300, 400, NULL, '359', 'T2C', 1, 70, '201 号远机位', 4, 0, 'remote', 60, 'T2', 'T2C');
INSERT INTO orms_stand_airbridge (STAND_CODE, AIRBRIDGE_CODE) VALUES
('101', 'D06'),
('102', 'D06'),
('105', 'D08');
INSERT INTO orms_gate (GATE_CODE, ACTION_ORDER, GATE_CATEGORY, GATE_NAME, GATE_STATUS, GATE_TYPE, GTML, ICON_LENGTH, ICON_WIDTH, OPERATE, PIER_CODE, POS_X, POS_Y, STAND_LAYOUTED, TERMINAL_AREA_CODE) VALUES
('C05', 1, 'D', 'C05 登机口', 0, '2', 'T2', 30, 20, 1, 'C', 110, 210, 1, 'T2C'),
('C06', 2, 'D', 'C06 登机口', 0, '2', 'T2', 30, 20, 1, 'C', 150, 210, 1, 'T2C'),
('D06', 3, 'D', 'D06 登机口', 0, '2', 'T2', 30, 20, 1, 'D', 210, 310, 1, 'T2D'),
('D08', 4, 'D', 'D08 登机口', 0, '2', 'T2', 30, 20, 1, 'D', 250, 310, 1, 'T2D');
INSERT INTO orms_chut (CHUT_CODE, BCAT, BTML, CHUT_LENGTH, CHUT_NAME, CHUT_STATUS, OPERATE) VALUES
('CH04', 'D', 'T2', 12, 'CH04 行李滑槽', 'E', 1),
('CH05', 'D', 'T2', 12, 'CH05 行李滑槽', 'E', 1);
INSERT INTO orms_checkin_group (CHECKIN_GROUP_CODE, CHECKIN_GROUP_NAME) VALUES
('A', 'A 值机岛'),
('B', 'B 值机岛'),
('C', 'C 值机岛');
INSERT INTO orms_checkindesk (CHECKINDESK_CODE, CCAT, CHECKIN_GROUP_CODE, CHECKINDESK_NAME, CHECKINDESK_STATUS, CHUT_CODE, CTRA, NEXTCHECKINDESK_CODE, OPERATE, TERMINAL_AREA_CODE) VALUES
('C05', 'D', 'C', 'C05 值机柜台', 'E', 'CH04', 'N', NULL, 1, 'T2C'),
('C06', 'D', 'C', 'C06 值机柜台', 'E', 'CH05', 'N', NULL, 1, 'T2C'),
('C07', 'D', 'C', 'C07 值机柜台', 'E', NULL, 'Y', 'C06', 1, 'T2C');
INSERT INTO orms_carousel (CAROUSEL_CODE, ACTION_ORDER, BCLS, CAROUSEL_NAME, CAROUSEL_STATUS, ICON_LENGTH, ICON_WIDTH, POS_X, POS_Y, STAND_LAYOUTED, TERMINAL_AREA_CODE) VALUES
('4', 1, 'D', '4 号行李转盘', 'E', 40, 20, 120, 400, 1, 'T2C'),
('5', 2, 'D', '5 号行李转盘', 'E', 40, 20, 160, 400, 1, 'T2C');
+179
View File
@@ -0,0 +1,179 @@
-- =====================================================================
-- deploy/integration/seed-flight.sqlACM2-76
-- 联调栈航班当前态种子:手动执行,前置条件是应用以 MSGX_FLYWAY_ENABLED=true
-- 启动过一次(V1 基线已应用)。双流 T2 语境人造数据,运营日 2026-09-20。
--
-- 幂等:主表 FLIGHT_SCHD 用 ON CONFLICT (FLID) DO UPDATEOPERATION_DAY 按
-- INV-12 非空后不可改变,只补空不覆盖);明细表主键是 (FLID, ORDINAL)
-- (路线点含 ROUTE_KIND),FLID 上无唯一约束,故按 FLID 先删后插(INV-14
-- 的完整合并口径)。CREATED_AT/UPDATED_AT 为 NOT NULL,显式给值。
-- 只写决策层(FLIGHT_SCHD + 明细),不碰管道层(PROC_STATE/MSG_EVENT/
-- INBOX_CURSOR/PIPELINE_LOCK/REQ_TRACK/SCHD_SNAP_LOG)。
-- 执行:psql -h 127.0.0.1 -p 15432 -U msgx_dev -d msgx -f 本文件
-- =====================================================================
BEGIN;
DELETE FROM FLIGHT_GATE WHERE FLID IN ('90001','90002','90003','90004','90005','90006','90007','90008');
DELETE FROM FLIGHT_CHECKIN WHERE FLID IN ('90001','90002','90003','90004','90005','90006','90007','90008');
DELETE FROM FLIGHT_BELT WHERE FLID IN ('90001','90002','90003','90004','90005','90006','90007','90008');
DELETE FROM FLIGHT_STAND_PLAN WHERE FLID IN ('90001','90002','90003','90004','90005','90006','90007','90008');
DELETE FROM FLIGHT_CHUTE WHERE FLID IN ('90001','90002','90003','90004','90005','90006','90007','90008');
DELETE FROM FLIGHT_DELAY WHERE FLID IN ('90001','90002','90003','90004','90005','90006','90007','90008');
DELETE FROM FLIGHT_ROUTE_POINT WHERE FLID IN ('90001','90002','90003','90004','90005','90006','90007','90008');
-- 主行 upsert。OPERATION_DAY 只补空不覆盖(INV-12);STATE_VERSION 重置为 1
-- 仅是测试种子语义,真实链路由处理写入推进。
INSERT INTO FLIGHT_SCHD (
FLID, OPERATION_DAY, STATE, STATE_VERSION, LAST_MSG_ID,
ALCD, FLNO, MVIN, SODT, FLTY, FLIN, ACFT, RENO, TRML, MAXP,
CSOP, CSFT, MAID, TAOP, TAFL, TAID,
ESTT, ACTT, STND, PHAG, CNCL, REMC,
CREATED_AT, UPDATED_AT
) VALUES
-- ① 进港:CA4418 CAN→CTU,已落地,转盘 3、机位 108
('90001', DATE '2026-09-20', 'ACTIVE', 1, NULL,
'CA', 'CA4418', 'A', '20SEP261400', 'S', 'D', '77W', 'B-2006', 'T2', '294',
NULL, NULL, NULL, NULL, NULL, NULL,
NULL, '20SEP261412', '108', '10002', NULL, NULL,
now(), now()),
-- ② 离港:3U8881 CTU→PEK,柜台 C01/C02、登机门 D05、滑槽 CH03、机位 101
('90002', DATE '2026-09-20', 'ACTIVE', 1, NULL,
'3U', '3U8881', 'D', '20SEP261630', 'S', 'D', '320', 'B-8690', 'T2', '158',
NULL, NULL, NULL, NULL, NULL, NULL,
'20SEP261630', NULL, '101', '10001', NULL, NULL,
now(), now()),
-- ③ 主/共享对·主航班:CA1858 CTU→SZX
('90003', DATE '2026-09-20', 'ACTIVE', 1, NULL,
'CA', 'CA1858', 'D', '20SEP261830', 'S', 'D', '321', 'B-8691', 'T2', '199',
NULL, NULL, NULL, NULL, NULL, NULL,
'20SEP261830', NULL, '102', '10002', NULL, NULL,
now(), now()),
-- ③ 主/共享对·共享航班:3U1858 挂主航班 CA1858MAID/CSOP/CSFT
('90004', DATE '2026-09-20', 'ACTIVE', 1, NULL,
'3U', '1858', 'D', '20SEP261830', 'S', 'D', '321', NULL, 'T2', '199',
'CA', 'CA1858', '90003', NULL, NULL, NULL,
'20SEP261830', NULL, '102', NULL, NULL, NULL,
now(), now()),
-- ④ 延误进港:SQ8351 SIN→CTU,预计延后 2 小时并带 DELY
('90005', DATE '2026-09-20', 'ACTIVE', 1, NULL,
'SQ', 'SQ8351', 'A', '20SEP260930', 'S', 'I', '359', 'B-306N', 'T2', '288',
NULL, NULL, NULL, NULL, NULL, NULL,
'20SEP261130', NULL, '107', '10002', NULL, 'Catering Delay',
now(), now()),
-- ⑤ 取消离港:EU2230 CTU→KMGCNCL 记取消时间,STATE 仍 ACTIVE
('90006', DATE '2026-09-20', 'ACTIVE', 1, NULL,
'EU', 'EU2230', 'D', '20SEP260800', 'S', 'D', 'ARJ', 'B-1115', 'T2', '78',
NULL, NULL, NULL, NULL, NULL, NULL,
'20SEP260800', NULL, NULL, '10002', '20SEP260730', NULL,
now(), now()),
-- ⑥ 过站进港:3U3210 KMG→CTU,连线后续航班 3U3211
('90007', DATE '2026-09-20', 'ACTIVE', 1, NULL,
'3U', '3U3210', 'A', '20SEP261000', 'S', 'D', '320', 'B-2345', 'T2', '162',
NULL, NULL, NULL, '3U', '3U3211', '90008',
'20SEP261000', '20SEP261007', '103', '10001', NULL, NULL,
now(), now()),
-- ⑥ 过站后续离港:3U3211 CTU→HGH
('90008', DATE '2026-09-20', 'ACTIVE', 1, NULL,
'3U', '3U3211', 'D', '20SEP261155', 'S', 'D', '320', 'B-2345', 'T2', '162',
NULL, NULL, NULL, NULL, NULL, NULL,
'20SEP261155', NULL, '103', '10001', NULL, NULL,
now(), now())
ON CONFLICT (FLID) DO UPDATE SET
STATE = EXCLUDED.STATE,
STATE_VERSION = EXCLUDED.STATE_VERSION,
LAST_MSG_ID = EXCLUDED.LAST_MSG_ID,
ALCD = EXCLUDED.ALCD,
FLNO = EXCLUDED.FLNO,
MVIN = EXCLUDED.MVIN,
SODT = EXCLUDED.SODT,
FLTY = EXCLUDED.FLTY,
FLIN = EXCLUDED.FLIN,
ACFT = EXCLUDED.ACFT,
RENO = EXCLUDED.RENO,
TRML = EXCLUDED.TRML,
MAXP = EXCLUDED.MAXP,
CSOP = EXCLUDED.CSOP,
CSFT = EXCLUDED.CSFT,
MAID = EXCLUDED.MAID,
TAOP = EXCLUDED.TAOP,
TAFL = EXCLUDED.TAFL,
TAID = EXCLUDED.TAID,
ESTT = EXCLUDED.ESTT,
ACTT = EXCLUDED.ACTT,
STND = EXCLUDED.STND,
PHAG = EXCLUDED.PHAG,
CNCL = EXCLUDED.CNCL,
REMC = EXCLUDED.REMC,
UPDATED_AT = now(),
-- OPERATION_DAY 非空后不可改变(INV-12):只补空
OPERATION_DAY = COALESCE(FLIGHT_SCHD.OPERATION_DAY, EXCLUDED.OPERATION_DAY);
-- ① 90001 进港明细:转盘、计划机位、航线
INSERT INTO FLIGHT_BELT (FLID, ORDINAL, SOURCE_SEQ, BELT, BCLS, PCOT, PCCT, FBAG, LBAG, BTYP, CREATED_AT, UPDATED_AT) VALUES
('90001', 1, '1', '3', 'X', '20SEP261405', '20SEP261455', '20SEP261418', '20SEP261450', 'D', now(), now());
INSERT INTO FLIGHT_STAND_PLAN (FLID, ORDINAL, SOURCE_SEQ, PSST, STST, STET, CREATED_AT, UPDATED_AT) VALUES
('90001', 1, '1', '108', '20SEP261355', '20SEP261510', now(), now());
INSERT INTO FLIGHT_ROUTE_POINT (FLID, ORDINAL, SOURCE_SEQ, ROUTE_KIND, APCD, SCAT, SCDT, CREATED_AT, UPDATED_AT) VALUES
('90001', 1, '1', 'ROUT', 'CAN', NULL, '20SEP261155', now(), now()),
('90001', 2, '2', 'ROUT', 'CTU', '20SEP261400', NULL, now(), now()),
('90001', 1, '1', 'ERUT', 'CTU', NULL, '20SEP261400', now(), now()),
('90001', 2, '2', 'ERUT', 'CAN', NULL, '20SEP261155', now(), now());
-- ② 90002 离港明细:柜台×2、登机门、滑槽、计划机位、航线
INSERT INTO FLIGHT_CHECKIN (FLID, ORDINAL, SOURCE_SEQ, CHKC, CCLS, PCOT, PCCT, CTYP, CREATED_AT, UPDATED_AT) VALUES
('90002', 1, '1', 'C01', 'Y', '20SEP261430', '20SEP261600', 'D', now(), now()),
('90002', 2, '2', 'C02', 'X', '20SEP261430', '20SEP261600', 'D', now(), now());
INSERT INTO FLIGHT_GATE (FLID, ORDINAL, SOURCE_SEQ, GATE, PGOT, PGCT, GTYP, CREATED_AT, UPDATED_AT) VALUES
('90002', 1, '1', 'D05', '20SEP261530', '20SEP261620', 'D', now(), now());
INSERT INTO FLIGHT_CHUTE (FLID, ORDINAL, SOURCE_SEQ, CHUT, CHCLS, PCBT, PCET, CHTYP, CREATED_AT, UPDATED_AT) VALUES
('90002', 1, '1', 'CH03', 'X', '20SEP261330', '20SEP261600', 'D', now(), now());
INSERT INTO FLIGHT_STAND_PLAN (FLID, ORDINAL, SOURCE_SEQ, PSST, STST, STET, CREATED_AT, UPDATED_AT) VALUES
('90002', 1, '1', '101', '20SEP261445', '20SEP261645', now(), now());
INSERT INTO FLIGHT_ROUTE_POINT (FLID, ORDINAL, SOURCE_SEQ, ROUTE_KIND, APCD, SCAT, SCDT, CREATED_AT, UPDATED_AT) VALUES
('90002', 1, '1', 'ROUT', 'CTU', NULL, '20SEP261630', now(), now()),
('90002', 2, '2', 'ROUT', 'PEK', '20SEP261935', NULL, now(), now()),
('90002', 1, '1', 'ERUT', 'CTU', NULL, '20SEP261630', now(), now()),
('90002', 2, '2', 'ERUT', 'PEK', '20SEP261935', NULL, now(), now());
-- ③ 主/共享对明细:同一物理航班、各自独立行(禁止按资源号去重)
INSERT INTO FLIGHT_STAND_PLAN (FLID, ORDINAL, SOURCE_SEQ, PSST, STST, STET, CREATED_AT, UPDATED_AT) VALUES
('90003', 1, '1', '102', '20SEP261645', '20SEP261945', now(), now()),
('90004', 1, '1', '102', '20SEP261645', '20SEP261945', now(), now());
INSERT INTO FLIGHT_ROUTE_POINT (FLID, ORDINAL, SOURCE_SEQ, ROUTE_KIND, APCD, SCAT, SCDT, CREATED_AT, UPDATED_AT) VALUES
('90003', 1, '1', 'ROUT', 'CTU', NULL, '20SEP261830', now(), now()),
('90003', 2, '2', 'ROUT', 'SZX', '20SEP262105', NULL, now(), now()),
('90003', 1, '1', 'ERUT', 'CTU', NULL, '20SEP261830', now(), now()),
('90003', 2, '2', 'ERUT', 'SZX', '20SEP262105', NULL, now(), now()),
('90004', 1, '1', 'ROUT', 'CTU', NULL, '20SEP261830', now(), now()),
('90004', 2, '2', 'ROUT', 'SZX', '20SEP262105', NULL, now(), now());
-- ④ 90005 延误进港明细:延误、转盘、计划机位、航线
INSERT INTO FLIGHT_DELAY (FLID, ORDINAL, SOURCE_SEQ, CODE, STRT, DURA, CREATED_AT, UPDATED_AT) VALUES
('90005', 1, '1', '23', '20SEP260930', '0120', now(), now());
INSERT INTO FLIGHT_BELT (FLID, ORDINAL, SOURCE_SEQ, BELT, BCLS, PCOT, PCCT, BTYP, CREATED_AT, UPDATED_AT) VALUES
('90005', 1, '1', '5', 'X', '20SEP261135', '20SEP261225', 'I', now(), now());
INSERT INTO FLIGHT_STAND_PLAN (FLID, ORDINAL, SOURCE_SEQ, PSST, STST, STET, CREATED_AT, UPDATED_AT) VALUES
('90005', 1, '1', '107', '20SEP261050', '20SEP261240', now(), now());
INSERT INTO FLIGHT_ROUTE_POINT (FLID, ORDINAL, SOURCE_SEQ, ROUTE_KIND, APCD, SCAT, SCDT, CREATED_AT, UPDATED_AT) VALUES
('90005', 1, '1', 'ROUT', 'SIN', NULL, '20SEP260745', now(), now()),
('90005', 2, '2', 'ROUT', 'CTU', '20SEP260930', NULL, now(), now()),
('90005', 1, '1', 'ERUT', 'CTU', NULL, '20SEP260930', now(), now()),
('90005', 2, '2', 'ERUT', 'SIN', NULL, '20SEP260745', now(), now());
-- ⑥ 过站对明细:90007 计划机位 + 航线;90008 登机门 + 航线
INSERT INTO FLIGHT_STAND_PLAN (FLID, ORDINAL, SOURCE_SEQ, PSST, STST, STET, CREATED_AT, UPDATED_AT) VALUES
('90007', 1, '1', '103', '20SEP260955', '20SEP261140', now(), now());
INSERT INTO FLIGHT_ROUTE_POINT (FLID, ORDINAL, SOURCE_SEQ, ROUTE_KIND, APCD, SCAT, SCDT, CREATED_AT, UPDATED_AT) VALUES
('90007', 1, '1', 'ROUT', 'KMG', NULL, '20SEP260845', now(), now()),
('90007', 2, '2', 'ROUT', 'CTU', '20SEP261000', NULL, now(), now()),
('90007', 1, '1', 'ERUT', 'CTU', NULL, '20SEP261000', now(), now()),
('90007', 2, '2', 'ERUT', 'KMG', NULL, '20SEP260845', now(), now()),
('90008', 1, '1', 'ROUT', 'CTU', NULL, '20SEP261155', now(), now()),
('90008', 2, '2', 'ROUT', 'HGH', '20SEP261425', NULL, now(), now()),
('90008', 1, '1', 'ERUT', 'CTU', NULL, '20SEP261155', now(), now()),
('90008', 2, '2', 'ERUT', 'HGH', '20SEP261425', NULL, now(), now());
INSERT INTO FLIGHT_GATE (FLID, ORDINAL, SOURCE_SEQ, GATE, PGOT, PGCT, GTYP, CREATED_AT, UPDATED_AT) VALUES
('90008', 1, '1', 'D04', '20SEP261055', '20SEP261145', 'D', now(), now());
COMMIT;