This is an old revision of the document!
Table of Contents
Tema de Casă 1
Implementarea modului de aprovizionare (SCM - Supply Chain Management) pentru un sistem informatic dedicat unui lanț de restaurante
Termen de Predare: 20 noiembrie 2015, 23:55
Pondere: 10 p / 35
Obiective
Obiectivul temelor de casă este reprezentat de implementarea unui sistem informatic performant şi scalabil pentru gestiunea resurselor unei societăți comerciale de dimensiuni mari. În acest an universitar, organizaţia pentru care se va proiecta şi dezvolta acest pachet de programe este un lanț de restaurante.
Se va realiza implementarea mai multor module din cadrul aplicației ERP, pe parcursul a trei etape independente.
În cadrul acestei etape, sistemul informatic va fi capabil să interogheze servicii care rulează în alte maşini virtuale şi ale căror funcţionalităţi le cunoaşte, acestea fiind accesibile prin intermediul unei reţele de calculatoare.
După rezolvarea temei de casă, studentul va fi capabil să:
- proiecteze o aplicaţie având o structură distribuită pe componente care poate rula pe maşini diferite;
- modeleze comunicaţia între componentele distribuite ale aplicaţiei.
Cunoştinţele necesare pentru rezolvarea temei de casă sunt:
- programarea în limbajul Java;
- proiectarea și dezvoltarea unei baze de date folosind sistemul de gestiune MySQL;
- folosirea unei interfețe de programare pentru accesarea informațiilor dintr-o sursă de date (Java Database Connectivity / Java Persistence API);
- utilizarea tehnologiei RMI (Remote Method Invocation) pentru apelarea unor metode aparţinând unor obiecte existente într-o altă maşină virtuală, a căror definiţie se consideră cunoscută.
Enunț
Se dorește implementarea modulului de aprovizionare (SCM - Supply Chain Management) pentru un sistem informatic destinat gestiunii activității dintr-un lanț de restaurante.
Pentru a putea asigura meniul pentru o anumită zi, restaurantul trebuie să se aprovizioneze cu o serie de produse culinare, care pot fi livrate de anumiți furnizori. Informațiile cu privire la alimentele care pot fi comandate precum și transmiterea de solicitări pentru livrarea acestora sunt realizate prin intermediul unui agent de intermediere a comunicației, care face legătura dintre restaurant și diferiții producători. Acesta poate fi interogat pentru a se obține lista agenților economici către care pot fi plasate comenzi, lista produselor pe care aceștia le comercializează (împreună cu data de livrare și prețul lor), pentru a le rezerva pentru anumite perioade de timp, respectiv spre a plasa o solicitare fermă (ambele operații putând fi și anulate).
1. Un furnizor de produse alimentare va interacționa doar cu agentul de intermediere a comunicației cu lanțul de restaurante. Comunicația se produce doar în situația în care între aceste entități este stabilită o legătură, în acest sens fiind implementat un meniu în mod text prin care vor fi accesate funcționalitățile de înregistrare, respectiv de deînregistrare de la nivelul agentului de intermediere.
Un producător dispune de un stoc format din mai multe produse alimentare, caracterizate prin preț unitar, cantitate disponibilă, unitate de măsură precum și un termen de fabricație (în situația în care o anumită materie primă nu este disponibilă în stoc în cantitatea solicitată, aceasta poate fi livrată într-un interval de timp indicat de acest parametru, exprimat în număr de zile calendaristice). Aceste informații vor fi stocate în cadrul unei baze de date dedicate pentru fiecare agent comercial în parte.
Funcționalitățile pe care le expune un către agentul de intermediere sunt:
a)
public List<Product> getProductList();
b)
public Offer getOffer(String name, int quantity);
2. Un agent de intermediere facilitează comunicația dintre un furnizor și lanțul de restaurante, expunând către fiecare dintre acestea anumite funcționalități:
CĂTRE FURNIZOR
a) metoda registerSupplier() permite înregistrarea unui furnizor la agentul de intermediere; doar în cazul în care furnizorul este înregistrat la agentul de intermediere, acesta poate fi interogat cu privire la produsele pe care le comercializează; metoda are ca semnătură:
- parametri: denumirea și descrierea furnizorului;
- valoarea întoarsă: un identificator, generat de agentul de intermediere, prin care furnizorul este referit în mod unic la nivelul acestuia.
public int registerSupplier(String name, String description);
b) metoda unregisterSupplier() permite deînregistrarea unui furnizor de la agentul de intermediere; în acest moment, toate informațiile stocate referitor la nivelul agentului de intermediere cu privire la furnizorul respectiv sunt eliminate; metoda are semnătura:
- parametru: identificatorul unic prin care furnizorul este referit de agentul de intermediere;
- valoarea întoarsă: o valoare de tip adevărat / fals, care indică dacă operația a fost realizată cu succes sau s-a produs o excepție.
public boolean unregisterSupplier(int registrationId);
CĂTRE LANȚUL DE RESTAURANTE
a)
public List<Supplier> getSupplierList();
b)
public List<Product> getProductList(List<String> suppliers);
c)
public Map<String, List<Offer>> getOffers(List<Demand> demands, boolean cache);
d)
public int makeReservation(String supplier, List<Demand> demands);
e)
public boolean cancelReservation(int reservationId);
f)
public boolean makeOrder(int reservationId);
3. Un lanț de restaurante accesează informațiile de care dispune agentul de intermediere a comunicației cu producătorii de produse alimentare.
Un meniu, specific unei anumite date calendaristice, este format din mai multe feluri de mâncare. Acesta este caracterizat prin tip (aperitiv, fel principal, desert), denumire precum și ingrediente (denumire și cantitate, pentru care este asociată și o unitate de măsură). De asemenea, pentru fiecare meniu se indică și cantitățile din fiecare tip de fel de mâncare care vor fi pregătite pentru data calendaristică respectivă, astfel încât să se cunoască volumul de preparate care trebuie procurate. Pentru fiecare meniu se reține și starea sa (dacă s-a realizat procesul de aprovizionare corespunzător sau nu).
Precizări suplimentare
Informațiile reținute de agentul de intermediere a comunicației dintre lanțul de restaurante și furnizorii de produse alimentare nu trebuie stocate la nivelul sistemului de gestiune pentru baze de date. Astfel, informațiile sunt disponibile doar atâta timp cât respectiva componentă se găsește în execuție, fiind pierdute în momentul în care aceasta nu mai rulează sau în cazul în care se produce o eroare.
Componentele care interacționează în cadrul modulului de aprovizionare au următorul comportament:
| COMPONENTA | SERVER | CLIENT |
|---|---|---|
| Furnizor | ✔ | ✔ |
| Agent de Intermediere | ✔ (către furnizor, lanț de restaurante) | ✔ |
| Lanț de Restaurante | ✘ | ✔ |
În cazul agentului de intermediere, se remarcă faptul că aceasta expune funcționalități de tip server față de componente diferite: furnizor și lanț de restaurante. În această situație, se va asigura faptul că pentru fiecare entitate vor fi accesibile doar metodele specifice, fără a se expune și operațiile specifice altor aplicații.
Barem de corectare și notare
| Punctaj | Criterii de acordare |
|---|---|
| x p |
BONUS. Se pot obţine punctaje suplimentare, astfel:
- 0,50 p – predarea şi prezentarea temei cu o săptămână mai devreme (înainte de xx.xx.2015, 23:55);
Condiții de realizare și predare
Tema va fi realizată individual şi va fi prezentată în cadrul laboratorului, până la sfârşitul semestrului. Neprezentarea temei de casă sau un rezultat nesatisfăcător al prezentării (necunoașterea funcționalității aplicației / codului sursă, imposibilitatea de a răspunde la întrebări) atrag după sine anularea punctajului corespunzător acesteia. În cadrul prezentării veţi specifica succint funcţionalităţile pe care le-aţi dezvoltat şi veţi răspunde la întrebări cu privire la modul de implementare al acestora.
Tema va trebui încărcată pe site-ul cs.curs.pub.ro sub forma unei arhive de tip .zip (având denumirea Grupa34XCX_NumePrenume_Tema1.zip) care să conţină script-ul pentru crearea şi popularea tabelelor din baza de date (numele bazei de date fiind Grupa34XCX_NumePrenume) – în rădăcina, sursele aplicaţiei (proiect Eclipse / NetBeans) precum şi un README în care să explicaţi funcționalitățile dezvoltate, problemele întâlnite și modul de soluționare a acestora. Temele care nu respectă convențiile de nume indicate nu vor fi luate în considerare. Prezentarea se poate face numai după ce tema a fost încărcată pe site.
Încărcarea pe site nu este redundantă, temele vor fi comparate prin aplicaţii specializate pentru a se depista eventualele fraude. În această situaţie, întreg punctajul pe parcursul semestrului va fi anulat, studenţii implicaţi (atât originalul, cât şi copia / copiile) fiind obligaţi să repete disciplina – cu taxă – în anul universitar următor.
