5.8 KiB
5.8 KiB
🚚 CONCEPT: LIVRAISON
📌 Vue d'ensemble
Le concept LIVRAISON gère la logistique et le suivi des livraisons de matériel sur les chantiers. Il couvre le transport, le suivi en temps réel, et la gestion des transporteurs.
Importance: ⭐⭐⭐ (Concept important)
🗂️ Fichiers concernés
Entités JPA (domain/core/entity/)
| Fichier | Description | Lignes |
|---|---|---|
LivraisonMateriel.java |
Entité principale de livraison | ~200 |
StatutLivraison.java |
Enum statuts (PLANIFIEE, EN_PREPARATION, EN_TRANSIT, LIVREE, ANNULEE, RETARDEE) | ~30 |
ModeLivraison.java |
Enum modes de livraison | ~25 |
TypeTransport.java |
Enum types de transport | ~20 |
Services (application/service/)
| Fichier | Description |
|---|---|
LivraisonMaterielService.java |
Service métier pour les livraisons |
📊 Modèle de données
Entité LivraisonMateriel
@Entity
@Table(name = "livraisons_materiel")
public class LivraisonMateriel extends PanacheEntityBase {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@ManyToOne
@JoinColumn(name = "reservation_id")
private ReservationMateriel reservation;
@Column(name = "date_livraison_prevue", nullable = false)
private LocalDateTime dateLivraisonPrevue;
@Column(name = "date_livraison_reelle")
private LocalDateTime dateLivraisonReelle;
@Enumerated(EnumType.STRING)
@Column(name = "statut", nullable = false)
private StatutLivraison statut = StatutLivraison.PLANIFIEE;
@Column(name = "transporteur", length = 200)
private String transporteur;
@Column(name = "numero_suivi", length = 100)
private String numeroSuivi;
@Enumerated(EnumType.STRING)
@Column(name = "mode_livraison")
private ModeLivraison modeLivraison;
@Column(name = "adresse_livraison", length = 500)
private String adresseLivraison;
@Column(name = "cout_livraison", precision = 10, scale = 2)
private BigDecimal coutLivraison;
}
Enum StatutLivraison
public enum StatutLivraison {
PLANIFIEE, // Livraison planifiée
EN_PREPARATION, // En cours de préparation
EN_TRANSIT, // En transit
LIVREE, // Livrée avec succès
ANNULEE, // Livraison annulée
RETARDEE // Livraison retardée
}
Champs principaux
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
id |
UUID | Oui | Identifiant unique |
reservation |
ReservationMateriel | Non | Réservation associée |
dateLivraisonPrevue |
LocalDateTime | Oui | Date/heure prévue |
dateLivraisonReelle |
LocalDateTime | Non | Date/heure réelle |
statut |
StatutLivraison | Oui | Statut actuel |
transporteur |
String(200) | Non | Nom du transporteur |
numeroSuivi |
String(100) | Non | Numéro de suivi |
modeLivraison |
ModeLivraison | Non | Mode de livraison |
adresseLivraison |
String(500) | Non | Adresse de livraison |
coutLivraison |
BigDecimal | Non | Coût de la livraison |
🔌 API REST
Base URL: /api/v1/livraisons
Endpoints disponibles
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /api/v1/livraisons |
Liste toutes les livraisons |
| GET | /api/v1/livraisons/{id} |
Détails d'une livraison |
| POST | /api/v1/livraisons |
Créer une livraison |
| PUT | /api/v1/livraisons/{id} |
Modifier une livraison |
| PUT | /api/v1/livraisons/{id}/statut |
Changer le statut |
| GET | /api/v1/livraisons/en-cours |
Livraisons en cours |
| GET | /api/v1/livraisons/retardees |
Livraisons retardées |
| GET | /api/v1/livraisons/stats |
Statistiques livraisons |
💻 Exemples d'utilisation
1. Créer une livraison
curl -X POST http://localhost:8080/api/v1/livraisons \
-H "Content-Type: application/json" \
-d '{
"reservationId": "reservation-uuid",
"dateLivraisonPrevue": "2025-10-05T09:00:00",
"transporteur": "Transport Express",
"modeLivraison": "STANDARD",
"adresseLivraison": "123 Rue du Chantier, 75001 Paris"
}'
2. Mettre à jour le statut
curl -X PUT http://localhost:8080/api/v1/livraisons/{id}/statut \
-H "Content-Type: application/json" \
-d '{
"statut": "EN_TRANSIT",
"numeroSuivi": "TRACK123456"
}'
3. Livraisons en cours
curl -X GET http://localhost:8080/api/v1/livraisons/en-cours
Réponse:
[
{
"id": "uuid",
"statut": "EN_TRANSIT",
"transporteur": "Transport Express",
"numeroSuivi": "TRACK123456",
"dateLivraisonPrevue": "2025-10-05T09:00:00",
"adresseLivraison": "123 Rue du Chantier"
}
]
🔧 Services métier
LivraisonMaterielService
Méthodes principales:
create(LivraisonDTO dto)- Créer une livraisonchangerStatut(UUID id, StatutLivraison statut)- Changer le statutfindEnCours()- Livraisons en coursfindRetardees()- Livraisons retardéescalculerDelai(UUID id)- Calculer le délaigetStatistics()- Statistiques
📈 Relations avec autres concepts
- RESERVATION_MATERIEL ⬅️ Une livraison peut être liée à une réservation
- CHANTIER ⬅️ Une livraison est destinée à un chantier
- MATERIEL ⬅️ Une livraison concerne du matériel
✅ Validations
- ✅ Date de livraison prévue obligatoire
- ✅ Adresse de livraison valide
- ✅ Statut cohérent avec les transitions
- ✅ Coût de livraison positif
📚 Références
Dernière mise à jour: 2025-09-30
Version: 1.0
Auteur: Documentation BTPXpress