- 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/归档顺序不变性回归测试
74 lines
2.9 KiB
Kotlin
74 lines
2.9 KiB
Kotlin
package com.gzzn.omms.msgexchange.codec
|
||
|
||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
|
||
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper
|
||
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty
|
||
import com.gzzn.omms.msgexchange.domain.flight.ScheduleRecord
|
||
import java.time.LocalDate
|
||
|
||
/**
|
||
* FLOP 报文解析体(单航班增量 §6.1)。
|
||
* scalars:FLID 以外的标量;collections:GTDT/CKDT 等重复集合(含源序号属性)。
|
||
*/
|
||
data class FlopPayload(
|
||
val flid: String,
|
||
val scalars: Map<String, String> = emptyMap(),
|
||
val collections: Map<String, List<Map<String, String>>> = emptyMap(),
|
||
)
|
||
|
||
/**
|
||
* SCHD(DNLD/RESP/ADFT)解析体(docs/flight-state.md §5)。
|
||
* RECS 声明数与实收 FLTR 记录分离承载,完整性校验(§5.2)在处理层执行;
|
||
* 协议无报文级覆盖日字段——scope 由处理层按记录 SODT 推导。
|
||
*/
|
||
data class ScheduleBody(
|
||
val recsDeclared: Int,
|
||
val records: List<ScheduleRecord>,
|
||
val scopeStart: LocalDate? = null,
|
||
val scopeEnd: LocalDate? = null,
|
||
)
|
||
|
||
// =====================================================================
|
||
// XML 直接映射(jackson-dataformat-xml 数据绑定,不再手写 DOM 遍历)。
|
||
// 信封强类型(META/段结构),FLTR/航班段内标签为开放集 → Map<String, Any>
|
||
// 泛型承载(45+ 标签逐一建模不成比例);集合项 = 属性 + 子元素展平的 Map。
|
||
// 已知弱项:DELY 的混合文本(元素文本)在 XmlMapper 绑定下不保证保留,
|
||
// 属性 CODE/STRT/DURA 保留;备注文本待真实报文验收(§10)。
|
||
// =====================================================================
|
||
|
||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||
data class SisMessage(
|
||
@JacksonXmlProperty(localName = "META")
|
||
val meta: SisMeta? = null,
|
||
@JacksonXmlProperty(localName = "SCHD")
|
||
val schd: SchdSection? = null,
|
||
@JacksonXmlProperty(localName = "FLOP")
|
||
val flop: Map<String, Any>? = null,
|
||
@JacksonXmlProperty(localName = "FDEL")
|
||
val fdel: Map<String, Any>? = null,
|
||
)
|
||
|
||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||
data class SisMeta(
|
||
@JacksonXmlProperty(localName = "SNDR")
|
||
val sndr: String? = null,
|
||
@JacksonXmlProperty(localName = "SEQN")
|
||
val seqn: Long? = null,
|
||
@JacksonXmlProperty(localName = "DTTM")
|
||
val dttm: Long? = null,
|
||
@JacksonXmlProperty(localName = "TYPE")
|
||
val type: String? = null,
|
||
@JacksonXmlProperty(localName = "STYP")
|
||
val styp: String? = null,
|
||
)
|
||
|
||
/** SCHD 段:RECS 声明数 + FLTR 记录集(SIS §3.16 样例结构)。 */
|
||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||
data class SchdSection(
|
||
@JacksonXmlProperty(localName = "RECS")
|
||
val recs: Int? = null,
|
||
@JacksonXmlElementWrapper(useWrapping = false)
|
||
@JacksonXmlProperty(localName = "FLTR")
|
||
val fltr: List<Map<String, Any>> = emptyList(),
|
||
)
|