Обмен данными с АСТУ, использующими MSSQL, осуществляется посредством задач трансфера.
Конфигурирование трансфера
Работа трансфера обеспечивается сервисами, запускаемыми при установке пакета artixcs-datatransfer
. Установка трансфера может быть выполнена в "горячем" режиме без остановки кассового сервера.
При установке пакета в директории /opt/artixcs-datatransfer/
создается конфигурационный файл application.properties
, в котором указываются параметры для обработки различных задач трансфера.
Наименование | Тип данных | Описание | Значение по умолчанию |
---|---|---|---|
dictionaries | строковый | Список таблиц, используемых для передачи данных из удаленной БД MSSQL в БД MySQL на кассовом сервере. При выполнении операции база данных кассового сервера блокируется |
|
dictionaries2 | строковый | Список таблиц, используемых для передачи данных из удаленной БД MSSQL в БД MySQL на кассовом сервере. При выполнении операции база данных кассового сервера не блокируется | softcheck, softcheckposition, changeAccountBalance |
dictionaries3 | строковый | Предназначен для оповещения АСТУ о последнем копировании данных из КС в удаленную БД. Данные переносятся полностью с предварительной очисткой таблиц | last_copy |
dictionaries.targetSuffix | строковый | Суффикс, который добавляется к названию таблиц | Temp |
dictionaries.sourceConnectionType | строковый | Тип БД, которая используется в качестве источника для загрузки справочников | MSSQL |
dictionaries.targetConnectionType | строковый | Тип БД, которая используется в качестве адресата для загрузки справочников | MYSQL |
sales.sourceConnectionType | строковый | Тип БД, которая используется в качестве источника для выгрузки продаж | MYSQL |
sales.targetConnectionType | строковый | Тип БД, которая используется в качестве адресата для выгрузки продаж | MSSQL |
sales | строковый | Список таблиц, используемых для передачи данных продаж из БД All в удаленную БД. При выполнении операции БД КС не блокируется | aspectitem, bonusitem, button, carditem, client, crights, department, discitem, goodsitem, kkm, moneyitem, paymentitem, stornogoodsitem, users, workshift, document |
sales2 | строковый | Содержит таблицу softcheckstatus и предназначен для передачи статусов софт-чеков из БД All в удаленную БД. При выполнении операции БД КС не блокируется | softcheckstatus |
dictionaries.lock.maxTryCount | целочисленный | Максимальное количество попыток блокировки БД трансфером | 100 |
dictionaries.lock.tryDelay | целочисленный | Время ожидания между попытками блокировки | 2000 |
urls.csdic.driver | строковый | Название JDBC драйвера | org.gjt.mm.mysql.Driver |
urls.csdic.url | строковый | URL для подключения к БД Dictionaries на кассовом сервере | jdbc:mysql://localhost:3306/$clusterId$artixcs$storeId$?user=netroot&password=netroot&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull |
urls.csdoc.driver | строковый | Название JDBC драйвера | org.gjt.mm.mysql.Driver |
urls.csdoc.url | строковый | URL для подключения к БД Documents на кассовом сервере |
|
urls.astudic.driver | строковый | Название JDBC драйвера | net.sourceforge.jtds.jdbc.Driver |
urls.astudic.url | строковый | URL для подключения к БД Dictionaries в АСТУ |
|
urls.astudoc.driver | строковый | Название JDBC драйвера | net.sourceforge.jtds.jdbc.Driver |
urls.astudoc.url | строковый | URL для подключения к БД Documents в АСТУ |
|
modern | логический | Поле, используемое для переноса данных с одного кассового сервера на другой. Определяет метод поиска записи в таблице client:
| false |
type.request.mysql.copy | строковый | Режим вставки данных в БД MySQL при копировании из внешней БД:
|
|
server.port | целочисленный | Порт сервера |
|
rest.port | целочисленный | Порт ядра |
|
rest.host | строковый | Хост ядра |
|
rest.user | строковый | Имя пользователя для авторизации по REST-протоколу на КС (для получения доступа к ядру КС) |
По умолчанию настройка закомментирована, так как она используется только в случае, если сервис устанавливается на отдельную машину и включена авторизация на КС |
rest.password | строковый | Пароль для авторизации по REST-протоколу на КС (для получения доступа к ядру КС) |
По умолчанию настройка закомментирована, так как она используется только в случае, если сервис устанавливается на отдельную машину и включена авторизация на КС |
default.server.id | целочисленный | Поле для указания id сервера |
|
Задачи трансфера
- Трансфер справочники – используется для передачи справочников из удаленной БД в БД КС. При выполнении операции БД КС блокируется.
- Трансфер глобальные справочники – предназначен для передачи данных из удаленной БД в БД КС. При выполнении операции БД не блокируется.
- Трансфер продажи – используется для передачи данных продаж из БД
All
в удаленную БД. При выполнении операции БД КС не блокируется. - Трансфер глобальные продажи – предназначен для передачи статусов софт-чеков из БД
All
в удаленную БД. При выполнении операции БД КС не блокируется. Трансфер структура – используется для оповещения АСТУ о последнем копировании справочников из удаленной БД в КС. Или продаж – из КС в удаленную БД.
Данные переносятся полностью с предварительной очисткой таблиц.- Трансфер бонусы – контролирует изменения в начислении бонусных баллов и выполняет их начисление на карты клиентов.
После установки пакета появляется возможность включить отображение перечня задач в планировщике. Настройка включается в настройках сервера (подраздел "Прочее"):
Перечень задач трансфера отобразится в разделе "Расписание":
Передача справочников из БД АСТУ в БД КС
Для передачи справочников в таблицах БД АСТУ дополнительно используются служебные поля. Например:
Название | Тип | Описание |
---|---|---|
bcode | строковый | Штрих-код |
name | строковый | Наименование |
. . . < | ||
<Служебные поля справочника. Набор служебных полей для всех справочников одинаков> | ||
update_time | дата и время | Время модификации записи |
transferAction | строковый(10) | Операция которую необходимо совершить с этой записью, может принимать значения:
|
storeId | строковый(10) | Идентификатор магазина |
Передача справочников из удаленной БД MSSQL, установленной на АСТУ, осуществляется инкрементально – загружаются только те записи, которые были добавлены и изменены с момента предыдущего копирования справочников на КС.
Если в БД АСТУ была добавлена новая запись, то в ее поле transferAction
записывается значение ADD
. Тогда при следующей загрузке справочников эта запись будет добавлена или обновлена в БД КС.
Если в БД АСТУ запись была помечена как удаленная, то в ее поле transferAction
записывается значение DELETE
. Тогда при следующей загрузке справочников будет удалена соответствующая запись из БД КС. После окончания загрузки запись будет удалена из БД АСТУ.
БД КС, в которую будут сохранены изменения для каждой записи, определяется индивидуально – по правилу: dictionaries<storeId>
(на основе идентификатора магазина).
Сравнение БД MySQL и MSSQL
При обновлении КС могут возникать проблемы несоответствия структуры внешней БД MSSQL и внутренней БД MySQL, при наличии которых передача данных может быть выполнена не в полном объеме или вообще остановлена:
- отсутствие поля в одной из БД,
- различное ограничение по количеству символов в поле,
- различние первичных ключей и уникальных индексов в таблицах.
Для сравнения структуры двух БД используется компаратор, который можно скачать по ссылке.
Файл компаратора необходимо поместить в одну директорию с файлом настроек config.properties
, в котором указать данные для внешней и внутренней БД.
#Список таблиц из БД справочников, для которых не нужно искать разницу (удобно помещать сюда явно неиспользуемые таблицы сети) listOfIgnoredDictionaryTables=securityweightTemp #Список таблиц из БД документов, для которых не нужно искать разницу (удобно помещать сюда явно неиспользуемые таблицы сети) listOfIgnoredDocumentTables= #Тип драйвера для БД КС (всегда будет указанный по умолчанию) driverClassName1 = com.mysql.cj.jdbc.Driver #Параметры подключения к БД artixcsAll на КС urlArtixcsDonor = jdbc:mysql://localhost:3306/artixcsAll?user=netroot&password=netroot&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false #Параметры подключения к БД documentsAll на КС urlDocumentsDonor=jdbc:mysql://localhost:3306/documentsAll?user=netroot&password=netroot&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false #Тип драйвера для БД MSSQL (всегда будет указанный по умолчанию драйвер) driverClassName2 = net.sourceforge.jtds.jdbc.Driver #Параметры подключения к удаленной БД со справочниками urlArtixcsRecipient = jdbc:jtds:sqlserver://localhost:1433;user=sa;password=yourStrong(!)Password;databasename=CashServerDicts #Параметры подключения к удаленной БД с продажами urlDocumentsRecipient = jdbc:jtds:sqlserver://localhost:1433;user=sa;password=yourStrong(!)Password;databasename=CashServerDocs #Считать что у нас нет БД MSSQL формируем полную структуру oneWay=True #Игнорировать разницу размерности в существующих полях таблиц ignoreDiffSizeExistsColumns=True #Игнорировать разницу NOT NULL в существующих полях таблиц ignoreDiffNotNullExistsColumns=True
Для запуска компаратора используется команда:
java -jar db-comparator.jar
В процессе работы компаратора сравниваются:
- таблицы,
- поля,
- первичные ключи,
- уникальные индексы.
После запуска утилита выводит в консоль результаты своей работы, а также дублирует результат в файл, в директорию ./out
:
[INFO ] 2018-01-16_18:25:03 Ignored dictionary tables: securityweightTemp [INFO ] 2018-01-16_18:25:03 Start compare databases [INFO ] 2018-01-16_18:25:03 --------------------Dictionaries:-------------------- [INFO ] 2018-01-16_18:25:03 Not founded table: accountmaskTemp [INFO ] 2018-01-16_18:25:03 Primary keys: maskid [INFO ] 2018-01-16_18:25:03 Unique indexes: [INFO ] 2018-01-16_18:25:03 Fields of table accountmaskTemp: [INFO ] 2018-01-16_18:25:03 accountmaskTemp : maskid (INT:10) - [INFO ] 2018-01-16_18:25:03 accountmaskTemp : providerid (INT:10) - [INFO ] 2018-01-16_18:25:03 accountmaskTemp : mask (VARCHAR:200) - [INFO ] 2018-01-16_18:25:03 accountmaskTemp : transform (VARCHAR:200) - [INFO ] 2018-01-16_18:25:03 accountmaskTemp : crc (BIGINT:19) - контрольная сумма [INFO ] 2018-01-16_18:25:03 accountmaskTemp : ownerStoreId (VARCHAR:10) - код родительского магазина [INFO ] 2018-01-16_18:25:03 accountmaskTemp : update_time (TIMESTAMP:19) - Для сохранения момента модификации поля [INFO ] 2018-01-16_18:25:03 accountmaskTemp : transferAction (VARCHAR:10) - тип передаваемого сообщения [INFO ] 2018-01-16_18:25:03 ------------------------------------------------------------ [INFO ] 2018-01-16_18:25:03 Not founded table: accumulatespricesTemp [INFO ] 2018-01-16_18:25:03 Primary keys: code [INFO ] 2018-01-16_18:25:03 Unique indexes: [INFO ] 2018-01-16_18:25:03 Fields of table accumulatespricesTemp: [INFO ] 2018-01-16_18:25:03 accumulatespricesTemp : code (INT:10) - [INFO ] 2018-01-16_18:25:03 accumulatespricesTemp : name (VARCHAR:255) - [INFO ] 2018-01-16_18:25:03 accumulatespricesTemp : crc (BIGINT:19) - контрольная сумма [INFO ] 2018-01-16_18:25:03 accumulatespricesTemp : ownerStoreId (VARCHAR:10) - код родительского магазина [INFO ] 2018-01-16_18:25:03 accumulatespricesTemp : update_time (TIMESTAMP:19) - Для сохранения момента модификации поля [INFO ] 2018-01-16_18:25:03 accumulatespricesTemp : transferAction (VARCHAR:10) - тип передаваемого сообщения [INFO ] 2018-01-16_18:25:03 ------------------------------------------------------------ [INFO ] 2018-01-16_18:25:03 Not founded table: actionpanelTemp [INFO ] 2018-01-16_18:25:03 Primary keys: actionpanelcode [INFO ] 2018-01-16_18:25:03 Unique indexes: [INFO ] 2018-01-16_18:25:03 Fields of table actionpanelTemp: [INFO ] 2018-01-16_18:25:03 actionpanelTemp : actionpanelcode (INT:10) - [INFO ] 2018-01-16_18:25:03 actionpanelTemp : context (INT:10) - код контекста, в которм отображается панель [INFO ] 2018-01-16_18:25:03 actionpanelTemp : page (INT:10) - номер панели в рамках контекста [INFO ] 2018-01-16_18:25:03 actionpanelTemp : rowcount (INT:10) - кол-во строк в панели [INFO ] 2018-01-16_18:25:03 actionpanelTemp : columncount (INT:10) - кол-во столбцов в панели [INFO ] 2018-01-16_18:25:03 actionpanelTemp : crc (BIGINT:19) - контрольная сумма [INFO ] 2018-01-16_18:25:03 actionpanelTemp : update_time (TIMESTAMP:19) - Для сохранения момента модификации поля [INFO ] 2018-01-16_18:25:03 actionpanelTemp : ownerStoreId (VARCHAR:10) - код родительского магазина [INFO ] 2018-01-16_18:25:03 actionpanelTemp : transferAction (VARCHAR:10) - тип передаваемого сообщения [INFO ] 2018-01-16_18:25:03 ------------------------------------------------------------ [INFO ] 2018-01-16_18:25:03 Not founded table: actionpanelitemTemp [INFO ] 2018-01-16_18:25:03 Primary keys: actionpanelitemcode [INFO ] 2018-01-16_18:25:03 Unique indexes: [INFO ] 2018-01-16_18:25:03 Fields of table actionpanelitemTemp: [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : actionpanelitemcode (INT:10) - [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : actionpanelcode (INT:10) - код панели [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : actioncode (INT:10) - код действия [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : row (INT:10) - положение по вертикали на панели [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : column (INT:10) - положение по горизонтали на панели [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : rowspan (INT:10) - кол-во занимаемых ячеек по вертикали (по умолчанию 1) [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : columnspan (INT:10) - кол-во занимаемых ячеек по горизонтали (по умолчанию 1) [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : color (VARCHAR:20) - цвет кнопки [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : name (VARCHAR:100) - название кнопки (по умолчанию используется наименование действия) [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : crc (BIGINT:19) - контрольная сумма [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : update_time (TIMESTAMP:19) - Для сохранения момента модификации поля [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : ownerStoreId (VARCHAR:10) - код родительского магазина [INFO ] 2018-01-16_18:25:03 actionpanelitemTemp : transferAction (VARCHAR:10) - тип передаваемого сообщения [INFO ] 2018-01-16_18:25:03 ------------------------------------------------------------ ....
Настройка сервиса при установке на отдельную машину
Сервис DataTransfer
можно установить на отдельную машину.
В настройках сервиса DataTransfer
в конфигурационном файле /opt/artixcs-datatransfer/application.properties
необходимо дополнительно указать настройки для авторизации по REST-протоколу на КС (имя пользователя и пароль).
Для работы с сервисом artixcs-datatransfer
на другой машине в настройках пакета artixcs-rest
(application.properties)
необходимо добавить хост и порт:
#Параметры подключения к DataTransfer generate.transfer.host=localhost generate.transfer.port=38066