Skip to content

Moteur d'Assignation qui décide, en temps réel, vers quelle station de préparation envoyer chaque commande.

Notifications You must be signed in to change notification settings

HassenGaaya/wms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Comment lancer l'application

Ce projet est développé avec : Java 21, Spring boot et Maven

Pour lancer l'appli, il suffit d'exécuter la commande : mvn spring-boot:run

Pour tester l'api POST order voici un exemple de Json:

POST http://localhost:8080/orders/
Content-Type: application/json

{
"orderItems": [
{
"id": 1,
"type": "FROID"
}
],
"totalWeight": 2.5,
"urgent": false
}

Choix d'architecture

Le débit de commandes (throughput) n’étant pas précisé, j’ai opté pour une implémentation synchrone simple :

la création de commande et le dispatch sont réalisés dans la même transaction ;

à la fin de l’appel HTTP, la commande est soit ASSIGNED, soit PENDING.

Dans un contexte de WMS avec des milliers de commandes par seconde, on pourrait envisager une architecture asynchrone : publication d’un événement OrderCreated dans un message broker (Kafka / RabbitMQ, etc.) ; un consommateur dédié applique la stratégie de dispatch en arrière-plan.

La logique de dispatch reste isolée dans le domaine, ce qui permettrait de la réutiliser facilement dans un scénario asynchrone.

Dette technique

  • Ajouter une validation des requêtes (Bean Validation sur les DTO : poids > 0, liste d’articles non vide, etc.).

  • Mettre en place une gestion centralisée des erreurs :

    • validation → réponses HTTP 400 avec un message clair,
    • erreurs techniques inattendues → 500 + log côté serveur.
    • utiliser un @ControllerAdvice global pour mapper les exceptions vers des réponses JSON cohérentes.
  • Mettre en place un scheduler pour réessayer automatiquement le dispatch des commandes en statut PENDING.

  • Revoir la stratégie de concurrence :

  • Envisager l'utilisation d'un verrou (lock) sur la station lors de la mise à jour de sa capacité pour éviter les race conditions quand plusieurs commandes ciblent la même station en parallèle ;

    • à challenger : pessimistic lock, optimistic lock, ou autre stratégie selon le volume réel.
  • Clarifier les règles métier pour les autres types (SEC, VRAC, panier mixte, etc.) et compléter les tests en conséquence.

  • Ajouter le endpoint dashboard.

  • Tester la stratégie de dispatching des commandes

  • Ajouter la couche securité

  • Modélisation des relations :

    • Remplacer la relation directe OrderArticle (ManyToMany) par une entité intermédiaire OrderLine :
      • Order 1 ─ * OrderLine * ─ 1 Article
      • permet de stocker les informations de ligne (quantité, poids, etc.) et de simplifier l’évolution du modèle.

About

Moteur d'Assignation qui décide, en temps réel, vers quelle station de préparation envoyer chaque commande.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages