Kurier
Moduł kurierski nie jest "klasycznym" modułem, jest modyfikacją ScenarioImporter i ewentualnie PostImportJobsCompute aby znaleźć ceny poszczególnych przewoźników, znaleźć najtańsze (głównie) i porównać je z ceną dostawy.
Ogólnie
W ramach ScenarioImporter musisz dodać dynamiczne kolumny potrzebne do obliczeń. Możemy jedynie zalecać "cywilizowane" nazwy kolumn, aby było jasne, co zawiera kolumna. Kolumna "cena1" prawdopodobnie niewiele mówi, kolumna "geis1zona" jest lepsza.
Skomentuj kod. Kurier jest jednym z bardziej skomplikowanych obliczeń i jeśli wrócisz do kodu po długim czasie (lub będziesz musiał poradzić sobie z nim przez kolegę), docenisz komentarze.
Ustalenie ceny przewoźnika na podstawie wagi przesyłki
Jedno z najczęstszych obliczeń.
Zacznijmy od DPD z następującym cennikiem:
Waga | Cena |
do 15 kg | 79 Kč |
16 - 50 kg | 119 Kč |
51 - 100 kg | 159 Kč |
W ramach ScenarioImporter będziesz potrzebował następującego kodu (zapotrzebowanie1 to waga przesyłki i jest już zdefiniowana):
<ColumnsCalculated> <string>dynamic;dpdcena;dynamic;dpdcena;stop1;demand1;;stop1demand1<101?159:dynamicdpdcena</string> <string>dynamic;dpdcena;dynamic;dpdcena;stop1;demand1;;stop1demand1<51?119:dynamicdpdcena</string> <string>dynamic;dpdcena;dynamic;dpdcena;stop1;demand1;;stop1demand1<16?79:dynamicdpdcena</string> </ColumnsCalculated>
Kod mówi, że jeśli waga przesyłki jest mniejsza niż 101 kg, wartość jest zapisywana w kolumnie dpdc na 15. Podczas oceny warunków należy przejść od najwyższej możliwej lub najniższej możliwej (następnie użyj “>”)
Ustalanie ceny przewoźnika przy korzystaniu ze stref
Zacznijmy od przewoźnika Geis z następującym cennikiem:
do 15 kg | do 50 kg | do 100 kg | |
Praha | 59 | 119 | 159 |
Čechy | 69 | 159 | 199 |
Morava | 79 | 199 | 259 |
W ScenarioImporter potrzebny będzie następujący kod:
<ColumnsCalculated> <string>dynamic;geiszona;dynamic;geiszona;dynamic;psc;;dynamicpsc>59999?3:dynamicgeiszona</string> <string>dynamic;geiszona;dynamic;geiszona;dynamic;psc;;dynamicpsc<60000?2:dynamicgeiszona</string> <string>dynamic;geiszona;dynamic;geiszona;dynamic;psc;;dynamicpsc<20000?1:dynamicgeiszona</string>
<string>dynamic;geis1zona;dynamic;geis1zona;stop1;demand1;;stop1demand1<101?159:dynamicgeis1zona</string> <string>dynamic;geis1zona;dynamic;geis1zona;stop1;demand1;;stop1demand1<51?119:dynamicgeis1zona</string> <string>dynamic;geis1zona;dynamic;geis1zona;stop1;demand1;;stop1demand1<16?59:dynamicgeis1zona</string>
<string>dynamic;geis2zona;dynamic;geis2zona;stop1;demand1;;stop1demand1<101?199:dynamicgeis2zona</string> <string>dynamic;geis2zona;dynamic;geis2zona;stop1;demand1;;stop1demand1<51?159:dynamicgeis2zona</string> <string>dynamic;geis2zona;dynamic;geis2zona;stop1;demand1;;stop1demand1<16?69:dynamicgeis2zona</string>
<string>dynamic;geis3zona;dynamic;geis3zona;stop1;demand1;;stop1demand1<101?259:dynamicgeis3zona</string> <string>dynamic;geis3zona;dynamic;geis3zona;stop1;demand1;;stop1demand1<51?199:dynamicgeis3zona</string> <string>dynamic;geis3zona;dynamic;geis3zona;stop1;demand1;;stop1demand1<16?79:dynamicgeis3zona</string>
<string>dynamic;cenageis;dynamic;cenageis;dynamic;geiszona;dynamic;geis1zona;;dynamicgeiszona==1?dynamicgeis1zona:dynamiccenageis</string> <string>dynamic;cenageis;dynamic;cenageis;dynamic;geiszona;dynamic;geis2zona;;dynamicgeiszona==2?dynamicgeis2zona:dynamiccenageis</string> <string>dynamic;cenageis;dynamic;cenageis;dynamic;geiszona;dynamic;geis3zona;;dynamicgeiszona==3?dynamicgeis3zona:dynamiccenageis</string> </ColumnsCalculated>
Ceny przy korzystaniu z odległości
Zacznijmy od TopTrans z następującym cennikiem:
do 100 km | do 300 km | do 700 km | |
do 15 kg | 59 | 119 | 159 |
16 - 50 kg | 69 | 159 | 199 |
51 - 100 kg | 79 | 199 | 259 |
W takim przypadku konieczne jest obliczenie zarówno w ScenarioImporter, jak i w PostImportJobsCompute.
W ScenarioImporter potrzebny będzie następujący kod:
<ColumnsCalculated> <string>dynamic;toptrans100km;dynamic;toptrans100km;stop1;demand1;;stop1demand1<101?79:dynamictoptrans100km</string> <string>dynamic;toptrans100km;dynamic;toptrans100km;stop1;demand1;;stop1demand1<51?69:dynamictoptrans100km</string> <string>dynamic;toptrans100km;dynamic;toptrans100km;stop1;demand1;;stop1demand1<16?59:dynamictoptrans100km</string>
<string>dynamic;toptrans300km;dynamic;toptrans300km;stop1;demand1;;stop1demand1<101?199:dynamictoptrans300km</string> <string>dynamic;toptrans300km;dynamic;toptrans300km;stop1;demand1;;stop1demand1<51?159:dynamictoptrans300km</string> <string>dynamic;toptrans300km;dynamic;toptrans300km;stop1;demand1;;stop1demand1<16?119:dynamictoptrans300km</string>
<string>dynamic;toptrans700km;dynamic;toptrans700km;stop1;demand1;;stop1demand1<101?259:dynamictoptrans700km</string> <string>dynamic;toptrans700km;dynamic;toptrans700km;stop1;demand1;;stop1demand1<51?199:dynamictoptrans700km</string> <string>dynamic;toptrans700km;dynamic;toptrans700km;stop1;demand1;;stop1demand1<16?159:dynamictoptrans700km</string> </ColumnsCalculated>
W PostImportJobsCompute potrzebny będzie następujący kod:
<Equations> <string>cenatoptrans;cenatoptrans;toptrans700km;distance;;distance<701?toptrans700km:cenatoptrans</string> <string>cenatoptrans;cenatoptrans;toptrans300km;distance;;distance<701?toptrans300km:cenatoptrans</string> <string>cenatoptrans;cenatoptrans;toptrans100km;distance;;distance<701?toptrans100km:cenatoptrans</string> </Equations>
Jeśli stosowane jest obliczanie odległości, należy kliknąć "Obliczenia zamówienia" po załadowaniu zamówień (i prawidłowym obliczeniu macierzy odległości)..
Jeśli Tasha ma określić optymalnego przewoźnika, konieczne jest porównanie cen różnych przewoźników i zapisanie najniższego przewoźnika na job.notservedpenalty (jeśli stosuje się PostImportJobsCompute, należy tam dokonać porównania i przypisania). Podczas rozwiązania tasha decyduje, czy bardziej opłacalne jest doręczenie przesyłki, czy pozostawienie jej bez nadzoru (tzn. Kara za niezapłaconą kwotę będzie niższa niż koszt dostawy).