Číselné řady objednávek

Číselné řady objednávek

Zkopírovat odkaz na sekciKonfigurace číselných řad

Konfigurace formátu číselné řady se provádí v rámci rozšíření OrderFeature pomocí elementu numberExpression, více viz konfigurace objednávek. Číselná řada začíná vždy od 0. Pokud je nutné začít od jiného čísla je nutné pro danou sekvenci upravit hodnotu number v tabulce T_EDEESHOP_NUMBER_SEQ.

Zkopírovat odkaz na sekciZměna číselné řady.

V případě, že je nutné změnit již existující číselnou řadu, je nutné provést následující kroky:

  1. Změnit hodnotu sequenceNumber pro poslední záznam v tabulce T_EDEESHOP_SHOPPING_CART nebo T_ESHOP_ORDER pro danou sekvenci.
  2. Pokud žádný záznam v tabulce T_EDEESHOP_SHOPPING_CART nebo T_ESHOP_ORDER neexistuje, tak upravit hodnotu number v tabulce T_EDEESHOP_NUMBER_SEQ.
  3. Restart EdeeCms.

Pokud je to možné, tak lze založit novou sekvenci a nastavit počáteční hodnotu na požadované číslo.

Zkopírovat odkaz na sekciPřiřazení čísla objednávky

Přiřazení čísla objednávky se provádí v první fázi vytvoření objednávky.

Přiřazení čísla zajišťuje služba com.fg.cps.eshop.order.service.OrderNumberProvider. Defaultní implementace generuje kód pomocí CodeGenerator#generateSequenceCode podle nastavení OrderFeatureConfig#getOrderNumberExpression. Kód se generuje na základě zadaného výrazu, ve kterém musí být obsaženo pořadové číslo. Pořadové číslo získává služba NumberSequenceProvider, která si rezervuje celou sekvenci čísel v paměti. Pokud dojde k vyčerpání čísel, automaticky si rezervuje další řadu. Tento princip funguje i v případě víceuzlové architektury, kde si každý uzel postupně rezervuje své řady.

Výhodou tohoto řešení je schopnost systému poskytovat mnohem více čísel objednávek a minimalizace výskytu deadlocků na databázi.

Nevýhody zahrnují:

  1. Číselná řada je udržována v paměti, a proto je nutné ji inicializovat, tj. inicializovat poslední použité číslo pro danou sekvenci a uzel (LastUsedSequenceNumberInitiator).
  2. V případě víceuzlové architektury (tj. kdy projekt běží na více serverech) může dojít k odlišné frekvenci získávání kódů na různých uzlech, a tedy kódy nemusí tvořit souvislou řadu (toto řešení není ideální pro faktury, ale standardně by nemělo vadit pro objednávky).