diff --git a/compose.integration.yaml b/compose.integration.yaml
index 2b2ef32..622f429 100644
--- a/compose.integration.yaml
+++ b/compose.integration.yaml
@@ -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 的认证方式;
+ # 字符集双保险:服务端默认 utf8mb4,LANG 让 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:
diff --git a/deploy/dev/mysql-init/02-mailbox-messages.sql b/deploy/dev/mysql-init/02-mailbox-messages.sql
new file mode 100644
index 0000000..b271653
--- /dev/null
+++ b/deploy/dev/mysql-init/02-mailbox-messages.sql
@@ -0,0 +1,205 @@
+-- =====================================================================
+-- deploy/dev/mysql-init/02-mailbox-messages.sql(ACM2-76)
+-- 共享信箱 CMINMSGS 测试报文种子(DEV ONLY)。本目录被 dev 与 integration
+-- 两个 compose 共用,脚本只在空数据卷首启时执行;已有卷不补种,需删卷重建。
+--
+-- 报文格式:SIS 接口规范(docs/legacy/SIS_AODB_RMS-V0.1.md)META + 类型体,
+-- XML 按 docs/legacy/unisysaodbsis.xsd;只 INSERT 契约内列,不建表不变更(C-2)。
+-- INBOX_CURSOR 初值 W=0,应用首启即全部消费。SEQN 1–5,与 01-mailbox.sql
+-- (仅建表、无数据)无冲突。
+--
+-- 两条参考数据报文验证的是【现状行为】,US-13 落地后行为会变,需同步更新:
+-- · REGN/DNLD:命中 US-04 忽略清单(IgnoreRules)→ SKIPPED + 回填;
+-- · ARPT/DNLD:合法但不支持(codec 只认 SCHD/FLOP)→ FAILED(UNSUPPORTED)
+-- → 退避约 15s(max-attempts=5)→ DEAD(EXHAUSTED) → 回填;
+-- 排在种子最后(MSG_ID 最大),避免压住队头挡住 SCHD/FLOP(US-03 AC1)。
+-- 航班 FLID 用 800001/800002,与 seed-flight.sql 的 90001–90008 互不干扰。
+-- =====================================================================
+
+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
+ ('
+
+
+ AODB
+ 1
+ 20260919120001
+ SCHD
+ DNLD
+
+
+ 2
+
+ 800001
+ CA
+ CA4104
+ A
+ 20SEP261235
+ S
+ D
+ PEK20SEP261015
+ CTU20SEP261235
+ 738
+ B-2087
+ T2
+ 264
+
+ 4
+ X
+ 20SEP261240
+ 20SEP261340
+ D
+
+
+ 105
+ 20SEP261240
+ 20SEP261340
+
+ PEK20SEP261015
+ CTU20SEP261235
+
+
+ 800002
+ 3U
+ 3U8885
+ D
+ 20SEP261510
+ S
+ D
+ CTU20SEP261510
+ SZX20SEP261750
+ 320
+ B-8690
+ T2
+ 158
+
+ D06
+ 20SEP261410
+ 20SEP261510
+ D
+
+
+ C05
+ Y
+ 20SEP261310
+ 20SEP261440
+ D
+
+
+ C06
+ X
+ 20SEP261310
+ 20SEP261440
+ D
+
+
+ CH04
+ X
+ 20SEP261340
+ 20SEP261500
+ D
+
+
+ 101
+ 20SEP261330
+ 20SEP261525
+
+ CTU20SEP261510
+ SZX20SEP261750
+
+
+', 'SCHD', 'DNLD', 'AODB', 1, '2026-09-19 12:00:01'),
+
+ -- ② FLOP/ACTT:800001 实际到达时间
+ ('
+
+
+ AODB
+ 2
+ 20260919120002
+ FLOP
+ ACTT
+
+
+ 800001
+ CA-CA4104-A-20SEP261235-D
+ 20SEP261228
+
+', 'FLOP', 'ACTT', 'AODB', 2, '2026-09-19 12:00:02'),
+
+ -- ③ FLOP/GTDT:800002 登机门改派 D06 → D08
+ ('
+
+
+ AODB
+ 3
+ 20260919120003
+ FLOP
+ GTDT
+
+
+ 800002
+ 3U-3U8885-D-20SEP261510-D
+
+ D08
+ 20SEP261410
+ 20SEP261510
+ D
+
+
+', 'FLOP', 'GTDT', 'AODB', 3, '2026-09-19 12:00:03'),
+
+ -- ④ REGN/DNLD:现状行为 = 命中 US-04 忽略清单 → SKIPPED + 回填(US-13 后不再跳过)
+ ('
+
+
+ AODB
+ 4
+ 20260919120004
+ REGN
+ DNLD
+
+ 2
+
+ B-8692
+ 320
+ 3U
+ 158
+
+
+ B-32D1
+ 321
+ 3U
+ 199
+
+', 'REGN', 'DNLD', 'AODB', 4, '2026-09-19 12:00:04'),
+
+ -- ⑤ ARPT/DNLD 排最后:现状行为 = 合法但不支持 → FAILED(UNSUPPORTED)
+ -- → 退避约 15s → DEAD(EXHAUSTED) → 回填;US-13 后预期改为 SKIPPED
+ ('
+
+
+ AODB
+ 5
+ 20260919120005
+ ARPT
+ DNLD
+
+ 1
+
+ CTU
+ ZUUU
+ CHENGDU SHUANGLIU INTERNATIONAL
+ 成都双流国际机场
+ 12
+ CN
+ CTU
+ D
+ L
+
+', 'ARPT', 'DNLD', 'AODB', 5, '2026-09-19 12:00:05');
diff --git a/deploy/integration/README.md b/deploy/integration/README.md
index 8e86626..ad8c309 100644
--- a/deploy/integration/README.md
+++ b/deploy/integration/README.md
@@ -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`;见上一节)。
## 停止与排查
diff --git a/deploy/integration/admin-api.yml b/deploy/integration/admin-api.yml
index c6dd0fd..131fa7d 100644
--- a/deploy/integration/admin-api.yml
+++ b/deploy/integration/admin-api.yml
@@ -25,7 +25,8 @@ spring:
test-on-borrow: true
validation-query: SELECT 1
secondary:
- url: jdbc:postgresql://${TEST_SERVER_HOST}:15432/msgx
+ # currentSchema:基础数据表在 basicdata,public 兜底;不设则默认只找 public。
+ url: jdbc:postgresql://${TEST_SERVER_HOST}:15432/msgx?currentSchema=basicdata,public
username: admin_reader
password: admin_reader_dev_pass
driver: org.postgresql.Driver
diff --git a/deploy/integration/admin-mysql-init/v0.0.1.20190110_adminapi_ddl.sql b/deploy/integration/admin-mysql-init/v0.0.1.20190110_adminapi_ddl.sql
new file mode 100644
index 0000000..daa6a4a
--- /dev/null
+++ b/deploy/integration/admin-mysql-init/v0.0.1.20190110_adminapi_ddl.sql
@@ -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的默认设置';
diff --git a/deploy/integration/admin-mysql-init/v0.0.1.20190110_adminapi_initdata.sql b/deploy/integration/admin-mysql-init/v0.0.1.20190110_adminapi_initdata.sql
new file mode 100644
index 0000000..7a43e01
--- /dev/null
+++ b/deploy/integration/admin-mysql-init/v0.0.1.20190110_adminapi_initdata.sql
@@ -0,0 +1,11 @@
+INSERT INTO `adminapi_datadic_groups` (`group_code`,`group_name`) VALUES ('FLIGHT_TASK','航班任务');
+INSERT INTO `adminapi_datadic_groups` (`group_code`,`group_name`) VALUES ('FLIGHT_TYPE','航班类别');
+INSERT INTO `adminapi_datadic_groups` (`group_code`,`group_name`) VALUES ('ROUTE_TYPE','航线类别');
+
+INSERT INTO `adminapi_datadic_items` (`dataitem_code`,`dataitem_name`,`dataitem_desc`,`group_code`) VALUES ('D','国内','航线类别类:D-国内','ROUTE_TYPE');
+INSERT INTO `adminapi_datadic_items` (`dataitem_code`,`dataitem_name`,`dataitem_desc`,`group_code`) VALUES ('I','国际','航线类别类别,I-国际','ROUTE_TYPE');
+
+
+INSERT INTO `adminapi_uisettings_default` VALUES ('36aa320785df40c29750bcd42f718a96', 'web', 'userSettingCol', '{\r\n \"defaultData\": [\r\n {\r\n \"COL_CODE\": \"ACFT\",\r\n \"COL_CN\": \"机型\",\r\n \"COL_ORDER\": \"1\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"GCTM\",\r\n \"COL_CN\": \"登机结束\",\r\n \"COL_ORDER\": \"2\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"BOTM\",\r\n \"COL_CN\": \"登机开始\",\r\n \"COL_ORDER\": \"3\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ABDG\",\r\n \"COL_CN\": \"登机桥\",\r\n \"COL_ORDER\": \"4\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"AOTM_D\",\r\n \"COL_CN\": \"撤桥时间\",\r\n \"COL_ORDER\": \"5\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"AOTM_A\",\r\n \"COL_CN\": \"靠桥时间\",\r\n \"COL_ORDER\": \"6\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"BELT\",\r\n \"COL_CN\": \"转盘号\",\r\n \"COL_ORDER\": \"7\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CHKC\",\r\n \"COL_CN\": \"值机柜台\",\r\n \"COL_ORDER\": \"8\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CCTM\",\r\n \"COL_CN\": \"值机结束\",\r\n \"COL_ORDER\": \"9\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"COTM\",\r\n \"COL_CN\": \"值机开始\",\r\n \"COL_ORDER\": \"10\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CHTM_OFF\",\r\n \"COL_CN\": \"下轮挡\",\r\n \"COL_ORDER\": \"11\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CHTM_ON\",\r\n \"COL_CN\": \"上轮挡\",\r\n \"COL_ORDER\": \"12\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"LACL\",\r\n \"COL_CN\": \"最后通知时间\",\r\n \"COL_ORDER\": \"13\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CHUT\",\r\n \"COL_CN\": \"行李传送带\",\r\n \"COL_ORDER\": \"14\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"RENO\",\r\n \"COL_CN\": \"飞机号\",\r\n \"COL_ORDER\": \"15\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ALCD\",\r\n \"COL_CN\": \"航空公司\",\r\n \"COL_ORDER\": \"16\",\r\n \"COL_WIDTH\": \"185px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ACTT\",\r\n \"COL_CN\": \"实际到达/出发\",\r\n \"COL_ORDER\": \"17\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"PSST\",\r\n \"COL_CN\": \"计划机位\",\r\n \"COL_ORDER\": \"18\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ESTT\",\r\n \"COL_CN\": \"预计到达/出发\",\r\n \"COL_ORDER\": \"19\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"MVIN\",\r\n \"COL_CN\": \"到达/出发\",\r\n \"COL_ORDER\": \"20\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ERUT\",\r\n \"COL_CN\": \"航线\",\r\n \"COL_ORDER\": \"21\",\r\n \"COL_WIDTH\": \"245px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FLNO\",\r\n \"COL_CN\": \"航班号\",\r\n \"COL_ORDER\": \"22\",\r\n \"COL_WIDTH\": \"140px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FTSS\",\r\n \"COL_CN\": \"运营状态\",\r\n \"COL_ORDER\": \"23\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FLIN\",\r\n \"COL_CN\": \"航线类别\",\r\n \"COL_ORDER\": \"24\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"SODT\",\r\n \"COL_CN\": \"计划到达/出发\",\r\n \"COL_ORDER\": \"25\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"TRML\",\r\n \"COL_CN\": \"航站楼\",\r\n \"COL_ORDER\": \"26\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FLTY\",\r\n \"COL_CN\": \"航班类别\",\r\n \"COL_ORDER\": \"27\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"GTDT\",\r\n \"COL_CN\": \"登机门号\",\r\n \"COL_ORDER\": \"28\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"PADT\",\r\n \"COL_CN\": \"前站起飞时间\",\r\n \"COL_ORDER\": \"29\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"STND\",\r\n \"COL_CN\": \"当前机位\",\r\n \"COL_ORDER\": \"31\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FLDT\",\r\n \"COL_CN\": \"航班日期\",\r\n \"COL_ORDER\": \"32\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ARSF\",\r\n \"COL_CN\": \"到港共享航班\",\r\n \"COL_ORDER\": \"33\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"DESF\",\r\n \"COL_CN\": \"离港共享航班\",\r\n \"COL_ORDER\": \"34\",\r\n \"COL_WIDTH\": \"120px\"\r\n }\r\n ],\r\n \"sourceList\": [],\r\n \"targetList\": [\r\n {\r\n \"COL_CODE\": \"ACFT\",\r\n \"COL_CN\": \"机型\",\r\n \"COL_ORDER\": \"1\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"GCTM\",\r\n \"COL_CN\": \"登机结束\",\r\n \"COL_ORDER\": \"2\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"BOTM\",\r\n \"COL_CN\": \"登机开始\",\r\n \"COL_ORDER\": \"3\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ABDG\",\r\n \"COL_CN\": \"登机桥\",\r\n \"COL_ORDER\": \"4\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"AOTM_D\",\r\n \"COL_CN\": \"撤桥时间\",\r\n \"COL_ORDER\": \"5\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"AOTM_A\",\r\n \"COL_CN\": \"靠桥时间\",\r\n \"COL_ORDER\": \"6\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"BELT\",\r\n \"COL_CN\": \"转盘号\",\r\n \"COL_ORDER\": \"7\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CHKC\",\r\n \"COL_CN\": \"值机柜台\",\r\n \"COL_ORDER\": \"8\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CCTM\",\r\n \"COL_CN\": \"值机结束\",\r\n \"COL_ORDER\": \"9\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"COTM\",\r\n \"COL_CN\": \"值机开始\",\r\n \"COL_ORDER\": \"10\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CHTM_OFF\",\r\n \"COL_CN\": \"下轮挡\",\r\n \"COL_ORDER\": \"11\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CHTM_ON\",\r\n \"COL_CN\": \"上轮挡\",\r\n \"COL_ORDER\": \"12\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"LACL\",\r\n \"COL_CN\": \"最后通知时间\",\r\n \"COL_ORDER\": \"13\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"CHUT\",\r\n \"COL_CN\": \"行李传送带\",\r\n \"COL_ORDER\": \"14\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"RENO\",\r\n \"COL_CN\": \"飞机号\",\r\n \"COL_ORDER\": \"15\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ALCD\",\r\n \"COL_CN\": \"航空公司\",\r\n \"COL_ORDER\": \"16\",\r\n \"COL_WIDTH\": \"185px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ACTT\",\r\n \"COL_CN\": \"实际到达/出发\",\r\n \"COL_ORDER\": \"17\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"PSST\",\r\n \"COL_CN\": \"计划机位\",\r\n \"COL_ORDER\": \"18\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ESTT\",\r\n \"COL_CN\": \"预计到达/出发\",\r\n \"COL_ORDER\": \"19\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"MVIN\",\r\n \"COL_CN\": \"到达/出发\",\r\n \"COL_ORDER\": \"20\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ERUT\",\r\n \"COL_CN\": \"航线\",\r\n \"COL_ORDER\": \"21\",\r\n \"COL_WIDTH\": \"245px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FLNO\",\r\n \"COL_CN\": \"航班号\",\r\n \"COL_ORDER\": \"22\",\r\n \"COL_WIDTH\": \"140px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FTSS\",\r\n \"COL_CN\": \"运营状态\",\r\n \"COL_ORDER\": \"23\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FLIN\",\r\n \"COL_CN\": \"航线类别\",\r\n \"COL_ORDER\": \"24\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"SODT\",\r\n \"COL_CN\": \"计划到达/出发\",\r\n \"COL_ORDER\": \"25\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"TRML\",\r\n \"COL_CN\": \"航站楼\",\r\n \"COL_ORDER\": \"26\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FLTY\",\r\n \"COL_CN\": \"航班类别\",\r\n \"COL_ORDER\": \"27\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"GTDT\",\r\n \"COL_CN\": \"登机门号\",\r\n \"COL_ORDER\": \"28\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"PADT\",\r\n \"COL_CN\": \"前站起飞时间\",\r\n \"COL_ORDER\": \"29\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"STND\",\r\n \"COL_CN\": \"当前机位\",\r\n \"COL_ORDER\": \"31\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"FLDT\",\r\n \"COL_CN\": \"航班日期\",\r\n \"COL_ORDER\": \"32\",\r\n \"COL_WIDTH\": \"85px\"\r\n },\r\n {\r\n \"COL_CODE\": \"ARSF\",\r\n \"COL_CN\": \"到港共享航班\",\r\n \"COL_ORDER\": \"33\",\r\n \"COL_WIDTH\": \"120px\"\r\n },\r\n {\r\n \"COL_CODE\": \"DESF\",\r\n \"COL_CN\": \"离港共享航班\",\r\n \"COL_ORDER\": \"34\",\r\n \"COL_WIDTH\": \"120px\"\r\n }\r\n ]\r\n}');
+INSERT INTO `adminapi_uisettings_default` VALUES ('491f6a2342164210a390ebbe19660470', 'web', 'userSettingMsgAlert', '{\"defaultData\":[{\"COL_CODE\":\"FLOP-CNCL\",\"COL_CN\":\"航班取消\"},{\"COL_CODE\":\"FLOP-FRET\",\"COL_CN\":\"航班返回\"},{\"COL_CODE\":\"FLOP-FDIV\",\"COL_CN\":\"航班备降\"},{\"COL_CODE\":\"FLOP-FDEL\",\"COL_CN\":\"航班删除\"},{\"COL_CODE\":\"FLOP-DELY\",\"COL_CN\":\"航班延误\"},{\"COL_CODE\":\"FLOP-ACTT\",\"COL_CN\":\"实际时间\"},{\"COL_CODE\":\"FLOP-GTDT\",\"COL_CN\":\"登机门消息\"},{\"COL_CODE\":\"FLOP-PSDT\",\"COL_CN\":\"机位变更\"},{\"COL_CODE\":\"FLOP-ESTT\",\"COL_CN\":\"预计到达时间\"},{\"COL_CODE\":\"FLOP-PADT\",\"COL_CN\":\"前站起飞\"},{\"COL_CODE\":\"FLOP-CKDT\",\"COL_CN\":\"值机柜台\"},{\"COL_CODE\":\"FLOP-BOTM\",\"COL_CN\":\"登机开始\"},{\"COL_CODE\":\"FLOP-CLDT\",\"COL_CN\":\"行李转盘\"},{\"COL_CODE\":\"FLOP-ROUT\",\"COL_CN\":\"航班航线\"},{\"COL_CODE\":\"FLOP-VIPP\",\"COL_CN\":\"航班VIP\"},{\"COL_CODE\":\"FLOP-HNAG\",\"COL_CN\":\"服务代理\"},{\"COL_CODE\":\"FLOP-FLBG\",\"COL_CN\":\"首末件行李到达\"},{\"COL_CODE\":\"FLOP-RENO\",\"COL_CN\":\"飞机号变更\"},{\"COL_CODE\":\"FLOP-ABTM\",\"COL_CN\":\"登桥撤桥\"},{\"COL_CODE\":\"FLOP-CHOT\",\"COL_CN\":\"上下轮档\"},{\"COL_CODE\":\"FLOP-TRML\",\"COL_CN\":\"航站楼\"},{\"COL_CODE\":\"SCHD-DNLD\", \"COL_CN\":\"日航班计划\"}],\"sourceList\":[],\"targetList\":[{\"COL_CODE\":\"FLOP-CNCL\",\"COL_CN\":\"航班取消\"},{\"COL_CODE\":\"FLOP-FRET\",\"COL_CN\":\"航班返回\"},{\"COL_CODE\":\"FLOP-FDIV\",\"COL_CN\":\"航班备降\"},{\"COL_CODE\":\"FLOP-FDEL\",\"COL_CN\":\"航班删除\"},{\"COL_CODE\":\"FLOP-DELY\",\"COL_CN\":\"航班延误\"},{\"COL_CODE\":\"FLOP-ACTT\",\"COL_CN\":\"实际时间\"},{\"COL_CODE\":\"FLOP-GTDT\",\"COL_CN\":\"登机门消息\"},{\"COL_CODE\":\"FLOP-PSDT\",\"COL_CN\":\"机位变更\"},{\"COL_CODE\":\"FLOP-ESTT\",\"COL_CN\":\"预计到达时间\"},{\"COL_CODE\":\"FLOP-PADT\",\"COL_CN\":\"前站起飞\"},{\"COL_CODE\":\"FLOP-CKDT\",\"COL_CN\":\"值机柜台\"},{\"COL_CODE\":\"FLOP-BOTM\",\"COL_CN\":\"登机开始\"},{\"COL_CODE\":\"FLOP-CLDT\",\"COL_CN\":\"行李转盘\"},{\"COL_CODE\":\"FLOP-ROUT\",\"COL_CN\":\"航班航线\"},{\"COL_CODE\":\"FLOP-VIPP\",\"COL_CN\":\"航班VIP\"},{\"COL_CODE\":\"FLOP-HNAG\",\"COL_CN\":\"服务代理\"},{\"COL_CODE\":\"FLOP-FLBG\",\"COL_CN\":\"首末件行李到达\"},{\"COL_CODE\":\"FLOP-RENO\",\"COL_CN\":\"飞机号变更\"},{\"COL_CODE\":\"FLOP-ABTM\",\"COL_CN\":\"登桥撤桥\"},{\"COL_CODE\":\"FLOP-CHOT\",\"COL_CN\":\"上下轮档\"},{\"COL_CODE\":\"FLOP-TRML\",\"COL_CN\":\"航站楼\"},{\"COL_CODE\":\"SCHD-DNLD\", \"COL_CN\":\"日航班计划\"}]}');
+INSERT INTO `adminapi_uisettings_default` VALUES ('52490af655624df6be0d3a8c92938468', 'web', 'userSettingColor', '[{\"COL_CODE\":\"SODT\", \"COL_CN\":\"预计到达/出发\", \"COL_BG_COLOR\":\"rgb(230,221,221,1)\",\"COL_COLOR\":\"rgb(0,70,255,1)\"},\r\n {\"COL_CODE\":\"ESTT\", \"COL_CN\":\"预计到达/出发\", \"COL_BG_COLOR\":\"rgb(255,207,157,1)\",\"COL_COLOR\":\"rgb(0,70,255,1)\"},\r\n {\"COL_CODE\":\"ACTT\", \"COL_CN\":\"实际到达/出发\", \"COL_BG_COLOR\":\"rgb(149,207,255,1)\",\"COL_COLOR\":\"rgb(0,70,255,1)\"},\r\n {\"COL_CODE\":\"RENO\", \"COL_CN\":\"飞机号变更\", \"COL_BG_COLOR\":\"rgb(46,255,135,1)\",\"COL_COLOR\":\"rgb(0,70,255,1)\"},\r\n {\"COL_CODE\":\"PSST\", \"COL_CN\":\"计划机位变更\", \"COL_BG_COLOR\":\"rgb(173,255,46,1)\",\"COL_COLOR\":\"rgb(0,70,255,1)\"},\r\n {\"COL_CODE\":\"PADT\", \"COL_CN\":\"前站起飞时间\", \"COL_BG_COLOR\":\"rgb(114,181,255,1)\",\"COL_COLOR\":\"rgb(0,70,255,1)\"}]');
diff --git a/deploy/integration/admin-mysql-init/v0.0.2_adminapi_dict_extra.sql b/deploy/integration/admin-mysql-init/v0.0.2_adminapi_dict_extra.sql
new file mode 100644
index 0000000..891088a
--- /dev/null
+++ b/deploy/integration/admin-mysql-init/v0.0.2_adminapi_dict_extra.sql
@@ -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');
diff --git a/deploy/integration/es-init/init-flight-hts.sh b/deploy/integration/es-init/init-flight-hts.sh
new file mode 100644
index 0000000..d1d8c22
--- /dev/null
+++ b/deploy/integration/es-init/init-flight-hts.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+# =====================================================================
+# deploy/integration/es-init/init-flight-hts.sh(ACM2-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 初始化完成"
diff --git a/deploy/integration/es-init/v1.2.0_20190428_flightHstMapping.json b/deploy/integration/es-init/v1.2.0_20190428_flightHstMapping.json
new file mode 100644
index 0000000..81ff3b5
--- /dev/null
+++ b/deploy/integration/es-init/v1.2.0_20190428_flightHstMapping.json
@@ -0,0 +1,1207 @@
+PUT flight_hts2
+
+PUT /flight_hts2/_alias/flight_hts
+
+PUT flight_hts2/_doc/_mapping
+{
+ "properties": {
+ "ABDG": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "ABN": {
+ "properties": {
+ "CAN": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "DLY": {
+ "properties": {
+ "CODE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "DURA": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "HHmm"
+ },
+ "STRT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "VALUE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "ALT": {
+ "properties": {
+ "DDES": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "DDIR": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "VALUE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "RTN": {
+ "properties": {
+ "REID": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "VALUE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "TYPE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "ABTM": {
+ "properties": {
+ "ABDG": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "ABOP": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "AOTM": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "ASNO": {
+ "type": "long"
+ }
+ }
+ },
+ "ACFT": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "ACTT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "ALCD": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "ALSC": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "APPT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "BOTM": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "CHDT": {
+ "properties": {
+ "CBTM": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "CCLS": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "CETM": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "CHNO": {
+ "type": "long"
+ },
+ "CHUT": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "CTYP": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "PCBT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "PCET": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ }
+ }
+ },
+ "CHOT": {
+ "properties": {
+ "CHID": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "CHST": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "CHTM": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "CSNO": {
+ "type": "long"
+ }
+ }
+ },
+ "CKDT": {
+ "properties": {
+ "CCLS": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "CCTM": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "CHKC": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "CKNO": {
+ "type": "long"
+ },
+ "COTM": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "CTYP": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "PCCT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "PCOT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ }
+ }
+ },
+ "CLDT": {
+ "properties": {
+ "BCLS": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "BELT": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "BTYP": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "CLNO": {
+ "type": "long"
+ },
+ "FBAG": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "LBAG": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "PCCT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "PCOT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ }
+ }
+ },
+ "CNCL": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "CSFT": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "CSOP": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "DELY": {
+ "properties": {
+ "CODE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "DURA": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "HHmm"
+ },
+ "STRT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "VALUE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "EGSR": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "EGST": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "ERUT": {
+ "properties": {
+ "APCD": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "RTNO": {
+ "type": "long"
+ },
+ "SCAT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "SCDT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ }
+ }
+ },
+ "ESTT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "EXSC": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "EXSR": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "FDIV": {
+ "properties": {
+ "DDES": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "DDIR": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "VALUE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "FHAG": {
+ "type": "long"
+ },
+ "FINT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "FLAB": {
+ "properties": {
+ "ARES": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "VALUE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "FLID": {
+ "type": "long"
+ },
+ "FLIN": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "FLNO": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "FLTY": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "FRET": {
+ "properties": {
+ "REID": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "VALUE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "FTSS": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "GTDT": {
+ "properties": {
+ "GATE": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "GCTM": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "GOTM": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "GTNO": {
+ "type": "long"
+ },
+ "GTYP": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "PGCT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "PGOT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ }
+ }
+ },
+ "LACL": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "LBNO": {
+ "type": "long"
+ },
+ "LBWT": {
+ "type": "long"
+ },
+ "LPSDT": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "LRENO": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "MAFL": {
+ "properties": {
+ "FLID": {
+ "type": "long"
+ },
+ "FLNO": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "MAID": {
+ "type": "long"
+ },
+ "MAXP": {
+ "type": "long"
+ },
+ "MHAG": {
+ "type": "long"
+ },
+ "MVIN": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "NAAT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "NEAT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "PADT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "PAXC": {
+ "type": "long"
+ },
+ "PEDT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "PHAG": {
+ "type": "long"
+ },
+ "PSDT": {
+ "properties": {
+ "PSNO": {
+ "type": "long"
+ },
+ "PSST": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "STET": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "STST": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ }
+ }
+ },
+ "REMC": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "RENO": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "ROUT": {
+ "properties": {
+ "APCD": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "RTNO": {
+ "type": "long"
+ },
+ "SCAT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "SCDT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ }
+ }
+ },
+ "SODT": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "SRVT": {
+ "properties": {
+ "OPER": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "SRET": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "SRPR": {
+ "type": "long"
+ },
+ "SRQT": {
+ "type": "long"
+ },
+ "SRST": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "SRTC": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "STND": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "TAFL": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "TAID": {
+ "type": "long"
+ },
+ "TAOP": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "TRML": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "VIPF": {
+ "properties": {
+ "OPER": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "VFES": {
+ "type": "long"
+ },
+ "VIPT": {
+ "properties": {
+ "OPER": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "VSCD": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "VTET": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ },
+ "VTQY": {
+ "type": "long"
+ },
+ "VTST": {
+ "type": "date",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ },
+ "format": "ddMMMyyHHmm"
+ }
+ }
+ },
+ "VPCD": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "VIPP": {
+ "type": "long"
+ },
+ "VIPR": {
+ "type": "long"
+ }
+ }
+}
\ No newline at end of file
diff --git a/deploy/integration/postgres-init/02-basicdata-schema.sql b/deploy/integration/postgres-init/02-basicdata-schema.sql
new file mode 100644
index 0000000..16a3c26
--- /dev/null
+++ b/deploy/integration/postgres-init/02-basicdata-schema.sql
@@ -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_COUNTRY(admin-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_CITY(SysCity)
+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_AIRPORTGROUP(SysAirportGroup)
+CREATE TABLE sys_airportgroup (
+ AIRPORT_GROUP_ID BIGINT NOT NULL PRIMARY KEY,
+ AIRPORT_GROUP_CODE VARCHAR(16),
+ AIRPORT_GROUP_NAME VARCHAR(64)
+);
+
+-- ④ 机场 SYS_AIRPORT(SysAirport;haul/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_AIRLINEGROUP(SysAirlineGroup)
+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_AIRLINE(SysAirline;code/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_AIRCRAFTTYPEGROUP(SysAircrafttypeGroup)
+CREATE TABLE sys_aircrafttypegroup (
+ AIRCRAFTTYPEGROUP_ID BIGINT NOT NULL PRIMARY KEY,
+ AIRCRAFTTYPEGROUP_CODE VARCHAR(16),
+ AIRCRAFTTYPEGROUP_NAME VARCHAR(64)
+);
+
+-- ⑧ 机型 SYS_AIRCRAFTTYPE(SysAircrafttype;chap/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_AIRCRAFT(SysAircraft;operate/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_TYPE(SysFlightType;Byte 映射 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_STATUS(SysFlightStatus)
+CREATE TABLE sys_flight_status (
+ STTC VARCHAR(16) NOT NULL PRIMARY KEY,
+ ABNS VARCHAR(64),
+ STDC VARCHAR(64),
+ STTD VARCHAR(8)
+);
+
+-- ⑫ 航班代理单位 SYS_FLIGHTAGENT(SysFlightAgent)
+CREATE TABLE sys_flightagent (
+ FLIGHTAGENT_ID VARCHAR(32) NOT NULL PRIMARY KEY,
+ FLIGHTAGENT_NAME VARCHAR(64),
+ OGID VARCHAR(32)
+);
+
+-- ⑬ 延误异常定义 FIMS_FLIGHTSTATUS_DEFINITION(FimsFlightStatusDefinition)
+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_TERMINAL(OrmsTerminal;operate 无注解)
+CREATE TABLE orms_terminal (
+ TERMINAL_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
+ OPERATE NUMERIC(18,0),
+ TERMINAL_NAME VARCHAR(64)
+);
+
+-- ⑮ 航站楼区域 ORMS_TERMINALAREA(OrmsTerminalarea)
+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_STANDTYPE(OrmsStandType)
+CREATE TABLE orms_standtype (
+ STAND_TYPE VARCHAR(32) NOT NULL PRIMARY KEY,
+ STAND_TYPE_DESC VARCHAR(64)
+);
+
+-- ⑰ 机位 ORMS_STAND(OrmsStand;ddgt/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_AIRBRIDGE(OrmsStandAirbridge + 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_GATE(OrmsGate;gtml/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_CHUT(OrmsChut;bcat/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_CHECKINDESK(OrmsCheckindesk;ccat/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_GROUP(CheckinGroup)
+CREATE TABLE orms_checkin_group (
+ CHECKIN_GROUP_CODE VARCHAR(16) NOT NULL PRIMARY KEY,
+ CHECKIN_GROUP_NAME VARCHAR(64)
+);
+
+-- ㉓ 行李转盘 ORMS_CAROUSEL(OrmsCarousel;bcls 无注解)
+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_SEASON(FimsFlightschdSeason;remarks 无注解)
+-- 供数方待定(`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_SEASON(FimsMidairportsSeason;orderno 无注解)
+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);
diff --git a/deploy/integration/postgres-init/03-basicdata-seed.sql b/deploy/integration/postgres-init/03-basicdata-seed.sql
new file mode 100644
index 0000000..7132fe4
--- /dev/null
+++ b/deploy/integration/postgres-init/03-basicdata-seed.sql
@@ -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');
diff --git a/deploy/integration/seed-flight.sql b/deploy/integration/seed-flight.sql
new file mode 100644
index 0000000..af09dc1
--- /dev/null
+++ b/deploy/integration/seed-flight.sql
@@ -0,0 +1,179 @@
+-- =====================================================================
+-- deploy/integration/seed-flight.sql(ACM2-76)
+-- 联调栈航班当前态种子:手动执行,前置条件是应用以 MSGX_FLYWAY_ENABLED=true
+-- 启动过一次(V1 基线已应用)。双流 T2 语境人造数据,运营日 2026-09-20。
+--
+-- 幂等:主表 FLIGHT_SCHD 用 ON CONFLICT (FLID) DO UPDATE(OPERATION_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 挂主航班 CA1858(MAID/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→KMG(CNCL 记取消时间,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;