Я подошел к задаче, используя инструментарий ООП.
Решение состоит из Модели и ее Реализации:
- Интерфейсные классы
CDRsConsumer
,CDRsSupplier
,MSISDNsConsumer
,MSISDNsSupplier
,UDRsConsumer
,UDRsSupplier
- Реализации это соответственно (
H2Storage
,CDRsFileStorage
), (RandomCDRsGenerator
), (H2Storage
), (RandomMSISDNsGenerator
), (GenerateJSONFromUDRs
), (CreateUDRsFromFile
) - Связывает эти две части
ServiceBus
класс.
Присутствует работа с in-memory базой данных H2.
Все звонки, совершенные абонентом сотового оператора, фиксируются в CDR файлы, которые собираются на коммутаторах. Когда абонент находится в роуминге за процесс сбора его данных отвечает обслуживающая сеть абонента. Для стандартизации данных между разными операторами международная ассоциация GSMA ввела стандарт BCE. Согласно ему, данные с CDR должны агрегировать в единый отчет UDR, который впоследствии передается оператору, обслуживающему абонента в домашней сети. На основе этого отчета, домашний оператор выставляет абоненту счет.
- CDR – Call Data Record – формат файла, содержащего в себе информацию о действиях, совершенных абонентом за тарифицируемый период.
- BCE – Billing and Charging Evolution – стандарт обмена роуминговыми данными.
- UDR - Usage Data Report - Отчет об использовании данных;
- msisdn - Mobile Subscriber Integrated Services Digital Number - номер мобильного абонента цифровой сети.
Пример фрагмента CDR:
02,79876543221, 1709798657, 1709799601
01,79996667755, 1709899870, 1709905806
Пример UDR объекта для абонента 79876543221:
{
"msisdn": "79876543221",
"incomingCall": {
"totalTime": "02:12:13"
},
"outcomingCall": {
"totalTime": "00:02:50"
}
}
- Задача 1 - написать сервис, эмулирующий работу коммутатора, т.е. генерирующий CDR файлы.
- Задача 2 - Данные полученные от CDR сервиса передать в сервис генерации UDR. Агрегировать данные по каждому абоненту в отчет.
Ткаченко Никита, 2024