Сервис для замены карт предназначен для замены карт, которые уже есть на КС и БС, на новые бонусные карты. Основная информация из старой карты переносится в новую карту, накопления из старой карты переносятся в сервис счетчиков, затем старая карта блокируется.

Для замены карты необходимы следующие данные:

  • номер старой карты,
  • номер новой карты,
  • идентификатор кассы.

Установка сервиса по замене карт

Для установки сервиса выполните команду:

sudo apt-get install artixcs-change-card

Настройка сервиса по замене карт

Настройка работы сервиса осуществляется в конфигурационном файле application.properties, который находится в директории /opt/artixcs-change-card/, там же где и jar-файл:

# Идентификатор счетчика. При переносе суммы накоплений из старой карты в сервис счетчиков будет использоваться данный идентификатор
counterId=changecard
# Список полей карты, который не надо копировать из старой карты в новую
card.ignoreCopyProperties=idcard,idcardgroup,number,cardSum,blocked,cardstatus

# Список префиксов номеров "старых" бонусных карт(только бонусных, без дисконтных и без "новых" бонусных)
numberPrefixesOldAccountingCard=""

# Список префиксов номеров "новых" бонусных карт
numberPrefixesNewCard=""

# подключение к КС
cashserver.host=localhost
cashserver.port=8080
cashserver.login=admin
cashserver.password=admin

# подключение к сервису счетчиков
counter.host=localhost
counter.port=8091
counter.login=admin
counter.password=admin

# подключение к БС
accounting.host=localhost
accounting.port=8080
accounting.login=LM_DEFAULT_TERMINAL
accounting.password=

# настройки подключения REST-клиента
custom.rest.connection.connection-request-timeout=3000
custom.rest.connection.connect-timeout=3000
custom.rest.connection.read-timeout=3000

#проверять, что у новой бонусной карты аккаунт пустой, или соответствует номеру самой карты, или соответствует аккаунту старой бонусной карты
card.checkAccountForDstCard=false

server.port=8093

REST-запрос

Для замены старой карты на новую необходимо направить REST запрос типа POST на url:

http://{хост сервиса}:{порт сервиса}/v1/changecard/src_cardnumber/{номер старой карты}/dst_cardnumber/{номер новой карты}?cashId={идетификатор кассы}
Пример ответа
{
  "success": false,
  "status": 7,
  "message": "Can't set bonuses to dst card with number 123456789" 
}

Список возможных статусов:

СтатусОписание
0

Данные по карте успешно перенесены

1Не найдена карта, из которой требуется перенести данные
2Не найдена карта, в которую требуется перенести данные
3Заблокирована карта, из которой требуется перенести данные
5К карте, в которую требуется перенести данные, уже привязан клиент
6Ошибка копирования полей из одной карты в другую
7Ошибка начисления бонусов на карту
8Ошибка обновления карты, в которую требуется перенести данные
9Ошибка блокировки карты, из которой были перенесены данные
10Ошибка подтверждения начисления бонусов на карту
11Нет аккаунта у карты, из которой требуется перенести данные
12На БС не найдена карта, в которую требуется перенести данные
13К карте на БС, в которую требуется перенести данные, уже привязан аккаунт
14Ошибка создания аккаунта, который требуется привязать к новой карте
15Ошибка блокировки виртуальной карты на БС
16Ошибка обновления статуса и аккаунта карты на БС
17

Ошибочный номер карты, из которой требуется перенести данные

18

Ошибочный номер карты, в которую требуется перенести данные

Порядок работы запроса для замены карты

  1. Находим старую карту на КС:
    • если карта не найдена, возвращаем соответствую ошибку;
    • если карта заблокирована, возвращаем соответствую ошибку.
  2. По идентификатору клиента из старой карты находим на КС все карты, которые привязаны к этому клиенту.
  3. По номерам старых карт ищем первую попавшуюся бонусную карту на БС. Если не нашли, то это нормально. Не факт, что пользователь покупал что-то через интернет магазин:
    • если к бонусной карте не привязан аккаунт, возвращаем соответствую ошибку.
  4. Находим новую карту на КС:
    • если карта не найдена, возвращаем соответствую ошибку;
    • если у карты уже есть клиент отличный от клиента старой карты, возвращаем соответствую ошибку.
  5. Находим новую карту на БС:
    • если карта не найдена, возвращаем соответствую ошибку;
    • если к бонусной карте привязан счет отличный от ее номера и отличный от счета старой виртуальной бонусной карты, возвращаем соответствую ошибку.
  6. Если к новой карте еще не привязан клиент из старой карты, то переносим все необходимые поля из старой карты в новую:
    • если не удалось обновить новую карту на КС, возвращаем соответствую ошибку.
  7. Если есть старая бонусная карта, то привязываем ее счет к новой бонусной карте, иначе создаем счет по номеру новой карты и привязываем его к новой бонусной карте:
    • если нужно было создать новый аккаунт, но не удалось, возвращаем соответствую ошибку;
    • если не удалось обновить новую карту на БС, возвращаем соответствую ошибку.
  8. Суммируем накопления по старым картам и переносим их в счетчики (destination = idclient):
    • если не удалось отправить операцию по начислению счетчика, возвращаем соответствую ошибку.
  9. Блокируем все старые карты на КС (blocked=1, cardstatus=2):
    • если не удалось заблокировать старые карты, то отменяем начисление по счетчику и возвращаем соответствую ошибку.
  10. Если есть старая бонусная карта, то блокируем ее на БС:
    • если не удалось заблокировать старую бонусную карту на БС, возвращаем соответствую ошибку.
  11. Подтверждаем операцию по переносу накоплений в счетчики:
    • если не удалось подтвердить начисление по счетчику, возвращаем соответствую ошибку.
  • No labels