Model zapasu
Cała magazynowa połowa Stockly stoi na jednym kształcie wiersza. Po jego zrozumieniu lista endpointów przestaje wyglądać na przypadkową.
Jedna ilość, jedno miejsce
Dział zatytułowany „Jedna ilość, jedno miejsce”Ilość mieszka w p2lab_stockly_warehouse_stock, a kluczem jest magazyn + bin + produkt:
| Pole | Znaczenie |
|---|---|
warehouseId | który węzeł to trzyma |
binLocationId | które miejsce w tym węźle |
productId | który artykuł |
stock | ile fizycznie tam stoi |
reserved | ile z tego zamówienia już sobie przypisały |
Zapas bez miejsca nie istnieje. Towar położony „nigdzie” trafia na bin unassigned danego
magazynu, na prawdziwy wiersz z prawdziwym identyfikatorem, tworzony przy pierwszym użyciu. Każde
wywołanie API z binLocationId: null rozwiązuje ten bin, zanim cokolwiek zrobi. Dlatego zdjęcie
towaru „bez binu” bierze go dokładnie stamtąd, gdzie położyło go dodanie z null.
reserved to bufor pochodny. Prawdą o tym, co przypisało zamówienie, jest
p2lab_stockly_reservation_line — jeden wiersz na pozycję zamówienia i miejsce. Zapis reserved bez
zapisu linii rozsuwa te dwie liczby, a kontrola spójności ma na to osobne znalezisko.
Role binów
Dział zatytułowany „Role binów”Bin bez roli to zwykły bin magazynowy, jedyny, w który celuje odkładanie towaru. Pięć ról poniżej to bufory, po najwyżej jednym każdego rodzaju na magazyn:
| Rola | Trzyma | Liczy się jako dostępne |
|---|---|---|
receiving | towar z przyjęcia zamówienia zakupu, przed odłożeniem | tak — jest w budynku |
quarantine | towar przyjęty pod kontrolę jakości, czekający na ocenę | nie |
transit | towar skompletowany do wysyłki międzymagazynowej | nie |
returns | towar wrócony od klienta, czekający na decyzję | nie |
unassigned | zapas księgowy, który nigdy nie został fizycznie położony | tak |
Jeden z nich jest zamknięty dla zwykłych wywołań. Bin transit napełnia się, gdy przewóz wyrusza, i
opróżnia, gdy dojedzie albo zostanie anulowany; operacja add, remove czy move wskazująca go jako
którykolwiek koniec jest odrzucana — ręcznie dołożona sztuka zablokowałaby przewóz, który uważa ten
towar za swój.
returns celowo nie jest tą samą pulą co quarantine, a dla integracji różnica jest istotna: towaru
w returns nie da się sprzedać. Nasłuchujący, który potraktuje przyjęty zwrot jako „zapas
wrócił”, doprowadzi do nadsprzedaży; dostępność zmienia się dopiero wtedy, gdy ktoś zdecyduje o
zwrocie i odeśle sztuki na półkę.
Co z czego wynika
Dział zatytułowany „Co z czego wynika”product.stock = SUMA(stock - reserved) po każdym binie, którego rola liczy się jako dostępnaproduct.stock jest wynikiem. Stockly przelicza go po każdej operacji i nadpisuje to, co tam zastanie.
Zapis tego pola z zewnątrz nie jest ścieżką integracji; to awaria, którą wyłapuje
strażnik obcych zapisów.
Rejestr ruchów działa odwrotnie: p2lab_stockly_warehouse_stock_movement jest tylko do
dopisywania. Nic nie edytuje istniejącego wiersza; korekta to nowy wiersz z własnym typem. To
właśnie sprawia, że historia potrafi odpowiedzieć: pytanie, dlaczego w danym binie leżą cztery sztuki,
ma odpowiedź zbudowaną z wierszy, a nie z bieżącej wartości.
Ruch niesie oba końce i oba stany:
| Grupa | Pola |
|---|---|
| Co | type, quantity, productId, batchId, lotId, batchNumber, expiresAt |
| Skąd | sourceWarehouseId, sourceBinLocationId, sourceBinLpCode |
| Dokąd | targetWarehouseId, targetBinLocationId, targetBinLpCode |
| Przed / po | sourceStockBefore, sourceStockAfter, sourceReservedBefore, sourceReservedAfter, targetStockBefore, targetStockAfter |
| Dlaczego | comment, event, reasonCode, meta, userId, userName |
| Jaki dokument | orderId, orderLineItemId, purchaseOrderId, purchaseOrderItemId, transferId, operationId, importId |
Kierunek siedzi w końcach, nigdy w znaku: przyjęcie nie ma źródła, wydanie nie ma celu, przewóz ma
oba. quantity jest zawsze dodatnie.
Partie, loty, umiejscowienia i nośniki
Dział zatytułowany „Partie, loty, umiejscowienia i nośniki”Cztery nazwy, które brzmią podobnie, a odpowiadają na różne pytania:
| Encja | Odpowiada na |
|---|---|
p2lab_stockly_warehouse_stock_batch | ile z ilości w tym binie ma który numer partii i termin — prawda operacyjna, przeciw której działa wydanie |
p2lab_stockly_stock_lot | tożsamość lotu w całej sieci |
p2lab_stockly_stock_lot_placement | gdzie ten lot obecnie leży i na jakim nośniku |
p2lab_stockly_handling_unit | nośnik (LP): paleta albo karton, na którym towar jeździ i który może być włożony w inny |
Partie decydują o tym, co konsumuje wydanie. Loty i umiejscowienia to lustro prowadzone obok nich, dzięki któremu jeden lot da się prześledzić przez biny i magazyny jednym zapytaniem. Operacja zapisuje jedno i drugie; od wywołującego nikt tego nie wymaga.
Encje, na których opiera się ten model
Dział zatytułowany „Encje, na których opiera się ten model”| Encja | Trzyma |
|---|---|
p2lab_stockly_warehouse | jeden węzeł: jego kod i polityki |
p2lab_stockly_warehouse_bin_location | jedno miejsce: kod, współrzędne, pojemność, rola |
p2lab_stockly_warehouse_stock | wiersz ilości opisany wyżej |
p2lab_stockly_warehouse_stock_batch | podział tego wiersza na partie |
p2lab_stockly_warehouse_stock_movement | rejestr ruchów |
p2lab_stockly_handling_unit | nośniki |
p2lab_stockly_stock_lot / …_stock_lot_placement | tożsamość lotu i miejsce, w którym leży |
p2lab_stockly_reservation_line | co przypisało zamówienie, per miejsce |
p2lab_stockly_order_allocation | co jest zamówieniu należne i skąd jest brane |
p2lab_stockly_external_stock_incident | obce zapisy product.stock, które strażnik złapał |
To zwykłe encje Shopware, więc /api/search/p2lab-stockly-warehouse-stock i pokrewne działają
dokładnie tak, jak wszędzie indziej.
- Jak położyć zapas w binie — cztery endpointy zapisu
- Odczyt zapasu — zapytania, które już istnieją
- Historia ruchów — ten sam rejestr oczami operatora