Dachser
Dachser es uno de los principales operadores de logística y transporte de mercancías a nivel mundial. La compañia ofrece a sus clientes una amplia gama de soluciones logísticas, a través de una red propia de transporte global, con servicios de almacenaje y soluciones de IT integradas, adaptadas a cada negocio.
Equipo
El equipo se encuentra organizado en Madrid, España y Kempten y Berlín, Alemania. En el futuro se planea integrar al equipo compañeros de la nueva sede en Portugal.
Enfoque
La forma de proceder está siendo, la mayor parte del tiempo, utilizando metodologías ágiles. Sin embargo, también se necesitaron crear soluciones rápidas y eficientes para aplicaciones puntuales, de tal forma que la gestión fue más tradicional (cascada) para asegurar una respuesta rápida y efectiva a las necesidades inminentes del proyecto.
Entrega
Gestión de la creación de varios proyectos desde cero: puesta en marcha del repositorio en Bitbucket, configuración del IDE IntelliJ IDEA y realización de tareas para la finalización de cada proyecto organizados en Sprints de 2 semanas.
He realizado pruebas unitarias, pruebas de integración y pruebas de extremo a extremo con Cypress.
Posición
Desarrollador de Software
Página web
Tecnologías
- Java 17
- Spring Boot 3
- JMS
- Angular 16
- Azure
- Bitbucket
- SonarQube
- Jenkins
- Jira
- Confluence
Proyectos
Proyecto Contingency Azure
Implementación de una solución de respaldo automatizada utilizando Azure Storage Account para gestionar copias de seguridad en formato blob. Se desarrolló una Azure Function que actúa como un trigger, ejecutándose automáticamente cada vez que se carga un nuevo archivo blob en el contenedor raíz. Esta función fue diseñada para organizar los blobs en carpetas específicas, creando nuevas carpetas cuando fuera necesario y reemplazando archivos antiguos si un blob ya existía en la carpeta correspondiente.
Además, la función incorporó un mecanismo para verificar el número máximo de blobs permitidos en cada carpeta, información que se almacenaba en una tabla de la Storage Account. Cada carpeta se asoció con una sucursal (Branch), y la función comprobaba si la cantidad de blobs en la carpeta excedía el límite permitido. Si no se encontraba un límite específico para la sucursal, se aplicaba un valor por defecto, garantizando un manejo eficiente y organizado de los archivos de respaldo.
Proyecto OPC.UA
Conexión el servidor desarrollada con Node.js, para gestionar la comunicación en el entorno industrial. Este desarrollo permite publicar y suscribirse a mensajes entre máquinas OPC UA, facilitando el intercambio de datos en tiempo real.
El proyecto incluyó configurar un servidor OPC UA local e integrarlo en proyectos Java con Maven. Además de los métodos de publicación y suscripción de datos y de la configuraron de las propiedades y credenciales necesarias para establecer una comunicación segura, también se diseñaron callbacks personalizados para procesar mensajes recibidos, mejorando la monitorización y control de todos los procesos.
Proyecto Incoming Goods Service
Desarrollo de una solución para mejorar la transparencia y la comunicación del proceso de recepción de mercancías para los clientes. Se implementaron actualizaciones de estado automatizadas que se envían a los clientes a través de un servicio web cada vez que se producen cambios en campos clave.
El proyecto involucró la configuración de campos específicos en un sistema de gestión propio en Java, los cuales disparan mensajes automáticos a los clientes y al portal de logística cuando ocurren cambios de estado durante la recepción de mercancías, tales como: llegada real del camión, creación del recibo de mercancías y la finalización del proceso de almacenamiento, asegurando que solo se compartiera la información relevante para evitar la exposición no deseada de datos.
Con este enfoque, se logró enviar actualizaciones de estado en tiempo real a los clientes, mejorando la visibilidad del proceso de recepción de mercancías sin comprometer la confidencialidad de la información a nivel SSCC, que no era deseada por la mayoría de los clientes.
Proyecto SOR
Este proyecto consistía en gestionar mensajes JSON que se guardan en la Base de Datos solo si la estructura y requires de alguna plantilla de la BD coincide con la estructura y contenido (requires) del archivo JSON recibido.
Tuvimos que crear dos controllers: uno para gestionar los templates y otro para gestionar los JSON recibidos. Los Templates son JSON también.
En este proyecto se usó la base de datos H2 y Postman para hacer pruebas y comprobar que tanto los templates como los JSON se guardaban correctamente en la BD. También se usaron Test de Integracion sin Mockito, para comprobar que la consulta a los diferentes endpoints (los cuales interactuaban con la BD H2) funcionaban correctamente.
Proyecto TMS.WMS
Proyecto Automatización Dachser para automatizar high racks. Este proyecto se conecta con otro proyecto llamado DIP (Data Integration Platform) y le envía (publish) actualizaciones de estado y también se subscribe (subscribe) a un tópico (id/tema) para recibir las actualizaciones sobre el estado de los high racks. Se pensó utilizar Kafka, pero finalmente acabamos utilizando JMS de Spring.
Aunque el proyecto se creó enfocado para automatizar los high racks de los almacenes, se creó de tal forma que se pudiera utilizar en otros projectos también, con otro tipo de información. No existe ninguna cola de eventos: cuando un mensaje era publicado, si no había nadie escuchando entonces el mensaje moría y no se guardaba en ningún sitio.
Proyecto AHRL.JMS
El desarrollo del componente se realizó basándose en una herramienta llamada DIP (Data Integration Platform) para gestionar la publicación y suscripción de mensajes a través de Java Message Service (JMS). Este componente permite enviar y recibir mensajes en sistemas distribuidos mediante tópicos, metadatos, y filtros opcionales en formato SQL92, asegurando que solo se procesen los mensajes relevantes para cada suscriptor.
El proyecto incluyó la creación de métodos para publicar y suscribirse a mensajes, con opciones para configurar los parámetros de manera flexible según las necesidades del proyecto. La integración se realizó en entornos Maven, donde se utilizó como dependencia, permitiendo que las propiedades y credenciales necesarias se configuraran directamente en los proyectos.