Краткое описание логики: Модуль интеграции с кассой собирает данные и отправляет их в очередь 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, должна стоять галочка «Использовать кассовый аппарат».