Публичный ресурс
Веб-сервис REST для генерации изображений ценников
Веб-сервис позволяет получать графическое изображение ценника на товар по веб-запросу, например ТСД, для того чтобы напечатать его на мобильном принтере.
- SRTS-14Получение подробных данных проблемы… СТАТУС
- SRTS-100Получение подробных данных проблемы… СТАТУС
- CR-5361Получение подробных данных проблемы… СТАТУС
10.2.98.0
Логика работы
Метод, в рамках одного вызова (синхронно) выполняет:
по входящим данным полученным в формате JSON (по штриховому коду) определяет товар;
по настройкам привязок шаблонов ценников или форматов ценников определяет шаблон (шаблоны) ценника, (или по присланному коду шаблона ценника) который должен быть напечатан на этот товар.
генерирует изображение ценника по найденному шаблону;
сохраняет изображение ценника в формате PNG или BMP в заданную папку на жесткий диск сервера Set Retail 10;
возвращает в ответ на запрос пакет информации, включающий в себя:
Информацию о найденном товаре;
Информации о привязанном шаблоне ценника;
Информацию о сгенерированном экземпляре ценника;
Ссылку на файл с сохранённым изображением ценника в формате PNG или BMP для возможности его скачать с сервера Set Retail 10.
Сообщение об ошибке, если что-то пошло не так.
Алгоритм работы
- При вызове метода, будет передан логин пользователя. Пользователь передается для справочной информации и должен присутствовать в списке на сервере SetRetail10.
- Запоминается значение атрибута
downloadMethod
из запроса для выдачи ответа в формате локальной ссылки на файл илиurl
для скачивания через сайт, или выдачи изображения в теле самого ответа. - По списку ШК из секции
arguments
производится поиск товара в справочнике Setretail10. Так же учитывается, что может быть указан весовой ШК с весом, который предварительно разбирается по правилам парсинга весовых ШК для конкретного весового префикса, установленных в типах весового товара. - Если товар не найден, или ШК не привязан к товару, или товар (или ШК) удалён, тогда для таких товаров возвращается сообщение о соответствующей ошибке.
- Код шаблона ценника может быть задан в запросе, тогда дополнительного поиска шаблонов привязанных к товару производить не надо. При печати необходимо будет использовать только этот шаблон.
- Если код шаблона ценника не задан в запросе, то по каждому найденному товару находится привязанный к товару шаблон ценника по всем возможным вариантам привязки (регулярные и скидочные, в том числе и по “форматам”, а также “шаблон для всего товарного справочника”). Таких шаблонов может быть несколько. Это означает что все их необходимо будет сгенерировать и указать отдельно в массиве
labels
. На данном этапе возможно возникновение ошибки, когда к найденному товару не будет привязано ни одного шаблона ценника, соответственно в ответе необходимо будет выдать соответствующее сообщение об ошибке. - По каждому найденному шаблону указывается соответствующая информацию в ответе (код, название, тип, цвет, размеры).
- Далее по каждому найденному шаблону генерируется сам ценник в виде изображения.
- Для генерации ценника используются только актуальные данные и действующие цены, то есть, данный метод эмулирует печать ценников с полки “произвольной печати” по нажатию на кнопку “Печать по умолчанию“, но без учёта привязки шаблонов к принтерам.
- Если в запросе не было указано информации о размерах листа и количестве экземпляров (блок
groupOnPage
), то по умолчанию генерируется один экземпляр ценника для каждого шаблона на листе, который размерами соответствует размеру шаблона. - Если в запросе были указаны размеры листа и количество ценников (блок
groupOnPage
), тогда размещается заданное количество экземпляров ценников по каждому найденному (или заданному в запросе) шаблону ценника на листах указанного размера с соблюдением заданных отступов. В данном варианте также может возникнуть ошибка, когда размеры шаблона ценника превышают размеры листа. - После генерации ценников каждый лист с ценником (или с ценниками) сохраняется как файлы на диск в отдельную папку (путь из настройки) в формате указанном в параметре
imageFormat
в запросе PNG, BMP (если не указан, то в формате по умолчанию - PNG ). Имя файла создается уникальным в рамках каждого шаблона, поэтому для формирования имени файла используются такие данные как - штриховой код товара из запроса, код найденного шаблона ценника, дата и время в полном формате с учётом миллисекунд. - В зависимости от значения параметра
downloadMethod
, полученного в запросе, в ответе в блокеlabelsPath
указываются ссылки на все сохранённые листы с ценниками по каждому конкретному шаблону. - Если в
downloadMethod
был указан методresponse
, тогда сохранённый файл передается в теле ответа в текстовом полеlabelsImageBody
, в виде закодированного содержимого файла с изображением в формате base64.
Метод веб-сервиса для генерации задания на создания изображения ценника
Создать изображение ценника | |
Метод | generatePriceTags |
URL | http://IP-адрес сервера SetRetail10:8090/SET-GeneratePriceTagImages-REST/generatePriceTags |
Тип запроса | POST |
Комментарий | Создать задание на печать ценников. |
Входящие параметры метода (JSON)
Параметры ответа метода (JSON)
Родительский сегмент/Название | Тип | Описание | Обязательное |
---|---|---|---|
access | String | Cтатус наличия привилегии на выполнение данной операции:
| Да |
results | Complex | Блок данных с результатами выполнения генерации ценников по найденным товарам. Один элемент массива - это один ШК из запроса | Да |
results/ | String | Штриховой код товара, из запроса, для возможности идентификации ответных данных. | Да |
results/ | String | Код, артикул найденного товара. | Нет |
results/ | String | Наименование найденного товара. | Нет |
results/ | Integer | Код сообщения об ошибке, если она произошла. По умолчанию атрибуты с кодом и текстом ошибки отсутствуют. | Нет |
results/ | String | Текст сообщения об ошибке. | Нет |
results/ | Complex | Блок данных с описанием шаблонов ценников по найденному товару. Один элемент массива - это один шаблон ценника | Да |
results/labels/ | String | Код найденного шаблона ценника привязанного к товару, код полученный из запроса. Берётся из поля “внешний код” в справочнике шаблонов ценников. может быть пустым, если поле “внешний код“ не задано в шаблоне ценника. | Да |
results/labels/ | String | Наименование найденного шаблона ценника. Если задано название в шаблоне. | Нет |
results/labels/ | Integer | Ширина найденного шаблона ценника в мм. | Да |
results/labels/ | Integer | Высота найденного шаблона ценника в мм. | Да |
results/labels/ | String | Тип шаблона ценника:
По умолчанию регулярный. | Нет |
results/labels/ | Integer | Цвет найденного шаблона ценника из справочника шаблонов. Варианты:
| Да |
results/labels/ | Integer | Ширина листа в мм. на котором помещён экземпляр ценника (или ценников). т.е. это размер сгенерированного изображения по ширине в мм. По умолчанию = ширине шаблона ценника. | Да |
results/labels/ | Integer | Высота листа в мм. на котором помещён экземпляр ценника (или ценников). т.е. это размер сгенерированного изображения по высоте в мм. По умолчанию = высоте шаблона ценника. | Да |
results/labels/ | Integer | Количество ценников размещённых на одном листе, или на листах. По умолчанию 1. Например если было нарисовано 13 ценников на 3-х листах (2 листа по 5 ценников и на одном листе 3), то тут будет указано 13. | Нет |
results/labels/ | Complex | Блок данных - массив со списком ссылок на файлы - листы с ценниками, или одна ссылка на один файл с одним ценником. Если был указан вариант получения ссылки для скачивания Массив может быть пустым, если ценники сформировать не удалось | Нет |
results/labels/ | String | Формат, в котором было сохранено изображение с ценником. Возможен один из следующих вариантов:
По умолчанию формат PNG | Нет |
results/labels/ | Array base64Binary (String) | Массив, в котором будет содержимое файла изображения этикетки в виде последовательности байт, закодированных в base64 стандарте. Один элемент массива - один ценник, т.е .файл. Заполняется только при варианте настройки в запросе | Нет |
Примеры запроса и ответа
{ "downloadMethod": "web", "imageFormat": "png", "arguments": [ { "barcode": "4810167000258", "templateCode" : "76834", "groupOnPage": { "labelsCount": 1, "pageWidth": 60, "pageHeight": 40 } } ] }
{ "access": "granted", "results": [ { "barcode": "4810167000258", "item": "45034", "name": "Хлеб РЖАНОЙ", "errorCode": null, "errorMessage": null, "labels": [ { "templateCode": "76834", "templateName": "60 x 40", "templateWidth": 60.0, "templateHeight": 40.0, "templateColor": "green", "templateType": "regular", "pageWidth": 60, "pageHeight": 40, "labelsCount": 1, "labelsPath": [ "http://192.168.56.1:8091/image-printer-output/2021-05-24_16-15-32_1621862132453.png" ], "labelsImageFormat": "png", "labelsImageBody": [] } ] } ] }
Коды и тексты ошибок
Код | Текст ошибки | Описание |
---|---|---|
2 | ШК | Если указанный ШК отсутствует в справочнике ШК в БД, или удалён |
3 | Товар по ШК | Если указанный ШК есть в справочнике ШК в БД, но он не привязан ни к одному товару, или товар по этому ШК удалён |
4 | Для товара с ШК | По найденному товару не удалось обнаружить ни одной привязки к шаблону ценников ни по одному из возможных методов привязки |
5 | Шаблон ценника с кодом | В случае когда в запросе был указан код шаблон ценника которого нет в справочнике шаблонов ценников в БД. Также возможен вариант когда код не существующего шаблона ценника указан у товара в привязке (например в цене) |
6 | Размер шаблона | Это в случае невозможности размещения ценника сгенерированного по найденному или указанному шаблону на листе с заданными в запросе размерами. |
7 | Невозможно сохранить файл с ценником в каталоге | Эта ошибка может возникнуть в случае отсутствия свободного места на диске или в случае отсутствия доступа до папки. |
8 | Параметры не заданы | Пустой запрос |
9 | ШК не указан | ШК не указан в запросе |
10 | Что-то пошло не так | В процессе обработки запроса произошла ошибка |
{ "access": "granted", "results": [ { "barcode": "4810167000218", "item": null, "name": null, "errorCode": 2, "errorMessage": "ШК 4810167000218 не найден", "labels": [] } ] }
{ "access": "granted", "results": [ { "barcode": "4810167000258", "item": "45034", "name": "Хлеб РЖАНОЙ", "errorCode": 6, "errorMessage": "Размер шаблона 60 x 40 больше размера листа 50 x 40", "labels": [ { "templateCode": "76834", "templateName": "60 x 40", "templateWidth": 60.0, "templateHeight": 40.0, "templateColor": "green", "templateType": "regular", "pageWidth": 50, "pageHeight": 40, "labelsCount": 1, "labelsPath": [], "labelsImageFormat": "png", "labelsImageBody": [] } ] } ] }
Настройка срока хранения изображения
По умолчанию изображения ценников хранятся в папке сервера 1 день.
Для изменения настройки выпролните скрипт в базе данных set, указав количество дней хранения.
UPDATE sales_management_properties SET property_value='1' WHERE property_key='output.dir.clean.pictures.save.days';
Пример работы запроса в программах отладки
SoapUI
1. Кликните REST → в поле URI введите адрес следующего формата для генерации изображения ценников http://IP-адрес сервера SetRetail:8090/SET-GeneratePriceTagImages-REST/generatePriceTags → кликните OK.
2. Из спискоа Method выберите POST → из списка Media Type выберите application/json → вставьте запрос для генерации изображения ценника.
3. Нажмите кнопку для выполнения запроса → перейдите на вкладку JSON → появится ответ со ссылкой на изображение ценника.
4. Скопируйте и вставьте ссылку в адресную строку браузера → нажмите Enter для загрузки изображения ценника.
Postman
1. На вкладке запроса выберите POST → введите адрес следующего формата для генерации изображения ценников http://IP-адрес сервера SetRetail:8090/SET-GeneratePriceTagImages-REST/generatePriceTags → вставьте JSON-запрос для формирования ценика → кликните SEND → появится ответ от сервера со ссылкой на изображение ценника.
2. Скопируйте и вставьте ссылку в адресную строку браузера → нажмите Enter для загрузки изображения ценника.
Дополнительная информация
Папка риснуков на сервере nginx
Все сохраненные изображения согласно настройке хранения изображений в папке сервера nginx:
- Windows: {Disk}:\Папка SetRetail10\nginx\html\image-printer-output
- Linux: /var/lib/jboss/nginx/html/image-printer-output
© 1994-2024, ООО "Кристалл Сервис Интеграция".
Все права защищены.