====== 👷 Smart Factory ====== {{ :courses:b6b36omo:sem:smart_factory.png?nolink&300|}} Vytvořte aplikaci pro virtuální simulaci inteligentní továrny, kde simulujeme chod výroby - na výrobních linkách s pomocí strojů a lidí vyrábíme produkty. Používáme jednotlivé stroje a vyhodnocujeme jejich využití, spotřebu a kvalitu výsledných výrobků. Součástí výrobního procesu jsou nejen stroje a lidé, ale i kolaborativní roboty. Základní časová jednotka je jeden takt (trvá jednu hodinu). Stavy továrny se mění (a vyhodnocují) po těchto taktech. Součástí aplikace je i předpřipravená konfigurace továrny, na které jsou ukázány implementované požadavky. ===== ⚙️ Funkční požadavky ===== ==== Povinné ==== - Hlavní entity: továrna, výrobní linka (s prioritou), stroj, člověk, výrobek, materiál a další. Stroje, lidé i výrobky mohou být různých druhů. - Výrobní linka je tvořena posloupností strojů a lidí. Přetváří vstupní materiál(y) na výstupní (jiný materiál nebo hotový produkt). - Stroje a roboti mají spotřebu; lidé, roboti, stroje i materiál představují náklady. - Komunikace mezi stroji, roboty a lidmi probíhá pomocí událostí (eventů). Událost může obdržet 1 až N entit (člověk, stroj, robot), které jsou na daný typ události zaregistrované. Události je potřeba odbavit. - Zařízení mají API pro sběr dat: spotřeba elektřiny, oleje, materiálu a funkčnost (opotřebení roste s časem). - Stroje a roboty se po určité době porouchají. Po poruše vygenerují událost (alert) s prioritou podle důležitosti linky, kterou odbaví opravář. - Opravářů je omezený počet. Oprava trvá několik taktů. Při zahájení a ukončení opravy je generována událost. Pokud nejsou opraváři dostupní, čeká se. Po uvolnění opravář nastupuje na nejprioritnější nebo nejstarší defekt. - Návštěva ředitele a inspektora: ředitel prochází továrnou podle stromové hierarchie entit, inspektor podle míry opotřebení. Oba mají definované akce, které provedou s daným typem entity. Sekvenci a názvy provedených akcí zapisujte do logu. - Reporty za libovolné časové období: * ''FactoryConfigurationReport'' obsahuje veškerá konfigurační data továrny v hierarchii. * ''EventReport'' obsahuje události podle typu, zdroje a odbavení. * ''ConsumptionReport'' udává spotřeba zařízení a robotů, včetně finančního vyčíslení, sumární spotřeby za linku/továrnu. * ''OutagesReport'' vypíše nejdelší, nejkratší a průměrnou doba výpadku, průměrnou dobu čekání na opraváře. - Pro prezentaci aplikace je předpřipravena jedna vzorová konfigurace továrny, která obsahuje minimálně: * 2 výrobní linky; každá obsahuje alespoň čtyři stroje/lidi * 6 materiálů, se kterými továrna pracuje * 2 finální produkty (výstupy výrobních linek) * jednoho opraváře, ředitele a inspektora ==== Bonusové ==== - Vraťte stavy strojů v zadaném taktu (jiném než posledním). Stav zrekonstruujte z počátečního stavu a sekvence událostí, které byly na stroji provedeny. - Produkty se vyrábějí v sériích po několika stech kusech. Při změně série nekompatibilních výrobků je nutné výrobní linky přeskládat. Každý výrobek má definovanou sekvenci zařízení, robotů a lidí, které je potřeba uspořádat na linku. - Výsledná aplikace pracuje i se ziskovostí produkce: * Materiály mají fixní cenu, stroje spotřebovávají el. energii a lidé dostávají za práci zaplaceno. * Stroje vyžadují počáteční investici (nákup), ale dlouhodobě jsou efektivnější než lidé. * Výsledné produkty se prodávají za fixní cenu. ===== 📐 Nefunkční požadavky ===== - Není požadována autentizace ani autorizace. - Aplikace může běžet pouze v jedné JVM. - Metody a proměnné, které nemají být dostupné ostatním třídám, mají být dobře skryté. Vygenerovaný Javadoc by měl obsahovat co nejméně public metod a proměnných. - Reporty jsou generovány do textového souboru. - Konfigurace továrny může být nahrávána přímo z třídy nebo externího souboru (preferován je JSON). ===== 🧩 Vhodné design patterny ===== * State machine * Iterator * Factory / Factory method * Decorator * Singleton * Visitor * Observer * Chain of Responsibility * Partially persistent data structure * Object Pool * Lazy Initialization * Monáda (2 body místo jednoho za implementaci vlastní monády) * Streamy ===== 📚 Doporučená literatura ===== * Design ve formě use case diagramů, class diagramů a stručného popisu realizace úlohy. * Veřejné API – Javadoc pro funkce, kterými uživatel pracuje se softwarem. * Dvě různé konfigurace továrny, alespoň 30 entit.