Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версия | |||
| external:projects:soup-ff-kaz:start [2026/06/29 10:22] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1 | external:projects:soup-ff-kaz:start [2026/06/29 10:22] (текущий) – ↷ Страница перемещена из projects:soup-ff-kaz:start в external:projects:soup-ff-kaz:start admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Soup FF Kaz Service ====== | ||
| + | |||
| + | `soup-ff-kaz-service` — Windows-служба, | ||
| + | |||
| + | ## Назначение | ||
| + | |||
| + | Служба предоставляет HTTP API: | ||
| + | |||
| + | - `GET / | ||
| + | - `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` | Порт локального HTTP API | `8080` | | ||
| + | | `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 | ||
| + | ``` | ||