Кухонные мониторы KDS.v2

Настройка в Юпитере

  • В настройках торгового зала включить опцию "Работа с кухонными мониторами KDS.v2"
  • Задать "ID торговой точки в ЛК" (значение могут сказать Святослав или Маргарита)
  • Задать "Адрес сервера KDS.v2". Например http://127.0.0.1

image-1768322499407.png

  • Сформировать отчет Администратор системы / Монитор повара / Места приготовления KDS.v2. Отчет покажет токены мест приготовления, которые нужно будет указать в настройках кухонных мониторов. Также этот отчет нужно передать Маргарите для авторизации токенов. Это можно сделать сохранив отчет через кнопку "Печать" / "В файл".

image-1768325083344.png

  • Настроить автозапуск web-сервера Юпитер 11.7. Пример команды запуска сервера: c:\JP\11.7\Bin\domino8.exe c:\JP\11.7\JUPITER\PROJECT\JUPITER /SERVER LISTEN=http://192.168.10.13:7788/ DBSERVER=JUPITER SCHEME=SSMOLOST USERNAME=HTTP TOKEN=1 RUNONCE=SSMOLOST_HTTP

HTTP API

Юпитер и KDS.v2 обмениваются HTTP запросами. Юпитер в KDS.v2 передает информацию о заказах, которые нужно приготовить. KDS.v2 передает в Юпитер команды на изменение статуса заказа, когда заказ приготовлен.

Все запросы должен иметь заголовок x-api-key в котором указан секретный токен авторизации.

Передача заказа в KDS.v2

POST {Адрес сервера KDS.v2}/order

При каждой отправке (печати) заказа в работу, Юпитер формирует и передаёт информацию в KDS.v2. В KDS.v2 передаются все те же данные, что и выводятся на печать. Если заказ будет печататься несколько раз, например, после его изменения, то он также будет несколько раз передаваться в KDS.v2. Отмена печати (удаление) также передаётся в KDS.v2, удалённые строки отмечаются специальным признаком.

Запрос отправляется на адрес заданный в настройках + "/order". Таймаут ожидания ответа 3 секунды.

В ответ на запрос Юпитер ожидает получить любой ответ с HTTP-статусом 200. Любой иной HTTP-статус считается ошибкой. Юпитер информирует пользователя об ошибках. Дополнительной обработки ошибок на данный момент нет.

POST запрос:

{
  "order_uid": "5:3:0:869861", // Уникальный идентификатор заказа в Юпитере
  "number": 7, // Номер сборки
  "label": "Должанская Ксения", // Заголовок заказа. Если заказ на доставку, то передается адрес, иначе имя сотрудника, который открыл заказ.
  "source": "Телефон", // Источника заказа
  "type": "Обычный заказ", // Вид заказа
  "cooking_time": 44, // Время на приготовление всего заказа по нормативу. Кол-во минут.
  "persons": 1, // Количество гостей
  "lines": [ // Массив строк заказа
    {
      "uid": "6:3:0:5129161", // Уникальный идентификатор строки заказа
      "item_id": "3:3:0:3682", // Уникальный идентификатор товара
      "item_name": "ЧИЗКЕЙК", // Название товара
      "qty": 1, // Количество товара
      "deleted": false, // Признак удаления. Признак распространяется также на все инструкции и модификаторы строки.
      "monitor_id": "52a3a7d76860ed04655aa561f85a3865", // Уникальный идентификатор кухонного монитора
      "monitor_name": "Горячий", // Название места расположнеия принтера (монитора)
      "instructions": [ // Массив инструкций по строке заказа
        {
          "name": "Готовить сразу", // Название инструкции
          "monitor_id": "52a3a7d76860ed04655aa561f85a3865", // Уникальный идентификатор кухонного монитора
          "monitor_name": "Горячий" // Название места расположнеия принтера (монитора)
        }
      ]
    },
    {
      "uid": "6:3:0:5129162",
      "item_id": "3:3:0:6061",
      "item_name": "ГОВЯДИНА С  ЛАПШОЙ",
      "qty": 1,
      "deleted": false,
      "monitor_id": "52a3a7d76860ed04655aa561f85a3865",
      "monitor_name": "Горячий",
      "modifiers": [ // Массив модификаторов по строке заказа
        {
          "uid": "6:3:0:5129163", // Уникальный идентификатор строки модификатора
          "item_id": "3:3:0:6021", // Уникальный идентификатор товара-модификатора
          "item_name": "ПШЕНИЧНАЯ", // Название товара-модификатора
          "qty": 2, // Количество модификатора (на единицу товара)
          "monitor_id": "52a3a7d76860ed04655aa561f85a3865", // Уникальный идентификатор кухонного монитора
          "monitor_name": "Горячий" // Название места расположнеия принтера (монитора)
        }
      ]
    },
    {
      "uid": "6:3:0:5129164",
      "item_id": "3:3:0:3687",
      "item_name": "КОКА-КОЛА 200МЛ",
      "qty": 1,
      "deleted": false,
      "monitor_id": "52a3a7d76860ed04655aa561f85a3865",
      "monitor_name": "Горячий"
    }
  ]
}

Изменение статуса заказа в Юпитере

POST {Адрес сервера Юпитера 11.7}/kds/v2/set_order_status

После того как заказ полностью приготовлен и собран, KDS.v2 передает в Юпитер команду на изменение статуса. Получив запрос, Юпитер изменят статуса заказа на "Готов к передачи клиенту". При необходимости статус заказа передается на сайт\приложение\агрегаторы.

POST запрос:

{
    "order_uid": "5:3:0:869861", // Идентификатор заказа у которого нужно изменить статус
    "status": 1 // Идентификатор статуса. Всегда 1
}

Ответ успех:

{
    "status": "ok" // Статус обработки запроса. ok - успех, error - ошибка.
}

Ответ ошибка:

{
    "status": "error", // Статус обработки запроса. ok - успех, error - ошибка.
    "message": {
      "text": "Передан некорректный идентификатор заказа" // Текст ошибки
    }
}

Настройка KDS v2

Брокер

Как послать тестовый запрос на брокер? (лучше get) - просто чтобы проверить что он жив и слушает?
Проще всего сделать GET на любой живой эндпоинт брокера:
  • Проверка “жив” (HTTP):
    • curl.exe -i http://localhost:5678/kds/ping
    • или в PowerShell: irm http://localhost:5678/kds/ping -Method Get

Если хочешь именно проверить приём Юпитера:

  • curl.exe -i -X POST http://localhost:5678/order -H "Content-Type: application/json" -H "x-api-key: d19b4cc231b64ee3a4c0f61fc1aed40a" -d "{\"order_uid\":\"test-1\",\"lines\":[]}"

 

Конфигурация брокера

  • Брокер читает все *.json из broker/configs при старте и строит маппинг monitor_id -> concept_id (conceptsStore.js (line 1)config.js (line 43)).
  • При POST /order брокер определяет concept_id по monitor_id в строках/модификаторах/инструкциях и сохраняет его в заказ (если в одном заказе встретились разные концепции — вернёт 400) (server.js (line 215)).
  • Рецепты загружаются на старте по одному файлу на концепцию (recipes_path из конфига). Эндпоинт GET /recipes/:productId выбирает нужный recipes-store по ?concept=... или ?monitor_id=.../?printer_place=... (или по ?order_uid=...; если концепция одна — выберется автоматически) (server.js (line 141)).

 

 


Система JUPITER                                 www.jupiter.systems                                 (с) 2024г.