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;