Краткое описание логики: Модуль интеграции с кассой собирает данные и отправляет их в очередь RabbitMQ — CashMachineQueue. На кассе, в свою, очередь должна быть установлена служба Cash machine service, которая будет слушать очередь RabbitMQ, при появлении сообщения в прослушиваемой очереди и отсутствии файла FileFlag.txt, путь до которого задан в конфигурационном файле службы Cash machine service, забирает это сообщение, затем на его основе формирует файл Check.txt, который кладет в заранее определенное место, где кассовая программа готова его подгрузить себе. Индикатором того, что появился новый чек, который необходимо подгрузить в ПО кассы, также является наличие файла FileFlag.txt, другими словами, после того, как будет создан файл check.txt, создаётся файл FileFlag.txt и система понимает, что появился новый чек. Файл FileFlag.txt будет существовать до тех пор, пока кассовая программа не обработает файл check.txt и не удалит файл FileFlag.txt. Затем, после обработки чека на кассе (в отложенных чеках) кассовое ПО даёт ответ в виде файла oper.txt, появление которого мониторится службой Cash machine service на кассе, как только он появится, служба перемещает его в свой каталог и отправляет в очередь RabbitMQ — FromKassaToAKUZ. Служба AKUZ слушает, не появилось ли сообщение в очереди FromKassaToAKUZ и, если появилось, то сажает это сообщение в виде результата в Витакарту.
Настройки:
На сервере должен быть установлен .Net Framework 4.5.2 или выше, а также либо на этом сервере, либо на отдельном должен быть развернут брокер сообщений RabbitMQ (официальная инструкция по установке в Windows). В брокере сообщений нужно создать две очереди FromKassaToAKUZ и CashMachineQueue.
Настраиваем службу сервера:
1. В конфигурационном файле службы сервера AKUZ.Service.exe.config, в секцию <appSettings> необходимо добавить ключ:
<add key="AMPQ" value="server=IP_адрес_сервера_рэббит;queue=FromKassaToAKUZ;User=логин_рэббит;Password=пароль_рэббит;process=CashMachineProcess;" />
либо, если этот ключ существует, добавляем к value в конце, через | value из строки выше.
2. В том же конфигурационном файле, но уже в секцию <AKUZ.Server> добавляем три ключа:
<!--строка подключения к рэббит--> <AMPQConnectionString value="server=IP_адрес_сервера_рэббит;user=логин_рэббит;password=пароль_рэббит"/> <!--включение AMQP --> <AMPQEnabled value="true" /> <!--очередь посылания в кассу--> <CashMachineQueue value="CashMachineQueue" />
3. Устанавливаем RabbitMQ, если он не установлен. Инструкция по установке.
Устанавливаем на кассовый аппарат службу Cash machine service и конфигурируем её:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <trace autoflush="false" indentsize="2"> <listeners> <add name="Loger" type="CashMachine.Loger, CashMachine" initializeData="_server.log"/> </listeners> </trace> </system.diagnostics> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> </startup> <appSettings> <!--сервер на котором находится рэббит--> <add key="server" value="IP_адрес_сервера_рэббит" /> <!--логин от рэббита--> <add key="user" value="логин_от_рэббита" /> <!--пароль от рэббита--> <add key="password" value="пароль_от_рэббита" /> <!--очередь в которую приходят сообщения из акуза--> <add key="queueName" value="CashMachineQueue" /> <!--путь до файла который читает frontol--> <add key="CheckFilePathFull" value="C:\obmen\Check.txt" /> <!--путь до файл-флага для frontolа--> <add key="FileFlagPathFull" value="C:\obmen\FileFlag.txt" /> <!--очередь в которую отправляются сообщения в акуз--> <add key="returnQueueName" value="FromKassaToAKUZ" /> <!--наименование файла в который пишет ответ frontol--> <add key="OperFileName" value="oper.txt" /> <!--путь до файла в который пишет ответ frontol--> <add key="OperFilePath" value="C:\obmen\out\" /> </appSettings> </configuration>
Для того, чтобы механизм интеграции был задействован и начал работать, в клиентском модуле AKUZ.Client.PaidServicesClientModule, AKUZ.Client, должна стоять галочка «Использовать кассовый аппарат».