2026-09-08 11:26:20 +08:00
|
|
|
|
package com.gzzn.omms.msgexchange.codec
|
|
|
|
|
|
|
2026-09-09 17:53:08 +08:00
|
|
|
|
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
|
|
|
|
|
|
|
2026-09-08 11:26:20 +08:00
|
|
|
|
/**
|
2026-09-09 17:53:08 +08:00
|
|
|
|
* FLOP 报文解析体(单航班增量 §6.1)。
|
|
|
|
|
|
* scalars:FLID 以外的标量;collections:GTDT/CKDT 等重复集合(含源序号属性)。
|
2026-09-08 11:26:20 +08:00
|
|
|
|
*/
|
|
|
|
|
|
data class FlopPayload(
|
|
|
|
|
|
val flid: String,
|
|
|
|
|
|
val scalars: Map<String, String> = emptyMap(),
|
|
|
|
|
|
val collections: Map<String, List<Map<String, String>>> = emptyMap(),
|
|
|
|
|
|
)
|
2026-09-09 17:53:08 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 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(),
|
|
|
|
|
|
)
|