Интересной историей поделились разработчики из Exzotron Technology, когда реализовали пилотный проект для логистических центров одного из маркетплейсов. Решаем здесь стандартную проблему – кражу топлива с помощью новых подходов. Проект показал, что иногда стоит принципиально изменить систему, а не улучшать старое. Здесь наглядно видно, что локальные оптимизации не дали бы нужного эффекта.

Для начала давайте разберемся, как все устроено.
Дано: выдача топлива происходит по QR-кодам. Процесс автоматизирован, и вся инфа передается через терминалы спутникового мониторинга на автомобилях. Но недобросовестные водители смекнули, что можно использовать один код на нескольких заправках одновременно. Как итог – несанкционированный расход топлива.

Очевидная проблема: каждый терминал автономно принимал решение о выдаче топлива. Поэтому насущная задача – настроить централизованную онлайн-выдачу топлива.

Решение: облачный «диспетчер» вместо локальной логики

Выбран путь радикального рефакторинга с выносом всей логики в облако вместо терминалов.

Инженеры разработали ПО, которое позволяет терминалам спутникового мониторинга передавать данные на сервер в режиме онлайн. Теперь принятие решения о выдаче топлива происходит не на конкретном терминале, а в облаке.

Модуль настроек алгоритма, в скриптах прописана основная работа
Модуль настроек алгоритма, в скриптах прописана основная работа

Чтобы перенести принятие решения в облако, пришлось полностью изменить логику работы алгоритма выдачи топлива. Для этого разработали собственный протокол связи с сервером, который позволяет экономить трафик для ускорения обмена данными.

Более того, выдача топлива начинается после того, как со стороны сервера придет подтверждение о доступном лимите и отсутствии одновременной выдачи. Самое важное – как только начинается выдача топлива, на стороне сервера блокируется выдача по данному QR-коду на 30 минут.

Топливный модуль
Топливный модуль

Как снизить скорость принятия решения сервером до 0,3 секунды

Разберемся в программировании: решение состоит из основного топливного скрипта и ряда вспомогательных скриптов, которые расширяют функционал.

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

Одним из ключевых компонентов является скрипт Online, который отвечает за установление и поддержание стабильного соединения с сервером. Это достигается за счёт периодических запросов на проверку доступности сервера, что гарантирует непрерывность работы системы.

Алгоритм онлайн, удерживает связь с сервером, мониторит состояние считывателя, передаёт номер QR или карты, принимает лимиты от сервера
Алгоритм онлайн, удерживает связь с сервером, мониторит состояние считывателя, передаёт номер QR или карты, принимает лимиты от сервера

Основная задача данного скрипта заключается в оперативном запросе данных по уникальному идентификатору iButton и мгновенной загрузке лимитов на терминал.

Благодаря оптимизированному собственному протоколу передачи данных, удалось достичь скорости отклика менее 0,3 секунды, что обеспечивает высокий уровень комфорта для пользователей и минимизирует задержки в работе.

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

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

Обработчик протокола AZT (ТОПАЗ, НАРА, СЕВЕР)
Обработчик протокола AZT (ТОПАЗ, НАРА, СЕВЕР)
Алгоритм печати чеков
Алгоритм печати чеков

Что получилось и куда двигаемся дальше

Перенос логики в облако ускорил процесс выдачи топлива, обеспечил контроль и гибкость для дальнейшего совершенствования системы. Уникальность системы – в том, что идентификация получателя и решение о выделении топлива происходит теперь на сервере.

Решение находится в стадии «пилота», но уже отмечено исключение ошибок и махинаций с выдачей топлива по QR-кодам.

Самый очевидный результат для компании – экономия топлива. Но еще здесь снижаются трудозатраты службы безопасности и экономистов на разбор спорных и проблемных ситуаций.

Дальше можно настроить передачу данных о состоянии топливораздаточной колонки: положение пистолета, активность налива, текущая доза. Представьте, если это позволит создать онлайн-операторскую.

Из оборудования использовали: терминал спутникового мониторинга с функцией hub, топливораздаточный комплекс и считыватель QR-кодов. 

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


  1. Isiirk
    11.06.2025 13:46

    Как решён вопрос отсутствия связи/лежащего облака и т.д.


  1. Vdm_ro
    11.06.2025 13:46

    Похоже на бред недавно нанятого эффективного менеджера...

    Из за перекопанных дорог/пробок пришлось дать кругаля - сиди на заправке без топлива... доставка сорвана.

    Приехал к аэропорту - а там борт №1, связи нет, разрешения на топливо нет - доставка сорвана.

    Вы еще уборщице воду для мытья полов выдавайте согласно регламента по метражу следующего убираемого помещения... тут коридор маленький - литр на руки, потом вылила прошлое - приходи еще 2 литра получи... И штраф если тряпкой намоченной в прошлой воде другое помещение мыть начала - нецелевое расходование средств!


    1. saege5b
      11.06.2025 13:46

      При БПЛА угрозе, в Иванове отключают мобильный интернет глобально, во всём городе разом.


  1. Kamil_GR
    11.06.2025 13:46

    Архитектура подобных систем отработана десятками лет работы процессингоовых компаний предлагающих топливо по топливным картам. Причем с миллионами клиентов и тысячами АЗС. Лимиты, топливные кошельки, статус трк (для онлайн заправки), и сотни неочевидных нюансов. Например переход дтз-дтл, брендированное топливо, возврат не вошедшего топлива в бак и т.д..