- SQL 基线 V1__flight_state_baseline.sql 整体取代 V1.0.0–V1.4.0: PIPELINE_LOCK/PROC_STATE/MSG_EVENT/REQ_TRACK/BACKFILL_TODO/FLIGHT_SCHD + 8 张资源明细表 + FLIGHT_ROUTE_POINT + SCHD_SNAP_LOG 留痕层 - 废除 FDAY 日代/SCHD_GEN/名单差删:OPERATION_DAY 不可变(应用层校验 + 条件更新强化 §7.4),STATE 仅 ACTIVE/DELETED,物理清除只在历史归档后 - 处理器化:applyScheduleRecords(§5.1 七步同一事务,重放判定/整包 DEAD(PROTOCOL)/归属冲突不落地)+ FLOP/FDEL/ADFT(tombstone 仅 ACTIVE→DELETED,重复 FDEL 幂等不推进版本) - 投递:KAFKA_SCHD 同 FLID 按最新 STATE_VERSION 合并,被压掉事件关闭, TOMBSTONE 发 null 值消息(键缺失=删除旧值 §7.3) - 回填待办改为业务事务内预登记,消除提交后写待办的崩溃窗口(§7.2/§10) - XML 解码改为 jackson-dataformat-xml 数据类直接映射(SIS 信封强类型, FLTR 开放标签泛型承载) - 历史归档/物理清除顺序不可颠倒:归档确认成功集才物理删除,未接通删 0 条 - 移除 PUMP_JOB 队列/ReferenceService/FlightStoreDiffTool 等旧机制与测试, 新增运营日/引擎/快照/FDEL/归档顺序不变性回归测试
41 lines
1.3 KiB
Kotlin
41 lines
1.3 KiB
Kotlin
package com.gzzn.omms.msgexchange.domain
|
||
|
||
/**
|
||
* 解码后的入站报文(统一内部模型)。META 字段实名 SNDR/SEQN/DTTM(legacy META.java,I3 幂等键来源)。
|
||
*/
|
||
data class MetaFields(
|
||
val sndr: String,
|
||
val type: String,
|
||
val styp: String,
|
||
val seqn: Long,
|
||
val dttm: Long,
|
||
)
|
||
|
||
/** 消息分派(sealed + 穷尽 when;FDEL 一等公民——终止航班实例 §6.2)。 */
|
||
sealed interface MsgKind {
|
||
data class Schd(val subtype: SchdSubtype) : MsgKind
|
||
data class Flop(val subtype: String) : MsgKind // 运行动态 STYP(FDEL 除外)
|
||
data object Fdel : MsgKind
|
||
|
||
/** 未支持类型(§9:FAILED(UNSUPPORTED),达阈值转 DEAD)。 */
|
||
data class Unsupported(val tag: String) : MsgKind
|
||
|
||
enum class SchdSubtype { RESP, DNLD, ADFT }
|
||
}
|
||
|
||
data class DecodedMessage(
|
||
val meta: MetaFields,
|
||
val kind: MsgKind,
|
||
val rawXml: String,
|
||
/** 各类型载荷(vendor POJO 或 Kotlin 模型,阶段 1 后续统一)。 */
|
||
val body: Any? = null,
|
||
) {
|
||
val typeTag: String
|
||
get() = when (val k = kind) {
|
||
is MsgKind.Schd -> "SCHD-${k.subtype.name}"
|
||
is MsgKind.Flop -> "FLOP-${k.subtype}"
|
||
MsgKind.Fdel -> "FDEL"
|
||
is MsgKind.Unsupported -> k.tag
|
||
}
|
||
}
|