/// <summary> /// U1 - Príchod zákazníka /// Naplánujem: /// - Začiatok spracovania objednávky - naplánujem udalosť okamžite, ak je volny pracovnik. /// - Front čakajúcich zákazníkov - Vložím do frontu čakajúcich zákazníkov zákazníka s aktuálnym časom príchodu. /// - Príchod nového zákazníka s vygenerovaným časom z Generátora 1. /// Štatistiky: /// - S1a - Začnem merať čas čakania zákazníka v rade čakajúcich zákazníkov na zadanie objednávky. /// - S2a – Pripočítam jedného zákazníka v rade čakajúcich zákazníkov. /// - S3a - Začnem počítať čas strávený zákazníkov v servise. /// </summary> public override void Execute() { if (AktualnyZakaznik == null) { throw new Exception("NULL zakaznik. "); } AktualnyZakaznik.S1_ZacniCakanie_front_cakajucich_zakaznikov(EventTime); AktualnyZakaznik.S3_ZacniCakanie_bytia_v_servise(EventTime); ((AppCore)ReferenceSimCore).S2_AddValue(); if (((AppCore)ReferenceSimCore).JeVolnyPracovnik1()) { //obsad volneho pracovnik ((AppCore)ReferenceSimCore).ObsadPracovnikaSkupiny1(); var zadanie = new ZaciatokSpracovaniaObjednavkyEvent(EventTime, ReferenceSimCore, AktualnyZakaznik); ReferenceSimCore.ScheduleEvent(zadanie); } else { ((AppCore)ReferenceSimCore).S2_AddValue(); //inak vlozim zakaznika do frontu cakajucich zakaznikov ((AppCore)ReferenceSimCore).Front_CakajuciZakaznici_PridajZakaznika(AktualnyZakaznik); } //naplanujem novy prichod zákazníka var a = ((AppCore)ReferenceSimCore).Gen.Generator1_ZakazniciPrichod(); var time = EventTime + a; var prichod = new PrichodZakaznikaEvent(time, ReferenceSimCore, new Zakaznik()); ReferenceSimCore.ScheduleEvent(prichod); }
/// <summary> /// U5 - Preparkovanie auta k dielni /// </summary> /// Vyberiem opravené auto z frontu opravených áut. /// Naplánujem: /// - Začiatok opravy v okamžitom čase, ak je voľný pracovník skupiny 2. Obsadím pracovníka 2 skupiny. /// - Front pokazených áut - Pridám auto (aktuálneho zákazníka) do frontu pokazených áut, ak existuje a zároveň nie je voľný pracovník skupiny 2. /// - Preparkovanie auta späť zákazníkovi – prioritne (pracovníci skupiny 1 uprednostňujú vrátenie opraveného auta zákazníkovi pred prijatím novej objednávky). Vyberiem opravené auto z frontu opravených áut. Ak nie je front opravených prázdny, tak naplánujem udalosť s vygenerovaným časom Generátora 5 – preparkovanie s opraveným autom. /// - Začiatok spracovania objednávky - s druhou prioritou, ak je front opravených áut prázdny a zároveň nie je front čakajúcich zákazníkov prázdny. Vyberiem zákazníka z frontu čakajúcich zákazníkov. Naplánujem okamzite. /// - Uvoľnenie pracovníka – ak front opravených áut prázdny, a zároveň front čakajúcich zákazníkov, tak uvoľním pracovníka skupiny 1. public override void Execute() { if (AktualnyZakaznik != null) { if (((AppCore)ReferenceSimCore).JeVolnyPracovnik2()) { ((AppCore)ReferenceSimCore).ObsadPracovnikaSkupiny2(); //naplanujem zaciatok opravy var oprava = new ZaciatokOpravyEvent(EventTime, ReferenceSimCore, AktualnyZakaznik); ReferenceSimCore.ScheduleEvent(oprava); } else { //vlozim do frontu auto pokazenych aut ((AppCore)ReferenceSimCore).Front_PokazeneAuta_Pridaj(AktualnyZakaznik); } } var opraveneAuto = ((AppCore)ReferenceSimCore).Front_OpraveneAuta_Vyber(); //PRIORITNE if (opraveneAuto != null) { //cas preparkovanie spat var casPreparkovania = EventTime + ((AppCore)ReferenceSimCore).Gen.Generator5_Preparkovanie(); //vyberiem auto z frontu //preparkovanie auta naspat var preparkovanieNaspat = new PreparkovanieAutaSpatEvent(casPreparkovania, ReferenceSimCore, opraveneAuto); ReferenceSimCore.ScheduleEvent(preparkovanieNaspat); } else { ((AppCore)ReferenceSimCore).S2_AddValue(); var cakajuciZakaznik = ((AppCore)ReferenceSimCore).Front_CakajuciZakaznici_VyberZakaznika(); //NEPRIORITNE if (cakajuciZakaznik != null) { //vyberiem z frontu cakajucich zakaznikov //naplanujem zaciatok obsluhy var zaciatokObsluhy = new ZaciatokSpracovaniaObjednavkyEvent(EventTime, ReferenceSimCore, cakajuciZakaznik); ReferenceSimCore.ScheduleEvent(zaciatokObsluhy); } else { //uvolnim pracovnika 1 ((AppCore)ReferenceSimCore).UvolniPracovnikaSkupiny1(); } } }