Files
msgexchange-v2/src/main/kotlin/com/gzzn/omms/msgexchange/codec/SisMessageBody.kt
T
windyboy 879d658159 refactor(flight-state): 按 flight-state.md 审计定稿全量重构脚手架与 SQL (ACM2-31)
- 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/归档顺序不变性回归测试
2026-09-09 17:53:08 +08:00

74 lines
2.9 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)。
* scalarsFLID 以外的标量;collectionsGTDT/CKDT 等重复集合(含源序号属性)。
*/
data class FlopPayload(
val flid: String,
val scalars: Map<String, String> = emptyMap(),
val collections: Map<String, List<Map<String, String>>> = emptyMap(),
)
/**
* SCHDDNLD/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(),
)