Jesteśmy Partnerem Technologicznym klienta od 2019 roku. Zapewniamy firmie wysoce wyspecjalizowanych inżynierów, których główną domeną są prace backendowe (Java/Kotlin), frontendowe (Angular) oraz QA. Przykładowe projekty opisane wyżej realizowaliśmy w ramach jednego Tribe’u przez 4 cross funkcjonalne zespoły, składające się z następujących specjalistów j‑labs:
- 2x Team Leader
- 12x Backend Developer
- 7x Frontend Developer
- QA
Wspólnie z pracownikami naszego klienta stworzyliśmy szereg autorskich rozwiązań. Wysoka jakość dowiezionych projektów oraz ścisła współpraca zaowocowały pozytywnym feedbackiem i długotrwałą współpracą trwającą po dziś.
System Zarządzania Zamówieniami Logistycznymi
Projekt
System do rezerwacji zamówień, obsługujący transport towarów i paczek pomiędzy dowolnymi lokalizacjami. Obsługujemy trzy rodzaje transportu: morski, lądowy i lotniczy. Wspieramy dwa rodzaje rezerwacji transportu:
- Rezerwacje kontraktowe – dla klientów kontraktowych, według cen ustalonych w kontrakcie, z wystawianiem faktur.
- Rezerwacje indywidulane – dla klientów okazjonalnych, z cenami wyliczanymi w zależności od rodzaju towaru/paczki i wybranego transportu.
Technologie
Java 17, Kotlin, AWS, Spring Boot, WebFlux, Kubernetes, Hibernate, Mockito, Docker, PostgreSQL, Angular 16/17, Angular Material, Karma, Jasmine, Jest, RxJS, NgRx, micro-frontend
Zadanie
Modernizacja przestarzałego systemu zarządzania zamówieniami logistycznymi.
Realizacja
- Rozbiliśmy monolitową części przestarzałego systemu na architekturę mikroserwisową oraz migracja Javy do wersji 17 i wprowadzenie Kotlina.
- Przepisaliśmy stary, monolityczny AngularJS na architekturę microfrontendową i Angulara 16.
- Stworzyliśmy komponenty wielokrotnego użytku wspierające istniejące funkcjonalności, przyspieszające wdrażanie nowych funkcji oraz eliminujące zbędny kod.
- Zapewniliśmy asynchroniczne API oraz zabezpieczenie na wypadek braku responsywności bazy danych, aby zawsze można było przetworzyć wszystkie dane rezerwacji.
- Wdrożyliśmy nowe ubezpieczenie obowiązujące na danym rynku oraz przewóz nowego rodzaju towarów np. materiały niebezpieczne.
Parcel Integrator
Projekt
„Parcel”, czyli przesyłka lub paczka zapakowana do wysyłki, lub dostawy, posiadająca oddzielną etykietę adresową. Klient do obsługi przesyłek „Parcel” korzystał wcześniej z zewnętrznego systemu kurierskiego, który generował znaczne koszty. Aby zwiększyć zyski z obsługi przesyłek kurierskich oraz uniezależnić się
od zewnętrznego dostawcy, stworzono „Parcel Integrator”.
Technologie
Java 17, JMS, Spring Boot, WebFlux, Angular 16, AWS, Kafka
Zadanie
Zbudowanie interfejsu użytkownika oraz API, które umożliwia korzystanie z różnorodnych usług kurierskich za pomocą systemu rezerwacji przesyłek firmy naszego klienta.
Realizacja
- Dokonaliśmy integracji systemu z dostawcami usług kurierskich.
- Opracowaliśmy API obsługujące m.in.: statusy przesyłek, informacje o położeniu przesyłki, łatwą integrację z dodatkowymi firmami kurierskimi.
- Zaimplementowaliśmy serwis na eksperckim poziomie, z wykorzystaniem heksagonalnej architektury oraz reaktywnego mikroserwisu (WebFlux).
Inteligentny Magazyn
Projekt
Celem projektu było stworzenie kompleksowego rozwiązania do zarządzania przestrzenią magazynową oraz zaprojektowanie i wdrożenie serwisu ułatwiającego obsługę wymiany towarów, w tym m.in. palet transportowych.
Początkowo system został opracowany wyłącznie do użytku wewnętrznego przez pracowników naszego klienta, umożliwiając optymalizację procesów związanych z logistyką i magazynowaniem. W ramach rozszerzenia funkcjonalności dostosowaliśmy serwisy, aby mogły być z powodzeniem używane również przez klienta końcowego, zapewniając prosty i intuicyjny dostęp do rezerwacji przestrzeni magazynowych.
Technologie
Java 17, Kotlin, AWS, Spring Boot, Kubernetes, Hibernate, Docker, PostgreSQL, Angular 17, micro-frontend
Zadanie
- Stworzenie narzędzia do zarządzania przestrzenią magazynową.
- Stworzenie nowego panelu do statystyk dotyczących wolnych przestrzeni magazynowych.
- Dostosowanie serwisu do użytku przez klientów naszego klienta.
- Utworzenie formularza do wysyłania zapytań o wolną przestrzeń magazynową w określonym przedziale czasowym.
Realizacja
- Przekształciliśmy serwis odpowiadający za część magazynową z monolitu na mikroserwis oraz mikrofrontend.
- Wprowadziliśmy nowe funkcjonalności ułatwiające zarządzanie przestrzenią magazynową.
- Dostosowaliśmy widok na zakładkach, aby narzędzie mogło być używane przez klientów naszego klienta.
- Dodaliśmy możliwości eksportu informacji o magazynie w formacie jednostronicowego pliku PDF.
- Dodaliśmy możliwości aktualizacji wolnych przestrzeni magazynowych w dowolnym momencie.
- Dodaliśmy zakładki „Dashboard”, umożliwiające wyświetlanie statystyk wolnych przestrzeni z podziałem na klastry, regiony, kraje, magazyny oraz prezentację rodzajów wolnych przestrzeni magazynowych na osi czasu.
„Inteligentne zarządzanie adresami”
Projekt
Projekt związany z automatyczną poprawą i dopasowywaniem adresów. Na celu ma automatyzację procesu zarządzania bardzo dużą ilością adresów (na obecną chwilę ponad 40 milionów), znacząco minimalizując ilość manualnych akcji ze strony administratora.
Technologie
Kotlin, Spring Boot, Spring Webflux, Kafka, PostgreSQL, Testcontainers
Zadanie
- Modernizacja oraz usprawnienie systemu zarządzającego adresami.
- Wprowadzenie automatyzacji dopasowującej adresy.
Realizacja
- Zaimportowaliśmy adresy z poprzedniego systemu i oczyściliśmy dane, np. poprzez usunięcie danych testowych, duplikatów itp.
- Zapewniliśmy asynchroniczność przetwarzania adresów.
- Stworzyliśmy algorytm do znajdowania podobnych adresów i wykorzystaliśmy go do efektywnego zarządzania adresami.
Intensywny ruch i bezpieczeństwo
Projekt
Głównym wyzwaniem projektu było zapewnienie wysokiego poziomu bezpieczeństwa oraz efektywnej komunikacji między mikroserwisami. Ze względu na dużą liczbę żądań system musi działać szybko, stabilnie oraz być bezpieczny.
Technologie
Java 17, Spring Boot, WebFlux, Spring, Cloud Gateway, Spring Security, OAuth2, AWS, Kafka, Redis, Kubernetes
Zadanie
- Obsługa intensywnego ruchu.
- Zapewnienie odpowiedniego zabezpieczenia systemu.
Realizacja
- Wdrożyliśmy uwierzytelniania wieloskładnikowe (multi-factor authentication).
- Stworzyliśmy mechanizm rotacji root-certyfikatów.
- Dodaliśmy możliwości komunikacji między klastrami zapewniającą ograniczenia przepływu danych wybranych przez klienta.
Niedostarczona Paczka
Projekt
Projekt ma na celu umożliwienie klientom zaplanowania odbioru lub wysyłki przesyłki w wybranym przez nich terminie, gdy przesyłka nie została odebrana lub doręczona z przyczyn losowych. Ewentualnie system informuje klientów, kiedy nastąpi kolejna próba doręczenia lub odbioru przesyłki.
Technologie
Kotlin, Kafka, Spring
Zadanie
Stworzenie nowego modułu w aplikacji, która umożliwia klientom zaplanowanie odbioru przesyłki w wybranym dniu i czasie (moduł napisany w Kotlinie).
Realizacja
- Zmieniliśmy rozproszoną na dwa mikroserwisy, obsługujące przypadki:
- Sytuacja, w której nie ma możliwości planowania, jest obsługiwana przez mikroserwis informujący o statusie przesyłek dla transportu lądowego.
- Sytuacja, w której jest możliwość planowania, obsługiwana jest przez drugi mikroserwis.
- Oba mikroserwisy nasłuchują na ten sam topic na Kafce oraz pobierają każdą wiadomość. W zależności od danych w środku albo ją ignorują, albo procesują.
- Przeprojektowaliśmy całą architekturę systemu w celu umożliwienia tworzenia więcej niż jednej deklaracji w ramach unikalnego identyfikatora przesyłki.
Śledzenie Zdarzeń Przesyłek
Projekt
Projekt miał na celu przepisanie i ulepszenie aplikacji służącej do śledzenia przesyłek, pobierania dokumentów, rejestracji nowych zdarzeń dotyczących przesyłki.
Technologie
Kotlin, Spring WebFlux, IBM MQ
Zadanie
Modernizacja poprzedniej wersji aplikacji, która została napisana ponad 20 lat temu i wymagała całkowitej przebudowy.
Realizacja
- Stworzyliśmy całkowicie nowy backend, który został napisany w Kotlinie w stacku reaktywnym (Spring WebFlux) z wykorzystaniem korutyn (wzorca współbieżności) do tworzenia asynchronicznych i nieblokujących operacji.
- Stworzyliśmy połączenia oraz sesje asynchronicznie, wykorzystywane przy żądaniach w celu minimalizacji czasu odpowiedzi.
- Zrobiliśmy tak, aby jedno wyszukanie przesyłki skutkowało połączeniem się z 17 kolejkami IBM MQ jednocześnie.
- Dostosowaliśmy aplikację, aby nie duplikowała rekordów jednej przesyłki.