feat: scaffold Micronaut+Kotlin service per ACMA-8 v4 architecture

- 4 modules (ingress/processing/delivery/reference) + codec + infra + jobs
- Flyway V2.0.0: six aux tables (PROC_STATE/MSG_EVENT/REF_DATA/REQ_TRACK/PUMP_JOB/FLIGHT_STATE)
- Lua: snapshot_replace (atomic cover+gen-diff-delete), batch_delete (3:30 sweep)
- config: env-externalized secrets, phase A/B switch, ACMA-8 param-table defaults
- logback: logstash TCP JSON + traceId MDC
- pure-logic tests: identity (I3), schd aggregation max-by-EVENT_ID (FIX #7)
- build verified: gradle compile+test green on JDK 25 (Micronaut 5.1 requires JVM 25+)

Migrated from legacy repo subdirectory per repo-strategy decision (separate repo
per service, org convention). Refs: ACMA-9, ACMA-8 v4, ACMA-6
This commit is contained in:
windyboy
2026-09-06 16:13:50 +08:00
commit b2f3b896cc
33 changed files with 1414 additions and 0 deletions
@@ -0,0 +1,78 @@
-- =====================================================================
-- ACMA-8 v4 数据模型(六表)· Flyway 基线迁移
-- 与 issue「综合架构设计」数据模型节逐字一致;影子实例在独立 schema 执行同一脚本。
-- =====================================================================
-- ① 处理状态伴生表(不动 CMINMSGS 旧列;
-- 回滚兼容:SUCCEEDED 时回填 CMINMSGS.DATE_PROCESSED/STATUS,旧系统可接管续跑)
CREATE TABLE PROC_STATE (
CMINMSGS_ID BIGINT PRIMARY KEY,
STATE VARCHAR(16) NOT NULL, -- PENDING/FAILED/SUCCEEDED/SKIPPED/DEAD
IDENTITY_KEY VARCHAR(200) NULL, -- SNDR|TYPE|STYP|SEQNdecode 后首次绑定(I3
ATTEMPTS INT NOT NULL DEFAULT 0,
NEXT_ATTEMPT_AT TIMESTAMP NULL,
ERROR_CLASS VARCHAR(20) NULL, -- MALFORMED/CODEC_ERROR/EXHAUSTED/INFRA
LAST_ERROR VARCHAR(1000) NULL,
UPDATED_AT TIMESTAMP NOT NULL,
UNIQUE KEY UK_PROC_IDENTITY (IDENTITY_KEY),
INDEX IDX_PROC_HEAD (STATE, CMINMSGS_ID) -- 主泵队头查询(I1
);
-- ② 统一投递事件(outbox)
CREATE TABLE MSG_EVENT (
EVENT_ID BIGINT AUTO_INCREMENT PRIMARY KEY,
TARGET VARCHAR(30) NOT NULL, -- KAFKA:msg / KAFKA:schdA起);ES:flight_hts / REDIS:flightInfoB起)
PARTITION_KEY VARCHAR(64) NULL, -- schd 事件恒为 FLID
PAYLOAD_JSON MEDIUMTEXT NOT NULL,
STATE VARCHAR(16) NOT NULL, -- PENDING/SENT/DEAD
ATTEMPTS INT NOT NULL DEFAULT 0,
NEXT_ATTEMPT_AT TIMESTAMP NULL,
ERROR_CLASS VARCHAR(20) NULL,
LAST_ERROR VARCHAR(1000) NULL,
CREATED_AT TIMESTAMP NOT NULL,
INDEX IDX_EVT_HEAD (TARGET, STATE, EVENT_ID) -- 每 target 队头查询(I1 双层同策略)
);
-- ③ 参考数据 + SCHD generation 元数据(21 类;SCHD_GEN 行 RKEY=日期)
CREATE TABLE REF_DATA (
RTYPE VARCHAR(20) NOT NULL, -- AIRL/ARPT/... | SCHD_GEN
RKEY VARCHAR(64) NOT NULL,
PAYLOAD_JSON MEDIUMTEXT NOT NULL, -- SCHD_GEN: {"flids":[...],"version":N}
VERSION BIGINT NOT NULL DEFAULT 0, -- putGenIfVersion CAS 依据(流程 4
SOURCE VARCHAR(20) NOT NULL, -- ADMINAPI / AODB / PIPELINE
REFRESHED_AT TIMESTAMP NOT NULL,
PRIMARY KEY (RTYPE, RKEY)
);
-- ④ 请求状态机(15 类,流程 6)
CREATE TABLE REQ_TRACK (
REQ_ID BIGINT AUTO_INCREMENT PRIMARY KEY,
REQ_TYPE VARCHAR(20) NOT NULL,
PARAMS_JSON VARCHAR(500) NOT NULL,
STATE VARCHAR(16) NOT NULL, -- REGISTERED/SENT/WAITING/DONE/EXPIRED
COUTMSGS_ID INT NULL,
SENT_AT TIMESTAMP NULL,
COMPLETED_AT TIMESTAMP NULL,
INDEX IDX_REQ_OPEN (REQ_TYPE, STATE)
);
-- ⑤ 泵作业队列(定时任务统一入口:cron 触发入队,主泵 FIFO 执行)
CREATE TABLE PUMP_JOB (
JOB_ID BIGINT AUTO_INCREMENT PRIMARY KEY,
KIND VARCHAR(20) NOT NULL, -- ARCHIVE / HISTORY_SWEEP / PROJECTION_REBUILD
STATE VARCHAR(16) NOT NULL, -- QUEUED/RUNNING/DONE/FAILED
CREATED_AT TIMESTAMP NOT NULL,
UPDATED_AT TIMESTAMP NOT NULL,
LAST_ERROR VARCHAR(1000) NULL
);
-- ⑥ 航班状态权威(阶段 B 启用;此前 Redis 为权威,I5)
CREATE TABLE FLIGHT_STATE (
FLID VARCHAR(32) PRIMARY KEY,
FDAY DATE NOT NULL,
VERSION BIGINT NOT NULL,
MAID VARCHAR(32) NULL,
PAYLOAD_JSON MEDIUMTEXT NOT NULL, -- 投影兼容格式的 FLTR JSON
UPDATED_AT TIMESTAMP NOT NULL,
INDEX IDX_FS_DAY (FDAY, VERSION)
);