DeliveryPlanner
+ + +Cerinta:
++ Sa se realizeze un server de procesare a comenzilor online plasate de clienti. + Acest server va analiza o comanda si va stabili cu ajutorul algoritmului + ‘Multi-Depot-Vehicle-Routing’ traseul cel mai scurt pentru un camion de a + colecta produsele de la un depozit/mai multe depozite si a le livra la client. + +
+Tehnologii:
+-
+
- Server java; +
- Baza de date mySql; +
- Interfata server pentru client/admin realizata cu JavaFX; +
- Fisiere JSON pentru comunicarea pe retea. +
Clasificarea utlizatorilor
++ Un utilizator va putea accesa resursele din server numai prin intermediul unei aplicatii. + Exista doua tipuri de aplicatii cu diferite functionalitati, aceste tipuri fiind descrise + in detaliu in sectiunea 'Interfata'. +
++ Utilizatorul 'User' este cel care se foloseste de aplicatie pentru a plasa comenzi catre server. + Acestuia i se ofera pe interfata intreaga gama de produse disponibila, acesta urmand sa faca o + selectie si sa o trimita la server. +
++ Utilizatorul 'Admin' are acces la toate informatiile stocate pe server, incluzand produsele, + depozitele, toate comenzile facute de utilizatori 'User' cat si rutele pentru a onora comenzile. + Acesta are capacitatea de a insera, modifica, extragere si stergere de informatii din server. +
+Descriere interactiuni
+a. Plasare comanda
+ +
+ + Utilizatorul se va conecta la server folosind o aplicatie creata pentru a accesa + produsele disponibile si pentru a plasa o comanda. Dupa ce utilizatorul a selectat + produsele, incluzand cantitatea, dorite, aplicatia va prelua informatiile respective + si le va converti intr-un fisier JSON. Acest fisier va fi trimis in retea catre server, + care acesta va stoca fisierul in folder-ul denumit 'Orders'. +
+b. Modificare baza de date
++ Aceasta sectiune descrie cazul in care un admin trebuie sa altereze + informatii din baza de date. In primul rand trebuie sa prezentam + structura bazei de date. +
+
+ + Baza de date este formata din 5 tabele: 'Deposit', 'Product', 'Prod_In Depo', 'Orders' si 'Routes'. + Fiecare tabel va stoca informatii referitoare la un produs, un depozit si produsele dintr-un anumit + depozit. Tabelului 'Prod_In_Depo' ne ajuta sa asignam la un ID_Deposit mai multe ID_Product astfel + incat + firma sa poata tine evidenta produselor care se afla intr-un depozit. +
++ Utlizatorul 'Admin' poate insera, modifica sau sterge valori din aceste trei tabele folosindu-se + de a doua versiune de aplicatie, dedicata utilizatorilor din cadrul firmei, care contine functiile + necesare pentru a efectua operatiile enuntate. +
+c. Generare rute pentru livrarea produselor
+ +
+ + Pe server este implementat algoritmul pentru determinarea celei mai scurte rute pentru a colecta + toate produsele necesare pentru livrare. Acest algoritm va rula numai cand un utilizator 'Admin' + va selecta un fisier/un set comenzi pentru livrare. Astfel, garantam faptul ca drumul cel mai + scurt va fi calculat cu cele mai actuale informatii din baza de date. +
+4. Intelegerea algoritmului
++ Dupa cum s-a exemplificat si mai sus (vezi 3. Generare rute pentru livrearea produselor), pentru + determinarea rutelor este folosit un algoritm. Acesta se bazeaza pe problema din teoria grafurilor + numita ‘Multi-Depot-Vehicle-Routing’, care determina traseul unui camion astfel incat sa colecteze + produsele pentru onorarea unei comenzi utilizand drumul cel mai scurt. +
++ Algoritmul va identifica prima oara depozitele in care se afla produsele dintr-o comanda primita ca + input. Dupa va ordona in ordine crescatoare (in functie de distanta fata de client) toate depozitele. + Dupa va itera prin fiecare depozit si va tine minte ce produse se afla in primul depozit, apoi al doilea + pana cand toate produsele au fost localizate. Dupa aceea va lua depozitele in sens invers si va crea un + JSON cu depozitele respective si produsele care trebuiesc luate de la un anumit depozit si il va salva + in folder-ul dedicat traseelor. +
++ Aceasta varianta de algoritm garanteaza faptul ca, in cazul in care chiar daca un depozit contine toate + produsele pentru a onora comanda, va putea gasi un drum mai scurt, chiar daca asta ar insemna sa + viziteze + un numar mai mare de depozite. Deoarece ordonam depozitele in ordine crescatoare in functie de distanta + fata de destinatie, dupa ce vizitam un depozit 'i' nu mai poate exista un alt depozit 'j' care sa fie in + acelasi timp mai aproape de destinatie fata de 'i' si sa aiba o parte / toate produsele necesare + onorarii + comenzii. +
+5. Descrierea structurii fisierelor JSON
+a. Order JSON
++ Acest fisier JSON va fi creat in aplicatia utilizata de utilizatorul 'User'. Dupa ce + utilizatorul + a selectat produsele dorite si a solicitat ca comanda sa fie trimisa, aplicatia va crea un + fisier + JSON cu structura urmatoare: va exista un singur camp, un array denumit 'products', unde vor fi + stocate toate id-urile produselor selectate. +
+
+ b. Route JSON
++ Dupa ce algoritmul a fost rulat folosind un JSON de tipul 'Order', va salva in folder-ul dedicat + rutelor un JSON cu structura afisata in partea dreapta; JSON ul va contine mai multe obiecte de + tipul 'deposit_i' care vor oferii informatii precum: +
+-
+
- 'name': numele depozitului; +
- 'lat_coord': coordonata reala pe glob pe latitudine; +
- 'long_coord': coordonata reala pe glob pe longitudine; +
- 'products': un array pentru stocarea id-urilor produselor care trebuiesc preluate din + depozit. +
+
+