Výpočty vzdáleností podle plánu
Eviste.Route - Výpočet vzdáleností a tras
Konzolová aplikace v .NET určená k automatickému výpočtu silničních vzdáleností a časů tranzitu mezi místy výzev (VyzvaPolozka) a sídly/depony obchodních partnerů (ObchodniPartner). Výsledky ukládá do databáze systému EviŠtě pro další plánování a logistické výpočty.
Hlavní funkce (Co projekt dělá)
- Načtení dat k výpočtu:
- Vyhledá všechny aktivní/rozpracované položky výzev (VyzvaPolozka), které mají vyplněné zeměpisné souřadnice (Latitude a Longitude) a jsou ve stavech Nezahajeno, Rozpracovano, Neuvedeno nebo Prevzato.
- Vyhledá aktivní obchodní partnery (ObchodniPartner), kteří vystupují v roli odběratele, deponia nebo odběrného místa a mají zadané souřadnice.
- Výpočet tras přes mapové služby:
- Identifikuje chybějící kombinace vzdáleností mezi partnery a místy výzev v databázi (tabulka Vzdalenost).
- Pro každou chybějící trasu spočítá pomocí mapové služby (např. Bing Maps) optimální trasu.
- Výpočet zohledňuje nastavení vozidel z konfigurace v databázi (OmezenaVaha, OmezenaDelka, TypVozidla) a také případná průjezdná místa (via points) definovaná u partnera.
- Uložení výsledků:
- Vypočtená vzdálenost a čas jízdy se uloží zpět do databázové tabulky Vzdalenost pod konkrétní firmu (FirmaId).
Konfigurace (Nastavení aplikace)
1. Soubor Eviste.Route.Config.json
V tomto souboru se definuje připojení k databázi SQL Server:
{
"Connection": {
"Server": "localhost\\SQLEXPRESS",
"Database": "EvisteDbAclesia",
"User": "zašifrovaný_uživatel",
"Password": "zašifrované_heslo",
"TrustedConnection": true,
"FirmaId": "b5ecfe7f-c19b-4ca4-98e8-344513f4a597"
}
}
2. Konfigurace v databázi (tabulka KonfiguraceEviste)
Aplikace při startu načítá z databáze parametry pro mapové služby a parametry vozidla:
- MapyApiKey: API klíč pro přístup k mapové službě (Bing Maps).
- OmezenaVaha: Hmotnostní omezení pro výpočet trasy kamionu (výchozí 20 000 kg).
- OmezenaDelka: Délkové omezení pro výpočet trasy kamionu (výchozí 20 000 mm / 20 m).
- TypVozidla: Typ vozidla pro trasování (např. kamion/Truck - hodnota odpovídající MapyTypVozidlaEnum).
Použití (Jak se aplikace spouští)
Aplikace se spouští z příkazové řádky a podporuje několik argumentů pro filtrování a omezení výpočtů:
Eviste.Route.exe [argumenty]
Parametry příkazové řádky:
|
Parametr (zkrácený) |
Parametr (plný) |
Datový typ |
Popis |
|
-h, -? |
--showhelp |
přepínač |
Zobrazí nápovědu k příkazové řádce a ukončí program. |
|
-x |
--maxnumbercalculations |
číslo |
Maximální počet výpočtů (partnerů a míst), které se mají v rámci jednoho běhu provést. Užitečné pro testování nebo omezení limitů API. |
|
-v |
--vyzvaid |
GUID |
Id konkrétní výzvy (VyzvaId), pro kterou se má výpočet provést (ignoruje ostatní výzvy). |
|
-o |
--partnerid |
číslo (long) |
Id konkrétního partnera (ObchodnipartnerId), pro kterého se má výpočet provést (ignoruje ostatní partnery). |
Příklady spuštění:
- Standardní plný přepočet chybějících tras:
Eviste.Route.exe
- Zobrazení nápovědy k parametrům:
Eviste.Route.exe -h
- Přepočet pouze pro jednoho partnera s ID 12345:
Eviste.Route.exe -o 12345
- Přepočet pro konkrétní výzvu:
Eviste.Route.exe -v "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d"
- Omezení počtu počítaných kombinací na max 10 (pro testování):
Eviste.Route.exe -x 10
Nastavení jako plánovaná úloha ve Windows
Jelikož se jedná o konzolovou aplikaci určenou pro periodické spouštění na pozadí, je ideální ji nastavit v systému Windows jako Plánovanou úlohu (Scheduled Task).
Možnost A: Nastavení pomocí PowerShellu (doporučeno)
Pro rychlé vytvoření úlohy, která se bude spouštět např. každou hodinu, spusťte PowerShell jako administrátor a použijte následující příkaz:
# Definice akce (cesta k exe souboru a pracovní adresář)
$Action = New-ScheduledTaskAction -Execute "C:\Cesta\K\Aplikaci\Eviste.Route.exe" -WorkingDirectory "C:\Cesta\K\Aplikaci"
# Definice spouštěče (např. každou hodinu, opakování do nekonečna)
$Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1)
# Definice nastavení (spuštění i na baterii, nastavení priority)
$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
# Registrace úlohy pod systémovým účtem (SYSTEM) nebo konkrétním uživatelem
Register-ScheduledTask -TaskName "Eviste.Route.Calculation" -Action $Action -Trigger $Trigger -Settings $Settings -User "NT AUTHORITY\SYSTEM"
Možnost B: Nastavení v grafickém rozhraní (Plánovač úloh / Task Scheduler)
- Otevřete Plánovač úloh (Task Scheduler) ve Windows (taskschd.msc).
- V pravém panelu zvolte Vytvořit úlohu... (Create Task...).
- Na kartě Obecné (General):
- Zadejte název úlohy (např. Eviste.Route.Calculation).
- Vyberte možnost Spustit nezávisle na přihlášení uživatele (Run whether user is logged on or not).
- Pro běh na serveru se doporučuje použít účet SYSTEM nebo servisní účet s právy zápisu do logů a přístupem k síti.
- Na kartě Spouštěče (Triggers):
- Klikněte na Nový... (New...).
- Nastavte spuštění (např. Podle plánu -> Jednou).
- V sekci Upřesnit nastavení zaškrtněte Opakovat úlohu každých: (Repeat task every) a zvolte interval (např. 1 hodina) na dobu Nekonečně (Indefinitely).
- Na kartě Akce (Actions):
- Klikněte na Nová... (New...).
- Nastavte Akce na Spustit program (Start a program).
- Do pole Program či skript vyhledejte cestu k Eviste.Route.exe.
- DŮLEŽITÉ: Do pole Spustit v (volitelné) (Start in) vyplňte absolutní cestu k adresáři s aplikací (např. C:\Cesta\K\Aplikaci\). Bez tohoto nastavení nemusí aplikace správně najít konfigurační soubory Eviste.Route.Config.json a logy.
- Uložte úlohu tlačítkem OK (případně zadejte přihlašovací údaje k účtu, pod kterým má běžet).