Giter Club home page Giter Club logo

nexignbootcamp-task's Introduction

NexignBootcamp-Task

Решение тестовой задачи для NexignBootcamp 2023

Ссылка на исходники задачи: Тестовая задача Nexign Bootcamp 2023

Общая логика решения задачи по этапам:

  1. Парсинг файла cdr.txt - проверка типа звонка, номера телефона, даты начала/конца звонка и тип тарифа.
  2. Каждую сторку из файла cdr.txt сохраняем в hashMap, где ключ - номер телефона, а значение - список всех звонков с этого номера.
  3. После того, как закончится парсинг файла cdr.txt, сортируем звонки каждого номера по типу звонка и его дате начала.
  4. Сохранем полученные данные в отдельных файлах отчёта в виде таблцы.
  5. Вуа-ля.

Полученный алгоритм можно оптимизировать, поделив файл cdr.txt на несколько блоков. Таким образом эти блоки можно распределить по отдельным потокам, в которых будет работать описаный выше алгоритм приминительно к каждому блоку.

Структура проекта

Весь проект состоит из:

  1. Класс Main - парсинг CDR (cdr.txt), сохранение данных в хеш-таблице и вызов генератора отчётов.
  2. Класс ReportGenerator - сортировка данных и генерация отчётов (.txt) для каждого номера телефона.
  3. Enum TariffType - этот енам отвечает за типы тарифов и вычисление стоимости по минутам и типу звонка (входящий/исходящий)
  4. Record CallDataRecord - единичная CDR запись из файла cdr.txt
  5. CallDataRecordComparator - компаратор для сортировки коллекции (CallDataRecord) по типу звонка и дате начала звонка.

Условие задачи

CDR - сall data record - формат файла, содержащего в себе информацию о времени, стоимости и типа вызова абонента.

В зависимости от вендора, cdr может быть в разном формате, но всегда содержит следующие данные:

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

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

02, 79876543221, 20230321160455, 20230321163211, 11

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

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

Конечная задача будет протарифицировать абонентов: т.е. генерировать файл отчета для каждого абонента, содержащий в себе номер, индекс тарифа, все совершенные звонки в календарном порядке с выпиской их стоимости по тарифу (для безлимита первые 300 минут - 0р, а с 301 уже расчет), продолжительность звонка, итоговая сумма списания.

Для реализации функционала разрешается использовать только средства стандартной библиотеки java (JDK 11). Система сборки - maven. Приложение должно содержать рабочий метод main() для запуска генератора отчетов. Отчеты собирать в директорию reports в корневой папке проекта.

Пример сгенерированного отчёта

Tariff index: 00

Report for phone number 70710126371:

Call Type Start Time End Time Duration Cost
01 2023-02-03 05:55:06 2023-02-03 06:02:49 00:07:43 5.00
01 2023-05-23 21:37:39 2023-05-23 21:45:27 00:07:48 5.00
01 2023-08-24 06:16:23 2023-08-24 06:27:35 00:11:12 5.00
01 2023-09-08 09:38:34 2023-09-08 09:46:13 00:07:39 1.50
01 2023-12-17 20:39:29 2023-12-17 20:47:18 00:07:49 5.00
02 2023-01-17 11:08:27 2023-01-17 11:17:41 00:09:14 5.00
02 2023-03-17 17:52:45 2023-03-17 17:56:11 00:03:26 1.50
02 2023-10-11 14:00:17 2023-10-11 14:10:19 00:10:02 5.00

Total Cost: 33.00 rubles

nexignbootcamp-task's People

Contributors

ktemka1234 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.