АСУ для кофеен. Часть 4


Часть 1. Предыстория.
Часть 2. Почему выбран MODX Revolution. Серверная часть.
Часть 3. Работа с оборудованием. Примерная хронология проекта.
Часть 4. Синхронизация данных и обновление компонентов АСУ
Часть 5. Пути решения проблем при «непонятном» поведении движка/компонентов. Реализация складского учета
Часть 6. Текущие функциональные возможности АСУ — 1
Часть 7. Текущие функциональные возможности АСУ — 2.
Часть 8. Текущие показатели АСУ. Желаемые планы. Заключение

Синхронизация данных и обновление компонентов АСУ



Первоначально, пока АСУ была запущена всего в 3-х кофейнях, любые изменения осуществлялись в ручном режиме. Чем больше времени проходило, тем меньше радости возникало при необходимости скорректировать цены, добавить товар или обновить компонент. Благо, с самого начала предполагалось создание центрального сервера (ЦС) и синхронизации всех локальных серверов через него.

В первой версии синхронизатора реализовали поддержку только товаров и категорий. Опять же, в связи с последовательной реализацией сначала сделали инструмент переноса товаров в кофейни, а через некоторое время создали интерфейс для редактирования товаров. Когда это произошло, у старших менеджеров появилась первая существенная радость, так изменение меню стало удобным, а главное, быстрым. Раньше требовалось после изменения цены или добавления позиции сообщить об этом персоналу всех кофеен, дождаться, пока все сотрудники запомнят изменение, после чего проконтролировать. Теперь же стало достаточным изменить цену в одном месте в человеческом интерфейсе, после чего изменение применится везде сразу.

Это лишь один наглядный пример, как одна из возможностей подобных автоматизированных систем практически мгновенно меняет бизнес-процессы компании.

Немного технических деталей

Синхронизация работает через cron, обмен данными происходит ежеминутно. Соединение инициирует локальный сервер кофейни. Такой подход позволяет упростить процесс обмена, так как на сетевом уровне не требуется абсолютно никаких особенных настроек.

Реализованные типы обмена данных:
  • Ресурсы (документы, товары, категории)
  • Пользователи (гости, сотрудники, стандартные пользователи)
  • Состояние лицевого счета гостя
  • Дисконтные карты (включая карты сотрудников)
  • Заказы
  • Ингредиенты
  • Подарки (несколько разных объектов)
  • Задания резервного копирования
  • Служебные задания

О правилах


Все объекты упаковываются и распаковываются правилами синхронизации, принцип которых подсмотрен у процессоров. С нынешними знаниями MODX, вероятнее всего, процессоры и были бы взяты за основу. Но в 2014 году такой идеи не появилось. Тем не менее, правила позволяют как осуществлять наследование (в парадигме ООП), так и автоматически загружать нужное. За счет этого основной сервис, отвечающий за синхронизацию, ничего не знает об объектах, которые он способен обрабатывать.

В поздних версиях синхронизатора добавилась возможность работать даже с такими объектами, правил для которых нет — благодаря докрученному базовому правилу стандартные объекты, которым достаточно для работы передачи только методов toArray() и fromArray(), обрабатываются только в рамках этого правила.

Об очереди синхронизации


За необходимостью передачи измененных объектов следит плагин, срабатывающий на соответствующие события. Когда нужное событие возникает, в очередь синхронизации попадает запись о новом (или измененном) объекте с указанием его класса и уникального ID.

Важно: уникальным ID не во всех случаях является стандартный ID системы, здесь все зависит от свойств каждого отдельного объекта. Таким образом решена проблема несоответствий системных ID на разных серверах.
Самый простой пример из системных объектов MODX — имя пользователя. Пользователи (в т.ч. наследующие их гости и сотрудники) передаются с указанием только username, ID перед передачей откидывается.

В некоторых других случаях в качестве уникального ключа используется комбинация из двух полей. К примеру, для дисконтных карт это поля «тип карты» и «номер карты».

О системных заданиях


Среди системных заданий реализованы 2 действия:
  • Сброс кэша, иногда требуется после редактирования товаров;
  • Установка пакетов
Установка пакетов производится автоматически по команде с центрального сервера. Очень сильно в данном случае помогает собственный репозиторий, на который предварительно заливается обновленная версия какого-либо компонента системы.

Когда была добавлена возможность обновления пакетов централизованно, для меня это оказался почти праздник — настолько сильно к тому моменту я устал подключаться к серверу каждой кофейни по отдельности и вручную заливать новые версии.
02 декабря 2017, 21:57    Воеводский Михаил   G+  
2    303 +10

Комментарии (6)

  1. Артём Добряков 03 декабря 2017, 00:27 # 0
    Михаил, ты упоминал систему видеонаблюдения. Хотел немного подробностей, modx как с ней связан? Система распознования лиц?)) Индексация видео на закрывающие чеки? Или что?
    1. Воеводский Михаил 03 декабря 2017, 00:34 # 0
      Артем, второй вариант. В 7 части пара небольших абзацев об этом будет.
      1. g0dzilla 04 декабря 2017, 02:02 # +1
        Приложение для синхронизации сампильное? Где-нибудь можно глазом глянуть такое чудо?
        1. Воеводский Михаил 04 декабря 2017, 02:19 # 0
          Полностью под проект, верно. Есть идеи о выпуске публичного компонента «по мотивам», но на его реализацию требуется очень большое количество ресурсов. Если кто возжелает профинансировать, пусть пишет на почту.

          В публичном доступе компонента нет. Если интересуют ещё детали синхронизации, смотрите запись моего выступления в Минске в декабре 2015 г. Чуть позже прикреплю ссылку к посту.
          1. g0dzilla 07 декабря 2017, 17:33 # 0
            Михаил, когда ждать продолжения? =)
            И видео хотелось бы посмотреть
            1. Воеводский Михаил 07 декабря 2017, 17:38 # +1
              Со вчерашнего дня открыта вкладка с текстом следующей части :) Сегодня постараюсь опубликовать.
              Видео — ждем, когда у Ивана появится возможность опубликовать записи с конференции.
    Вы должны авторизоваться, чтобы оставлять комментарии.