MultiRoute Tour! API-Schnittstelle

Datenaustausch (JSON)

Der Datenaustausch ist auf JSON Objekte ausgelegt.
Beim Übermitteln von JSON Objekten(POST) muss man den
Header: "Content-Type: application/json" mit angeben.

Es ist aber auch möglich die Abfrage über GET bzw. normale POST Request zu machen.
Dies ist dann sinnvoll, wenn man Daten vom Server holt.

Authentifizierung

Da immer ein gültiger Benutzer benötigt wird, muss man sich entweder mittels Basic Auth (http://username:password@domain/) anmelden,
oder es wird ein Benutzer fest hinterlegt. Dieser feste Benutzer wird dann in einer Konfiguration eingetragen.

Ablauf der API-Ansteuerung

  1. Adressen hochladen -> http://domain/fernsteuerung/add_and_update_adresse
  2. Adressen prüfen wenn ohne Koordinaten hochgeladen -> http://domain/fernsteuerung/check_geocode?upload_id=<upload_id>
  3. Planung anlegen (Depot Adresse festlegen) -> http://domain/fernsteuerung/planung/add_and_update
  4. Adressen zu Planung hinzufügen -> http://domain/fernsteuerung/planung/add_definition
  5. Aufträge an Adresse und Planung anlegen -> http://domain/fernsteuerung/auftrag
  6. Flotte einrichten -> http://domain/fernsteuerung/flotte
  7. Tourberechnung starten -> http://domain/fernsteuerung/tour/berechnen
  8. Prüfen ob Tourberechnung fertig -> http://domain/fernsteuerung/touren?limit=1&planung=<nr der Planung>
  9. Tour Abfragen -> http://domain/fernsteuerung/tour/<tour-id>

Adressen

Adressen abrufen

http://domain/fernsteuerung/adresse

Parameter (optional):

limit Limit
offset Offset
koordinaten Gibt Koordinaten mit aus (optional default false)
kommentar Gibt Kommentar mit aus (optional default false)
alle_ausgaben Gibt nur zugeordnete Adressen aus (Bezirk und Ausgabe werden als Array ausgegeben (Adresse kann in verschiedenen Ausgaben sein) (optional default false)
starthaus Gibt nur Adressen die Starthaus sind aus (Bezirk und Ausgabe werden als Array ausgegeben (Adresse kann in verschiedenen Ausgaben sein) (optional default false)
zustellerhaus Gibt nur Adressen die Zustellerhaus sind aus (Bezirk und Ausgabe werden als Array ausgegeben (Adresse kann in verschiedenen Ausgaben sein) (optional default false)
endhaus Gibt nur Adressen die Endhaus sind aus (Bezirk und Ausgabe werden als Array ausgegeben (Adresse kann in verschiedenen Ausgaben sein) (optional default false)
depot Gibt nur Adressen die Depot sind aus (Bezirk und Ausgabe werden als Array ausgegeben (Adresse kann in verschiedenen Ausgaben sein) (optional default false)
ausgabe Name der Ausgabe (funktioniert nur mit [alle_ausgaben,starthaus,zustellerhaus,endhaus,depot])

Optionale Filter Parameter:

oi Gebäude ids
plz Postleitzahl
ort Ort
ort_zusatz Ortsteil
strasse Strasse
hausnummer Hausnummer
hausnummer_zusatz Hausnummer Zusatz
street_oi Straßenabschnitts-ID
manuell true (Gibt nur durch Kartenklick erfasste Adressen aus (GBC Nummer))
ohne_koordinaten true (Adressen ohne Koordinaten)
upload_id Gibt nur die Adressen zurück die mit dieser id übermittelt wurden (Rückgabewert Adressen hinzufügen)

Rückgabe:

[{
    "oi": "OOI1411",
    "plz": "10115",
    "ort": "Berlin",
    "ort_zusatz": null,
    "strasse": "Ackerstraße",
    "hausnummer": "172",
    "hausnummer_zusatz": "",
    "is_active": true,
    "privathaushalte": 1,
    "gewerbebetriebe": 2
}, {
    "oi": "OOI1412",
    "plz": "10115",
    "ort": "Berlin",
    "ort_zusatz": null,
    "strasse": "Ackerstraße",
    "hausnummer": "173",
    "hausnummer_zusatz": "",
    "is_active": true,
    "privathaushalte": null,
    "gewerbebetriebe": null
}, {
    "oi": "OOI1413",
    "plz": "10115",
    "ort": "Berlin",
    "ort_zusatz": null,
    "strasse": "Ackerstraße",
    "hausnummer": "174",
    "hausnummer_zusatz": "",
    "is_active": true,
    "privathaushalte": null,
    "gewerbebetriebe": null
}]

Rückgabe mit alle_ausgaben:

[{
    "oi": "12760120275582",
    "plz": "35075",
    "ort": "Gladenbach",
    "ortsteil": "",
    "ort_zusatz": null,
    "strasse": "Adolf-Theis-Straße",
    "hausnummer": "12",
    "hausnummer_zusatz": "",
    "is_active": true,
    "notice": null,
    "street_oi": "0000386499",
    "privathaushalte": 2,
    "gewerbebetriebe": 0,
    "werbeverweigerer": null,
    "ausgabe_bezirk": [{
        "nr": "B201015Z",
        "ausgabe": "Freitag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Montag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Dienstag" 
    }, {
        "nr": "B201015V",
        "ausgabe": "Vollverteilung" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Vollverteilung" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Donnerstag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Test Meier Abo 24.03.17" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Samstag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Sonntag" 
    }, {
        "nr": "T201055",
        "ausgabe": "Test Meier Abo 24.03.17" 
    }, {
        "nr": "T201055",
        "ausgabe": "Test" 
    }]
}, {
    "oi": "12760120388646",
    "plz": "35075",
    "ort": "Gladenbach",
    "ortsteil": "",
    "ort_zusatz": null,
    "strasse": "Adolf-Theis-Straße",
    "hausnummer": "13",
    "hausnummer_zusatz": "",
    "is_active": true,
    "notice": null,
    "street_oi": "0000386499",
    "privathaushalte": 2,
    "gewerbebetriebe": 0,
    "werbeverweigerer": null,
    "ausgabe_bezirk": [{
        "nr": "T201055",
        "ausgabe": "Test" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Montag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Dienstag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Donnerstag" 
    }, {
        "nr": "B201015V",
        "ausgabe": "Vollverteilung" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Vollverteilung" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Freitag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Test Meier Abo 24.03.17" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Samstag" 
    }, {
        "nr": "T201055",
        "ausgabe": "Test Meier Abo 24.03.17" 
    }]
}, {
    "oi": "12760120264124",
    "plz": "35075",
    "ort": "Gladenbach",
    "ortsteil": "",
    "ort_zusatz": null,
    "strasse": "Adolf-Theis-Straße",
    "hausnummer": "14",
    "hausnummer_zusatz": "",
    "is_active": true,
    "notice": null,
    "street_oi": "0000386499",
    "privathaushalte": 1,
    "gewerbebetriebe": 0,
    "werbeverweigerer": null,
    "ausgabe_bezirk": [{
        "nr": "T201055",
        "ausgabe": "Test" 
    }, {
        "nr": "B201015V",
        "ausgabe": "Vollverteilung" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Sonntag" 
    }, {
        "nr": "T201055",
        "ausgabe": "Test Meier Abo 24.03.17" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Donnerstag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Vollverteilung" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Test Meier Abo 24.03.17" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Freitag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Dienstag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Montag" 
    }, {
        "nr": "B201015Z",
        "ausgabe": "Samstag" 
    }]
}]

Adressen Geokodierung prüfen

http://domain/fernsteuerung/check_geocode?upload_id=<upload_id>

Parameter:

upload_id Id welche man erhält, wenn man Adressen hinzugefügt hat
status null oder "Geokodierung gestartet" bzw. "Geokodierung beendet"
geocoded Anzahl Adressen mit Koordinaten
not_geocoded Anzahl Adressen ohne Koordinaten
{
  "upload_id":60,
  "status":"Geokodierung beendet",
  "geocoded":4,
  "not_geocoded":0
}

Adressen Hinzufügen/Updaten

http://domain/fernsteuerung/add_and_update_adresse

Parameter:

adresse Adresse Parameter
insert true(default) oder false. Nur neue Adressen werden hinzugefügt
update true(default) oder false. Bestehende Adressen werden geupdated

Adresse Parameter:

oi Gebäude ID (required)
street_oi Straßen ID
longitude Längengrad (required)
latitude Breitengrad (required)
plz Postleitzahl
ort Ort
ort_zusatz Ort Zusatz
ortsteil Ortsteil
strasse Strasse
hausnummer Hausnummer
hausnummer_zusatz Hausnummer Zusatz
is_active Haus ist aktiv (required)
privathaushalte Anzahl Werbeverweigerer (integer)
gewerbebetriebe Anzahl Werbeverweigerer (integer)
werbeverweigerer Anzahl Werbeverweigerer (integer)
Rückgabe:
upload_id Upload Id (siehe Filter adressen abfragen)
text
added Anzahl hinzugefügte Adresssen
updated Anzahl aktualisiete Adresssen
{
"update": true,
"insert": true, 
"adresse": [{
    "oi": "GBC93385",
    "plz": "10119",
    "ort": "Berlin",
    "ort_zusatz": null,
    "strasse": "Schwedter Straße",
    "hausnummer": "22",
    "hausnummer_zusatz": "",
    "is_active": true,
    "notice": null,
    "privathaushalte": 0,
    "gewerbebetriebe": 0,
    "werbeverweigerer": 0,
    "longitude": 52.5347133208835,
    "latitude": 13.4075689315796
}, {
    "oi": "GBC360693",
    "plz": "84030",
    "ort": "Ergolding",
    "ort_zusatz": null,
    "strasse": "Schinderstraßl",
    "hausnummer": "5",
    "hausnummer_zusatz": "D",
    "is_active": true,
    "notice": null,
    "privathaushalte": 0,
    "gewerbebetriebe": 0,
    "werbeverweigerer": null,
    "longitude": 12.1660333871841,
    "latitude": 48.5649005287186
}]
 }

{"upload_id":51,"text":"1 Adressen hinzugefügt, 0 Adressen geupdated ","added":1,"updated":0}

Adressen löschen

http://domain/fernsteuerung/delete_adresse

oi Adresse ID
{
"oi": ["3353880","2739684","DEBYv00099005586","DEBYv00099000331","DEBYv00099029356","DEBYv00099001121","DEBYv00099000328"]
}

Aufträge

Aufträge werden im Tour! Modul bearbeitet anstelle der Abonnenten aus dem Go! Modul.
Der Zugriff auf das Auftrags-Modell erfolgt über eine REST-Schnittstelle.
Wichtig! Auch wenn Aufträge Referenzen zur Adresse und zur Planung besitzen, müssen weiterhin Planungs-Definitionen eingerichtet werden damit die Aufträge in der Optimierung berücksichtigt werden.
Diese Planungs-Definitionen werden bei einem PUT oder POST Request standardmäßig erstellt.
Wenn das genannte Standardverhalten verhindert werden soll, dann fügt man den Request-Parametern das folgende KeyValue-Paar hinzu: {"set_active": "false"}.

Externer Identifier in Aufträgen

Sie können alternativ zum gestellten 'id'-Attribut auch einen Identifier "ext_id" mitgeben, womit Sie auf ihre Aufträge referenzieren und zugreifen können -
vorausgesetzt, Sie liefern einen solchen externen Identifier 'ext_id' mit beim Anlegen der Aufträge.
Die Schnittstelle überprüft, dass beim Anlegen eines Auftrags die 'ext_id' einzigartig ist.
Der externe Identifier kann bei bestehenden Aufträgen nicht nachträglich per PUT-Request bearbeitet werden.

Parameter für POST und PUT-Requests:

Verwenden Sie POST-Requests zum hinzufügen von neuen Aufträgen:
POST http://domain/fernsteuerung/auftrag

POST-Requests können keine bestehenden Aufträge überschreiben!
Verwenden Sie stattdessen PUT-Requests, um Aufträge zu bearbeiten:
PUT http://domain/fernsteuerung/auftrag

Liefern Sie dem Request ein Array mit dem Namen 'auftraege'.
Jeder Eintrag im 'auftraege'-Array repräsentiert genau einen Auftrag mit den folgenden Attributen:

Referenz-Parameter:
Attribut Beschreibung im POST-Request im PUT-Request
id interner Identifier ignoriert Pflichtfeld, wenn keine 'ext_id' angegeben ist
ext_id externer Identifier optional Pflichtfeld, wenn keine 'id' angegeben ist
adresse_id interne ID der Adresse Pflichtfeld, wenn keine adresse_oid angegeben optional
adresse_oid Objekt-ID der Adresse Pflichtfeld, wenn keine adresse_id angegeben optional; ignoriert, wenn adresse_id angegeben
planung_id interne ID der Planung Pflichtfeld, wenn keine planung_nr angegeben optional
planung_nr Nr der Planung Pflichtfeld, wenn keine planung_id angegeben optional; ignoriert, wenn planung_id angegeben
Optionale Parameter:
Attribut Beschreibung default-Wert
name Bezeichnung des Auftrags "Kein Auftragsname"
capacity für den Auftrag benötigte Kapazität* 0
servicetime individuelle Servicezeit des Auftrags 0
timewindows Zeitfenster des Auftrags im HHMMD-Format** "[]"
servicetime_per_job Parameter für die Servicezeit-Ermittlung** true
servicetime_per_unit Parameter für die Servicezeit-Ermittlung** true
servicetime_per_indi Parameter für die Servicezeit-Ermittlung** true
priority Priorität 0
description Notizen für Fahrer null
driver_numbers Streckenzuordnung null
skills Skills null

\* Falls im System die Gewichtseinheit "kg" eingestellt ist: Geben sie die Kapazität in Gramm an.
\** Erklärung zum HHMMD-Format und der Servicezeit-Ermittlung folgen in den nächsten Kapiteln.

Request:

{
  "auftraege": [{
    "ext_id": "1209e8e98fuweq9f8dh" 
    "adresse_oid": "0007",
    "planung_nr": "Montag",
    "name": "Herr Mohn",
    "timewindows": "[08:00,12:00];[14:00,18:00]",
    "capacity": "2000" 
  }]
}

Response:
{
  "status": 200,
  "text": "Aufträge erfolgreich angelegt.",
  "auftraege": [
    {
      "ext_id": 1209e8e98fuweq9f8dh,
      "id": 1967
    }
  ]
}

Parameter für GET und DELETE-Requests:

Verwenden Sie GET-Requests, um einzelne Aufträge abzurufen:
GET http://domain/fernsteuerung/auftrag/<id>
GET http://domain/fernsteuerung/auftrag/ext/<ext_id>

Verwenden Sie DELETE-Requests, um einzelne Aufträge zu löschen:
DELETE http://domain/fernsteuerung/auftrag/<id>
DELETE http://domain/fernsteuerung/auftrag/ext/<ext_id>

Sie können auch mehrere Aufträge gleichzeitig abrufen bzw. löschen und zuvor filtern:

GET http://domain/fernsteuerung/auftrag/
DELETE http://domain/fernsteuerung/auftrag/

Referenz-Attribut Beschreibung
id interne ID des Auftrags
ext_id externe ID des Auftrags
Filter-Attribut Beschreibung
adresse_id interne ID der Adresse
adresse_oid Objekt-ID der Adresse
planung_id interne ID der Planung
planung_nr Nr der Planung
offset Zeige ab dem n-ten Eintrag
limit Zeige die n-ersten Einträge (default: 1000)

Zur eigenen Sicherheit kann man mehrere Aufträge nur löschen, wenn mindestens ein Filter-Attribut vorhanden ist.

Beispiel-JSON für einen GET-/Delete-Request:

{
  "adresse_oid": "0007" 
}

Beispiel-Rückgabe für den obigen GET-Request:

{
  "status": 200,
  "count": 1,
  "auftraege": [
    {
      "id": 1967,
      "ext_id": "1209e8e98fuweq9f8dh",
      "name": "Herr Mohn",
      "kg": 2.0,
      "adresse_id": 113726,
      "adresse_oid": "0007",
      "planung_id": 49,
      "planung_nr": "Montag",
      "timewindows": "[08:00,12:00];[14:00,18:00]",
      "servicetime": 0,
      "servicetime_per_job": true,
      "servicetime_per_unit": true,
      "servicetime_per_indi": true
    }
  ]
}

HHMMD-Format für (Multi-)Zeitfenster

Das HHMMD-Format ist eine intern verwendete String-Formatierung zur Serialisierung von Multi-Zeitfenstern.
Die Intention hinter dem Format war, dass sich die Zeitfenster nicht mit einem Datum auf absolut fixierte Zeitpunkte beziehen (so etwas wie "03-05-2020:08:00:00"),
sondern einen relativen Bezug besitzen zum Starttag, an dem die Tour beginnen soll.

Die Angabe eines Zeitfensters erfolgt in zweiteiligen Tupel - umschlossen in eckigen Klammern.

[Startzeitpunkt,Endzeitpunkt]

Jeder Zeitpunkt wird dann mit der gewünschten Uhrzeit befüllt im 24h-Format.
[08:00,12:00] 

Mehrere Zeitfenster-Tupel werden anhand Semikolons von einander getrennt.
[08:00,12:00];[14:00,18:30]

Die Zeitfenster ohne Angaben zum Tag beziehen sich auf den Tag 0.
Möchte man zB. ein weiteres Zeitfenster am nächsten Tag hinzufügen, ergänzt man zur Uhrzeit den Tag als Suffix.
[08:00(+1),12:00(+1)]

Auch Datumsüberhänge sind realisierbar in einem Zeitfenster
[22:00,05:00(+1)]

Im HHMMD-Format gibt es keine Escape-Sequenzen und keine Schleifen-Konventionen.
Man muss deshalb wiederholende Zeitfenster ausschreiben, die über mehrere Tage identisch sind.
Das technische Limit der relativen Zeitspanne liegt im Moment bei 39 Tagen.
Man kann mit dem Service somit theoretisch 5-Wochen-Planungen modellieren und berechnen lassen.

Aufträge, bei denen ein Zeitfenster nicht berücksichtigt werden soll, erhalten ein leeres Tupel.

[]

Servicezeit-Berechnung

MultiRoute Tour! versucht es den Nutzern zu ermöglichen, die Servicezeit eines Auftrages so präzise wie möglich zu modellieren.
Die Bereitstellung von 6 Variablen (2 pro Planung und 4 pro Auftrag) sollten dafür die meisten Fälle abdecken.
Die Servicezeit für einen Auftrag errechnet sich durch folgende Formel:

x = servicetime_per_job + servicetime_per_indi + (servicetime_per_unit * auftrag_capacity)

Die 'servicetime_per_job' ist ein konstanter Zeitwert aus der Planung, der allen Aufträgen der Planung angerechnet wird.
Die 'servicetime_per_indi' ist ein individueller Zeitwert 'servicetime' vom Auftrag, der auch nur dem spezifischen Auftrag angerechnet wird.
Die 'servicetime_per_unit' ist ein Faktor aus der Planung, der mit der Kapazität des Auftrages multipliziert wird, und somit für einen variablen Zeitwert zur Modellierung bietet.

Alle Summanden aus der Formel lassen sich außerdem für jeden Auftrag abschalten - individuell anhand der gleichnamigen, boolschen Variablen.

Flotten

Flotten werden im Tour! Modul für die Berechnung von Touren verwendet, um möglichst präzise die Arbeitsbedingungen der Fahrer repräsentieren zu können.
Der Zugriff auf das Flotten-Modell erfolgt über eine REST-Schnittstelle.

JSON-Repräsentation

Die JSON-Repräsentation einer Flotte besitzt einen Namen (keyword:"name") und ein Array von Fahrzeugen (keyword:"vehicles").

Fahrzeug-Attribut Beschreibung Plichtfeld/optional default-Wert
name Bezeichnung des Fahrzeugtyps Plichtfeld -
number Fahrzeugnummer Pflichtfeld -
amount Anzahl der Fahrzeuge optional 1
start JSON-Objekt der Start-Adresse Pflichtfeld -
end JSON-Objekt der End-Adresse Pflichtfeld -
capacity Fahrzeugkapazität optional 100
driving Zeitlicher Rahmen für die Tour (HHMMD-Format) Pflichtfeld -
break JSON-Object der Pause optional {}
skills Schlüsselfertigkeiten des Fahrzeugs/Fahrers optional []

Die JSON-Objekte der Start- und Endadressen besitzen einen Typus (keyword:"type").
Bei der Startadresse kann der Typus folgende Werte besitzen:
- "depot", wenn das Fahrzeug vom Depot aus startet, welche in der Planung definiert ist.
- "start", wenn das Fahrzeug von einer anderen Adresse starten soll.
Bei der Endadresse kann der Typus folgende Werte besitzen.
- "depot", wenn das Fahrzeug zum Depot zurückkehren soll, welches in der Planung definiert ist.
- "round", wenn das Fahrzeug zur Startadresse zurückkehren soll.
- "open", wenn die Tour für das Fahrzeug beim letzten Auftrag enden soll.
- "end", wenn das Fahrzeug zu einer Zieladresse fahren soll.
Für Typus "start" und "end" muss zusätzlich noch die Objekt-ID der Adresse mit angegeben werden (keyword:"oid").

Beispiel:

"start": {
  "type": "start",
  "oid": "GBC1412031",
},
"end": {
  "type": "open" 
}

Das JSON-Objekt der Pause benötigt neben dem Pausenzeitfenster (keyword:"timewindows") im HHMMD-Format, eine Angabe zur Länge der Pause (keyword:"duration") in ganzen Minuten.
Beispiel:

"break": {
  "timewindows": "[08:00,12:00]",
  "duration": 30
}

Das JSON-Schema, welches zur Validierung des Inputs verwendet wird, finden Sie hier:
https://domain/fleet/schema

Parameter für POST und PUT-Requests:

Verwenden Sie POST-Requests zum anlegen von neuen Flotten:
POST http://domain/fernsteuerung/flotte

POST-Requests können keine bestehenden Flotten überschreiben!
Verwenden Sie stattdessen PUT-Requests, um Flotten zu bearbeiten:
PUT http://domain/fernsteuerung/flotte/<id>

Sowohl POST- als auch PUT-Request benötigen immer eine vollständige JSON-Repräsentation der Flotte (keyword:"fleet"). Es kann nur eine Flotte pro Request hinzugefügt bzw. bearbeitet werden.

Request:

{
  "fleet": {
    "name": "Standardflotte",
    "vehicles": [
      {
        "name": "Fahrzeug",
        "number": 1,
        "amount": 1,
        "start": {
          "type": "depot" 
        },
        "end": {
          "type": "depot" 
        },
        "capacity": 5000,
        "driving": "[09:00,13:00]",
        "break": {
          "timewindows": "[11:00,12:00]",
          "duration": 30
        },
        "skills": [
          "blau" 
        ]
      }
    ]
  }
}

Response:

{
  "status": 200,
  "fleet_id": 20
}

Man beachte, dass die ID der Flotte sich ändert nach einem PUT-Request, wenn bereits berechnete Touren Referenzen besitzen auf die zu überschreibende Flotte. Dadurch wird die bestehende Flotte versteckt (hidden=>true) und stattdessen eine neue Flotte angelegt.

Parameter für GET-Request

Verwenden Sie den GET-Request, um eine Liste der zur Verfügung stehenden Flotten zu erhalten:
GET http://domain/fernsteuerung/flotte

Filter-Attribut Beschreibung
show_hidden Zeige auch unsichtbare Flotten
offset Zeige ab dem n-ten Eintrag
limit Zeige die n-ersten Einträge (default: 1000)

Als Ergebnis erhalten Sie ein "fleets" Array zurück.

Response:
{
  "status": 200,
  "count": 2,
  "fleets": [
    {
      "id": 4,
      "name": "Peters Flotte",
      "immutable": false,
      "hidden": false,
      "vehicle_count": 8,
      "vehicle_types": 1,
      "capacity": 80000,
      "skills": [],
      "timewindows": "[08:00,12:00];[14:00,18:00]" 
    },
    {
      "id": 12,
      "name": "Lolik & Bolik",
      "immutable": true,
      "hidden": false,
      "vehicle_count": 2,
      "vehicle_types": 2,
      "capacity": 35000,
      "skills": ["weiss","blau"],
      "timewindows": "[08:00,12:00]" 
    }
  ]
}
Ausgabe-Attribut Beschreibung
id ID der Flotten-Instanz
name Bezeichnung der Flotte
immutable Zustand, ob die Flotte bearbeitet werden kann
hidden Zustand, ob die Flotte in der GUI angezeigt wird
vehicle_count Anzahl der Fahrzeuge
vehicle_type Anzahl der verschiedenen Fahrzeugtypen
capacity Logistische Gesamtkapazität der Flotte in (Gramm/Stück/Person)
skill Liste der Skills, die in der Flotte existieren
timewindows Kombiniertes Zeitfenster von allen Fahrzeugen

Durch das Hinzufügen der Flotten-ID erhalten Sie die vollständige JSON-Repräsentation der Flotten-Instanz.
GET http://domain/fernsteuerung/flotte/<id>

Response:

{
  "status": 200,
  "fleet": {
    "name": "Lolik & Bolik",
    "vehicles": [
      {
        "name": "Bolik",
        "number": 2,
        "amount": 1,
        "start": {
          "type": "depot" 
        },
        "end": {
          "type": "open" 
        },
        "capacity": 30000,
        "driving": "[08:00,12:00]",
        "break": {
          "timewindows": "[09:00,11:00]",
          "duration": 60
        },
        "skills": ["weiss"]
      },
      {
        "name": "Lolik",
        "number": 1,
        "amount": 1,
        "start": {
          "type": "depot" 
        },
        "end": {
          "type": "depot" 
        },
        "capacity": 5000,
        "driving": "[08:00,12:00]",
        "break": {
          "timewindows": "[08:00,12:00]",
          "duration": 30
        },
        "skills": ["blau"]
      }
    ]
  }
}

Parameter für DELETE-Request

Verwenden Sie DELETE-Requests, um Flotten-Instanzen zu löschen.
DELETE http://domain/fernsteuerung/flotte/<id>

Flotten können nur einzeln gelöscht werden.
Wenn eine Flotte den 'immutable'-Zustand besitzt, dann wird diese nicht gelöscht,
sondern nur versteckt ('hidden' => true),
weil berechnete Touren noch Referenzen auf die 'immutable' Flotten besitzen.
Wenn sowohl Flotte als auch die Touren nicht mehr gebraucht werden,
dann kann man mit dem Parameter {"cascade" = true} alles entfernen.

Response:

{
  "status": 200
}

Touren

Touren-Status

Informationen zu allen Touren (einer Ausgabe)
Es werden entweder alle angezeigt, oder nur die mit dem jeweiligen Status.

http://domain/fernsteuerung/touren
http://domain/fernsteuerung/touren/error
http://domain/fernsteuerung/touren/pending
http://domain/fernsteuerung/touren/unknown
http://domain/fernsteuerung/touren/success

Optionale Parameter:
limit (default 100)
offset (default 0)
ausgabe (default die vom User)
planung (Planungs-Nummer (Name))

http://domain/fernsteuerung/touren?limit=10&offset=0

Rückgabewert ist ein JSON Array:

[
{"id":88,"planung":"tour_test","status":"success"},
{"id":87,"planung":"tour_test","status":"success"},
{"id":86,"planung":"tour_test","status":"error"},
{"id":85,"planung":"tour_test","status":"error"},
{"id":84,"planung":"tour_test","status":"success"},
{"id":83,"planung":"tour_test","status":"success"},
{"id":82,"planung":"tour_test","status":"success"},
{"id":81,"planung":"tour_test","status":"success"},
{"id":80,"planung":"tour_test","status":"success"},
{"id":79,"planung":"tour_test","status":"success"}
]

Informationen zu einer Tourenberechnung (Ausgabe spielt keine Rolle):

http://domain/fernsteuerung/tour/<tour-id>

Rückgabewert ist ein JSON Object:

touren Touren Array
meta Meta Objekt (Information für alle Touren)
depot Depot Objekt
unassigned_jobs Keiner Tour zugeordneten Aufträge
flotte Flotte Objekt (Gegebene Fahrzeugflotte)
diff_flotte Flotte Objekt (Überzählige Fahrzeuge)
Einzelne Fahrzeugstrecken Array Objekt:
vehicle_name Fahrzeug
vehicle_id
start_time Startzeit
finish_time Endzeit
open_end
destination
fahrzeugstrecke_id Id der Fahrzeugstrecke
nr Nummer der Fahrzeugstrecke
index Index der Fahrzeugstrecke
strecke Entfernung in Meter
dauer Fahrzeit in Sekunden
entladedauer Entladedauer
gesamtdauer Entladedauer + Fahrzeit in Sekunden
wartezeit Wartezeit
gewicht Wert Kapazität
gewicht_text
fahrzeug_gewicht Wert Kapazität Fahrzeug
fahrzeug_gewicht_text
abladestellen Abladestellen Array
rueckweg_zum_depot Rückweg zum Depot
google_maps_url Navigationsformat Google Maps
apple_maps_url Navigationsformat Apple Maps
Einzelne Fahrzeugstrecken Array Objekt:
sort Laufende Nummer
oi Gebäude id
plz Postleitzahl
ort Ort
ort_zusatz Ortsteil
strasse Strasse
hausnummer Hausnummer
hausnummer_zusatz Hausnummer Zusatz
gewicht Kapazität (kg, Stück, Personen) integer
gewicht_text Einheit Kapazität (kg, Stück, Personen(bzw. Person)
strecke Entfernung in Meter
dauer Fahrzeit in Sekunden
name Bezeichnung
description Notizen
timewindows Zeitfenster
arrival_time Ankunftszeit
action_time Aktionstart
departure_time Abfahrtszeit
service_sum Servicezeit
service_base Servicezeit Basiswert
service_unit Servicezeit Kapazitätsprodukt
service_indi Servicezeit Individueller Wert
tour_break Pause (true/false)
destination Endpunkt (true/false)
Rückweg Objekt:
strecke Entfernung in Meter
dauer Fahrzeit in Sekunden
Meta Objekt:
id Id der Tour
datenstand_osm Osm Datenstand
success Erfolgreich (true, null, false)
anz_fahrzeuge Anzahl Fahrzeugstrecken
abladestellen Zugewiesene Aufträge
unassigned_jobs Nicht zugewiesene Aufträge
error_message Fehlermeldung (default null)
horizont Maximale Tourdauer (Stunden)
deploy_time Entladedauer pro Einheit (Sekunden)
flat_deploy_time Entladezeit pro Auftrag (Sekunden)
max_deliver_time Maximale Tourdauer vom Depot bis Letzten Kuden/Abladestelle
planung Nummer des Planung
fleet fleet Name der Flotte
fleet_id fleet Id der Flotte
zeit_distanz Optimiert nach Zeit oder Distanz (Zeit oder Distanz)
gewicht Wert Kapazität
gewicht_text Einheit Kapazität (kg, Stück, Personen(bzw. Person)
strecke Entfernung in Meter
dauer Fahrzeit in Sekunden
entladedauer Entladedauer
gesamtdauer Entladedauer + Fahrzeit in Sekunden
berechnet_am Berechnet am
depot_departure_time Erster Abfahrtszeitpunkt
Depot Objekt:
oi Gebäude id
plz Postleitzahl
ort Ort
ort_zusatz Ortsteil
strasse Strasse
hausnummer Hausnummer
hausnummer_zusatz Hausnummer Zusatz
Keiner Tour zugeordneten Aufträge Array Objekt:
nr Laufende Nummer
oi Gebäude id
plz Postleitzahl
ort Ort
ort_zusatz Ortsteil
strasse Strasse
hausnummer Hausnummer
hausnummer_zusatz Hausnummer Zusatz
name Bezeichnung
description Notizen
timewindows Zeitfenster
service_sum Servicezeit
service_base Servicezeit Basiswert
service_unit Servicezeit Kapazitätsprodukt
service_indi Servicezeit Individueller Wert
Flotte Objekt:
anzahl Anzahl Fahrzeuge
name Name
start_time Startzeit
end_time Endzeit
gewicht Wert Kapazität
gewicht_text Einheit Kapazität (kg, Stück, Personen(bzw. Person)

Bsp:

{
    "touren": [{
        "vehicle_name": "Fahrzeugtyp 1",
        "vehicle_id": 2,
        "start_time": "08:00",
        "finish_time": "09:57",
        "open_end": false,
        "destination": false,
        "fahrzeugstrecke_id": 34,
        "nr": 1,
        "index": 0,
        "strecke": 97654,
        "dauer": 6522,
        "wartezeit": 0,
        "entladedauer": 530.0,
        "gesamtdauer": 7052.0,
        "gewicht": 100.0,
        "gewicht_text": "kg",
        "fahrzeug_gewicht": 100.0,
        "fahrzeug_gewicht_text": "kg",
        "abladestellen": [{
            "sort": 1,
            "oi": "25040886",
            "plz": "35630",
            "ort": "Ehringshausen",
            "strasse": "Bahnhofstraße",
            "hausnummer": "16",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 326,
            "dauer": 34,
            "name": "N16",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "08:00",
            "action_time": "08:00",
            "departure_time": "08:01",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 2,
            "oi": "20078306",
            "plz": "35614",
            "ort": "Aßlar",
            "strasse": "Berliner Straße",
            "hausnummer": "8",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 7109,
            "dauer": 539,
            "name": "N15",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "08:10",
            "action_time": "08:10",
            "departure_time": "08:11",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 3,
            "oi": "19321189",
            "plz": "35578",
            "ort": "Wetzlar",
            "strasse": "Elsa-Brandström-Straße",
            "hausnummer": "18",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 8879,
            "dauer": 761,
            "name": "N14",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "08:24",
            "action_time": "08:24",
            "departure_time": "08:24",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 4,
            "oi": "27336905",
            "plz": "35075",
            "ort": "Gladenbach",
            "strasse": "Bahnhofstraße",
            "hausnummer": "10",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 41020,
            "dauer": 2320,
            "name": "N13",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "09:03",
            "action_time": "09:03",
            "departure_time": "09:04",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 5,
            "oi": "GBC2409542",
            "plz": "35075",
            "ort": "Gladenbach",
            "strasse": "Marktplatz",
            "hausnummer": "5",
            "hausnummer_zusatz": "BK",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 313,
            "dauer": 41,
            "name": "N12",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "09:05",
            "action_time": "09:05",
            "departure_time": "09:06",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 6,
            "oi": "22536131",
            "plz": "35080",
            "ort": "Bad Endbach",
            "strasse": "Am Briel",
            "hausnummer": "3",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 7430,
            "dauer": 552,
            "name": "N11",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "09:15",
            "action_time": "09:15",
            "departure_time": "09:16",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 7,
            "oi": "10061877",
            "plz": "35080",
            "ort": "Bad Endbach",
            "strasse": "Schlierbacher Straße",
            "hausnummer": "33",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 3885,
            "dauer": 325,
            "name": "N10",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "09:21",
            "action_time": "09:21",
            "departure_time": "09:22",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 8,
            "oi": "19151841",
            "plz": "35756",
            "ort": "Mittenaar",
            "strasse": "Aarstraße",
            "hausnummer": "6",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 11998,
            "dauer": 824,
            "name": "N9",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "09:36",
            "action_time": "09:36",
            "departure_time": "09:37",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 9,
            "oi": "24621170",
            "plz": "35630",
            "ort": "Ehringshausen",
            "strasse": "Stegwiese",
            "hausnummer": "27",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 16176,
            "dauer": 1056,
            "name": "N8",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "09:54",
            "action_time": "09:54",
            "departure_time": "09:55",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 10,
            "oi": "24621170",
            "plz": "35630",
            "ort": "Ehringshausen",
            "strasse": "Stegwiese",
            "hausnummer": "27",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 0,
            "dauer": 0,
            "name": "N7",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "09:55",
            "action_time": "09:55",
            "departure_time": "09:56",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }],
        "rueckweg_zum_depot": {
            "strecke": 518,
            "dauer": 70
        },
        "token": "E4F910BE37BF010ACxxx46A57613E35C261354EFB0DEB6BBDA04",
        "google_maps_url": "http://localhost:3000/google_maps?token=E4F910BE37BF0xxxD818508178BE0F340BFC571D839446A57613E35C261354EFB0DEB6BBDA04",
        "apple_maps_url": "http://localhost:3000/apple_maps?token=E4F910BE37BF010xx575D818508178BE0F340BFC571D839446A57613E35C261354EFB0DEB6BBDA04" 
    }, {
        "vehicle_name": "Fahrzeugtyp 1",
        "vehicle_id": 2,
        "start_time": "08:00",
        "finish_time": "09:21",
        "open_end": false,
        "destination": false,
        "fahrzeugstrecke_id": 33,
        "nr": 2,
        "index": 1,
        "strecke": 72561,
        "dauer": 4633,
        "wartezeit": 0,
        "entladedauer": 269.0049,
        "gesamtdauer": 4902.0049,
        "gewicht": 50.001,
        "gewicht_text": "kg",
        "fahrzeug_gewicht": 100.0,
        "fahrzeug_gewicht_text": "kg",
        "abladestellen": [{
            "sort": 1,
            "oi": "17806131",
            "plz": "35745",
            "ort": "Herborn",
            "strasse": "Austraße",
            "hausnummer": "63",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 12279,
            "dauer": 812,
            "name": "N6",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "08:13",
            "action_time": "08:13",
            "departure_time": "08:14",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 2,
            "oi": "13933646",
            "plz": "35745",
            "ort": "Herborn",
            "strasse": "Hauptstraße",
            "hausnummer": "90",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 1129,
            "dauer": 133,
            "name": "N5",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "08:16",
            "action_time": "08:16",
            "departure_time": "08:17",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 3,
            "oi": "21171259",
            "plz": "35683",
            "ort": "Dillenburg",
            "strasse": "Am Forstdenkmal",
            "hausnummer": "7",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 8184,
            "dauer": 538,
            "name": "N4",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "08:26",
            "action_time": "08:26",
            "departure_time": "08:27",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 4,
            "oi": "22435649",
            "plz": "35685",
            "ort": "Dillenburg",
            "strasse": "Am Nebelsberg",
            "hausnummer": "11",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 4611,
            "dauer": 439,
            "name": "N3",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "08:34",
            "action_time": "08:34",
            "departure_time": "08:35",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 5,
            "oi": "22264516",
            "plz": "35683",
            "ort": "Dillenburg",
            "strasse": "Nassaustraße",
            "hausnummer": "19",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 0.001,
            "gewicht_text": "kg",
            "strecke": 2244,
            "dauer": 225,
            "name": "N2",
            "description": "",
            "timewindows": "ohne",
            "arrival_time": "08:39",
            "action_time": "08:39",
            "departure_time": "08:39",
            "service_sum": "0h 0' 4\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 0\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }, {
            "sort": 6,
            "oi": "25800112",
            "plz": "35759",
            "ort": "Driedorf",
            "strasse": "Wilhelmstraße",
            "hausnummer": "51",
            "hausnummer_zusatz": "",
            "notice": null,
            "street_oi": null,
            "gewicht": 10.0,
            "gewicht_text": "kg",
            "strecke": 23391,
            "dauer": 1213,
            "name": "N1",
            "description": "POST",
            "timewindows": "ohne",
            "arrival_time": "08:59",
            "action_time": "08:59",
            "departure_time": "09:00",
            "service_sum": "0h 0' 53\"",
            "service_base": "0h 0' 4\"",
            "service_unit": "0h 0' 49\"",
            "service_indi": "0h 0' 0\"",
            "tour_break": false,
            "destination": false
        }],
        "rueckweg_zum_depot": {
            "strecke": 20723,
            "dauer": 1273
        },
        "token": "E4F910BE37BF010AC5CD26Cxxx5D14C0F370657C97B1C7",
        "google_maps_url": "http://localhost:3000/google_maps?token=E4F910xxx70657C97B1C7",
        "apple_maps_url": "http://localhost:3000/apple_maps?token=E4F910BExxxF370657C97B1C7" 
    }],
    "meta": {
        "id": 19,
        "datenstand_osm": "04.05.2020",
        "success": true,
        "anz_fahrzeuge": 2,
        "abladestellen": 16,
        "error_message": null,
        "horizont": null,
        "deploy_time": 4.9,
        "flat_deploy_time": "4",
        "max_deliver_time": null,
        "unassigned_jobs": "0",
        "planung": "P1",
        "fleet": "_Neue_Flotte_",
        "fleet_id": 1,
        "zeit_distanz": "Zeit",
        "gewicht": 150.0,
        "gewicht_text": "kg",
        "strecke": 170215.0,
        "dauer": 11155.0,
        "entladedauer": 735.0,
        "gesamtdauer": 11890.0,
        "berechnet_am": "10.08.2020 11:38",
        "depot_departure_time": "08:00" 
    },
    "depot": {
        "oi": "18144667",
        "plz": "35630",
        "ort": "Ehringshausen",
        "strasse": "Wetzlarer Straße",
        "hausnummer": "1",
        "hausnummer_zusatz": "",
        "notice": null,
        "street_oi": null,
        "departure_time": "08:00" 
    },
    "flotte": [{
        "anzahl": 2,
        "gewicht": 100.0,
        "gewicht_text": "kg",
        "name": "Fahrzeugtyp 1",
        "number": 1,
        "timewindow": "[08:00,12:00]",
        "start_time": "08:00",
        "end_time": "12:00" 
    }],
    "diff_flotte": [{
        "anzahl": 18,
        "gewicht": 100.0,
        "gewicht_text": "kg",
        "name": "Fahrzeugtyp 1",
        "number": 1,
        "timewindow": "[08:00,12:00]",
        "start_time": "08:00",
        "end_time": "12:00" 
    }]
}

Tour entfernen

Verwenden Sie DELETE-Requests, um Touren zu entfernen.
DELETE http://domain/fernsteuerung/tour/<tour-id>

Touren können nur einzeln gelöscht werden.

Response:

{
   status: '200', 
   tour_id: XY, 
   error: "Tour Nr. XY wurde erfolgreich entfernt." 
}

Touren berechnen

http://domain/fernsteuerung/tour/berechnen

Parameter:

planung Nummer des Planung
fleet_name Name der gespeicherten Flotte (oder)
fleet_id Id der gespeicherten Flotte
tour Tour-Parameter
ausgabe optional (default die vom User)
Tour-Parameter:
zeit_distanz Fahrzeugroutingprofil
flat_deploy_time Entladezeit pro Auftrag (Sek.)
deploy_time Entladezeit pro Einheit (Sek.)
maximum_jobs_per_vehicle Maximale Anzahl Aufträge pro Fahrzeugstrecke
ignore_capacity_constraints Kapazitäten für die Optimierung ignorieren.
Gültige Fahrzeugroutingprofile für Tour-Parameter "zeit_distanz".
Falls ein Profil nicht unterstützt wird, werden die gültigen Profile im Error-Response gelistet.
zeit PKW (schnellste Strecke)
distanz PKW (kürzeste Strecke)
hgv_28 LKW (2,8 Tonnen)
hgv_35 LKW (3,5 Tonnen)
hgv_75 LKW (7,5 Tonnen)
hgv_120 LKW (12,0 Tonnen)

Bsp:

{
  "planung": "tour_test",
  "fleet_name": "Test Flotte 1",
  "tour": {
    "zeit_distanz": "zeit",
    "flat_deploy_time": 5.0,
    "deploy_time": 0.1,
    "maximum_jobs_per_vehicle": 100,
    "ignore_capacity_constraints": false
  }
}

Planung Data (kg, Stück oder Personen)

Planung Data (kg, Stück oder Personen) abrufen

http://domain/fernsteuerung/planung/data

Parameter (optional):

limit Limit
offset Offset
ausgabe Name der Ausgabe (default=Aktuelle Ausgabe des Benutzers)

Rückgabe:

oi OI Gebäude
kg Kapazität in kg
stueck Kapazität in Stück
personen Kapazität in Personen

Kapazität abhängig von Kunden Einstellungen

[{"oi":"CS4","kg":10},{"oi":"12760053311732","kg":7},{"oi":"12760054446917","kg":1}]

Planung Data (kg, Stück oder Personen) Hinzufügen/Updaten

http://domain/fernsteuerung/planung/add_and_update_data (Planungs Ausgabe)

Parameters

data Data Parameters
insert true(default) oder false. Nur neue Gebiete werden hinzugefügt
update true(default) oder false. Bestehende Gebiete werden geupdated
ausgabe Name der Ausgabe (optional: defaul=Aktuelle Ausgabe des Benutzers)
Data Parameters
oi Gebäude ID
abonnenten Anzahl Abonnent
Data Parameters mit Straßen ID
street_oi Straßen ID
hausnummer Hausnummer
hausnummer_zusatz Hausnummer Zusatz (optional, der Zusatz kann auch bei der Hausnummer mit dabei sein.)
abonnenten Anzahl Abonnent
{
"update": true,
"insert": true, 
"data": [{"oi":"CS4","kg":10},{"oi":"12760053311732","kg":7},{"oi":"12760054446917","kg":1}]
 }
{
"update": true,
"insert": true, 
"data": [{"street_oi":"1234", "hausnummer": "2","kg":3},{"street_oi":"4567", "hausnummer": "12","kg":3},{"street_oi":"4567", "hausnummer": "21","kg":3}]
 }

Planung Data (kg, Stück oder Personen) löschen

http://domain/fernsteuerung/planung/delete_data (Gebiets Ausgabe)

oi Adresse ID
ausgabe Name der Ausgabe (defaul=Aktuelle Ausgabe des Benutzers)
all (optional) true , alle Daten der Ausgabe werden gelöscht.
{
"oi": ["CS4","12760053311732","12760054446917"]
}

Planung

Planung abrufen

http://domain/fernsteuerung/planung/

Parameter (optional):

nr Nummer(n) der Planung
limit Limit
offset Offset
ausgabe Name der Ausgabe (default=Aktuelle Ausgabe des Benutzers)

Rückgabe:

nr Nummer(n) der Planung
name Name des
depot oi depot
kg Kapazität in kg
stueck Kapazität in Stück
personen Kapazität in Personen

Kapazität abhängig von Kunden Einstellungen

[{
    "nr": "1200",
    "name": "",
    "depot": "3",
    "kg": 123.8
}]

Planung Hinzufügen/Updaten

http://domain/fernsteuerung/planung/add_and_update

Parameter:

planung Planung Parameter
insert true(default) oder false. Nur neue Planungen werden hinzugefügt
update true(default) oder false. Bestehende Planungen werden geupdated
ausgabe Name der Ausgabe (optional: default=Aktuelle Ausgabe des Benutzers)

Planung Parameter (Achtung: beim Einfügen von mehreren Planungen muss immer die gleiche Anzahl der Parameter angegeben werden):

nr Planungsnummer
name Planungsname (optional)
depot oi Depot (optional)

Beispiel:

{
"update": true,
"insert": true, 
"planung": [{
    "nr": "Planung 1",
    "name": "",
    "depot": "CS3" 
}, {
    "nr": "Planung 2",
    "name": "",
    "depot": null
}]
 }

Planung löschen

http://domain/fernsteuerung/planung/delete

Parameter:

nr Nummer der Planung/Nummern der Planungen
ausgabe Name der Ausgabe (optional: default=Aktuelle Ausgabe des Benutzers)
cascade Optionale boolsche Flag, wenn dazugehörige Touren ebenfalls gelöscht werden sollen.
{
  nr: ["1","2"]
}

Planungsdefinition

http://domain/fernsteuerung/planung/definition

Parameter (optional):

gebiet Nummer(n) der Gebiete
limit Limit
offset Offset
ausgabe Name der Ausgabe (default=Aktuelle Ausgabe des Benutzers)

Rückgabe:

[{"planung":"Planung 1","oi":["12760053311732","CS3","CS4","12760054446917"],"ausgabe":"Tour"}]

Planungsdefinition hinzufügen bzw. löschen

http://domain/fernsteuerung/planung/add_definition
http://domain/fernsteuerung/planung/delete_definition

Parameter:

oi Adresse ID
planung Nummer der Planung
ausgabe Name der Ausgabe (optional default=Aktuelle Ausgabe des Benutzers)
geom Geometrien neu zeichnen (optional default=false); ACHTUNG: Bitte nur verwenden wenn die Geometrien vom System erzeugt wurden.
append Modus beim Hinzufügen (optional default=true); Alle Änderungen werden nur innerhalb der Ausgabe angewandt.
true: Zuordnung wird einfach hinzugefügt (Überlappungen mit anderen Planungen sind möglich)
false: die gesamte alte Zuordnung des Gebietes wird als erstes gelöscht. Dann wird die neue Zuordnung geladen. (Überlappungen mit anderen Planungen sind möglich)
replace: Alle Zuordnungen der Adressen werden gelöscht. Dann wird die neue Zuordnung geladen. (Überlappungen mit anderen Planungen sind nicht möglich)
delete_replace: Die gesamte alte Zuordnung des Gebietes wird als erstes gelöscht. Alle Zuordnungen der Adressen zu anderen Planungen werden gelöscht. Dann wird die neue Zuordnung geladen. (Überlappungen mit anderen Planungen sind nicht möglich)
all Modus beim Löschen (optional default=false); Die Zuordnung wird gelöscht
{
  "oi": ["12760053311732","CS3","CS4","12760054446917"],
  "planung": "11",
}

Bekannte Fehlermeldungen:

{"text":"Ausgabe nicht gefunden","status":500}
{"text":"Keine Planung übergeben","status":500}
{"text":"Keine Adresse übergeben","status":500}
{"text":"Daten wurden nicht übernommen","status":500}

Planungsdefinition hinzufügen (Mit Street-ID)

http://domain/fernsteuerung/planung/add_definition_with_street_oi

Parameter:

adresse Adresse Params
planung Nummer der Planung
ausgabe Name der Ausgabe (optional default=Aktuelle Ausgabe des Benutzers)
append Modus beim Hinzufügen (optional default=true); Alle Änderungen werden nur innerhalb der Ausgabe angewandt.
true: Zuordnung wird einfach hinzugefügt (Überlappungen mit anderen Planungen sind möglich)
false: die gesamte alte Zuordnung des Gebietes wird als erstes gelöscht. Dann wird die neue Zuordnung geladen. (Überlappungen mit anderen Planungen sind möglich)
replace: Alle Zuordnungen der Adressen werden gelöscht. Dann wird die neue Zuordnung geladen. (Überlappungen mit anderen Planungen sind nicht möglich)
delete_replace: Die gesamte alte Zuordnung des Gebietes wird als erstes gelöscht. Alle Zuordnungen der Adressen zu anderen Planungen werden gelöscht. Dann wird die neue Zuordnung geladen. (Überlappungen mit anderen Planungen sind nicht möglich)
geom Geometrien neu zeichnen (optional default=false); ACHTUNG: Bitte nur verwenden wenn die Geometrien vom System erzeugt wurden.
Adresse Params:
street_oi Straßen ID
nr_von von Hausnummer
nr_bis Bis Hausnummer
Optionale Adresse Params:
nrzusatz_von von Hausnummer Zusatz
nrzusatz_bis Bis Hausnummer Zusatz
kennz Kennzahl A: Alle, G:Nur gerade Hausnummern, U: Nur ungerade Hausnummern. optional(default A)
{
  "adresse": [{"street_oi":"1234", "nr_von": "2","nr_bis":"998","kennz":"G"},{"street_oi":"4567", "nr_von": "1","nr_bis":"999","kennz":"A"}],
  "planung": "Planung 1",
}
gegeben Hausnummer 20, 20A, 20B, 21, 21A, 21B, 22, 22A,22B

{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "20" }]} => 20, 20A, 20B
{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "22" }]} => 20, 20A, 20B, 21, 21A, 21B, 22, 22A,22B
{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "20", "nrzusatz_von": "", "nrzusatz_bis": "" }]} => 20
{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "20", "nrzusatz_von": "A", "nrzusatz_bis": "B" }]} => 20A, 20B
{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "20", "nrzusatz_von": "", "nrzusatz_bis": "A" }]} => 20, 20A
{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "20", "nrzusatz_bis": "" }]} => 20 (wenn nrzusatz_von leerer String ist kann man ihn auch weglassen.)
{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "22", "nrzusatz_von": "B", "nrzusatz_bis": "" }]} => 20B, 21, 21A, 21B, 22
{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "22", "nrzusatz_von": "B", "nrzusatz_bis": "A" }]} => 20B, 21, 21A, 21B, 22, 22A
{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "22", "nrzusatz_von": "B" }]} => 20B, 21, 21A, 21B, 22, 22A,22B
Reihenfolge wenn nr_von = nr_bis
{  "adresse": [{"street_oi": "x11", "nr_von": "20",  "nr_bis": "20", "nrzusatz_von": "B", "nrzusatz_bis": "" }]} => x (keine Zuordnung)