diff --git a/contribs/drt/src/main/java/org/matsim/contrib/drt/prebooking/PrebookingManager.java b/contribs/drt/src/main/java/org/matsim/contrib/drt/prebooking/PrebookingManager.java index 675a3f30f64..1fc580715f4 100644 --- a/contribs/drt/src/main/java/org/matsim/contrib/drt/prebooking/PrebookingManager.java +++ b/contribs/drt/src/main/java/org/matsim/contrib/drt/prebooking/PrebookingManager.java @@ -137,19 +137,19 @@ public void handleEvent(PersonStuckEvent event) { // Event handling: We don't want to process events in notifyMobsimAfterSimStep, // so we do it at the next time step - private record RejectionItem(Id requestId, Id personId, String cause) { + private record RejectionItem(Id requestId, List> personIds, String cause) { } private final ConcurrentLinkedQueue rejections = new ConcurrentLinkedQueue<>(); private void processRejection(PassengerRequest request, String cause) { - rejections.add(new RejectionItem(request.getId(), request.getPassengerId(), cause)); + rejections.add(new RejectionItem(request.getId(), request.getPassengerIds(), cause)); } private void flushRejections(double now) { for (RejectionItem item : rejections) { eventsManager.processEvent( - new PassengerRequestRejectedEvent(now, mode, item.requestId, item.personId, item.cause)); + new PassengerRequestRejectedEvent(now, mode, item.requestId, item.personIds, item.cause)); } rejections.clear(); @@ -394,10 +394,10 @@ private void processRejections(double now) { // Stuck private void processStuckAgents(double now) { - bookingQueue.removeIf(request -> stuckPersonsIds.contains(request.getPassengerId())); + bookingQueue.removeIf(request -> stuckPersonsIds.containsAll(request.getPassengerIds())); for (RequestItem item : requests.values()) { - if (stuckPersonsIds.contains(item.request.getPassengerId())) { + if (stuckPersonsIds.containsAll(item.request.getPassengerIds())) { cancel(item.request.getId()); } } diff --git a/contribs/drt/src/test/java/org/matsim/contrib/drt/prebooking/PersonStuckPrebookingTest.java b/contribs/drt/src/test/java/org/matsim/contrib/drt/prebooking/PersonStuckPrebookingTest.java index 92ff2b4ebc0..11d3951b632 100644 --- a/contribs/drt/src/test/java/org/matsim/contrib/drt/prebooking/PersonStuckPrebookingTest.java +++ b/contribs/drt/src/test/java/org/matsim/contrib/drt/prebooking/PersonStuckPrebookingTest.java @@ -76,7 +76,7 @@ public void cancelTest() { /* * Agent personA is performing three drt legs during the day. Agent personB does * exactly the same in parallel, both prebook there requests. - * + * * We cancel the first request of personA. We check that the other reservations * are automatically rejected as soon as the person is stuck. */ @@ -198,14 +198,14 @@ public void handleEvent(PassengerDroppedOffEvent event) { @Override public void handleEvent(PassengerRequestSubmittedEvent event) { - if (event.getPersonId().equals(personId)) { + if (event.getPersonIds().contains(personId)) { submittedCount++; } } @Override public void handleEvent(PassengerRequestRejectedEvent event) { - if (event.getPersonId().equals(personId)) { + if (event.getPersonIds().contains(personId)) { rejectedCount++; } } diff --git a/contribs/drt/src/test/java/org/matsim/contrib/drt/prebooking/PrebookingTestEnvironment.java b/contribs/drt/src/test/java/org/matsim/contrib/drt/prebooking/PrebookingTestEnvironment.java index 3c0d195e32b..8e1f6394388 100644 --- a/contribs/drt/src/test/java/org/matsim/contrib/drt/prebooking/PrebookingTestEnvironment.java +++ b/contribs/drt/src/test/java/org/matsim/contrib/drt/prebooking/PrebookingTestEnvironment.java @@ -382,9 +382,10 @@ private class RequestListener implements DrtRequestSubmittedEventHandler, Passen PassengerDroppedOffEventHandler, PassengerRequestRejectedEventHandler { @Override public void handleEvent(DrtRequestSubmittedEvent event) { - requestInfo.computeIfAbsent(event.getPersonIds().stream().map(Object::toString).collect(Collectors.joining("-")), id -> new RequestInfo()).submissionTime = event + String ids = event.getPersonIds().stream().map(Object::toString).collect(Collectors.joining("-")); + requestInfo.computeIfAbsent(ids, id -> new RequestInfo()).submissionTime = event .getTime(); - requestInfo.computeIfAbsent(event.getPersonId().toString(), id -> new RequestInfo()).submissionTimes + requestInfo.computeIfAbsent(ids, id -> new RequestInfo()).submissionTimes .add(event.getTime()); }