fix(processing): Wave1 — IgnoreRules/ROUT截断/Q9文档/schd FLTR 数组(ACM2-94/88/81/96)

REGN/RSTA/EROR 退出忽略清单;ROUT/ERUT 升序留 4 且不落 SCAT/SCDT;C-1/Q9 统一库方清除;flushSchd 聚合成无 key 的 FLTR 数组。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
windyboy
2026-09-21 14:18:40 +08:00
co-authored by Cursor
parent d298fcc48f
commit 23b74ed554
18 changed files with 268 additions and 71 deletions
@@ -29,8 +29,9 @@ class KafkaDeliveryPort(
producer.send(ProducerRecord(topic, key, payloadJson)).get()
}
override fun sendKafkaSchd(topic: String, key: String, payloadJson: String) {
producer.send(ProducerRecord(topic, key, payloadJson)).get()
override fun sendKafkaSchd(topic: String, payloadJson: String) {
// C-9:不设 message key
producer.send(ProducerRecord<String, String>(topic, null, payloadJson)).get()
}
override fun sendKafkaNull(topic: String, key: String) {
@@ -8,6 +8,7 @@ import com.gzzn.omms.msgexchange.domain.MsgEvent
import com.gzzn.omms.msgexchange.domain.ProcState
import com.gzzn.omms.msgexchange.domain.ProcStatus
import com.gzzn.omms.msgexchange.domain.Targets
import com.gzzn.omms.msgexchange.domain.flight.FlightStateEngine
import com.gzzn.omms.msgexchange.domain.flight.FlightMainRow
import com.gzzn.omms.msgexchange.domain.flight.FlightSnapshot
import com.gzzn.omms.msgexchange.domain.flight.FlightState
@@ -679,7 +680,12 @@ class JdbcFlightStateRepository(
val collections = linkedMapOf<String, List<Map<String, String>>>()
COLLECTIONS.forEach { (key, spec) ->
collections[key] = loadDetails(flid, key, spec)
val loaded = loadDetails(flid, key, spec)
collections[key] = if (key == "ROUT" || key == "ERUT") {
FlightStateEngine.normalizeRouteCollection(loaded)
} else {
loaded
}
}
return FlightSnapshot(
flid = main.flid,
@@ -812,8 +818,20 @@ class JdbcFlightStateRepository(
private fun replaceDetails(snapshot: FlightSnapshot, now: Instant) {
val flid = snapshot.flid
COLLECTIONS.forEach { (key, spec) ->
ds.update("DELETE FROM ${spec.table} WHERE flid = ?", { ps -> ps.setString(1, flid) })
val items = snapshot.collections[key].orEmpty()
if (spec.routeKind != null) {
ds.update(
"DELETE FROM ${spec.table} WHERE flid = ? AND route_kind = ?",
{ ps ->
ps.setString(1, flid)
ps.setString(2, spec.routeKind)
},
)
} else {
ds.update("DELETE FROM ${spec.table} WHERE flid = ?", { ps -> ps.setString(1, flid) })
}
val items = snapshot.collections[key].orEmpty().let { raw ->
if (key == "ROUT" || key == "ERUT") FlightStateEngine.normalizeRouteCollection(raw) else raw
}
items.forEachIndexed { ordinal, item ->
val cols = mutableListOf("flid", "ordinal", "source_seq")
val vals = mutableListOf<Any?>(flid)
@@ -915,8 +933,8 @@ class JdbcFlightStateRepository(
"DELY" to DetailSpec("flight_delay", listOf("code", "strt", "dura", "remc"), null),
"ABTM" to DetailSpec("flight_bridge_op", listOf("abdg", "abop", "aotm"), "ASNO"),
"CHOT" to DetailSpec("flight_chock_op", listOf("chid", "chst", "chtm"), "CSNO"),
"ROUT" to DetailSpec("flight_route_point", listOf("apcd", "scat", "scdt"), "RTNO", routeKind = "ROUT"),
"ERUT" to DetailSpec("flight_route_point", listOf("apcd", "scat", "scdt"), "RTNO", routeKind = "ERUT"),
"ROUT" to DetailSpec("flight_route_point", listOf("apcd"), "RTNO", routeKind = "ROUT"),
"ERUT" to DetailSpec("flight_route_point", listOf("apcd"), "RTNO", routeKind = "ERUT"),
)
}
}
@@ -13,7 +13,7 @@ import jakarta.inject.Singleton
@Requires(property = "msgx.stubs", value = "true")
@Singleton
class StubDeliveryPort : DeliveryPort {
data class Sent(val topic: String, val key: String, val payload: String?)
data class Sent(val topic: String, val key: String?, val payload: String?)
val sent = mutableListOf<Sent>()
val tombstones: List<Sent> get() = sent.filter { it.payload == null }
@@ -24,8 +24,8 @@ class StubDeliveryPort : DeliveryPort {
sent += Sent(topic, key, payloadJson)
}
override fun sendKafkaSchd(topic: String, key: String, payloadJson: String) {
sent += Sent(topic, key, payloadJson)
override fun sendKafkaSchd(topic: String, payloadJson: String) {
sent += Sent(topic, null, payloadJson)
}
override fun sendKafkaNull(topic: String, key: String) {