DeliveryPlanner

Proiect realizat de:

Cerbu Andrei - Mihnea

Robert - Giorgio Ciubotaru

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:

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.