209 lines
11 KiB
HTML
209 lines
11 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
|
||
<head>
|
||
<title>Delivery Planner</title>
|
||
<link rel="stylesheet" href="index.css">
|
||
<link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet'>
|
||
</head>
|
||
|
||
<body>
|
||
<div class="margin"></div>
|
||
|
||
<div class="main-content">
|
||
<p class="main-title">DeliveryPlanner</p>
|
||
<div class="authors">
|
||
<p>Proiect realizat de: </p>
|
||
<p>Cerbu Andrei - Mihnea </h3>
|
||
<p>Robert - Giorgio Ciubotaru</h3>
|
||
</div>
|
||
|
||
<div class="paragraph">
|
||
<p class="header">Cerinta:</p>
|
||
<p class="text">
|
||
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.
|
||
|
||
</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p class="header">Tehnologii:</p>
|
||
<ul class="list">
|
||
<li>Server java;</li>
|
||
<li>Baza de date mySql;</li>
|
||
<li>Interfata server pentru client/admin realizata cu JavaFX;</li>
|
||
<li>Fisiere JSON pentru comunicarea pe retea.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p class="header">Clasificarea utlizatorilor</p>
|
||
<p class="text">
|
||
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'.
|
||
</p>
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p class="header">Descriere interactiuni</p>
|
||
<div class="sub-paragraph">
|
||
<p class="sub-title">a. Plasare comanda</p>
|
||
|
||
<img class="wrap_img" src="place_order.png">
|
||
<p class="text">
|
||
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'.
|
||
</p>
|
||
</div>
|
||
<div class="sub-paragraph">
|
||
<p class="sub-title">b. Modificare baza de date</p>
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
<img class="database_img" src="database.png">
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
</div>
|
||
<div class="sub-paragraph">
|
||
<p class="sub-title">c. Generare rute pentru livrarea produselor</p>
|
||
|
||
<img class="routes_img" src="generate_route.png">
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p class="header">4. Intelegerea algoritmului</p>
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p class="header">5. Descrierea structurii fisierelor JSON</p>
|
||
<div class="json_paragraph">
|
||
<div>
|
||
<p class="sub-title">a. Order JSON</p>
|
||
<p class="text">
|
||
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.
|
||
</p>
|
||
</div>
|
||
<img class="img_json" src="products-json.png">
|
||
</div>
|
||
|
||
<div class="json_paragraph">
|
||
<div>
|
||
<p class="sub-title">b. Route JSON</p>
|
||
<p class="text">
|
||
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:
|
||
</p>
|
||
<ul class="list">
|
||
<li>'name': numele depozitului;</li>
|
||
<li>'lat_coord': coordonata reala pe glob pe latitudine;</li>
|
||
<li>'long_coord': coordonata reala pe glob pe longitudine;</li>
|
||
<li>'products': un array pentru stocarea id-urilor produselor care trebuiesc preluate din
|
||
depozit.</li>
|
||
</ul>
|
||
</div>
|
||
<img class="img_json" src="route-json.png">
|
||
|
||
</div>
|
||
|
||
<div class="json_paragraph">
|
||
<div>
|
||
<p class="sub-title">c. Items JSON</p>
|
||
<p class="text">
|
||
In esenta, fiecare obiect va avea asignat un id (pentru identificarea in baza
|
||
|
||
de date) si un nume. In adaos vor exista inca doua campuri pentru 'Deposit',
|
||
dar celelalte obiecte vor seta acele field uri NULL. Atunci cand user-ul
|
||
'Admin' va dori sa execute o operatie asupra bazei de date, in back-end
|
||
se va preciza numele tabelei unde sa fie trimis JSON-ul. Nu va conta ce fel
|
||
de obiect trebuie sa inseram in baza de date deoarece toate produsele vor
|
||
respecta aceeasi structura.
|
||
</p>
|
||
</div>
|
||
<img class="img_json" src="baseItemStructure.png">
|
||
</div>
|
||
|
||
<div class="json_paragraph">
|
||
<div>
|
||
<p class="text">
|
||
In esenta, fiecare obiect va avea asignat un id (pentru identificarea in baza
|
||
de date) si un nume. In adaos vor exista inca doua campuri pentru 'Deposit',
|
||
dar celelalte obiecte vor seta acele field uri NULL. Atunci cand user-ul
|
||
'Admin' va dori sa execute o operatie asupra bazei de date, in back-end
|
||
se va preciza numele tabelei unde sa fie trimis JSON-ul. Nu va conta ce fel
|
||
de obiect trebuie sa inseram in baza de date deoarece toate produsele vor
|
||
respecta aceeasi structura.
|
||
</p>
|
||
</div>
|
||
<img class="img_json" src="listOfItems.png">
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="margin"></div>
|
||
</body>
|
||
|
||
</html> |