diff --git a/qaup-collision/src/main/java/com/qaup/collision/dataprocessing/service/DataProcessingService.java b/qaup-collision/src/main/java/com/qaup/collision/dataprocessing/service/DataProcessingService.java index 22558ea..dc13578 100644 --- a/qaup-collision/src/main/java/com/qaup/collision/dataprocessing/service/DataProcessingService.java +++ b/qaup-collision/src/main/java/com/qaup/collision/dataprocessing/service/DataProcessingService.java @@ -155,8 +155,9 @@ public class DataProcessingService { // 第三步:处理通用车辆状态数据并发送WebSocket更新 processUniversalVehicleStatusUpdates(); - // 第四步:处理航班通知数据并发送WebSocket更新, 暂时关闭改为用websocket接收 - //processFlightNotificationUpdates(); + // 第四步:处理航班通知数据并发送WebSocket更新 + // 注意:采集侧只缓存;发送侧在处理完成后会清理缓存,避免同一通知被每秒重复推送(刷屏)。 + processFlightNotificationUpdates(); // 第五步:执行路径冲突检测 pathConflictDetectionService.detectPathConflicts(currentActiveObjects); @@ -522,8 +523,12 @@ public class DataProcessingService { log.info("开始处理航班通知数据,缓存数量: {}", flightNotificationCache.size()); + // 这里直接迭代共享的 ConcurrentHashMap: + // - 只在“成功发布事件”后做条件删除 remove(key, value),避免并发覆盖时误删新通知 + // - 失败/无效则保留,允许下一轮重试 for (Map.Entry entry : flightNotificationCache.entrySet()) { try { + final String cacheKey = entry.getKey(); FlightNotification notification = entry.getValue(); // 创建并发布WebSocket事件 @@ -538,6 +543,13 @@ public class DataProcessingService { // 触发基于航班通知的路由查询和更新处理 triggerRouteQueryByFlightNotification(notification); + + // 发布成功后清理缓存,避免每秒重复推送同一条通知直到5分钟后自然淘汰 + // 使用 remove(key, value) 防止并发更新导致误删新通知 + boolean removed = flightNotificationCache.remove(cacheKey, notification); + if (!removed) { + log.debug("航班通知缓存条目未删除(可能已被并发更新/移除): cacheKey={}", cacheKey); + } } else { log.warn("⚠️ 航班进出港通知WebSocket事件创建失败或无效: {}", notification.getFlightNo()); } diff --git a/命令.md b/命令.md index 3aeb400..7473e3f 100644 --- a/命令.md +++ b/命令.md @@ -40,6 +40,8 @@ docker logs qaup-app | grep -n "flight-notifications" | tail -n 200 ### 确定adapter没问题 tail -n 20000 /home/project_20250804/qaup/adxp-adapter/logs/adapter-logs.log | grep -E "事件的类型是|ADXP_NAOMS_O_CDM_AXOT" | tail -n 200 + + docker logs qaup-app | grep -E "通过WebSocket接收到|AXOT|BizKey|ActualPushback" | tail -n 200 docker exec -it qaup-app sh -lc ' @@ -49,4 +51,25 @@ while true; do echo "$(date +%T) no-axot"; sleep 1; done -' \ No newline at end of file +' + + +docker exec -it qaup-app sh -lc 'grep -nE "已连接到ADXP适配器WebSocket服务|正在连接到ADXP适配器WebSocket服务|数据中台航班 SDK 配置不完整|接收到 [0-9]+ 条航班通知|通过WebSocket接收到|新增航班通知缓存|合并航班通知缓存|数据无效|未知的服务代码|解析消息失败" /logs/sys-info.log /logs/sys-error.log 2>/dev/null | tail -n 200' + +tail -n 200000 /home/project_20250804/qaup/adxp-adapter/logs/adapter-logs.log \ +| grep -E "事件的类型是ADXP_NAOMS_O_(CDM_AXOT|DYN_ARR|CDM_RUNWAY|DYN_DFIE|DYN_DFDE|DYN_TISFLIGHT|DYN_CRAFTSEAT)" \ +| tail -n 200 + +tail -n 200000 /home/project_20250804/qaup/adxp-adapter/logs/adapter-logs.log \ +| grep -E "ERROR|异常|断开|close|重连|reconnect|失败|fail|timeout" \ +| tail -n 200 + + +curl -s http://10.64.58.228:8086/api/adxp/status +curl -s http://10.64.58.228:8086/api/adxp/health + +curl -s -X POST http://10.64.58.228:8086/api/adxp/reconnect + +docker exec -it qaup-app sh -lc 'grep -nE "连接到ADXP适配器WebSocket服务|已连接到ADXP适配器WebSocket服务|数据中台航班 SDK 配置不完整|接收到 .* 条航班通知|通过WebSocket接收到 .* 条航班进出港通知|数据中台航班 SDK 未启用|未获取到航班进出港通知数据|航班进出港通知数据无效" /logs/sys-info.log /logs/sys-error.log 2>/dev/null | tail -n 200' + +docker exec -it qaup-app sh -lc 'grep -nE "接收到 [0-9]+ 条航班通知|通过WebSocket接收到|新增航班通知缓存|合并航班通知缓存|发布航班进出港通知WebSocket事件" /logs/sys-info.log /logs/sys-error.log 2>/dev/null | tail -n 200' \ No newline at end of file