Solutie modulara pentru managementul deseurilor - SmartSanitation

  • aplicatie mobila dedicata pentru colectorii de deseuri
  • aplicatie web cloud pentru management care integreaza mai multe module (CRM, Operatiuni, Financiar, etc.)
  • aplicatie dedicata pentru clientul final.

Tehnologii

C#, Asp.Net 5, EntityFramework Core, PostgreSQL, Docker & Docker compose, Consul, RabbitMq, MediatR, Steeltoe, Polly, Hangfire, IronPdf, SendGrid, MailKit, MassTransit, Ocelot, OpenAPI, JWT, Linux, Angular, Typescript, Nginx, WSL2

Dezvoltarea de la zero a unei solutii modulare care integreaza functionalitati specifice managementului de deseuri (mobilitate + sistem de facturare bazat pe conceptul “platesti cat produci” + aplicatii multi-user + sincronizari de date in timp real)

CONTEXTUL

Abordarea noastra

In ultimii ani piata s-a schimbat semnificativ - implicit la nivelul asteptarilor si nevoilor clientilor. Migrarea brusca spre managementul de la distanta, lucrul cu instrumente digitale colaborative si servicii personalizate a schimbat modul de organizare din aproape toate industriile.

Pe fondul acestor schimbari, am decis sa alocam echipe si resurse (logistice si de timp) pentru dezvoltarea mai multor aplicatii si solutii care pot fi implementare rapid si ajuta la adaptarea companiilor si comunitatilor la schimbarile dinamice din piata.

Exemple de aplicatii si solutii dezvoltate de echipele noastre (in functie de industrie):

SOLUTIA

In acest context, solutia SmartSanitation a fost dezvoltata cu dublu scop:

  • ca modul complementar pentru solutia SmartCity - pentru a oferi acces la functionalitati extinse;
  • ca solutie independenta si completa care integreaza functionalitati specifice de care au nevoie in egala masura clientii (casnici, primarii, etc) si companiile de management al deseurilor.

Echipa de proiect

All the amazig people that made this project happen

1

Project Manager

2

Developeri

1

Arhitect de solutie

Pentru a oferi o experienta completa, solutia SmartSanitation integreaza 3 aplicatii de baza:

Aplicatie mobila pentru colectorii de deseuri

Aplicatie web cloud pentru management

Aplicatie iOS & Android pentru clienti

Vrei sa implementezi aceasta solutie in compania/comunitatea ta?

Aplicatie mobila pentru colectorii de deseuri

Aplicatia mobila este implementata pe un PDA Android si le permite utilizatorilor (colectorilor de deseuri) sa:

  • scaneze codul QR de pe pubela (codul QR reprezinta numarul de contract);
  • identifice rapid clientul asociat;
  • inregistreze volumul din tipul deseurilor colectate (menajer, reciclabil, compostabil);
  • genereze bonuri de plata (pot fi incarcate inclusiv poze cu pubela inainte si dupa descarcare);
  • refuze colectarea deseurilor (precizand si motivul).

Toate datele se transmit on-line catre aplicatia centrala de management. Daca nu exista comunicatie device mobil server, datele se stocheaza in device si se vor sincroniza in momentul cand avem conexiune de date (Wi-Fi sau date mobile).

Aplicatie web cloud pentru management

CRM

In modulul de CRM sunt inregistrate toate datele clientilor (persoane fizice, juridice sau asoc. de locatari), definite contractele petru fiecare client, ,adaugate mai multe persoane dependente legate de acelasi client, vizualizate operatiunile si balanta fiecarui client(data/ora ridicarii, coordonatele geo, cantitatea) si emise manual facturile.

Operatiuni

In cadrul acestui modul se pot urmari toate operatiunile facute de catre societatea de salubrizare: ridicarile si tipul de container sau refuzarile de ridicare.Tot in aceasta sectiune se pot adauga manual tranzactii de ridicare deseuri sau refuzurile de ridicare de catre un operator.

Financiar

In baza conditiilor contractuale personalizate pe fiecare entitate se emit facturile automat la o data stabilita: emiterea manuala sau automata a facturilor si managerierea balantelor si platilor. Acest modul contine logica de facturare conform algoritmului solicitat de client – firma de salubrizare (pentru terti - primarie).

Nomenclatoare de produse

Acesta este un modul specific, dezvoltat pentru listarea produselor in sistem. Sunt definite tipurile de deseuri ce pot fi ridicate, u.m. si rate de conversie volum/masa, deseri uscate, deseuri umede, preturi unitare pentru produse, taxe si accize

Super Admin

Este un modul dedicat care permite managementul intregului sistem dintr-un dashboard unic. Cu ajutorul acestui modul este posibila definirea utilizatorilor si a drepturilor de acces in aplicatie, definirea regulilor speciale si a algoritmilor de calcul.

Aplicatie iOS & Android pentru clienti

Aplicatie mobila creata pentru a tine clientii (casnici, primarii, etc) informati si pentru a le oferi acces rapid la datele din cont:

  • actualizari in timp real in cont;
  • mai multa transparenta in comunicare si in procese;
  • acces rapid la facturi;
  • durata si birocratia reduse.

Arhitectura de microservicii

Bazandu-se pe MSA (Microservices Architecture), SmartSanitation integreaza o serie de microservicii: Prezentare | CRMService | TmService | FinancialService | PdfService | EmailService | Autentificare | ApiGateway | ApiOrchestrator | Proiecte comune (ApiKernel, DataAccessKernel, ErpCommons )

Proiecte similare

SmartCity App

Invoicer

TaxIoT - solutie web pentru managementul taximetrelor

Microservicii bazate pe principiile SOLID

Fiecare microserviciu este dezvoltat pe pricipiile SOLID pentru a fi reactiv la evenimentele care folosesc RabbitMq,stoca datele proprii folosind baze de date separate, interactiona cu alte microservicii prin HTTP folosind Consul pentru obtinerea IP-ului si port pentru utilizarea DNS, pentru a evita erorile folosind Polly, segrega logica de business implementand pattern-ul Command pattern prin utilizarea MediatR, si pentru se expune la rulare la Consul.

Presentation

CRMService

TmService

FinancialService

PdfService

EmailService

Authentication

ApiGateway

ApiOrchestrator

Presentation

Presentation este un SPA (Single Page Application) care foloseste Angular si Typescript pentru a implementa facil modelele de domeniu si logica de business care sunt compatibile cu elementele similare din microservicii.

*Fiind un microserviciu, Presentation este scris, de asemenea, folosind principiile SOLID pentru a:

  • fi reactiv la evenimentele care folosesc RabbitMq
  • stoca datele proprii folosind baze de date separate
  • interactiona cu alte microservicii prin HTTP folosind Consul pentru obtinerea IP-ului si port pentru utilizarea DNS
  • evita erorile folosind Polly, segrega logica de business implementand pattern-ul Command pattern prin utilizarea MediatR.

CRMService

CRMService are rolul de a manageria utilizatorii, configura compania de administrare si stoca datele in PostgreSQL.

CRMService contine urmatoarele tehnologii:

  • C#, Asp.Net 5;
  • PostgreSQL;
  • EntityFramework Core ca ORM;
  • OpenAPI;
  • Steeltoe ca si client pentru Consul;
  • MediatR pentru segregarea logicii de business.

TmService

TmService integreaza contracte, produse, servicii cu optiuni management si stocare a fluxurilor de activitati. TmService receptioneaza evenimentele prin RabbitMq pentru a marca produsele cand se emit facturile automat. (stocheaza datele in PostgreSQL)

TmService utilizeaza urmatoare;le tehnologii:

  • C#, Asp.Net 5;
  • PostgreSQL;
  • MassTransit for RabbitMq client and implementing pub/sub pattern;
  • EntityFramework Core as ORM;
  • OpenAPI;
  • Steeltoe ca si client pentru Consul;
  • MediatR pentru segregarea logicii de business.

FinancialService

FinancialService este un microserviciu care urmareste toate facturile si tranzactiile si care permite crearea automata sau manuala de facturi. FinancialService interactioneaza cu PdfService, CrmService, TmService si ApiOrchestrator direct prin HTTP si trimite evenimente catre TmService prin RabbitMq. Stocheaza , de asemenea, datele in PostgreSQL.

FinancialService utilizeaza urmatoarele tehnologii:

  • C#, Asp.Net 5;
  • PostgreSQL;
  • MassTransit for RabbitMq client si implementari pub/sub pattern;
  • EntityFramework Core ca ORM;
  • OpenAPI;
  • Polly for circuit breaker;
  • Hangfire pentru programarea de job-uri;
  • Refit pentru facilitarea comunicarii cu alte microservicii prin HTTP;
  • Steeltoe ca si client pentru Consul;
  • MediatR pentru segregarea logicii de business.

PdfService

PdfService este un serviciu agnostic ce comunica prin server-ul FTP cu posibilitatea de a stoca, citi si genera pdf-uri.

PdfService utilizeaza urmatoarele tehnologii:

  • C#, Asp.Net 5;
  • IronPdf library pentru a genera pdf-uri din template-urile .cshtml;
  • OpenAPI;
  • Steeltoe ca si client Consul;
  • MediatR pentru segregarea logicii de business.

EmailService

EmailService este un microserviciu agnostic care trimite email-uri catre conturi specifice folosind Sendgrid client.

EmailService foloseste urmatoarele tehnologii:

  • C#, Asp.Net 5;
  • OpenAPI;
  • MassTransit for RabbitMq client si implementari pub/sub pattern;
  • SendGrid client;
  • MediatR pentru segregarea logicii de business.

Authentication

Authentication este un microserviciu ce creeaza conturi, genereaza toke-uri si pastreaza logica pentru autentificari. Stocheaza , de asemenea, datele in PostgreSQL.

Integreaza urmatoarele tehnologii:

  • C#, Asp.Net 5;
  • PostgreSQL;
  • OpenAPI;
  • MediatR pentru segregarea logicii de business;
  • MailKit pentru implementare custom smtp logic;
  • Steeltoe ca si client pentru Consul;
  • JWT pentru autorizare.

ApiGateway

ApiGateway este un serviciu de tip gateway ce are rolul de a expune puncte finale pentru microservicii si logica de autorizare. Este singurul serviciu care comunica direct cu aplicatiile clientului.

ApiGateway integreaza urmatoarele tehnologii:

  • C#, Asp.Net 5;
  • Ocelot library pentru implementarea API Gateway folosind microserviciile DNS stocate in Consul;
  • JWT pentru autorizare.

ApiOrchestrator

ApiOrchestrator implementeaza logica de business personalizata prin agregarea datelor pe mobil si in facturi.

ApiOrchestrator integreaza urmatoarele tehnologii:

  • C#, Asp.Net 5;
  • MediatR pentru segregarea logicii de business;
  • OpenAPI;
  • Polly pentru circuit breaker.

Proiectele cumune sunt folosite pentru implementarea principiului DRY (Do not Repeat Yourself), aducand un plus de stabilitate solutiei prin faptul ca foloseste o zona comuna de stocare DTOs (Data Transfer Objects) si prin abstractizarea generica a logicii.

Independent de aceste microservicii, solutia foloseste procese separate in acelasi context, putand automatiza fluxurile folosind BackgroundServices si Hangfire. Intreaga solutie este containerizata folosind Docker, pastrand fiecare imagine de serviciu pe Docker Hub si implementand totul pe device-ul de hosting folosind docker compose.