95 lines
3.0 KiB
Markdown
95 lines
3.0 KiB
Markdown
# Séquençage TK → PS — Notes de conception
|
||
|
||
## Contexte
|
||
|
||
Process de séquençage des tâches de picking (TK) vers les postes de sortie (PS), déclenché sur les événements du cycle de vie des ordres de sortie (OS).
|
||
|
||
---
|
||
|
||
## Historique des solutions envisagées
|
||
|
||
### Solution 1 — Process isolé sur finalisation des tâches d'OS
|
||
|
||
**Principe :**
|
||
|
||
1. Process déclenché à la finalisation de la création des tâches d'un OS
|
||
|
||
2. Séquençage des tâches via OS.Line.CstAtt
|
||
|
||
3. OS marqué comme traité via OS.CstAtt = true
|
||
|
||
|
||
**Problème :** Pas assez dynamique en cas de recréation de tâches suite à des imprévus dans le WMS.
|
||
|
||
---
|
||
|
||
### Solution 2 — Calcul dans le workflow stacker_crane
|
||
|
||
**Principe :** Intégrer le tri directement dans le WF Galileo_StackerCraneSearch_PR / StackerCrane_SortTasks_PR, avec recalcul complet du pool de tâches à chaque exécution. Supprime le besoin de OS.Line.CstAtt et OS.CstAtt
|
||
|
||
**Problème :** Wallah c’est compliqué
|
||
|
||
`.Where(t=>t.CustomAttribute <= t.OutboundOrder.SelectMany(o=>o.Tasks).Where(ot.ProcessType == XXX)).OrderBy(ot=>ot.CustomAttribute).FirstOrDefault()))`
|
||
|
||
---
|
||
|
||
### Solution 3 — Solution 1 transformée en job
|
||
|
||
**Principe :** Reprendre le process de la solution 1 sous forme de job planifié, en excluant les tâches de picking en cours.
|
||
|
||
**Problème :** Pas assez réactif par rapport à la cadence de recherche d'ordre des TK.
|
||
|
||
---
|
||
|
||
### Solution 4 — Process événementiel (retenu)
|
||
|
||
**Principe :** Reprendre la solution 1 et la déclencher sur deux événements :
|
||
|
||
- TaskCreatedEvent
|
||
|
||
- Vérifier que la tâche est de type picking et que l'OS associé est au statut Released
|
||
|
||
- Si oui :
|
||
|
||
1. Passer OS.CstAtt = false pour bloquer la prise en charge par stacker_crane
|
||
|
||
2. Récupérer l'ensemble des tâches de l'OS
|
||
|
||
3. Filtrer sur les tâches en attente (exclure les tâches en cours)
|
||
|
||
4. Appliquer l'algorithme de séquençage (cf. section suivante)
|
||
|
||
5. Repasser OS.CstAtt = true
|
||
|
||
- OutboundOrderReleasedEvent
|
||
|
||
- Passer OS.CstAtt = false pour bloquer la prise en charge par stacker_crane
|
||
|
||
- Peut arriver si OS arrêté puis relancé
|
||
|
||
- Appliquer directement l'algorithme de séquençage sur les tâches
|
||
|
||
- Passer OS.CstAtt = true
|
||
|
||
|
||
**Avantages :**
|
||
|
||
- Plus simple à développer
|
||
|
||
- Isolée et découplée
|
||
|
||
- Flexible et réactive
|
||
|
||
|
||
---
|
||
|
||
## Algorithme de séquençage (TK → PS)
|
||
|
||
- Si la table TP est vide → priorité à la tâche de picking négatif (1 palette)
|
||
|
||
- Vérification de la capacité PK/BUFFER _(déjà custom_ [https://easywmsfrance.atlassian.net/browse/LIM-61](https://easywmsfrance.atlassian.net/browse/LIM-61) _— à modifier)_ :
|
||
|
||
- Prendre en compte les palettes sources ayant des tâches de picking pour plusieurs PK
|
||
_(ex. : une palette peut enchaîner PK1 → ES_5 → PK2)_
|
||
|
||
- Paramètre MAX_NB_BUFFER_PK : nombre de buffers disponibles par PK — **valeur par défaut : 3** |