Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| external:projects:soup-ff-kaz:start [2026/06/29 10:22] – ↷ Страница перемещена из projects:soup-ff-kaz:start в external:projects:soup-ff-kaz:start admin | external:projects:soup-ff-kaz:start [2026/07/13 12:57] (текущий) – admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Soup FF Kaz Service ====== | ====== Soup FF Kaz Service ====== | ||
| - | `soup-ff-kaz-service` — Windows-служба, | + | soup-ff-kaz-service — Windows-служба, |
| + | При печати этикетки из Food Factory внутри макета выполняется запрос в службу soup-ff-kaz-service, | ||
| - | ## Назначение | + | ==== Назначение |
| Служба предоставляет HTTP API: | Служба предоставляет HTTP API: | ||
| - | - `GET / | + | - GET / |
| - | - `GET / | + | |
| - | По умолчанию HTTP-сервер слушает порт `8080`. | + | - GET / |
| - | ## Системные требования | + | По умолчанию HTTP-сервер слушает порт 8080. |
| - | + | ||
| - | - Windows с правами локального администратора для установки службы; | + | |
| - | - свободный TCP-порт для HTTP API; | + | |
| - | - доступ к внешнему API, если требуется автоматическое получение переводов; | + | |
| - | + | ||
| - | ## Конфигурация | + | |
| - | + | ||
| - | Создайте файл `config.yaml`: | + | |
| - | + | ||
| - | ```yaml | + | |
| - | http: | + | |
| - | port: 8080 | + | |
| - | + | ||
| - | database: | + | |
| - | path: goods.db | + | |
| - | + | ||
| - | external_api: | + | |
| - | base_url: https:// | + | |
| - | api_key: replace-with-api-key | + | |
| - | integration_id: | + | |
| - | timeout: 5s | + | |
| - | refresh_after: | + | |
| - | ``` | + | |
| - | + | ||
| - | Параметры: | + | |
| - | + | ||
| - | | Параметр | Назначение | Значение по умолчанию | + | |
| - | |---|---|---| | + | |
| - | | `http.port` | Порт локального | + | |
| - | | `database.path` | Путь к файлу SQLite | `goods.db` | | + | |
| - | | `external_api.base_url` | Базовый адрес внешнего API | не задан | | + | |
| - | | `external_api.api_key` | Ключ, передаваемый в заголовке `X-API-Key` | не задан | | + | |
| - | | `external_api.integration_id` | Идентификатор интеграции во внешнем API | `0` | | + | |
| - | | `external_api.timeout` | Тайм-аут обращения к внешнему API | `5s` | | + | |
| - | | `external_api.refresh_after` | Интервал до фонового обновления записи | `6h` | | + | |
| - | + | ||
| - | Если `base_url` или `api_key` не указаны, | + | |
| - | + | ||
| - | Путь к конфигурации определяется в следующем порядке: | + | |
| - | + | ||
| - | 1. Значение переменной окружения `SOUP_FF_KAZ_CONFIG`. | + | |
| - | 2. Файл `config.yaml` в текущем рабочем каталоге. | + | |
| - | 3. Файл `config.yaml` рядом с исполняемым файлом службы. | + | |
| - | 4. Если файл не найден, | + | |
| - | + | ||
| - | + | ||
| - | ==== Установка Windows-службы ==== | + | |
| - | + | ||
| - | Установку необходимо выполнять из командной строки `cmd.exe`, запущенной от имени администратора. | + | |
| - | + | ||
| - | Перейдите в каталог развертывания: | + | |
| - | + | ||
| - | ```bat | + | |
| - | cd /d D: | + | |
| - | ``` | + | |
| - | + | ||
| - | Проверьте версию: | + | |
| - | + | ||
| - | ```bat | + | |
| - | soup-ff-kaz-service.exe version | + | |
| - | ``` | + | |
| - | + | ||
| - | Установите и запустите службу: | + | |
| - | + | ||
| - | ```bat | + | |
| - | soup-ff-kaz-service.exe install | + | |
| - | soup-ff-kaz-service.exe start | + | |
| - | ``` | + | |
| - | + | ||
| - | Системное имя службы: | + | |
| - | + | ||
| - | ```text | + | |
| - | soup-ff-kaz-service | + | |
| - | ``` | + | |
| - | + | ||
| - | Отображаемое имя в оснастке «Службы»: | + | |
| - | + | ||
| - | ```text | + | |
| - | Soup FF Kaz Service for FoodFactory | + | |
| - | ``` | + | |
| - | + | ||
| - | При необходимости откройте входящий TCP-порт в Windows Firewall. Пример для порта `8080`: | + | |
| - | + | ||
| - | ```bat | + | |
| - | netsh advfirewall firewall add rule name=" | + | |
| - | ``` | + | |
| - | + | ||
| - | Правило требуется только при обращении к API с других компьютеров. | + | |
| - | + | ||
| - | ## Проверка установки | + | |
| - | + | ||
| - | Проверить состояние службы: | + | |
| - | + | ||
| - | ```bat | + | |
| - | sc query soup-ff-kaz-service | + | |
| - | ``` | + | |
| - | + | ||
| - | Проверить HTTP API: | + | |
| - | + | ||
| - | ```bat | + | |
| - | curl http:// | + | |
| - | ``` | + | |
| - | + | ||
| - | Пример ответа: | + | |
| - | + | ||
| - | ```json | + | |
| - | { | + | |
| - | " | + | |
| - | " | + | |
| - | } | + | |
| - | ``` | + | |
| - | + | ||
| - | Запрос данных товара: | + | |
| - | + | ||
| - | ```bat | + | |
| - | curl http:// | + | |
| - | ``` | + | |
| - | + | ||
| - | Пример успешного ответа: | + | |
| - | + | ||
| - | ```json | + | |
| - | { | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | } | + | |
| - | ``` | + | |
| - | + | ||
| - | Если товар не найден, | + | |
| - | + | ||
| - | ```json | + | |
| - | { | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | } | + | |
| - | ``` | + | |
| - | + | ||
| - | ## Принцип работы | + | |
| - | + | ||
| - | Обработка запроса выполняется следующим образом: | + | |
| - | + | ||
| - | 1. Клиент отправляет `GET / | + | |
| - | 2. Служба разбирает штрихкод и извлекает код товара. | + | |
| - | 3. Выполняется поиск товара в таблице `goods` локальной базы SQLite. | + | |
| - | 4. Если запись найдена, | + | |
| - | 5. Если запись устарела, | + | |
| - | 6. Если записи в SQLite нет, служба синхронно обращается во внешний API. | + | |
| - | 7. Полученные данные сохраняются в SQLite и возвращаются клиенту. | + | |
| - | 8. Если товар отсутствует и во внешнем API, клиент получает объект с пустыми полями. | + | |
| - | + | ||
| - | Для одной записи одновременно выполняется не более одного фонового обновления. | + | |
| - | + | ||
| - | Внешний запрос имеет вид: | + | |
| - | + | ||
| - | ```text | + | |
| - | GET {base_url}/ | + | |
| - | X-API-Key: {api_key} | + | |
| - | ``` | + | |
| - | + | ||
| - | Поддерживаются два формата штрихкода: | + | |
| - | + | ||
| - | - 12 цифр, начинающихся с `2`; | + | |
| - | - Code 128 в формате из четырех частей, | + | |
| - | + | ||
| - | ## Хранение данных | + | |
| - | + | ||
| - | При первом запуске служба автоматически создает файл SQLite и таблицу `goods`. | + | |
| - | + | ||
| - | Для каждого товара хранятся: | + | |
| - | + | ||
| - | - код; | + | |
| - | - казахское наименование; | + | |
| - | - состав; | + | |
| - | - условия хранения; | + | |
| - | - время последней синхронизации. | + | |
| - | + | ||
| - | Путь `database.path` может быть абсолютным или относительным. Для предсказуемой работы Windows-службы рекомендуется использовать абсолютный путь, например: | + | |
| - | + | ||
| - | ```yaml | + | |
| - | database: | + | |
| - | path: C: | + | |
| - | ``` | + | |
| - | + | ||
| - | Учетная запись службы должна иметь права на создание и изменение файла базы данных и его каталога. | + | |
| - | + | ||
| - | ## Журналы | + | |
| - | + | ||
| - | Служба пишет: | + | |
| - | + | ||
| - | - основные события запуска и остановки в Windows Event Log; | + | |
| - | - структурированные HTTP-логи в каталог `logs`. | + | |
| - | + | ||
| - | Если конфигурация загружена из файла, каталог `logs` создается рядом с этим файлом. Имя текущего журнала содержит дату: | + | |
| - | + | ||
| - | ```text | + | |
| - | soup-ff-kaz-service-2026-06-24.log | + | |
| - | ``` | + | |
| - | + | ||
| - | Журнал ротируется по дням и размеру. Старые файлы архивируются и удаляются согласно настройкам ротации службы. | + | |
| - | + | ||
| - | ## Обновление службы | + | |
| - | + | ||
| - | Остановите службу: | + | |
| - | + | ||
| - | ```bat | + | |
| - | soup-ff-kaz-service.exe stop | + | |
| - | ``` | + | |
| - | + | ||
| - | Замените исполняемый файл и при необходимости обновите `config.yaml`, | + | |
| - | + | ||
| - | ```bat | + | |
| - | soup-ff-kaz-service.exe start | + | |
| - | ``` | + | |
| - | + | ||
| - | После обновления проверьте версию и доступность API: | + | |
| - | + | ||
| - | ```bat | + | |
| - | soup-ff-kaz-service.exe version | + | |
| - | curl http:// | + | |
| - | ``` | + | |
| - | + | ||
| - | ## Удаление службы | + | |
| - | + | ||
| - | Запустите `cmd.exe` от имени администратора: | + | |
| - | + | ||
| - | ```bat | + | |
| - | soup-ff-kaz-service.exe stop | + | |
| - | soup-ff-kaz-service.exe remove | + | |
| - | ``` | + | |
| - | + | ||
| - | Удаление регистрации службы не удаляет автоматически базу SQLite, конфигурацию и журналы. | + | |
| - | + | ||
| - | ## Диагностический запуск | + | |
| - | + | ||
| - | Для запуска без регистрации в Windows SCM: | + | |
| - | + | ||
| - | ```bat | + | |
| - | soup-ff-kaz-service.exe debug | + | |
| - | ``` | + | |
| - | Для остановки диагностического процесса нажмите `Ctrl+C`. | + | |
| - | + | ||
| - | ## Основные команды | + | |
| - | + | ||
| - | ```text | + | |
| - | soup-ff-kaz-service.exe debug | + | |
| - | soup-ff-kaz-service.exe install | + | |
| - | soup-ff-kaz-service.exe start | + | |
| - | soup-ff-kaz-service.exe stop | + | |
| - | soup-ff-kaz-service.exe pause | + | |
| - | soup-ff-kaz-service.exe continue | + | |
| - | soup-ff-kaz-service.exe remove | + | |
| - | soup-ff-kaz-service.exe version | + | |
| - | ``` | + | |