Gruppenfahrten beenden
Die Funktion "Gruppenfahrten beenden" ermoglicht es einem Kunden, der eine Gruppenfahrtsitzung gestartet hat, alle Fahrten dieser Sitzung gleichzeitig zu beenden. Dies wird verwendet, wenn eine Person mehrere Fahrzeuge fur eine Gruppe (Familie, Freunde, Reisegruppe) gemietet hat und die gesamte Sitzung auf einmal beenden mochte.
Ubersicht
Gruppenfahrten ermoglichen es einem Kunden, mehrere Fahrzeuge fur einen Gruppenausflug zu starten. Wenn die Gruppe fertig ist, benotigt sie eine effiziente Moglichkeit, alle Fahrten gemeinsam zu beenden. Die Funktion "Gruppenfahrten beenden":
- Beendet die Hauptfahrt und alle untergeordneten Fahrten einer Gruppensitzung
- Berechnet und belastet die Endpreise fur jede Fahrt
- Sendet Sperrbefehle an alle betroffenen Fahrzeuge
- Gibt eine Zusammenfassung aller beendeten Fahrten zuruck
Schlusselkonzepte
| Begriff | Definition |
|---|---|
| Hauptfahrt | Die erste Fahrt einer Gruppensitzung (markiert als is_group_ride_parent: true) |
| Untergeordnete Fahrten | Zusatzliche Fahrten, die uber parent_ride_id mit der Hauptfahrt verknupft sind |
| Gruppensitzung | Alle Fahrten (Haupt- + untergeordnete) unter einem Kundenkonto |
| Sammelbeendigung | Ein API-Aufruf beendet alle Fahrten der Sitzung |
Hauptfunktionen
- Sitzungsbasiert - Beendet Fahrten, die mit einer bestimmten Hauptfahrt verknupft sind
- Sicherheit zuerst - Sperrt alle Fahrzeuge nach Beendigung
- Umfassende Abrechnung - Berechnet genauen Preis fur jede Fahrt
- Fehlerresistent - Fahrt mit der Verarbeitung fort, auch wenn einzelne Fahrten fehlschlagen
- Detaillierte Antwort - Berichtet Erfolg/Fehlschlag fur jede Fahrt
Wie Gruppenfahrten funktionieren
Eine Gruppenfahrt starten
Erstes Fahrzeug starten
Der Kunde scannt und startet das erste Fahrzeug - dieses wird zur Hauptfahrt.
Weitere Fahrzeuge hinzufugen
Der Kunde scannt weitere Fahrzeuge - diese werden zu untergeordneten Fahrten, die mit der Hauptfahrt verknupft sind.
Unter einem Konto verfolgen
Alle Fahrten werden unter demselben Kundenkonto verfolgt.
Limits beachten
Die maximale Anzahl von Fahrten pro Sitzung ist konfigurierbar (Standard: 5).
Wahrend der Gruppenfahrt
- Alle Fahrten laufen unabhangig (separate Abrechnung, separate Routen)
- Der Kunde kann einzelne Fahrten pausieren/fortsetzen
- Der Kunde kann einzelne Fahrten beenden, wenn jemand fruher geht
- Das Dashboard zeigt alle Fahrten, die durch die Hauptbeziehung verknupft sind
Beenden der Gruppensitzung
Beim Beenden der gesamten Gruppe:
- Der Kunde tippt auf "Alle Fahrten beenden" in der App
- Die App ruft den Alle-beenden-Endpunkt mit der Hauptfahrt-ID auf
- Das System validiert, dass die Hauptfahrt existiert und aktiv ist
- Das System beendet die Hauptfahrt + alle aktiven untergeordneten Fahrten
- Der Kunde sieht eine Zusammenfassung aller beendeten Fahrten und Gesamtgebuhren
API-Endpunkt
Anfrage
POST /api/mobile/rides/end-all/
Authentifizierung: Erforderlich (Kunden-JWT-Token)
Anfrage-Body:
{
"parent_ride_id": "uuid-der-hauptfahrt",
"end_location": {
"latitude": 37.7749,
"longitude": -122.4194
}
}
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
parent_ride_id | String (UUID) | Ja | Die ID der Hauptfahrt in der Gruppensitzung |
end_location | Object | Ja | Aktueller GPS-Standort des Kunden |
end_location.latitude | Number | Ja | Breitengrad-Koordinate |
end_location.longitude | Number | Ja | Langengrad-Koordinate |
Antwort
Erfolg (200 OK):
{
"ok": true,
"ended_rides": [
{
"ride_id": "uuid-hauptfahrt",
"ride_number": "R-12345",
"vehicle_id": "VH-001",
"final_amount_cents": 685,
"duration_seconds": 912,
"distance_m": 2340,
"status": "completed",
"is_parent": true
},
{
"ride_id": "uuid-untergeordnete-1",
"ride_number": "R-12346",
"vehicle_id": "VH-002",
"final_amount_cents": 445,
"duration_seconds": 654,
"distance_m": 1890,
"status": "completed",
"is_parent": false
}
],
"total_charged_cents": 1130,
"warnings": []
}
Teilerfolg (200 OK mit Warnungen):
{
"ok": true,
"ended_rides": [
{
"ride_id": "uuid-hauptfahrt",
"ride_number": "R-12345",
"vehicle_id": "VH-001",
"final_amount_cents": 685,
"status": "completed"
}
],
"total_charged_cents": 685,
"warnings": [
{
"ride_id": "uuid-untergeordnete-1",
"ride_number": "R-12346",
"message": "Fahrzeug konnte nicht gesperrt werden - Befehlszeituberschreitung"
}
]
}
Fehlerantworten:
| Status | Bedingung |
|---|---|
400 Bad Request | parent_ride_id nicht angegeben |
400 Bad Request | Fahrt ist keine Gruppenfahrt-Hauptfahrt |
401 Unauthorized | Ungultige oder fehlende Authentifizierung |
404 Not Found | Hauptfahrt nicht gefunden |
500 Internal Server Error | Systemfehler wahrend der Verarbeitung |
Gruppenfahrt-Konfiguration
Maximale Fahrten pro Sitzung
Konfigurieren Sie die maximal erlaubten Fahrzeuge in einer einzelnen Gruppensitzung:
Ort: Einstellungen > Sonstiges
{
"group_rides_max": 5
}
| Wert | Verhalten |
|---|---|
1 | Gruppenfahrten deaktiviert (nur Einzelfahrten erlaubt) |
5 | Standard - bis zu 5 Fahrzeuge pro Gruppe |
10 | Grossere Gruppen (z.B. Reiseveranstalter) |
Haufige Anwendungsfalle
| Szenario | Typisches Max | Hinweise |
|---|---|---|
| Verbraucher-App | 3-5 | Familien, kleine Freundesgruppen |
| Tourismus | 10-15 | Gefuhrte Touren |
| Unternehmen | 10-20 | Teamausfluge, Veranstaltungen |
Verarbeitungsdetails
Fahrt-Beendigungssequenz
Fur jede Fahrt in der Gruppe (Haupt- + untergeordnete):
-
Statusaktualisierung
- Setzt
ride_statusaufcompleted - Zeichnet
ended_at-Zeitstempel auf - Zeichnet
end_location-Koordinaten auf
- Setzt
-
Preisberechnung
- Berechnet aktive Zeitgebuhren
- Berechnet Pausenzeitgebuhren
- Wendet etwaige Rabatte an (Promocodes, Abonnements)
- Wendet Tagesobergrenze an, falls erreicht
- Wendet Mindestpreis an, falls zutreffend
-
Guthabenabbuchung
- Belastet Endbetrag vom Kundenguthaben
- Zeichnet Transaktion in Guthabenhistorie auf
- Behandelt negativen Saldo bei unzureichenden Mitteln
-
Fahrzeugbefehle
- Sendet Sperrbefehl an Fahrzeug
- Deaktiviert Gas (fur unterstutzte Fahrzeuge)
- Aktualisiert Fahrzeugstatus auf "Verfugbar"
-
Benachrichtigungen
- Sendet Push-Benachrichtigung uber Fahrtabschluss
- Enthalt Endgebuhrenbetrag
- Verlinkt zur Fahrtquittung
Fehlerbehandlung
Das System verwendet einen "Best Effort"-Ansatz:
- Wenn eine untergeordnete Fahrt nicht beendet werden kann, werden andere trotzdem verarbeitet
- Fahrzeugsperre-Fehler werden protokolliert, blockieren aber nicht den Abschluss
- Abrechnungsfehler werden zur manuellen Uberprufung protokolliert
- Der Kunde sieht Warnungen bei etwaigen Problemen
Robuste Verarbeitung
Die Gruppenfahrt-Beendigung wird fortgesetzt, auch wenn einige Fahrten Fehler aufweisen. Prufen Sie das warnings-Array in der Antwort auf Probleme, die Aufmerksamkeit erfordern.
Was fehlschlagen kann
| Fehler | Auswirkung | Losung |
|---|---|---|
| Fahrzeugsperren-Zeituberschreitung | Fahrt endet, Fahrzeug bleibt moglicherweise entsperrt | Manuelle Sperre uber Dashboard |
| Guthabenabbuchung fehlgeschlagen | Fahrt endet, Saldo wird negativ | Einziehen bei nachster Aufladung |
| Standort fehlt | Verwendet letzten bekannten Fahrzeugstandort | Akzeptabler Fallback |
| Datenbankfehler | Diese spezifische Fahrt wird nicht beendet | Wiederholen oder manuell beenden |
Zonenvalidierung
Beim Beenden von Gruppenfahrten validiert das System Parkzonen:
Parkzonenprufung
Jede Fahrt in der Gruppe wird validiert:
- Prufen, ob end_location innerhalb einer ausgewiesenen Parkzone liegt
- Falls ausserhalb der Parkzone:
- Prufen, ob die Einstellung
allow_end_ride_outside_parking_zoneaktiviert ist - Falls nicht erlaubt, bleibt diese Fahrt aktiv (Warnung wird zuruckgegeben)
- Prufen, ob die Einstellung
- Falls in Parkverbotszone:
- Diese Fahrt bleibt aktiv (Warnung wird zuruckgegeben)
- Der Kunde muss dieses Fahrzeug in eine gultige Zone bewegen
Standortquellen
Das System verwendet zwei Standortquellen fur die Validierung:
| Quelle | Prioritat | Anwendungsfall |
|---|---|---|
| Benutzergerat-Standort | Primar | GPS des Kundentelefons |
| Fahrzeugstandort | Fallback | IoT-Gerat-GPS |
Die Einstellung parking_zone_validation_mode bestimmt, welche Quelle verwendet wird:
vehicle_only- Nur Fahrzeug-GPS prufenboth- Beide mussen in gultiger Zone seinhybrid- Einer kann die Anforderung erfullen
Abrechnungsauswirkungen
Mehrfachfahrt-Gebuhren
Jede Fahrt in der Gruppe wird unabhangig berechnet:
Hauptfahrt: 6,85 € (15 Min. aktiv, 1 € Entsperrung, 0,39 €/Min.)
Untergeordnete Fahrt 1: 5,05 € (10 Min. aktiv + 2 Min. Pause, 1 € Entsperrung)
Untergeordnete Fahrt 2: 4,45 € (8 Min. aktiv, 1 € Entsperrung)
────────────────────────────────────────────
Gesamt: 16,35 € vom Guthaben belastet
Tagesobergrenze uber Gruppen hinweg
Die Tagesobergrenze gilt pro Kunde uber alle Fahrten in der Gruppe:
Kunde hat 30 € Tagesobergrenze
Hauptfahrt: 12,00 €
Untergeordnete Fahrt 1: 15,00 €
Untergeordnete Fahrt 2: 18,00 € (wurde Obergrenze uberschreiten)
────────────────────────────────────────────
Untergeordnete Fahrt 2 gedeckelt auf: 3,00 € (erreicht 30 € Gesamt)
Gesamtbelastung: 30,00 €
Unzureichendes Guthaben
Falls das Guthaben nicht ausreicht:
- Alle Fahrten werden trotzdem normal beendet
- Guthabensaldo wird negativ
- Kunde kann keine neuen Fahrten starten, bis aufgeladen
- Automatische Aufladung wird ausgelost, falls aktiviert
Anwendungsfalle
Familienausflug
- Elternteil startet Fahrt fur sich selbst (Hauptfahrt)
- Elternteil startet Fahrten fur 2 Kinder (untergeordnete Fahrten)
- Familie fahrt 45 Minuten zusammen
- Am Ziel tippt Elternteil auf "Alle Fahrten beenden"
- Alle 3 Fahrzeuge werden gesperrt, einzelne Guthabenbelastung
Gefuhrte Tour
- Tourfuhrer startet Hauptfahrt
- Fuhrer startet 8 untergeordnete Fahrten fur Tourteilnehmer
- Gruppe absolviert 2-stundige Tourroute
- Am Tourendpunkt beendet der Fuhrer alle Fahrten
- Alle 9 Fahrzeuge gesichert, Gesamtbetrag auf Fuhrerkonto abgerechnet
Freundesgruppe Aufteilung
- Ein Freund startet 4 Fahrten fur die Gruppe
- Nach 30 Minuten geht eine Person fruher
- Diese einzelne Fahrt wird separat beendet
- Spater werden die verbleibenden 3 Fahrten zusammen uber Alle-beenden beendet
- Nur aktive untergeordnete Fahrten werden von Alle-beenden betroffen
Dashboard-Verwaltung
Gruppenfahrten anzeigen
In der Fahrtenliste:
- Hauptfahrten zeigen Indikator (Gruppensymbol)
- Filter verfugbar, um nur Gruppenfahrten anzuzeigen
- Klicken Sie auf Hauptfahrt, um alle verknupften untergeordneten zu sehen
Fahrtdetailseite
Fur Hauptfahrten:
- Abschnitt "Untergeordnete Fahrten" listet alle Fahrten der Sitzung auf
- Klicken Sie auf eine untergeordnete Fahrt, um deren Details anzuzeigen
- Zeigt aggregierte Statistiken (Gesamtdauer, Gesamtumsatz)
Admin-Aktionen
Betreiber konnen:
- Einzelne Fahrten einer Gruppensitzung beenden
- Alle Fahrten einer Gruppe vom Dashboard beenden
- Gruppenfahrt-Historie fur einen Kunden anzeigen
Integrationshinweise
Fur App-Entwickler
Bei der Implementierung der Gruppenfahrten-beenden-Funktion:
- Hauptfahrt-ID verfolgen - Speichern Sie die Hauptfahrt-ID beim Starten der Gruppensitzung
- Standortberechtigung - Stellen Sie sicher, dass Standortzugriff vor dem Aufruf besteht
- Bestatigungs-UX - Zeigen Sie Vorschau aller zu beendenden Fahrten
- Ladezustand - Endpunkt kann bei mehreren Fahrten mehrere Sekunden dauern
- Fehleranzeige - Zeigen Sie etwaige Warnungen dem Kunden
- Quittungsbildschirm - Navigieren Sie nach Abschluss zur Zusammenfassung
Erwartete Antwortzeiten
| Anzahl Fahrten | Erwartete Zeit |
|---|---|
| 1-2 Fahrten | 1-2 Sekunden |
| 3-5 Fahrten | 2-4 Sekunden |
| 6-10 Fahrten | 4-8 Sekunden |
Fehlerbehandlung
Falls die Anfrage abläuft:
- Prufen Sie individuelle Fahrtstatus, bevor Sie es erneut versuchen
- Einige Fahrten wurden moglicherweise erfolgreich beendet
- Zeigen Sie dem Kunden den aktuellen Status
- Nur verbleibende aktive Fahrten werden bei Wiederholung verarbeitet
Fehlerbehebung
"parent_ride_id erforderlich"
Ursache: Anfrage-Body fehlt die Hauptfahrt-ID Losung: Stellen Sie sicher, dass die App die gespeicherte Hauptfahrt-UUID sendet
"Fahrt ist keine Gruppenfahrt-Hauptfahrt"
Ursache: Die angegebene Fahrt-ID ist eine untergeordnete Fahrt, nicht die Hauptfahrt Losung: Verwenden Sie die ursprungliche Hauptfahrt-ID vom Sitzungsstart
"Fahrzeug konnte nicht gesperrt werden"
Ursache: Fahrzeug-IoT-Befehl fehlgeschlagen Auswirkung: Fahrt endet, aber Fahrzeug bleibt moglicherweise entsperrt Losung: Manuell uber Dashboard sperren oder Aussendienst-Team entsenden
"Standort nicht in gultiger Zone"
Ursache: Ein oder mehrere Fahrzeuge befinden sich in Parkverbots-/Sperrzone Losung:
- Diese spezifischen Fahrten bleiben aktiv
- Kunde muss diese Fahrzeuge in gultige Parkzone bewegen
- Andere Fahrten in der Gruppe werden trotzdem erfolgreich beendet
Zeituberschreitung wahrend Verarbeitung
Ursache: Netzwerkprobleme oder hohe Last Losung:
- 30 Sekunden warten
- Fahrtenliste auf aktuellen Status prufen
- Verbleibende aktive Fahrten manuell beenden
Berechtigungen und Sicherheit
Authentifizierung
- Erfordert gultiges Kunden-JWT-Token
- Token darf nicht abgelaufen sein
- Kundenkonto muss aktiv sein (nicht gesperrt)
Autorisierung
- Kunde kann nur eigene Gruppenfahrten beenden
- Hauptfahrt muss dem authentifizierten Kunden gehoren
- Kann keine Gruppensitzung eines anderen Kunden beenden
- Admin-Endpunkte existieren fur Betreibereingriffe
Rate-Limiting
Zum Schutz vor Missbrauch:
- Maximal 10 Anfragen pro Minute pro Kunde
- Hilft, versehentliche doppelte Anfragen zu verhindern