Add files via upload

This commit is contained in:
Cerbu Andrei Mihnea
2023-05-12 02:35:29 +03:00
committed by GitHub
parent d6d12fdeaa
commit 12b291c9ab
13 changed files with 530 additions and 0 deletions
+175
View File
@@ -0,0 +1,175 @@
<!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>
</div>
<div class="margin"></div>
</body>
</html>