From cdb91765e807d981df64ef414d9fd821412eeb09 Mon Sep 17 00:00:00 2001 From: sladro Date: Mon, 11 May 2026 15:35:08 +0800 Subject: [PATCH] Include aircraft name in path conflict resume alerts --- .../service/VehicleCommandService.java | 58 +++++++++++++++---- .../service/VehicleCommandServiceTest.java | 6 ++ 2 files changed, 53 insertions(+), 11 deletions(-) diff --git a/qaup-collision/src/main/java/com/qaup/collision/pathconflict/service/VehicleCommandService.java b/qaup-collision/src/main/java/com/qaup/collision/pathconflict/service/VehicleCommandService.java index 960d22c..64009a2 100644 --- a/qaup-collision/src/main/java/com/qaup/collision/pathconflict/service/VehicleCommandService.java +++ b/qaup-collision/src/main/java/com/qaup/collision/pathconflict/service/VehicleCommandService.java @@ -219,7 +219,8 @@ public class VehicleCommandService { previousState.parkingIssued(), confirmedCycles, observation.vehicleDistanceMeters(), - observation.aircraftDistanceMeters() + observation.aircraftDistanceMeters(), + previousState.aircraftName() ); VehicleConflictCommand resumeContext = new VehicleConflictCommand( @@ -229,7 +230,8 @@ public class VehicleCommandService { null, resolveRegistryType(vehicleId), previousState.vehicleDistanceMeters(), - previousState.aircraftDistanceMeters() + previousState.aircraftDistanceMeters(), + previousState.aircraftName() ); boolean resumeIssued = sendCommand(resumeContext, CommandType.RESUME, CommandReason.RESUME_TRAFFIC); @@ -254,6 +256,7 @@ public class VehicleCommandService { VehicleConflictCommand leftCandidate = toVehicleConflictCommand( event.getObject1Name(), event.getObject1Type(), + resolveAircraftName(event), level, event.getConflictPoint(), event.getObject1Distance(), @@ -266,6 +269,7 @@ public class VehicleCommandService { return toVehicleConflictCommand( event.getObject2Name(), event.getObject2Type(), + resolveAircraftName(event), level, event.getConflictPoint(), event.getObject2Distance(), @@ -276,6 +280,7 @@ public class VehicleCommandService { private VehicleConflictCommand toVehicleConflictCommand( String vehicleId, MovingObjectType objectType, + String aircraftName, VehicleRiskLevel level, Point conflictPoint, Double candidateDistance, @@ -312,10 +317,24 @@ public class VehicleCommandService { objectType, registryType, vehicleDistance, - aircraftDistance + aircraftDistance, + aircraftName ); } + private String resolveAircraftName(ConflictAlertEvent event) { + if (event == null) { + return null; + } + if (event.getObject1Type() == MovingObjectType.AIRCRAFT) { + return event.getObject1Name(); + } + if (event.getObject2Type() == MovingObjectType.AIRCRAFT) { + return event.getObject2Name(); + } + return event.getAircraftName(); + } + private VehicleRiskLevel toRiskLevel(ConflictAlertEvent event) { if (event.isAlert() || event.isEmergencyAlert()) { return VehicleRiskLevel.ALERT; @@ -581,15 +600,28 @@ public class VehicleCommandService { ConflictRecoveryObservation observation) { try { + String vehicleObjectType = toMovingObjectTypeName(resolveRegistryType(vehicleId)); + Double vehicleDistance = observation != null ? observation.vehicleDistanceMeters() : previousState.vehicleDistanceMeters(); + Double aircraftDistance = observation != null ? observation.aircraftDistanceMeters() : previousState.aircraftDistanceMeters(); PathConflictAlertMessage message = PathConflictAlertMessage.builder() .messageType("PATH_CONFLICT_RESUME") .message("Path conflict resolved, traffic resumed") .object1(PathConflictAlertMessage.ConflictObject.builder() .objectName(vehicleId) - .objectType(toMovingObjectTypeName(resolveRegistryType(vehicleId))) + .objectType(vehicleObjectType) .build()) - .object1Distance(observation != null ? observation.vehicleDistanceMeters() : previousState.vehicleDistanceMeters()) - .object2Distance(observation != null ? observation.aircraftDistanceMeters() : previousState.aircraftDistanceMeters()) + .object2(PathConflictAlertMessage.ConflictObject.builder() + .objectName(previousState.aircraftName()) + .objectType(MovingObjectType.AIRCRAFT.name()) + .build()) + .aircraftName(previousState.aircraftName()) + .aircraftObjectType(MovingObjectType.AIRCRAFT.name()) + .aircraftDistanceToConflictMeters(aircraftDistance) + .vehicleName(vehicleId) + .vehicleObjectType(vehicleObjectType) + .vehicleDistanceToConflictMeters(vehicleDistance) + .object1Distance(vehicleDistance) + .object2Distance(aircraftDistance) .eventTime(LocalDateTime.now()) .build(); @@ -637,7 +669,8 @@ public class VehicleCommandService { MovingObjectType objectType, VehicleRegistryType registryType, Double vehicleDistanceMeters, - Double aircraftDistanceMeters) { + Double aircraftDistanceMeters, + String aircraftName) { } private record ActiveVehicleCommandState( @@ -645,7 +678,8 @@ public class VehicleCommandService { boolean parkingIssued, int missingConflictCycles, Double vehicleDistanceMeters, - Double aircraftDistanceMeters) { + Double aircraftDistanceMeters, + String aircraftName) { private static ActiveVehicleCommandState fromCommand( VehicleRiskLevel level, @@ -658,7 +692,8 @@ public class VehicleCommandService { parkingIssued, missingConflictCycles, command.vehicleDistanceMeters(), - command.aircraftDistanceMeters() + command.aircraftDistanceMeters(), + command.aircraftName() ); } @@ -667,14 +702,15 @@ public class VehicleCommandService { int missingConflictCycles) { if (observation == null) { - return new ActiveVehicleCommandState(level, parkingIssued, missingConflictCycles, vehicleDistanceMeters, aircraftDistanceMeters); + return new ActiveVehicleCommandState(level, parkingIssued, missingConflictCycles, vehicleDistanceMeters, aircraftDistanceMeters, aircraftName); } return new ActiveVehicleCommandState( level, parkingIssued, missingConflictCycles, observation.vehicleDistanceMeters(), - observation.aircraftDistanceMeters() + observation.aircraftDistanceMeters(), + aircraftName ); } } diff --git a/qaup-collision/src/test/java/com/qaup/collision/pathconflict/service/VehicleCommandServiceTest.java b/qaup-collision/src/test/java/com/qaup/collision/pathconflict/service/VehicleCommandServiceTest.java index 111887c..cee71f2 100644 --- a/qaup-collision/src/test/java/com/qaup/collision/pathconflict/service/VehicleCommandServiceTest.java +++ b/qaup-collision/src/test/java/com/qaup/collision/pathconflict/service/VehicleCommandServiceTest.java @@ -157,6 +157,12 @@ class VehicleCommandServiceTest { server.verify(); verify(webSocketPublisher).publishPathConflictAlert(argThat(message -> "PATH_CONFLICT_RESUME".equals(message.getMessageType()) + && "UV-001".equals(message.getVehicleName()) + && "CA1234".equals(message.getAircraftName()) + && message.getObject1() != null + && "UV-001".equals(message.getObject1().getObjectName()) + && message.getObject2() != null + && "CA1234".equals(message.getObject2().getObjectName()) )); }