Архітектура сервісів Base2Base

Архітектура сервісів Base2Base побудована на технологіях Microsoft .Net і є доволі типовою. Серверна частина складається з трьох головних незалежних систем - ShopserverTrade Control Center та Trade Control Utility. Кожна з цих систем є абсолютно незалежною. Основний обмін між системами відбувається в реальному часі через шину подій.
Архітектура сервісів Base2Base

Діаграма дещо спрощено відображає внутрішню архітектуру системи. Розглянемо, як все працює.

Хмарні сервіси

Розташовані на серверах в датацентрах (по модному - в хмарі). Працюють 24/7, постійно розвиваються, вдосконалюються та оновлюються

Shopserver

Фактично, центральною системою є Shopserver (касовий сервер). Це інформаційний хаб, який роздає касам потрібні для роботи дані (товарні залишки та ціни, податкові ставки, права касира та інше), та який отримує первинні документи (замовлення, чеки, повернення) від фронт-офісних застосунків, та зберігає їх в своїй базі даних. Як тільки Shopserver отримав чек, він публікує повідомлення із цим чеком в шину подій, і всі інші системи, яким такий чек цікавий, отримують його та обробляють в межах свого обмеженого контексту. Після обробки чека зацікавлені системи публікують результат обробки в шину подій, результат читає Shopserver, та зберігає в базі даних.

На сайті в розділі Контейнерів документів можна побачити результат обробки (потрібно бути авторизованим користувачем).

Ідемпотентність

Один і той самий чек може бути відправлений до касового сервера декілька разів. Касовий сервер ніяк не заважає цьому процесу. Задача інших систем, які читають чеки з касового сервера забезпечити ідемпотентність документів в своїй базі даних. Для цього кожен чек має свій унікальний GUID (див. опис формату чека), і якщо облікова система отримує чек з GUID, який вже присутній в її базі, то саме облікова система має прийняти рішення, що робити з таким чеком. TCU та TCC, наприклад, такі чеки ігнорують, про що повідомляють касовий сервер.

Контейнер реплікації

Облікова система вивантажує на касовий сервер контейнер реплікації за допомогою методу /api/v1/AccountingSystem/SendReplication. Контейнер реплікації вміщує дані по довідниках та товарних залишках всіх торгових точок, Реплікація може відбуватись у двох режимах. Початкова реплікація потрібна для повного перезавантаження стану системи. Всі попередні дані по довідниках та залишках будуть видалені і записані нові. Другий режим - поточна реплікація, коли на сервер передається пакет лише змінених даних з моменту минулої реплікації.

Зовнішні системи та застосунки

Клієнт Base2Base може використовувати облікову систему Trade Control Utility, або будь яку іншу. Trade Control Utility взаємодіє з касовим сервером на рівні шини подій і не потребує додаткової інтеграції. Зовнішня облікова система інтегрується через відповідний API. Так само і фронт-офісні застосунки, наприклад, інтернет-магазин, можуть бути будь якими, головне, щоб вони реалізували API касового робочого місця. Деталізований посібник розробника з інтеграції викладений в окремій статті.

Trade Control Center

CRM система для роботи з покупцями роздрібної торгівлі. Головна мета - підвищення лояльності покупців. Надає бонусний кешбек, маркетингові акції та інструменти. Взаємодіє з касовим робочим місцем в реальному часі через API, яке надає методи пошуку покупця за його номером телефону, актуалізації нового покупця через код СМС, нараховує бонуси за програмою лояльності на чек, та надає можливість сплачувати чек накопиченими бонусами.

Trade Control Utility

Облікова система, яка реалізує повний цикл обліку за первинними документами (накладні, акти переобліку, списання та інше). За складністю та обсягами робіт - найбільша система, працює з окремою базою даних для кожної компанії. Повністю інтегрована в робочий цикл і готова до використання одразу.

Інші сервіси

Деякі допоміжні сервіси не представлені на діаграмі з метою спрощення та простоти розуміння.
 

Каталог товарів

Використання сервісу товарних найменувань дуже спрощує початкове введення товарного довідника під час запуску системи. База товарних найменувань вміщує величезну кількість позицій найменувань зі штрих-кодами, та постійно поповнюється.

Сервіс історичних змін

Trade Control Utility та Trade Control Center використовуються одночасно великою кількістю співробітників. Іноді буває важливо розуміти, хто і коли вносив зміни в систему. Наприклад, хто і коли змінив назву товару, або переніс його до іншої групи та інше. За це відповідає Data Changes Service.

Сервіс білінгу

Відповідає за роботу з білінговими рахунками компанії. Оскільки платня за використання сервісів стягується під час проведення першого документа на конкретному робочому місці з цю добу, потрібен сервіс, який відслідковує ці речи та надає детальні звіти по використанню ресурсів та коштів.

Фронт-офісні застосунки

Це застосунки, які взаємодіють безпосередньо з покупцем. Зупинимось на найбільш цікавих моментах.


Каса

Історично першим таким застосунком був Shopdesk - застосунок робочого місця касира. Shopdesk отримує від касового сервера всі потрібні дані для саме цієї каси на цій торговій точці. Це перелік товарів, товарні залишки та ціни, податкові ставки, права касира та багато чого іншого. Дані Shopdesk отримує у вигляді контейнера реплікації. Касир працює, проводить чеки, оформлює повернення, і як результат  - Shopdesk передає на сервер сгенеровані документи. Shopserver їх приймає, зберігає, та публікує у шину подій.
Варто зазначити, що будь який касовий застосунок іншого виробника також може працювати через API касового сервера.


Інтернет-магазин

Клієнт окрім каси може придбати товар через інтернет-магазин. І для Shopserver інтернет-магазин - це та сама каса. Технічно це реалізується по іншому, але набір функцій рівно той самий. Додаємо товари до замовлення, оплачуємо і отримуємо чек. Який відправляється до касового сервера. Знову ж таки, веб-сайт може бути будь-яким, головне, щоб він реалізовував потрібний набір API-методів контролера Bridge

QR Меню

Зазвичай QR меню є замінниками меню паперового. Але якщо додати можливість оформлювати замовлення, та ще й сплачувати його, отримуємо фактично той самий інтернет-магазин, але з деякою специфікою (вказування столику в закладі, відстеження виготовлення замовлення в реальному часі та інше). Але маємо рівно той самий набір методів для обміну. Додаток отримує контейнер реплікації з товарами та цінами, а до касового сервера відправляє або попереднє замовлення, або вже сплачений чек.

Мобільний додаток

Фактично дублює веб-сайт інтернет-магазину, але як "рідний" для платформи додаток, може реалізовувати більш зручний інтерфейс. 

Взаємодія з CRM Trade Control Center

Авторизація покупця на касі (на сайті чи QR меню, все умовно будемо називати касою) відбувається за допомогою API Trade Control Center (TCC). Саме TCC зберігає базу покупців, історії їх купівель, нарахувань бонусів та інше. Коли формується чек на касі, каса відправляє вміст корзини до Trade Control Center, і TCC повертає всі винагороди, які повинен отримати покупець. Це, перш за все, бонусний кешбек. По друге, завжди працюють якісь маркетингові акції (їх можуть бути десятки й сотні), і за виконання певних умов, наприклад, за купівлю певної кількості товару, покупець може отримати додаткові бонуси, або навіть пряму знижку на ціну. Варіантів подарунків може бути багато. Всі отримані подарунки фіксуються в чекові і надходять до касового сервера. Потім TCC обробляє чек, та нараховує бонуси покупцю.

Бек-офіс

Внутрішній офіс, де відбуваються всі бізнес-процеси, потрібні для нормального функціонування компанії.

Trade Control Utility

Застосунок співробітника компанії, який веде внутрішній облік, встановлюється на машині користувача як Windows-додаток. Робочих місць може бути безліч, це нічим не обмежується. Автоматично оновлюється під час виходу нових версій.

Trade Control Center

Застосунок співробітника, який займається маркетингом, програмою лояльності чи роботою з покупцями (наприклад, оператор кол-центру). Доступ налаштовується за допомогою прав.


Andriy Kravchenko

Admin, Writer, File Uploader

15.12.2024 23:58:26

An error has occurred. This application may no longer respond until reloaded. An unhandled exception has occurred. See browser dev tools for details.