Giter Site home page Giter Site logo

nexign-task's Introduction

Nexign Bootcamp Task

Запуск

Запустите приложение следующей командой в корне проекта:

docker compose up

Система CRM будет запущена на http://localhost:8080

Тип аутентификации - Basic Auth

Логин для клиента - его номер, пароль одинаковый - password

Логин и пароль менеджера - manager

Описание задания

Файл CDR (Call Data Record) собирается на коммутаторе - оборудовании, обрабатывающем звонки.

Этот файл содержит следующую обязательную информацию:

  • тип вызова (01 - исходящие, 02 - входящие)
  • номер абонента
  • дата и время начала звонка (YYYYMMDDHH24MMSS)
  • дата и время окончания звонка

Вот пример готовой записи cdr:

02,79876543221,20230321160455,20230321163211

CDR принимает BRT (Billing Real Time).

Получив данные из CDR BRT авторизует абонентов оператора "Ромашка", чей баланс больше 0.

Для этого BRT связывается с базой клиентов в которойесть информация о абоненте: номер, тариф, баланс.

Тарифов всего 4:

  • (06) Безлимит 300: 300 минут - за тарифный период стоят фиксированную сумму - 100р. Каждая последующая минута - 1р.
  • (03) Поминутный: 1 минута разговора - 1.5 рубля.
  • (11) Обычный: Входящие - бесплатно, исходящие - первые 100 минут по 0.5р/минута, после по тарифу "поминутный".
  • (82) Тариф Х: Исходящие и входящие звонки абонентам оператора Ромашка - бесплатно. Всем остальным - расчет по тарифу " поминутный".

После авторизации BRT генерирует файл CDR+, который содержит уже информацию о тарифе абонента и передает его в HRS (High performance rating server).

HRS считает сколько денег нужно списать со счета абонента, исходя из длительности его разговоров и выбранного тарифа и возвращает данные в BRT, который вносит изменения в базу и меняет баланс пользователя на соответствующую сумму.

Есть CRM система, в которой есть два уровня прав: менеджер и абонент.

  • Абонент может пополнить счет и получить детализацию звонков.
  • Менеджер может сменить тариф, создать нового пользователя и выполнять тарификацию.

Описание решения

Решение представляет из себя многомодульный проект с использованием брокера сообщений. Файлы cdr.txt и cdr+.txt генерируются, но отправка данных происходит через брокер сообщений.

К решению приложен файл Swagger-документации

Используемые технологии:

  • Java 17
  • Spring Boot 3
  • PostgreSQL
  • ActiveMQ Artemis

Проект состоит из следующих модулей:

  • cdr: генерация CDR за месяц и оправление в BRT. У модуля есть различные параметры, например, количество сгенерированных номеров. При генерации месяц инкрементируется
  • brt: авторизация абонентов Ромашки, генерация CDR+ и отправка в HRS
  • hrs: расчет вызовов по тарифам абонентов и отправка данных обратно в BRT
  • crm: модуль для управления системой с двумя ролями: клиент и менеджер
  • common: модуль, содержащий общие типы и бины

Данные о клиентах кэшируются в системах BRT и CRM, при этом системы взаимно оповещают друг друга об изменениях в базе данных

Схема базы данных:

img.png

Таблица вызовов соединяется с клиентами через таблицу billing_periods, которая создает новый период при каждой тарификации (при запуске приложения либо при тарификации менеджером)

Пароли клиентов и менеджеров хранятся в единой таблице users, в которой id для клиента является его номер, а для менеджера - его username. Также была сделана таблица user_roles с ролями пользователей

Хранение тарифов

Для хранения тарифа используется 3 таблицы: tariffs, start_period_choice и periods.

Период - это набор параметров тарифа, ограниченный по времени или нет, при этом периоды могут следовать друг за другом. Так, например, Безлимит 300 состоит из двух последовательных периодов - первый имеет ограничение в 300 минут, фиксированную стоимость в 100 рублей и нулевую поминутную стоимость, а второй не имеет ограничения по времени и фиксированной стоимости, но стоит 1.5 рублей за минуту

Таблица start_period_choice предназначена для выбора первого периода тарифа в зависимости от типа звонка, а также того, является звонок внутресетевым или нет

Таким образом система хранения тарифов получилась расширяемой, так как за счет хранения параметров тарификация происходит по одному и тому же алгоритму, который реализован в модуле HRS

Тестирование

В модуле HRS присутствуют тесты на тарификатор. В этих тестах используется Testcontainers, который поднимает базу данных в контейнере с заполненными таблицами, относящимися к тарифам

nexign-task's People

Contributors

aosandy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.