МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
(ДГТУ)
Факультет «Информатика и вычислительная техника»
Кафедра «Информационные технологии»
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
ПОДСИСТЕМА
"ЛИЧНЫЙ
КАБИНЕТ АБОНЕНТА" В УСЛОВИЯХ ОПЕРАТОРА СОТОВОЙ СВЯЗИ»
Тема:
«КОМПЬЮТЕРИЗИРОВАННАЯ
Направление подготовки
09.03.03 Прикладная информатика
Направленность Прикладная информатика в информационной сфере
Обозначение ВКР
Обучающийся
09.03.03.230000.000ПЗ
_______________
Группа ВПИ41
А.А. Черданцева
подпись, дата
Руководитель ВКР
______________
подпись, дата
Ростов-на-Дону
2021
доцент М.В. Привалов
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
(ДГТУ)
Факультет «Информатика и вычислительная техника»
Кафедра «Информационные технологии»
ЗАДАНИЕ
на выполнение выпускной квалификационной работы
Тема: «КОМПЬЮТЕРИЗИРОВАННАЯ ПОДСИСТЕМА "ЛИЧНЫЙ
КАБИНЕТ АБОНЕНТА" В УСЛОВИЯХ ОПЕРАТОРА СОТОВОЙ
СВЯЗИ»
Обучающийся Черданцева Анастасия Александровна
Обозначение ВКР 09.03.03.230000.000ПЗ
Группа ВПИ41
Тема утверждена приказом по ДГТУ от 25 марта 2021 г. №1297-ЛС-О
Срок представления ВКР к защите 23 июня 2021г.
Исходные данные для выполнения выпускной квалификационной работы:
Для разработки проекта ВКР необходимо выполнить ряд задач: проанализировать
предметную область, готовые программные решения, разработать техническое задание.
Далее важный шаг - изучение работы процесса шардирования и биллинговой системы.
Следующий этап – проектирование ИС. Завершающий этап – реализация ПО и проверка
его работы по готовности.
Содержание выпускной квалификационной работы
Введение:
Целью выпускной квалификационной работы является повышение прибыли компании
«Связион» за счет увеличения притока новых клиентов посредством разработки
компьютеризированной подсистемы «Личный кабинет абонента» в условиях оператора
сотовой связи.
Наименование и краткое содержание разделов:
1.
Постановка задачи
Перечисление перечня задач для реализации и списка функций компьютеризированной
подсистемы.
2.
Обзор предметной области
Рассмотрена работа ЛК трех компаний, предоставляющих связь. Описаны плюсы и
минусы готовых продуктов.
3.
Проектирование информационной подсистемы
Описание функциональных и нефункциональных требований подсистемы. Представление
архитектуры системы. Описание ЛМД и ФМД.
4.
Реализация
Обоснование выбора средств реализации ПО. Описание работы реализованных функций.
5.
Безопасность и экологичность работы
Проведение оценки экологичности работы. Расчет системы искусственного освещения.
Мероприятия по улучшению работы труда.
Заключение:
Проведен анализ готовых программных продуктов операторов связи. Определены
основные функции и подфункции подсистемы. Спроектирована база данных MariaDB,
хранящая информацию расценок услуг оператора связи, а также информацию о номерах и
владельцах. Описана структура проекта, опирающаяся на паттерн MVC.
Перечень графического и иллюстративного материалов:
1. Презентация в Power Point
Руководитель ВКР
___________________
доцент М.В. Привалов
подпись, дата
Задание принял к исполнению
__________________
подпись, дата
А.А. Черданцева
Аннотация
Выпускная квалификационная работа посвящена проектированию и
разработке компьютеризированной подсистемы "Личный кабинет абонента"
в условиях оператора сотовой связи.
В ходе проведенного теоретического исследования выполнен анализ
предметной
области,
определены
компьютеризированной
требования
подсистеме,
к
разрабатываемой
обоснованы
и
выбраны
инструментальные средства разработки.
Практическая
заключается
в
значимость
использовании
выпускной
квалификационной
разработанной
подсистемы
работы
клиентами
компании «Связион».
Структура
использованных
работы:
введение,
информационных
5
глав,
ресурсов
из
заключение,
16
перечень
наименований,
3
приложения. Работа содержит 50 рисунков и 32 таблицы.
Annotation
The final qualification work is devoted to the design and development of a
computerized subsystem "Subscriber's Personal account" in the conditions of a
mobile operator.
In the course of the theoretical research, the analysis of the subject area was
carried out, the requirements for the developed computerized subsystem were
determined, and the development tools were justified and selected.
The practical significance of the final qualification work lies in the use of the
developed subsystem by the clients of the Svyazion company.
The structure of the work: introduction, 5 chapters, conclusion, list of used
information resources of 17 titles, 3 appendices. The work contains 50 figures and
32 tables.
Содержание
Введение................................................................................................................ 6
1
Постановка задачи ......................................................................................... 8
2
Обзор предметной области ......................................................................... 10
2.1 Характеристика объекта компьютеризации ....................................... 10
2.2 Обзор программных продуктов ........................................................... 11
2.3 Назначение и цели создания компьютеризированной подсистемы . 23
3
Проектирование информационной системы ............................................. 25
3.1 Основные заинтересованные лица и их потребности........................ 25
3.2 Описание входной и выходной информации ..................................... 27
3.3 Функциональные требования к подсистеме....................................... 28
3.4 Нефункциональные требования к подсистеме ................................... 39
3.5 Архитектура информационной системы ............................................ 40
3.6 Логическая модель данных (ЛМД) ..................................................... 42
3.7 Физическая модель данных (ФМД) ..................................................... 47
3.8 Шардирование ....................................................................................... 62
3.9 Взаимодействие с биллинговой системой .......................................... 63
4 Реализация ....................................................................................................... 70
4.1 Обоснование и выбор средств разработки ......................................... 70
4.1.3 Обзор и выбор средства реализации бизнес-логики приложения 72
4.1.4 Обзор и выбор программных средств реализации интерфейса .... 75
Изм.
Лист
Разраб.
Провер.
№ докум.
Черданцева А..А
Привалов М.В.
.
Подпись
Дата
09.03.03.230000.000 ПЗ
Компьютеризованная
подсистема "Личный кабинет
абонента" в условиях оператора
сотовой связи
Пояснительная записка
Лит.
Лист
Листов
4
128
ДГТУ, кафедра «ИТ»
4.2 Структура проекта ................................................................................ 76
4.3 Программное конструирование ........................................................... 78
4.3.1 Описание программных деталей проекта........................................ 78
4.3.2 Описание контроллеров и представлений ....................................... 79
4.4 Описание информационной системы ................................................. 83
5 Безопасность и экологичность работы ......................................................... 93
5.1 Анализ вредных и опасных факторов, влияющих на работника.
Мероприятия по улучшению условий труда ...................................................... 93
5.2 Проведение оценки экологичности работы и устойчивости к
чрезвычайным ситуациям .................................................................................... 95
5.3 Расчёт системы искусственного освещения рабочего помещения .. 97
Заключение ....................................................................................................... 100
Перечень использованных информационных ресурсов .............................. 101
Приложение А .................................................................................................. 104
Приложение Б ................................................................................................... 112
Приложение В .................................................................................................. 116
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
5
Введение
В ХХI веке люди стали коммуницировать между собой намного
активнее нежели 100 лет назад. В нынешние времена поддержкой связи
между компаниями, странами, семьями, друзьями занимаются операторы
связи. Одними из крупных компании, предоставляющих мобильную связь,
являются: ПАО «Вымпелком», ООО «Т2 Мобайл», ПАО «Мегафон» и др.
Связь – это услуга, которая имеет свои характеристики: цена, объем,
качество. На эти критерии обращают внимание потенциальные абоненты при
выборе оператора. Самый главный критерий - качество. Однако проверить
это можно либо самому, начав пользоваться предоставляемой услугой, либо,
спросив абонентов, уже попробовавших пакеты услуг оператора. На втором
месте цена и объем одновременно. Связью люди будут пользоваться, даже
если цены будут высокие, однако нахождение выгодных условий услуг для
своих потребностей является приятным бонусом, поскольку платить за связь
приходится так же, как и за коммунальные расходы, ежемесячно почти всю
жизнь. Потому поиск баланса между ценой и объемом услуг у того или иного
оператора является важным моментом.
Компании связи дабы облегчить поиск оптимального оператора для
потенциальных клиентов продвигают свои услуги по разным каналам. Для
представления услуг оператор предоставляет горячую линию поддержки
клиентов, использует рекламу, баннеры, занимается увеличением количества
офисов для живой консультации, поддерживает личный кабинет для
«неживой» консультации.
Тема выпускной квалификационной работы связана с личным
кабинетом для абонентов, а именно с его доработкой: внедрением новых
услуг, виджетов, корректировкой уже существующих услуг.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
6
Стандартный личный кабинет абонента выполняет следующие базовые
задачи:
•
«неживая» консультация абонентов;
•
предоставление самостоятельного контроля расходов и смены
состава услуг;
•
информирование абонентов о текущих услугах/тарифах/акциях
оператора;
Результаты работы ЛК:
•
увеличение
прибыли
оператора
и
партнеров
за
счет
демонстрации информации об их услугах в доступном виде (прозрачность
информации – больше доверия, больше гарантии, что потенциальный клиент
подключит пакет услуг);
•
удобство при ознакомлении с условиями услуг связи для людей,
испытывающих
дискомфорт
при
«живом»
общении
или
имеющих
поддержки
клиентов
ограничения здоровья;
•
снижение
нагрузки
горячей
линии
благодаря увеличению процента решенных вопросов самостоятельно
абонентами;
Эффективность работы ЛК абонентов можно увеличить, добавив пару
сервисов, которые заинтересуют еще одну часть клиентов в использовании
ЛК. Источником идей для внедрения новых сервисов и услуг, а также
корректировки уже существующих послужил опыт, приобретенный в ходе
прямого взаимодействия с клиентами.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
7
Постановка задачи
1
Целью выпускной квалификационной работы является повышение
прибыли компании «Связион» за счет увеличения притока новых клиентов
посредством разработки компьютеризированной подсистемы «Личный
кабинет абонента» в условиях оператора сотовой связи. Планируется
обеспечить
увеличение
количества абонентов
благодаря
повышению
удобства работы в ЛК и внедрению новых функций в него, считающихся
полезными на основе многочисленных обращений клиентов.
Перечень задач для реализации:
1.
Анализ предметной области.
2.
Обзор готовых программных продуктов.
3. Разработка технического задания.
4. Изучение шардирования и биллинговой системы.
5. Разработка физической модели данных.
6. Разработка логической модели данных.
7. Программирование алгоритмов работы модулей подсистемы.
8. Проверка работоспособности компьютеризированной подсистемы.
Функции компьютеризированной подсистемы личного кабинета:
• регистрация/вход абонента;
• управление тарифным планом;
• управление перечнем подключенных услуг;
• управление участием в акциях;
• заказ детализации;
• использование других сервисов через виджеты.
Подсистема должна соответствовать следующим требованиям:
• Часто используемые операции необходимо разместить на переднем
плане.
• Подсистема должна быть адаптивна для мобильных устройств и ПК.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
8
В дальнейшем, необходимо разработать версию личного кабинета для
людей
Изм. Лист
с
№ докум.
Подпись Дата
ограниченными
возможностями.
09.03.03.230000.000 ПЗ
Лист
9
2
Обзор предметной области
2.1 Характеристика объекта компьютеризации
Предметной областью является ЛК абонента в условиях оператора
сотовой связи. Компьютеризации подлежат процессы получения сведений об
оказываемых услугах, изменения набора услуг, оплаты баланса.
Особенностью процессов ЛК является то, что данные, с которыми
работает подсистема, должны оставаться конфиденциальными согласно ФЗ
№126. Кроме того, подсистема ЛК абонента взаимодействует с другими ИС
(ИС банка, ИС базовых станций и пр.). Необходимо крайне осторожно
использовать входные данные из других систем. Также важно любое
действие абонента, влекущее за собой финансовые расходы, сопровождать
соответствующими комментариями.
Целью всей работы является реинжиниринг подсистемы ЛК абонента.
Реинжиниринг определяется как фундаментальное переосмысление и
радикальное
перепроектирование
бизнес-процессов
для
достижения
коренных улучшений в основных показателях деятельности оператора связи.
Для достижения этой цели проведен сравнительный анализ ЛК трех крупных
операторов связи: ООО «Т2 Мобайл», ПАО «Вымпелком», ПАО «Мегафон».
Также проведен разбор входящих звонков с негативной реакцией абонента
для выявления его потребностей. Особенное внимание было обращено на
звонки, в которых затрагивались недостатки ЛК.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
10
2.2 Обзор программных продуктов
Для лучшего понимаю разрабатываемой информационной системы
рассмотрим,
сравним
и
проанализируем
аналогичные
разработанные
программные продукты.
2.2.1 Теле 2
—
Tele2
международная телекоммуникационная компания,
оказывающая услуги мобильной связи.
Рассмотрим возможности приложения, которые предоставляет Tele2.
Интерфейс приложения:
•
В профиле номера ниже основной информации расположены
блоки основных операций ЛК (управление услугами, выбор тарифа,
обещанный платеж, пополнение баланса, маркет Теле2 и пр.).
•
Сверху расположены разделы ЛК; выделены по логике.
Рисунок 2.2.1.1 - Навигация ЛК вверху
•
Акции находятся в отдельном разделе, не на главной странице.
•
На главной странице расположены тарифы.
Профиль номера:
•
Номер и ФИО владельца.
•
В профиле номера виден текущий ТП, баланс, остатки пакетов,
дата списания.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
11
Рисунок 2.2.1.2 - Профиль номера
Добавление второго номера в ЛК:
•
Возможность добавить ЛК номера по услуге «Выгодно вместе»,
«Второй номер» или просто сторонний номер по запросу абоненту номера.
Доп. услуги оператора:
•
«Маркет Теле2» – это своего рода биржа, где пользователи
торгуют своими пакетами тарифа, получая ДС на баланс, или приобретают
их по довольно низкой цене.
•
«Второй номер» - услуга приобретения второго номера без
покупки симки, который будет только для входящей связи. Договор
автоматом составляется, данные берутся с договора на первый номер.
•
«Выгодно вместе». Благодаря этой услуге, абоненты, выбрав
одинаковый тариф и объединившись в одну группу, получают скидку
минимум 5 процентов. Чем больше участников, тем больше скидка.
Объединяться могут пользователи связи разных регионов.
Наличие рекламы:
•
Рекламы по минимуму, в основном она расположена в отдельном
разделе, где имеются также предложения партнеров.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
12
Рисунок 2.2.1.3 - Раздел рекламы / акций / скидок
Бонусы:
•
При
длительном
пользовании
связью
абонентом
ему
предлагается услуга «На доверии». Она позволяет уходить в минус на сумму
АП по ТП. После погашения минуса доп. плата за эту услугу не берется.
Данное действо своего рода бонус, который привлекает абонентов
продолжать использовать связь текущего оператора.
Детализация:
•
Возможность заказа детализации за разные периоды.
Рисунок 2.2.1.4 - Выбор периода детализации
•
При отображении детализации звонки на другого оператора
указаны не совсем прозрачно. Если это местный регион, то прост
указывается оператор, иначе указано, что был звонок по России и какой
оператор. Какой регион не указывается.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
13
Интересные разделы:
•
Раздел с отображением всех номеров, оформленных на одного
человека, их баланс, номер договора, дата и место заключения договора.
Плюсы:
•
интерфейс довольно прост, самые главные базовые вещи видны
на ладони;
•
имеются уникальные возможности, которыми абонент может сам
управлять: «Маркет Теле2», «Второй номер», «Выгодно вместе»;
•
удобно, что указаны ФИО владельца номера и другие,
оформленные на него, номера.
Минусы:
•
ФИО владельца и отображение его номеров является и минусом.
Т.к. войти в ЛК можно по смс-коду, имея в руках телефон, т. е. способ входа
в ЛК несложный. Потому может быть опасно, если доступ к ЛК будет иметь
мошенник;
•
детализация: неоднозначно указаны регионы номеров других
операторов.
2.2.2 Билайн
Билайн — торговая марка компании ВымпелКом, под которой её
дочерние компании оказывают телекоммуникационные услуги в России и
странах СНГ.
Рассмотрим возможности приложения, которые предоставляет Билайн.
Интерфейс:
•
Блок с остатками пакетов относительно мал по сравнению с
блоками другой информацией.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
14
Рисунок 2.2.2.1 - Остатки пакетов и блоки с другой информацией
•
Много услуг разных по логике находятся на одной странице. В
профиле номера: пакеты услуг, номер, блок на переход в акции по ТП, блок с
количеством подключенных услуг, акции партнеров.
•
Всплывающее окошко справа внизу сопровождает пользователя
на протяжении всего времени, как абонент находится на странице.
•
Не все ТП представлены в разделе выбора тарифов. Более
бюджетные отображаются только при нажатии на кнопку.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
15
Рисунок 2.2.2.2- Предложение тарифов
•
Низкая прозрачность в описании услуг, влекущих финансовые
потери. На примере ТП «Би+». Указано 3 Гб за 0 руб. / сут. Но на самом деле
такой трафик дается согласно опции «Старт», которая оплачивается отдельно
и не включена изначально в ТП. Нажав на кнопку «Узнать больше»,
информация о ТП не очень прозрачна. Стоимость опции указана в разрыве с
ее пакетами.
Рисунок 2.2.2.3 - Описание ТП «Би+»
Профиль номера:
Изм. Лист
•
Статус номера и причина блокировки.
•
Номер абонента.
•
Баланс, остатки пакетов, текущий ТП.
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
16
Рисунок 2.2.2.4 - Профиль номера Билайн
Добавление второго номера в ЛК:
•
Возможность добавить ЛК номера по услуге «Дели все» или
просто сторонний номер по запросу абоненту номера.
Дополнительные услуги оператора:
•
Услуга «Дели все» позволяет расходовать общие пакеты
Интернета, минут и смс нескольким абонентам в группе («семье»). Однако
не
на
всех
ТП
это
бесплатно.
Услуга
доступна
для
сим-карт,
зарегистрированных в одном регионе страны. Возможно, это зависит от
инженерной реализации услуги.
Наличие рекламы:
•
Имеется реклама партнеров или акций по мобильной связи в
разделах разных по содержанию.
Бонусы:
•
При длительном отсутствии активности на номере, абоненту
предлагают пополнить баланс на определенную сумму и получить вдобавок
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
17
ту же сумму на бонусный баланс, который можно тратить на связь
определенный промежуток времени.
Детализация:
•
Упрощенная детализация на сайте. Указаны платежи и баланс за
выбранный период в месяц. Если имеются расходы по звонкам, то указано
местный это звонок или по России, свой оператор или другой, и пр.
•
Детализация за длительный период выгружается на почту.
•
Не указано, что длительность разговора не округляется в полной
детализации, Т. е. абонент поговорил 1 мин. и 2 сек., так и указано в
детализации, а у абонента списалось из пакета 2 минуты.
Интересные разделы:
•
В разделе настройки указаны PIN и PUK коды номера.
•
В разделе настройки указаны номера, привязанные к текущему
•
Раздел уведомлений в настройках: возможность включить
ЛК.
рассылку смс и писем по определенным выбранным событиям.
•
Возможность включить отправку ежемесячной детализации на
почту.
•
В разделе «Анкета абонента» можно настроить контактный
номер для связи оператора с абонентом в случае необходимости.
•
Возможность
указать
свои
некоторые
личные
данные
(замужем/женат, кто принимает решение при смене ТП на номере и пр.).
Указано, что эти данные используются при дальнейшем подборе полезных
услуг для абонента.
Плюсы:
•
много разных опций имеется в ЛК, которые абонент может
настроить сам;
Изм. Лист
•
статус блокировки номера и его причина указаны;
•
раздел с настройкой уведомлений;
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
18
•
полная и упрощенная детализация;
•
PIN и PUK коды указаны на сайте для разблокировки телефона.
Минусы:
•
большое
количество
опций
хоть
и
хорошо,
однако
их
расположение достаточно запутано; сложный интерфейс;
•
в ЛК не указана стоимость за некоторые услуги. Например,
«Дели все»;
•
доработка: неплохо было бы включить возможность управления
рассылкой об акциях, предложениях подписок по смс. Это актуально для
людей зрелого и пожилого возраста.
•
Много рекламы в неуместных местах;
•
не указан факт отсутствия округления минут в полной
детализации, что путает людей и мешает им корректно следить за своими
расходами.
2.2.3 Мегафон
МегаФон» — российская телекоммуникационная компания,
предоставляющая услуги сотовой связи, а также местной телефонной
связи, широкополосного доступа в Интернет, кабельного телевидения и ряд
сопутствующих услуг.
Рассмотрим
возможности
приложения,
которые
предоставляет
Мегафон.
Интерфейс:
•
Нет кнопки или значка на главном экране, ориентирующего
пользователя, что можно листать вниз, где находятся остальные возможности
ЛК.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
19
Рисунок 2.2.3.1 - Профиль номера Мегафон
•
Нет кнопок/разделов на панели навигации. Имеется две кнопки:
переход на главную страницу ЛК и кнопка с отображением текущего номера,
при нажатии на которую появляется предложение привязки еще одного
номера к текущему ЛК.
Рисунок 2.2.3.2 - Панель навигации ЛК Мегафон
•
Всплывает при загрузке страницы окошко о разрешении
уведомлений.
Профиль номера:
•
Размещение баланса, номера и ФИО владельца.
Добавление второго номера в ЛК:
•
Возможность добавить ЛК стороннего номера по запросу
абоненту номера.
Доп. услуги оператора:
•
«Цифровая карта» - своего рода электронный кошелек для
оплаты услуг в Интернете. По словам абонента, иногда происходит списание
большой комиссии при оплате тех или иных услуг.
Наличие рекламы:
•
Рекламы немного. Находится в разделе акций.
Бонусы:
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
20
•
Игра «Тряси смартфон». Можно выигрывать скидки на ТП, доп.
пакеты услуг, скидки на товары партнеров и прочее. Игра была актуальна до
31.03.2020 года. На данный момент предоставляются скидки на тарифы
исходя из расходов, а также подарки от партнеров.
Детализация:
•
Возможность заказать детализацию разного вида: полную и
упрощенную.
Рисунок 2.2.3.3 - Заказ детализации номера Мегафон
Интересные разделы:
•
Есть раздел, где можно указать номер для связи в случае важных
звонков со стороны оператора (к примеру, если нужна доп. информация для
решения предыдущего обращения клиента).
•
В этом же разделе можно менять ФИО, но на ФИО в договоре это
действие не влияет. Изменения будут отображаться только в ЛК.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
21
Рисунок 2.2.3.4 - Анкета клиента абонента Мегафон
Плюсы:
•
на виду самые востребованные функции;
•
два вида детализаций;
•
минимум рекламы;
•
относительно простой и удобный интерфейс.
Минусы:
•
не обнаружены услуги наподобие «Выгодно вместе» или «Дели
•
отсутствие указателя, что можно листать вниз, где располагаются
все»;
важные услуги;
•
первым расположен блок с функциями управления балансом.
Только далее следует раздел о ТП, который сразу не виден имеется он или
нет;
•
окошко с разрешением уведомлений неудобно.
Проанализировав ЛК трех операторов, можно сделать выводы:
•
Интерфейс не должен быть нагроможден большим количеством
функций, которые только путают людей. На первом плане необходимо
размещать самые главные функции ЛК.
•
Необходимо так или иначе привлекать пользователей в ЛК. Этим
занимаются маркетологи. Но им стоит учитывать, что, представляя ту или
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
22
иную услугу абоненту в ЛК, важно четко, кратко и доступно пояснять
условия акции / услуги.
•
Крайне важно разъяснять действия абонента максимально кратко
и понятно. Особенно те действия, которые в итоге могут принести
финансовые потери.
2.3 Назначение
подсистемы
и
цели
создания
компьютеризированной
Назначение компьютеризированной подсистемы ЛК:
1. Предоставление информации о расходах.
2. Предоставление информации о действующих услугах / ТП / акциях
оператора.
3. Предоставление возможности оплаты услуг, пополнение баланса.
4. Предоставление возможности изменять набор услуг на номере.
Цель создания ПП: повышение прибыли компании «Связион» за счет
увеличения
притока
новых
клиентов
посредством
разработки
компьютеризированной подсистемы «Личный кабинет абонента» в условиях
оператора сотовой связи.
Повышение прибыли планируется путем привлечения новых клиентов
за счет:
•
создания более интуитивно понятного интерфейса ЛК для
сокращения времени поиска информации первой необходимости;
•
снижения нагрузки на операторов первой линии путем внедрения
части функций оператора в ЛК;
•
повышения прозрачности в финансовых вопросах;
•
внедрения новых функций ЛК с точки зрения маркетинга,
основанных на анализе потребностей пользователей.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
23
Увеличение прибыли будет достигнуто:
•
сортировкой информации на сведения первой необходимости и
дополнительные;
выведение
на
передний
план
информации
первой
необходимости;
•
предоставлением
абонентам
возможности
самостоятельно
получать информацию, которую они часто запрашивают при звонке в
поддержку.
•
когда абоненты будут иметь возможность получать информацию
о расходах пакетов связи в простом и понятном виде;
•
Изм. Лист
доработкой структуры ЛК, расширением его функционала.
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
24
Проектирование информационной системы
3
Проектирование информационной системы – это процесс, в ходе
которого определяется архитектура, модули и интерфейсы для системы,
которая удовлетворяет заданным требованиям.
При запуске системы успешный проект должен обеспечить:
•
Безопасность системы.
•
Простота использования.
•
Функциональность системы.
3.1
Основные заинтересованные лица и их потребности
Стейкхолдеры:
•
абонент;
•
оператор первой линии;
•
маркетолог;
•
руководитель операторов первой линии.
Абонент. Главный стейкхолдер, для которого создан ЛК. Их смущает
запутанность в интерфейсе ЛК и отсутствие или низкий уровень
прозрачности описания услуг оператора, что может повлечь за собой
финансовые потери со стороны абонента.
Кроме того, многим пользователям необходима консультация по
подбору ТП. Сами абоненты затрудняются выбрать тариф, который бы
подошел по их потребностям.
Также абоненты часто звонят на линию, чтобы уточнить по какой
причине не работает связь. Одной из таких причин является поломка или
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
25
ремонт БС. Вместо того, чтобы звонить оператору, тратить свое время и
нервы, абоненты могли бы узнавать о наличии временных ограничений связи
в ЛК по адресу.
Оператор первой линии.
Если возникают у абонентов вопросы именно по ЛК, сотрудник
испытывает затруднения в помощи абоненту, поскольку сам плохо
ориентируется в ЛК (одна из причин: сложный интерфейс);
Трудно решить финансовые вопросы абонента на линии без
перерасчета, который требует много времени. Однако в ЛК такой вопрос
тоже часто не решаем, поскольку информация прописана не открыто и
абоненты не верят данным в ЛК. Итог: длительное время разговора или
негатив со стороны клиента. Причина: низкая прозрачность данных ЛК, что
влечет за собой звонок на линию.
Маркетолог. Часто акции, созданные отделом маркетинга, не находят
отзыва в публике. Причины: акция слабо описана, в результате чего
пользователь имеет опасения совершить ошибки и понести убытки, или
акция находится далеко от глаз пользователя, в результате чего абонент
может быть даже не в курсе о ней. Итог: потери компании в случае
маленькой активности абонентов в акции.
Руководитель операторов первой линии. У руководителей есть цели,
которые они обязаны выполнять. Прежде всего это АНТ. Для его сокращения
операторы первой линии рекомендуют ЛК. Но поскольку он сложно устроен,
абоненты перезванивают или задают много вопросов, что увеличивает время
разговора оператора, а в целом и всего отдела. Итог: лишение премии
руководителя, доп. затраты компании на звонки в call-center.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
26
3.2 Описание входной и выходной информации
Входная и выходная информация представлена в виде DFD-диаграмм
на рисунке 3.2.1 и рисунке 3.2.2.
На контекстной диаграмме указаны две главные внешние сущности:
абонент и банк. Абонент задает запрос и получает ответ, а банк получает как
входную информацию запрос на обработку платежа и возвращает результат.
Рисунок 3.2.1 - Контекстная DFD-диаграмма
На нулевом уровне декомпозиции отображен насыщенный обмен
информацией между процессами, хранилищами и внешними сущностями.
5 главных процессов:
Изм. Лист
1.
войти в ЛК;
2.
заказать детализацию;
3.
оплатить баланс через БК;
4.
просмотреть профиль номера;
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
27
просмотреть / изменить набор услуг.
5.
Каждый объект на диаграмме имеет входную и выходную стрелку.
Суть декомпозиции: только после входа в ЛК, введя логин и пароль,
можно запустить один из процессов, тем самым активизируя обмен
информацией, в результате которого абонент получает запрашиваемые
данные.
Рисунок 3.2.2 - Декомпозиция А0 DFD-диаграммы «Получить основные
услуги ЛК оператора связи»
3.3 Функциональные требования к подсистеме
Функциональные требования описаны с помощью IDEF-диаграмм.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
28
Список функций подсистемы:
•
Получить основные услуги ЛК оператора связи.
•
Получить данные профиля номера.
•
Получить основную информацию о номере.
•
Изменить набор услуг.
•
Просмотреть услуги/ТП/акции оператора связи.
•
Выбрать доступный ТП.
•
Выбрать доступную услугу.
•
Выбрать доступную акцию.
•
Использовать виджеты ЛК для получения доп. сведений.
•
Оплатить баланс номера через БК.
•
Заказать детализацию.
Схема взаимосвязи диаграмм представлена на рисунке 3.3.1
Рисунок 3.3.1 - Иерархия диаграмм для «Личного кабинета абонентов»
оператора связи
Модель "Чёрного ящика" приведена на рисунке 3.3.2.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
29
Рисунок 3.3.2 - IDEF0-диаграмма А-0 - контекстная диаграмма вебприложения «Личный кабинет абонентов» оператора связи
Нулевой уровень декомпозиции показан на рисунке 3.3.3.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
30
Рисунке 3.3.3 - IDEF0-диаграмма А0 - Декомпозиция функции «Получить
основные услуги ЛК оператора связи»
Выходные данные из функции «получить данные профиля номера»
идут на вход к остальным функциям.
Таблица 3.3.1 - Выходные данные функций
Выходные данные из функции «получить
данные профиля номера»
Функция-приемник
Текущий набор услуг номера
Изменить перечень подключенных услуг
Баланс номера
Оплатить баланс номера через БК
Электронная почта абонента
Заказать детализацию
Остатки пакетов услуг
Заказать детализацию
Инфо об авторизации
Использовать виджеты ЛК для получения
доп. сведений
Текущие акции на номере
Участвовать в доступных акциях
Текущий ТП номера
Изменить тарифный план
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
31
Декомпозиция представлена семью функциями:
1.
получить данные профиля номера;
2.
изменить тарифный план;
3.
изменить перечень подключенных услуг;
4.
участвовать в доступных акциях;
5.
использовать виджеты ЛК для получения доп. сведений;
6.
оплатить баланс номера через БК;
7.
заказать детализацию.
Диаграмма А1.
На диаграмме представлена декомпозиция функции «получить данные
профиля номера», рисунок 3.3.4. Она представлена двумя функциями:
1.1
авторизоваться;
1.2
получить основную информацию о номере.
Только после авторизации абонента передается его запрос на
получение основной информации о номере во вторую функцию.
Рисунок 3.3.4 - Декомпозиция функции «Получить данные профиля номера»
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
32
Функции диаграммы А12:
1.2.1 получить текущий баланс;
1.2.2 получить статус номера и причину блокировки при наличии;
1.2.3 получить текущий набор услуг;
1.2.4 получить остатки пакетов услуг;
1.2.5 получить текущий ТП номера;
1.2.6 получить текущие акции на номере.
Декомпозиция функции «получить основную информацию о номере»
реализована для того, чтобы показать, что в ИС имеется функция «получить
статус номера и причину блокировки при наличии». Она редко встречается в
ЛК абонента. Однако она помогает сократить частоту задания вопроса
оператору «Почему номер заблокирован?».
Диаграмма А2.
На
перечень
диаграмме
представлена
подключенных
услуг»,
декомпозиция
рисунок
3.3.5.
функции
Она
«изменить
представлена
следующими функциями:
Изм. Лист
2.1
просмотреть услуги оператора связи;
2.2
выбрать доступную услугу;
2.3
отказаться от выбора.
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
33
Рисунок 3.3.5 - Декомпозиция функции «Изменить перечень подключенных
услуг»
Суть декомпозиции: можно просмотреть услуги, потом выбрать то, что
понравилось и доступно, и изменить набор услуг на номере.
По такому же принципу реализованы декомпозиции функций
«Участвовать в доступных акциях» и «Изменить тарифный план».
На диаграмме А211 представлена декомпозиция функции «Выбрать
доступный ТП». Она состоит из четырех подфункций:
2.1.1.1 запросить отображение первым в списке выгодного ТП;
2.1.1.2 запросить отображение ТП с доступными для абонента
скидками;
2.1.1.3 запросить отображение оставшихся ТП;
2.1.1.4 выбрать ТП из предложенных.
Декомпозиция реализована для того, чтобы показать, из какого списка
ТП абонент сможет делать выбор. Смысл такой: первым в списке
отображается выгодный ТП для абонента исходя из его расходов, далее идет
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
34
список ТП с доступными скидками и в конце добавляется список оставшихся
тарифов. Такой способ формирования списка ТП полезен пользователям ЛК,
поскольку так они смогут сами подбирать ТП исходя из того, на что они
ориентированы: оптимальный объем пакетов услуг, скидка, другие цели.
По итогу абонент может сменить тариф, а может и оставить прежний.
На диаграмме А212 представлена декомпозиция функции «Выбрать
доступную услугу». Она состоит из четырех подфункций:
2.1.2.1 получить предложение подключения услуги "Второй номер";
2.1.2.2 получить предложение подключения услуги "Рассылка акций
через смс";
2.1.2.3 получить предложение подключения прочих услуг;
2.1.2.4 выбрать услугу из предложенного списка.
Декомпозиция создана для представления двух важных функций:
подключение второго номера (имеется только у оператора Теле2) и
добровольное (ключевое слово) подключение рассылки акций через смс
(акции на текущий момент рассылаются всем новым абонентам, в том числе
и пожилым).
На диаграмме А213 представлена декомпозиция функции «Выбрать
доступную акцию». Она также состоит из четырех подфункций:
2.1.3.1. получить поощрение для нового пользователя ЛК;
2.1.3.2. получить список акций от партнеров;
2.1.3.3. получить список акций от оператора;
2.1.3.4. выбрать акцию из предложенного списка.
Смысл
составления
декомпозиции:
обозначить
поощрение
(предложение принять акцию) в случае регистрации в ЛК. Цель: увеличить
количество пользователей ЛК, тем самым привлечь абонентов решать
стандартные вопросы самостоятельно. В качестве поощрения можно
предлагать: 5Гб / 50 мин / 25 смс.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
35
Диаграмма А3.
На диаграмме представлена декомпозиция функции «Использовать
виджеты ЛК для получения доп. сведений» , рисунок 3.3.6:
получить доступ к виджетам ЛК;
3.1 проверить статус работы БС оператора;
3.2 проверить регион регистрации и оператора номера;
3.3 проверить скорость мобильного Интернета.
Смысл функции «получить доступ к виджетам ЛК»: если абонент уже
вошел в ЛК, то ему предоставляется доступ к виджетам, если же это гость
веб-приложения, то необходимо как минимум спросить у него номер,
которым он пользуется и код из смс.
Важное замечание: ФЗ №126 «О связи» регулирует функцию
«проверить статус работы БС оператора», согласно которому точные адреса
БС не должны быть известны пользователю.
Краткое описание виджетов.
Проверка работы БС. Эта функция может быть полезна в случае, если
абонент интересуется причиной отсутствия связи. Одной из них может быть
поломка на БС. Абонент может указать свой адрес на карте и узнать,
действительно ли нет связи из-за временных ограничений на БС. В
настоящий момент многие клиенты оператора в такой ситуации звонят в тех.
поддержку, но вопрос в будущем смогут решать самостоятельно.
Проверка региона регистрации и оператора номера. Просмотрено
несколько детализаций номеров. Выяснено, что при указании звонка нечетко
написано номер какого региона звонил. Для выяснения данной информации
абоненты обращаются в call-center. Вопрос решаем самостоятельно на одном
из сайтов, имеющих виджет проверки номера. Было бы удобно включить в
ЛК такой виджет. Также он будет удобен, если пользователь заранее хочет
знать, на номер какого оператора и какого региона он собирается звонить,
дабы заранее понимать, какие расходы повлечет за собой звонок.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
36
Проверка скорости мобильного Интернета. Часто абоненты проверяют
свою скорость через Speed Test. Однако эту функцию можно добавить в ЛК,
дабы все сведения о номере можно было найти на одном портале, не
производя лишних действий. Прежде всего это будет удобно для тех
абонентов, которые оставляют заявку по низкой скорости Интернета в callcenter. Как правило, им перезванивает сотрудник и уточняет скорость,
замеренную через Speed Test. Как показала практика не все абоненты
понимают, что это такое и где это искать.
Рисунок 3.3.6 - Декомпозиция функции «Использовать виджеты ЛК для
получения доп. сведений»
Диаграмма А4
На диаграмме представлена декомпозиция функции «Оплатить баланс
номера через БК», рисунок 3.3.7. Она представлена функциями:
3.2 ввести данные БК;
3.3 ввести сумму начисления;
3.4 получить обработанный запрос от банка.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
37
На декомпозиции представлен вариант реализации оплаты баланса
через БК. Сначала вводятся данные БК (номер карты CVC, срок действия),
далее сумма для зачисления на баланс, отправка запроса в банк и получение
результата попытки оплаты баланса.
Рисунок 3.3.7 - Декомпозиция функции «Оплатить баланс номера через БК»
Диаграмма А5
На
диаграмме
представлена
декомпозиция
функции
«Заказать
детализацию», рисунок 3.3.8. Она представлена функциями:
7.1 выбрать период детализации;
7.2 заказать полную детализацию (все действия с номером);
7.3 заказать упрощенную детализацию (только платные операции);
7.4 получить детализацию на электронную почту.
Особенности:
• максимум можно выбрать период детализации 6 мес.;
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
38
• возможность выбора разной детализации (имеется у компании
«Мегафон»);
• не относится к функциональной части, но важно: указание на
странице / в файле детализации о способе подсчета потраченных минут (с
округлением в большую сторону или без него).
Рисунок 3.3.8 - Декомпозиция функции «Заказать детализацию»
3.4
Нефункциональные требования к подсистеме
Список нефункциональных требований:
•
Надежность.
Время восстановления работоспособности при любых сбоях и отказах
не должно превышать 4-х часов.
Прекращение электропитания на время до 5 минут не должно
приводить к прекращению функционирования ПП.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
39
Отсутствие Интернета на время до 2-х минут не должно приводить к
прекращению функционирования ПП.
•
Масштабируемость.
Горизонтальная масштабируемость, подходящая для расширения вебсистем.
•
Производительность продукта.
Открытие формы – не более 2 сек.
Формирование отчета – не более 5 сек.
Отправка отчета на почту – не более 10 сек.
Сохранение формы – не более 2 сек.
Количество одновременно работающих пользователей – 10.
Количество одновременно работающих пользователей в ЛК одного и
того же профиля – 2.
•
В
Эргономика
дальнейшем
добавить
возможность
взаимодействия
с
веб-
приложением для людей с ОВЗ.
Функции, чаще используемые пользователями, должны быть сразу
доступны им.
•
Ограничения.
Предоставлять детализацию на сайте за месяц (30 дней), не более.
Отправлять детализацию максимум за 6 мес.
Не отображать на экране в предложениях услуги / акции / ТП, которые
имеются на номере.
Не разглашать информацию о местонахождении БС оператора.
Доступ к виджетам только после авторизации или проверки на
существование номера гостя.
3.5 Архитектура информационной системы
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
40
Архитектура информационной системы – концепция, определяющая
модель, структуру, выполняемые функции и взаимосвязь компонентов
информационной системы.
Информационные системы включают в себя три компонента:
•
Клиентский модуль – все, что связано с взаимодействием с
пользователем (нажатие кнопок, отрисовка изображений и др).
•
Серверная часть – правила, алгоритмы реакции приложения на
действия пользователя или на внутренние события, правила обработки
данных.
•
Слой доступа к данным – хранение, выбор, модификация и
удаление данных, связанных с решаемой приложением прикладной задачей.
На рисунке 3.5.1 представлено взаимодействие между компонентами
системы:
Рисунок 3.5.1 – Компоненты информационной системы
Для
личного
кабинета
будет
использоваться
клиент-серверная
архитектура. В отличии от файл-серверной архитектуры клиент-серверная
архитектура
абстрагируется
от
физической
схемы
данных
и
манипулирования данными клиентских программ на уровне логической
схемы.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
41
Клиент-серверная архитектура — вычислительная или сетевая
архитектура, в которой задания или сетевая нагрузка распределены между
серверами и клиентами. К плюсам можно отнести:
•
Полную поддержку многопользовательской работы.
•
Гарантия целостности данных.
Минусы:
•
Бизнес логика приложений осталась в клиентском ПО.
•
Слабая защита данных от взлома.
•
Высокая сложность разработки системы из-за необходимости
выполнять бизнес-логику и обеспечивать пользовательский интерфейс в
одной программе.
На схеме архитектуры ПО, рисунок 3.5.1, клиентский модуль и
серверная часть детализированы и разбиты на модули внутри. Связь между
этими компонентами осуществляется благодаря протоколу HTTPS. HTTPS
расширение протокола HTTP для
поддержки шифрования в
-
целях
повышения безопасности. Виджеты через такое же соединение черпают
данные из сторонних сервисов. Сервис leaflet предоставляет карту
OpenStreetMap, а сайт kody.su позволяет внедрить свой виджет для
определения номера.
С БД сервер связывается с помощью драйвера PDO. В проекте
используется БД, хранящаяся в Ростовском сервере, который представляет из
себя Ростовский шард. СУБД – MariaDB. Для корректной ее работы созданы
триггеры. Для заполнения некоторых данных (таблицы с текущими
ресурсами на номере) берется информация из биллинга.
3.6 Логическая модель данных (ЛМД)
Логическая (даталогическая) модель представляет собой модель базы
данных, которая не привязана к конкретной СУБД. В ней выделяют
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
42
основные объекты БД и определяют связи между этими объектами. Данная
модель построена методом сущность-связь.
Ниже представлена логическая модель базы данных оператора связи.
На рисунке 3.6.1 имеется голубая область, в которой размещены
сущности биллинговй системы, не касающиеся работы ЛК. Они необходимы
для реализации детализации на номере, потому и были включены в проект.
Остальные сущности относятся к базе данных, которая непосредственно
относится к системе расценок оператора мобильной связи и другой
информации, не требующей подсчетов биллинга.
БД содержит в целом 28 сущностей, рисунок 3.6.1. Имеются связи двух
типов: один-к-одному и один-ко-многим. В базе хранится информация:
•
тарифах, услугах, акциях;
•
номерах (основная информация);
•
детализации действий на номере;
•
списаниях.
Далее описаны некоторые моменты сущностей для полного понимания
работы базы.
Номера доступные, занятые, когда-то имеющие владельца, хранятся в
сущности "Все номера». Это своего рода база номеров, из которой абонент
может выбирать уникальную последовательность цифр для использования в
телефонной сети. После приобретения номера абонентом, номер компании
"Связион" попадает в сущность "Активные номера" без удаления из своей
родительской таблицы.
В таблицах, содержащих историю звонков и смс, есть поля абонент А и
абонент Б. В текущем проекте под понятием "абонента А" подразумевается
тот номер, владельцем которого является компания "Связион", а поле
"абонент Б" хранит в себе номер, соединение с которым происходит у
абонента А. Такие сведения находятся в указанных полях не зависимо от
того, входящий сигнал был принят или исходящий послан.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
43
Сущность «Международные зоны» хранит в себе регионы мира,
объединяющие несколько стран, соединение с которыми внутри одной зоны
обходится в одинаковую стоимость. Примеры регионов: страны СНГ, РФ,
США, Европа, Канада и др.
Благодаря сущности «Типы действий на номере» в детализации можно
указать прошел ли междугородний или международный звонок.
Касаемо сущности с историей списаний. В нее записываются записи о
списаниях абонентской платы за тарифы, услуги, акции, мобильные
переводы с номера на номер и пр. Для того, чтобы указать, за что было
списание, в подмогу используется сущность «Типы списаний».
При описании таблиц с текущими услугами или акциями оператора,
используются данные из сущности «Типы изменений на номере». Под
изменением подразумевается, к примеру, какой пакет на номере увеличится в
цифрах или факт бонусного начисления баланса. Изменения пакетов на
номере благодаря акции от партнера происходят реже, потому есть
отдельных два вида изменений – «подарок на стороне партнера» и «иное
действие с номером».
На данный момент акции от партнера и от оператора находятся в двух
разных сущностях, но в дальнейшем есть возможность над этим поработать и
исправить дублирование некоторых полей в двух таблицах путем добавления
третьей связующей сущности.
Однако в базе имеются два объекта, которые упрощают работу с
акциями. Речь идет о скидках на тарифы, они являются выходцами из
таблицы акций оператора. Дело в том, что в сущности акций не указывается
стоимость какого тарифа будет уменьшена, в ней хранится информация о
размере скидки, но не более. Потому была создана сущность «Условия для
предложения акций оператора», через которую связана сущность «Условия
для предложения скидки на тариф». В последней хранится информация об id
условия из первой сущности и id тарифа. В первой сущности есть поле с
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
44
порогом денежных расходов, переступая который, абонент в праве получить
приглашение на участие в той или иной акции. Но, на данный момент
доступность скидки на тариф реализована только через одну сущность «Условия для предложения скидки на тариф».
Важная заметка: стоимость или размер пакетов услуг изменяется
только акциями оператора. Акции от партнеров таких изменений повлечь не
способны.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
45
Рисунок 3.6.1 – Логическая модель данных
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
46
3.7
Физическая модель данных (ФМД)
Физическая модель – СУБД-ориентированная модель БД. Она жестко
связана с конкретной СУБД. При создании ФМД вступают в силу понятия
"таблица", "типы данных", "ограничения" и др.
В проекте используется три базы данных: бд оператора связи, бд
пользователей ЛК и бд с технической информацией оператора связи (базовые
станции).
Рисунок 3.7.1 – Разработанные таблицs базы данных оператора связи
ФМД базы данных оператора мобильной связи распределена в пять
рисунков
согласно
логике
выполнения
задач
с
использованием
соответствующих таблиц и отсутствием свободного места для размещения
всей базы данных на одной странице дизайнера phpMyAdmin.
На рисунке 3.7.2 изображены таблицы со сведениями о доступности
коммуникационных услуг на номере, владельце номера, платежах для
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
47
пополнения баланса, текущих остатках пакетов и пр. основной информации о
номере (дата регистрации номера на владельца, место регистрации и др.).
Рисунок 3.7.2 – Разработанные таблицы с основной информацией о номере
На рисунке 3.7.3 изображены таблицы, информирующие о текущих
предложениях тарифов и услуг оператора. Здесь же имеются записи с
архивными тарифами, у которых выставлена дата закрытия подключения
тарифа. Однако существуют номера с закрытыми тарифными планами,
потому эта информация остается актуальной для хранения.
На том же рисунке представлена таблица с историей о ранее
подключенных тарифных планах на номерах. Архив включает в себя ныне
подключенный ТП на номере. Та же ситуация и с таблицей, хранящей
историю о подключенных услугах.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
48
Рисунок 3.7.3 – Разработанные таблицы с информацией об услугах и тарифах
Таблицы с акциями представлены на рисунке 3.7.4. Цель таблиц схожа
с теми же, которые продемонстрированы на предыдущем рисунке.
Рисунок 3.7.4 – Разработанные таблицы с информацией об акциях
Более сложными являются связи между сущностями, хранящими
историю действий, происходящих на номере, рисунок 3.7.5, что также
усложняет процесс добавления данных в таблицы с детализацией. Дело в
том, что значения многих полей зависят от других таблиц явно (через связи)
и неявно (через триггеры в биллинговой системе).
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
49
Рисунок 3.7.5 – Разработанные таблицы с информацией о детализации
Рисунок 3.7.6 представляет взаимосвязь таблицы с историей списаний с
другими таблицами. В таблице со списаниями имеется 4 поля: id_тарифа,
id_услуги, id_акции_оператора, id_акции_партнера. Одно из этих полей
всегда не пустое, одновременно все поля пустыми или полными быть не
могут.
Рисунок 3.7.6 – Разработанные таблицы с информацией о списаниях
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
50
У двух других баз данных в наличие по одной таблице. В технической
базе данных хранится таблица `base_stations`, рисунок 3.7.7, в которой
описаны координаты местоположения базовых станций, их состояние и
мобильная частота сигнала, от которой зависит дальность работы БС.
Рисунок 3.7.7 – Разработанная таблица базы данных технической
информации оператора связи
В базе профилей ЛК, рисунок 3.7.8, имеется таблица с паролем и
логином абонента в ЛК. Логином может быть, как придуманный
пользователем набор символов, так и номер телефона. В дальнейшем будет
включен вход по электронной почте.
Рисунок 3.7.8 – Разработанная таблица базы данных пользователей ЛК
Поля всех таблиц, их тип и размер представлены в таблицах раздела 3.7
ниже.
Таблица 3.7.1 - аctive_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
id_subscriber
int
11
id_city_registration
int
11
date_registration
date
8
Итого
Изм. Лист
52
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
51
Таблица 3.7.2 - all_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
number
varchar(12)
13
Итого
24
Таблица 3.7.3 - cities
Имя столбца
Тип
Размер (байт)
Id
int
11
Name
varchar(50)
51
Итого
62
Таблица 3.7.4 - communication_on_numbers
Имя столбца
Тип
Размер (байт)
Id
int
11
id_number
int
11
outgoing_call
tinyint
1
outgoing_sms
tinyint
1
incoming_call
tinyint
1
incoming_sms
tinyint
1
internet_access
tinyint
1
Итого
27
Таблица 3.7.5 - conditions_for_promo_tariff
Имя столбца
Тип
Размер (байт)
id
int
11
id_promo
int
11
min_spend_money_for_month
int
11
id_tariff
int
11
Итого
Изм. Лист
44
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
52
Таблица 3.7.6 - cost_for_international_comm
Имя столбца
Тип
Размер (байт)
id
int
11
id_zone
int
11
cost_for_minute
double
8
cost_for_sms
double
8
cost_for_package_Internet
double
8
Итого
46
Таблица 3.7.7 - current_operator_promotions
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(70)
71
subscription_fee
double
8
payment_method
varchar(25)
26
description
varchar(300)
301
inclusion_cost
double
8
date_start_for_activation
date
8
date_end_for_activation
date
8
duration_days_on_number
int
11
id_service
int
11
id_type_promo
int
11
amount_promo
double
8
min_spend_money_for_mon double
th
8
is_oncetime
11
int
Итого
Изм. Лист
501
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
53
Таблица 3.7.8 - current_operator_services
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(50)
51
subscription_fee
double
8
payment_method
varchar(25)
26
description
varchar(400)
401
id_type_change_on_number
int
11
amount_change
int
11
inclusion_cost
double
8
date_start_for_activation
date
8
date_end_for_activation
date
8
auto_disconnect_from_num
ber
varchar(50)
51
Итого
594
Таблица 3.7.9 - current_operator_tariffs
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(25)
26
subscription_fee
double
8
payment_method
varchar(25)
26
description
varchar(500)
501
minutes_package
int
11
internet_package
int
11
sms_package
int
11
date_start_for_activation
date
8
date_end_for_activation
date
8
Итого
Изм. Лист
621
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
54
Таблица 3.7.10 - current_partners_promotions
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(70)
71
id_partner
int
11
subscription_fee
double
8
payment_method
varchar(25)
26
description
varchar(300)
301
inclusion_cost
double
8
date_start_for_activation
date
8
date_end_for_activation
date
8
duration_days_on_number
int
11
id_type_promo
int
11
amount_promo
double
8
min_spend_money_for_month
double
8
Итого
490
Таблица 3.7.11 - current_recources_on_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
balance
double
8
minutes
int
11
sms
int
11
internet
bigint
20
date
date
8
time
time
8
status
int
8
Итого
Изм. Лист
96
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
55
Таблица 3.7.12 - history_calls_on_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
id_place_subscriber_A
int
11
id_place_subscriber_B
int
11
number_B
varchar(13)
14
date
date
8
time
time
8
duration
time
8
cost
int
11
inc_out
varchar(3)
4
id_type_operation
int
25
id_zone_A, id_zone_B
int
11
Итого
144
Таблица 3.7.13 - history_other_withdrawal_on_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
id_tariff
int
11
id_service
int
11
id_o_promo
int
11
id_p_promo
int
11
date
date
8
time
time
8
cost
double
8
additional_info
varchar(50)
51
id_type_withdrawal
int
11
Итого
Изм. Лист
152
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
56
Таблица 3.7.14 - history_sms_on_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
id_place_subscriber_A
int
11
id_place_subscriber_B
int
11
number_B
varchar(13)
14
date
date
8
time
time
8
cost
int
11
inc_out
varchar(3)
4
id_type_operation
int
25
id_zone_A
int
11
id_zone_B
int
11
Итого
136
Таблица 3.7.15 - history_trafic_on_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
id_place_subscriber
int
11
date
date
8
time
time
8
duration
time
8
cost
double
8
waste_mb
int
11
id_zone
int
11
Итого
Изм. Лист
87
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
57
Таблица 3.7.16 - international_call_zones
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(75)
76
Итого
87
Таблица 3.7.17 - operator_promotions_on_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
id_promotion
int
11
date_activation
date
8
date_deactivation
date
8
Итого
49
Таблица 3.7.18 - partners
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(75)
76
Итого
87
Таблица 3.7.19 - partner_payment_systems
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(50)
51
Итого
Изм. Лист
62
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
58
Таблица 3.7.20 - partner_promotions_on_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
id_promotion
int
11
date_activation
date
8
date_deactivation
date
8
Итого
49
Таблица 3.7.21 - payments
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
withdrawal_from
int
50
currency
double
8
date_time_payment
datetime
8
Итого
88
Таблица 3.7.22 - services_on_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
id_service
int
11
date_activation
date
8
date_deactivation
date
8
Итого
Изм. Лист
49
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
59
Таблица 3.7.23 - subscribers
Имя столбца
Тип
Размер (байт)
id
int
11
second_name
varchar(25)
26
first_name
varchar(25)
26
patronymic
varchar(25)
26
sex
varchar(1)
2
birthday
date
8
place_of_residence
varchar(100)
101
series_of_passport
int
10
number_of_passport
int
6
Итого
216
Таблица 3.7.24 - ariff_on_numbers
Имя столбца
Тип
Размер (байт)
id
int
11
id_number
int
11
id_tariff
int
11
date_activation
date
8
date_deactivation
date
8
Итого
49
Таблица 3.7.25 - types_change_on_number
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(50)
51
Итого
Изм. Лист
62
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
60
Таблица 3.7.26 - types_operation_depends_on_place
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(50)
51
Итого
62
Таблица 3.7.27 - types_withdrawal
Имя столбца
Тип
Размер (байт)
id
int
11
name
varchar(50)
51
Итого
62
Таблица 3.7.28 - base_stations
Имя столбца
Тип
Размер (байт)
id
int
11
latitude
varchar(15)
16
longitude
varchar(15)
16
status
int
11
MHz
int
11
Итого
65
Таблица 3.7.29 - user
Имя столбца
Тип
Размер (байт)
id
int
11
username
varchar(255)
256
password
varchar(255)
256
auth_key
varchar(255)
256
id_number
int
11
Итого
Изм. Лист
790
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
61
3.8 Шардирование
Шардирование [4] - это принцип проектирования базы данных, при
котором логически независимые строки таблицы базы данных хранятся
раздельно, заранее сгруппированные в секции, которые, в свою очередь,
размещаются на разных, физически и логически независимых серверах базы
данных, при этом один физический узел кластера может содержать
несколько серверов баз данных.
Существует
вертикальное
(партицирование)
и
горизонтальное
шардирование. Партицирование - большая таблица разделяется на много
маленьких по какому-либо принципу. Горизонтальное партицирование
похоже на вертикальное, единственное весомое отличие – маленькие
таблички лежат в разных базах.
Пояснение работы шардирования на основе партицирования.
Для того, чтобы разделить таблицу, необходимо указать наследование
шарда от базовой таблицы, например: шард table_1 от базовой таблицы table.
Шард не содержит ограничений, индексов и триггеров родителя. В шард
можно добавлять свои собственные поля.
Поставить ограничения. Это будет проверка, что в определенный шард
будут попадать данные только с определенным признаком. Например,
category_id=1. Важно делать ограничение по одному признаку.
Итог: внешне работа не изменилась, но стала быстрее приблизительно,
в среднем, в 3-4 раза.
Деление базы данных на шарды производится по признаку отнесения
номера телефона к тому или иному региону регистрации.
В итоге, активные номера телефонов и соответствующая информация о
них хранятся на разных шардах в соответствии с регионом регистрации. Для
этой задачи применяется горизонтальное шардирование, поскольку поток
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
62
информации за день довольно большой, и для ускорения работы запросов
необходимо раскидать шарды на разные сервера.
Для реализации личного кабинета берутся данные из шарда с
номерами, зарегистрированными в Ростовской области.
Для более корректного хранения информации используются такие
локальные понятия: "временные" шарды и "архивные" для хранения
детализации
номеров
(архивные
—
это
те
шарды,
в
которых
синхронизируются данные давностью больше одного дня от текущего).
Спустя день данные из "временного" шарда необходимо записывать в
"архивный" шард и удалять из начального места хранения.
Каждые 6 месяц информация с таблиц, хранящих сведения о
звонках/смс/выходах в Интернет/списаниях, удаляется с каждого шарда.
Код разделения данных на шарды не приводится, поскольку данный
материал выходит за рамки проекта.
3.9 Взаимодействие с биллинговой системой
Биллинговая система – автоматическая программа, функции которой
заключаются в слежении за прохождением сигналов через соту, их
обработкой и автоматическим расчетом стоимости за предоставленные
услуги.
Для полноценной работы требуется наличие мощных технических
средств, ПО, поддержки в юридической и банковской сферах. Реализация
биллинговой системы требует крайне больших затрат, потому компании
связи зачастую являются монополистами.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
63
Рисунок 3.9.1 - Структура биллинговой системы
Информация
о
совершении
действия
на
номере
и
его
продолжительности записывается коммутатором, после предварительно
обрабатывается и передается в расчетную систему [7]. Расчетная система
формирует чек-лист согласно тарифам оператора, которые указываются при
разворачивании
биллинговой
системы.
В
памяти
системы
хранятся
нормативы, тарифы, информация об услугах, акциях, плюс данные о
клиентах,
заключенных
контрактах
с
абонентами
и
сторонними
поставщиками услуг связи, а также о стоимости совершения действия на
номере (звонок/смс/Интернет и пр.) в зависимости от направления передачи
сигнала (системой должно быть также предусмотрено наличие дилеров: у
них могут быть другие расценки, например, на подключение). Также в базе
собирается и учитывается в расчетах информация о совершенных платежах.
Благодаря этой информации услуги сотовой связи предоставляются тем, кто
за них платит.
По функциональному предназначению биллинговые системы делятся
на три класса: координирующие работу транснациональных звонков,
заказные национального масштаба и системы среднего класса для
региональных сетей.
Биллинговые системы первого класса обеспечивают взаимодействие
сетей на межнациональном уровне, в различных временных зонах, т. е. они
являются мультивалютными и мультиязычными.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
64
Заказные
системы
национального
масштаба
создаются
под
определенного оператора. Оператору может понадобиться новая биллинговая
система, совместимая с уже существующей.
В масштабе региона зачастую применяются стандартные биллинговые
системы. Тем не менее они обладают теми же основными качествами, что и
два предыдущих класса: гибкостью, масштабируемостью, надежностью.
Существует три подсистемы, являющихся основными составляющими
работы биллинговой системы.
Первая,
подсистема
предварительной
обработки
данных.
Она
анализирует исходную информацию о соединении, определяет класс
предоставляемой услуги и параметры трафика (направление вызова,
источник, зоны взаиморасчетов, условия роуминга). В состав данной
подсистемы входит декодер исходной информации о соединениях. Одна из
сложнейших процедур этой подсистемы — поддержка роуминга. Дело в том,
что требуется конвертировать роуминговые записи всевозможных форматов
от разных коммутаторов (с учетом различных стандартов передачи
информации в канале связи) и разных биллинговых систем в тот формат
записи, которым пользуется данная биллинговая система.
Однако многие операторы уходят от роуминга. К примеру, ПАО
«Вымпелком» предоставляет тарифы из новой линейки, согласно которым
даются пакеты услуг, которые тратятся равнозначно по всей РФ, за
исключением
Камчатки
и
Крыма (обслуживание через
БС других
операторов). В случае исчерпания пакетов каждый следующий «шаг»
абонента тарифицируется равноценно, также за исключением тех же двух
регионов.
Современные
различные
биллинговые
телекоммуникационные
системы
услуги,
позволяют
обрабатывать
обеспечивая
удобное
выставление счетов (один клиент — один баланс — один счет).
Вторая, подсистема оперативного управления биллингом. Она дает
возможность автоматически или через оператора системы изменять условия
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
65
услуг связи абонента на коммутаторе (блокировать связь конкретного
абонента или снимать эту блокировку, включать или отменять услугу).
Третья, подсистема оповещения клиентов. С помощью голосовых или
электронных сообщений рассылаются уведомления или объявления, которые
берутся из базы данных.
Перечисленное деление на подсистемы не является «строгим» для всех
биллинговых систем.
Для моделирования работы биллинговой системы были созданы
генераторы записей истории звонков, смс и др. действий на номере с
использованием языка PHP. А также созданы триггеры для изменения
ресурсов номера в случае добавления записи в детализацию.
Первым делом, с помощью кода были заполнены таблицы, хранящие
информацию об истории звонков/смс/выходов Интернета/списаний ДС с
учетом подключенных на номере тарифа/услуг/акций.
В приложении А размещен код для заполнения истории звонков на
номерах Ростовского шарда. Это необходимо с точки зрения проекта для
того, чтобы создать начальную базу для просчета остатка пакетов на тот или
иной день для отображения в личном кабинете, для создания детализации,
для просчета баланса на номере.
Каждый второй номер, с которым взаимодействует номер компании
«Связион», генерируется рандомно за исключением кода номера. Код номера
(первые 3- 4 цифры) берется из списка заранее заданных кодов. Функции
генерации номеров есть в приложениях А.2 и А.3.
Типы звонка: международный, междугородний и внутри одного
региона. В зависимости от номера, с которым было установлено соединение,
выставляется тип звонка. Функция для установки значения типа либо
междугороднего,
либо
внутри
домашнего
региона
представлена
в
приложении А.4.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
66
Дата, время звонка, продолжительность разговора, входящий или
исходящий
звонок,
местоположение
абонентов
А
и
Б
рандомно
инициируются.
Есть две функции: для генерации международного и российского
звонков. Код соответственно приведен в приложениях А.5 и А.6. К
международному звонку относят те соединения, которые включают в себя
следующие условия:
•
абонент А заграницей совершил исх./ принял вх. звонок из любой
страны;
•
абонент А на территории РФ совершил исходящий звонок
заграницу.
В функции также проходит генерация звонка не международного,
когда абонент А звонит абоненту Б (российский номер), который находится
заграницей. Такая запись создается именно в функции board_call, поскольку в
ней удобнее проставлять местоположение заграничного собеседника.
В приложении А.7 показана функция для округления потраченных
минут за один разговор. Это необходимо для того, чтобы вычитать вовремя
проговоренные минуты из пакетов (часы, минуты и секунды в сыром виде не
отнимаются). Благодаря этой процедуре можно следить за генерацией
записей с бесплатным разговором до тех пор, пока имеются минуты в пакете.
Есть еще важный момент, своевременное суммирование актуальных
пакетов услуг на номере. Для этой цели просматриваются на определенный
день совершения звонка имеющиеся на номере тариф + услуги + акции.
Пример получения пакета минут в день обновления тарифа указан в
приложении А.8. Сложность возникла лишь в получении минут с акций,
поскольку в акциях
ставится
автоматически
дата отключения при
подключении. Это дополнительное условие запроса, оно имеет свои
последствия в дальнейшей обработке запроса.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
67
Приложения А.9 и А.10 созданы для демонстрации алгоритмов в
случае, если на номере имеются услуги, меняющие стоимость звонка
(«Звонки внутри сети» и «Звонки в Белоруссию в полцены»).
Заключительным действием в реализации расчетной системы касаемо
звонков является функция вычисления стоимости звонка в приложении А.11.
Согласно коду, проверяется местоположение абонента А. Если он за
пределами РФ, то оплата за звонок высчитывается по тарификации
международных звонков с учетом международных зон. Иначе, происходит
проверка на то, является ли звонок входящим, если так, то стоимость
нулевая, в противном случае, уточняется остаток пакета минут. Когда пакет
пустой, тарификация происходит по базовым условиям, прописанным для
каждого тарифа одинаково: 1 мин. – 1 руб. Базовые условия не меняются по
всей территории РФ, т. е. это распространяется и на междугородние действия
с номера.
Вторым действом было создание триггеров. Триггер [10] – это
хранимая на сервере и запускаемая на нем автоматически процедура. Ее
вызов происходит самостоятельно при попытке изменения данных в таблице,
с которой связан триггер. Модификации данных, влекущие начало
выполнения триггера: добавление, удаление и обновление записи.
В случае совершения действия на номере срабатывают триггеры для
корректного просчета «новых» пакетов услуг. Они все похожи по логике –
вычитать из пакетов цифры, если абонент совершил какое-либо действие на
номере или при списании абонентской платы за услугу. Единственное
отличие: минуты округляются перед вычитанием из пакетов, а при отправке
смс из пакетов вычитается цифра 1 (1 шт.). В платежах наоборот
увеличивается цифра при пополнении баланса.
Важное замечание, если баланс отрицательный, то звонок не может
проходить, значит пакеты не изменятся, в этом случае триггер не сработает.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
68
Касаемо
списаний
АП
ситуация,
следующая:
если
баланс
отрицательный уже, то тогда АП не спишется, если баланс положительный,
но не хватает для полного списания очередного АП, то она спишется один
раз, минус накапливаться не будет. Если баланс после действий на номере
стал отрицательным или положительным, то меняется статус номера:
активный или финансовая блокировка.
Код триггеров можно увидеть в приложениях Б.1 – Б.5.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
69
4 Реализация
4.1 Обоснование и выбор средств разработки
4.1.1 Веб-сервер
Для разработки личного кабинета нужен локальный или удаленный
веб-сервер. Проект расположен на локальном сервере Open Server Panel.
Open Server включает в себя: Apache/MySQL/PHP/phpMyAdmin.
Apache — это сам веб-сервер, который обрабатывает пришедшие от
пользователей запросы и показывает страницы сайтов. Без дополнительных
модулей Apache преимущественно предназначен для показа статичных
страниц, в которых не происходит изменений на стороне сервера.
4.1.2 Обзор и выбор программных средств реализации баз данных
В качестве системы управления базами данных была выбрана MariaDB.
MariaDB
–
это
разработанная
сообществом
и
коммерчески
поддерживаемая ветвь системы управления реляционными базами данных
MySQL. MariaDB обладает следующими преимуществами:
•
Быстрое
развертывание.
MariaDB
можно
развернуть
для
транзакционных, аналитических или гибридных сценариев использования.
•
Изм. Лист
Самая быстрорастущая база данных.
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
70
•
Виртуальные столбцы таблицы.
MariaDB имеет виртуальные
столбцы, которые способны выполнять вычисления на уровне базы данных.
•
Колоночное хранилище. Очень мощное улучшение, которое
позволяет увеличить производительность. Это достигается с помощью
нового типа таблиц, которые представляются не в форме построчного
хранилища, а в форме колоночного хранилища.
•
Бэкенды хранения данных. MariaDB предоставляет несколько
мощных механизмов хранения, которые не доступны в MySQL.
•
Совместимость.
MariaDB
способна
заменить
MySQL
в
существующих приложениях.
Основным соперником для MariaDB при выборе базы данных являлся
PostgreSQL, поскольку он также, как и первая упомянутая база является
прекрасным по мощности и производительности решением в целях
шардирования – партицирования (об этом ниже) - и подходит как СУБД для
сложных систем.
Плюсом PostgreSQL, с точки зрения базы данных оператора мобильной
связи, является тот факт, что запись и чтение данных происходит быстрее,
нежели в MariaDB. Однако вес базы данных больше по объему по сравнению
с MariaDB.
Ниже расположен более структурированный анализ [10] двух баз,
таблица 4.1.2.1.
Таблица 4.1.2.1 – Сравнение MariaDB и PostgreSQL
MariaDB
PostgreSQL
Создана в 1989 году
Разработана на языках С и С++
В системе MariaDB определены серверные
скрипты, которые можно использовать во
время хранения данных.
Создана в 2009 году
Разработана на языке С
В системе PostgreSQL пользователь может
определять функции в соответствии с
требованиями, тогда как эта функция не
поддерживается в системе MariaDB.
Методы разделения, используемые в Методы разбиения, используемые в системе
системе
MariaDB,
включают PostgreSQL, — это разбиение по списку,
горизонтальное разделение, кластер Galera хэшу и диапазону.
и сегментирование с помощью механизма
хранения паука.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
71
Окончание таблицы 4.1.2.1
Система
MariaDB
поддерживает
возможности
оперативной
памяти.
Система MariaDB также легче по
сравнению с системой PostgreSQL.
Система MariaDB не поддерживает
поддержку JSON и вместо этого
использует столбец LONGTEXT, который
работает аналогично JSON.
Система MariaDB используется при
создании базы данных и для поддержки
веб-приложений, платформ электронной
коммерции, а также мультимедийных
сайтов.
В системе PostgreSQL возможности
оперативной памяти не поддерживаются
системой.
Система PostgreSQL поддерживает
поддержку JSON, а также поддерживает
поддержку JSONB.
Система PostgreSQL используется при
построении большой системы, и все
операции, связанные с данными, такие как
операции чтения и записи, могут
выполняться быстро. В основном он
используется в крупномасштабных
приложениях из-за сложности системы.
Вывод: по сути, две базы почти равноценны. Есть небольшие плюсы у
PostgreSQL, которые заставляют задуматься о выборе в ее пользу. Но для
проекта выбрана база данных MariaDB, поскольку она больше сочетается с
языком программирования PHP, который лежит в основе проекта. К тому же
MariaDB
больше
применяется
для
создания
веб-приложений.
И
немаловажный факт, она легче по весу, чем PostgreSQL. Это является
важным замечанием, поскольку данных за день довольно много, и потому вес
имеет значение.
Для работы с базой данных используется phpMyAdmin.
PhpMyAdmin
–
веб-приложение
с
открытым
кодом,
которое
представляет из себя интерфейс для администрирования СУБД MariaDB.
4.1.3 Обзор
приложения
Изм. Лист
№ докум.
и
выбор
Подпись Дата
средства
реализации
бизнес-логики
09.03.03.230000.000 ПЗ
Лист
72
Реализация проекта начинается с выбора языка программирования. Все
зависит от поставленной задачи. Задачей проекта является создание вебприложения. В основном веб-разработчики выбирают между Python и PHP.
PHP уже давно используется, как ЯП для веб-разработки. С помощью
него решаются стандартные задачи передачи данных разными методами
(GET, POST), существуют разные фреймворки с готовым настраиваемым
модулем админки, генерацией кода CRUD и пр. Кроме того у него имеется
большое сообщество. Это большой плюс, т.к. есть помощь под боком.
Python характеризуется более читаемым кодом, умением решать
разные задачи и славится тем, что считается языком общего назначения. На
Python можно свободно осуществить анализ и визуализацию данных
(нередко полезно для сайтов). Также благодаря Python можно реализовать
машинное обучение, порой это является необходимым дополнением при
создании веб-приложения.
Однако, имея разные положительные моменты, Python не так давно
стал обширно применяться в вебе. На тот момент относительно старенький
PHP был ослабленным немного. Но разработчики не стали терять времени и
начали усиленно дорабатывать PHP. Сейчас по производительности Python и
PHP находятся наравне.
Как бы то ни было, выбор был сделан в пользу ЯП PHP, поскольку он
позволяет создавать сложные сайты, готовые к большим нагрузкам, что в
принципе и необходимо. А вторая причина – обширное коммьюнити, что
весьма выгодно для реализации больших проектов в короткие сроки.
После выбора ЯП желательно выбрать фреймворк, нежели писать вебприложение на чистом языке.
Существует два фреймворка PHP: Yii2 и Laravel. Оба поддерживают
архитектурный паттерн Model-View-Controller (MVC). MVC – это шаблон
который предполагает разделение данных приложения, пользовательского
интерфейса и управляющей логики на три отдельных компонента: модель,
представление и контроллер.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
73
Модель - компонент, который служит для извлечения и манипуляции
данными приложения.
Представление
-
компонент,
который
отвечает
за
видимое
пользователю отображение этих данных.
Контроллер
-
компонент,
осуществляющий
управление.
Анализ Laravel.
Плюсы:
•
имеет встроенный сборщик скриптов и scss;
•
встроенный шаблонизатор Blade;
•
гибкое формирование роутов;
•
гибкие возможности для написания REST API;
•
быстро развивается.
Минусы:
•
большой функционал работает через фасады, и IDE-системы не
видят методов и свойств в некоторых классах, показывая предупреждения;
•
изучается немного сложнее Yii2;
•
нет официальной документации на русском языке;
•
нет встроенных генераторов интерфейсов.
Анализ Yii2.
Плюсы:
•
легко изучается, низкий старт разработки;
•
имеет множество встроенных решений для интерфейсов;
•
отличный генератор моделей, контроллеров и CRUD;
Минусы:
•
не очень гибкое формирование роутов;
•
плохо развивается (выход новых версий);
•
слишком склеенные библиотеки для frontend'а с backend'ом.
Yii2 можно использовать в тех случаях, когда нет особо больших
требований к фронтенду, а проект нужно сделать красиво и в сжатые сроки.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
74
Laravel применяется, когда есть особые требования к фронтенду и чуть
побольше времени на разработку интерфейсов. А также при необходимости
полного разделения frontend'a от backend'a.
Поскольку личный кабинет нацелен не столько на красоту, сколько на
удобство размещения информации и ее изменения в случае необходимости
пользователем, то Yii2 вполне подходит. Но главным критерием выбора Yii2
стал факт того, что объем работы велик, а сроки небольшие.
Базовые функции фреймоворка Yii2 [11]:
•
MVC - Модель-представление-контроллер.
•
DAO и ActiveRecord для работы с базами данных. ActiveRecord
позволяет работать с записями таблиц, как с объектами.
•
Перехват и обработка ошибок.
•
Ввод и валидация форм.
•
Аутентификация и авторизация.
•
Использование AJAX, PJAX и интеграция с jQuery.
•
Генерация базового PHP-кода для CRUD-операций.
•
Поддержка тем оформления для их лёгкой смены (подключение
шаблонов HTML).
•
Возможность подключения сторонних библиотек (например,
leaflet.js).
•
Миграции базы данных.
4.1.4 Обзор и выбор программных средств реализации интерфейса
Интерфейс
—
это
совокупность
средств,
методов
и правил,
предназначенных для взаимодействия элементов системы (или целых систем)
между собой.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
75
Графический интерфейс позволяет осуществлять взаимодействие
человека с компьютером в форме диалога с использованием окон, меню и
других элементов управления.
За основу интерфейса взяты язык разметки HTML5 и каскадные
таблицы стилей CSS3. Также используется фреймворк Bootstrap 3.
Bootstrap 3 [12] – это интерфейсный фреймворк, облегчающий
разработку web-приложения, в котором есть различные проектные шаблоны.
4.2 Структура проекта
Проект состоит из контроллеров, обрабатывающих данные, которые
подаются пользователям через представления. Связь с базой осуществляется
благодаря объектам таблиц БД, прописанным в файлах папки 'models'.
На рисунке 4.2.1 продемонстрированы файлы, реализующие паттерн
MVC на практике.
Рисунок 4.2.1 – Структура проекта
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
76
Для сокращения кода в файле /config/web.php прописано подключение
шаблона, рисунок 4.2.2, который появляется на каждой странице сайта.
Благодаря такому механизму нет необходимости писать несколько раз один и
тот же алгоритм отображения навигационной панели.
Здесь же прописывается маршрут файла по умолчанию, то есть тот,
который исполняется при запуске проекта.
Рисунок 4.2.2 – Структура проекта
В этом же файле можно приписывать формат отображения даты во
всем проекте, рисунок 4.2.3. Код устанавливает формат: "день месяц год".
Рисунок 4.2.3 – Структура проекта
Коротко говоря, в файле /config/web.php производится настройка
проекта. Так подключаются и базы данных. Однако файлы js, css, фреймворк
bootstrap прописываются в другой странице кода - assets/AppAsset.php.
Листинг 1 – включение css файлов в проект
public $css = [
'vendor/bootstrap/css/bootstrap.min.css',
'vendor/metisMenu/metisMenu.min.css',
'dist/css/sb-admin-2.css',
...
],
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
77
Листинг 2 - включение js файлов в проект
public $js = [
'vendor/bootstrap/js/bootstrap.min.js',
'vendor/metisMenu/metisMenu.min.js',
'vendor/raphael/raphael.min.js',
...
],
4.3 Программное конструирование
4.3.1 Описание программных деталей проекта
CRUD функции лежат в основе работы личного кабинета абонента
сотовой связи. С помощью взаимодействия пользователя с ЛК создаются
запросы на удаление, изменение, добавление и чтение данных из базы.
Большая часть запросов в действиях контроллеров записана с помощью
Active Record [11]. Благодаря данному подходу реализуется объектноориентированный интерфейс для доступа и манипулирования данными,
хранящимися в базах данных. Класс Active Record соответствует таблице в
базе данных, объект Active Record соответствует строке этой таблицы,
а атрибут объекта Active Record представляет собой значение отдельного
столбца строки.
Представления данных прописаны в файлах папки view. Для более
"живого" взаимодействия пользователя со страницей используется js язык
программирования. В основном для передачи данных из представления в
контроллер
используется
GET-запрос,
реализованный
через
работу
модальных окон.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
78
В Yii2 существует метод yii\helpers\Url::to() для создания ссылок в
приложении, которые будут с большей вероятностью соответствовать
правилам маршрутизации. Также данный метод используется для создания
ЧПУ – человеко-понятного УРЛа. В проекте он используется с целью
передачи информации через GET-запрос.
Листинг 3 – пример создания ссылки с помощью метода Url::to
<?= Url::to(['main/list-tariffs-after-change',
=> $tariff->id])?>
'id_tariff'
В файле с расширением php во фреймворке Yii2 js-код, написанный
внутри этого же файла, вызывается следующим образом:
Листинг 4 – пример вызова js-кода внутри файла с расширением php
function js_for_change_tariff(){
$script_ = <<< JS
$(document).ready(function() {
$("changeTariff").click();
});
JS;
return $script_;
}
$script = js_for_change_tariff();
$this->registerJs($script);
Это основные микро-моменты, на которые необходимо обратить
внимание для понимания работы кода проекта.
4.3.2 Описание контроллеров и представлений
В
приложении
компьютеризированной
В
представлен
подсистемы.
код
Логика
нескольких
работы
функций
страницы
с
отображением профиля номера и страницы, предназначенной для управления
ТП, прописана в контроллере MainController.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
79
При изменении тарифа или остатков пакетов на номере записывается
определенная дата изменения в базу - 19-04-2021. По факту должна писаться
текущая дата. Но сделано иначе умышлено.
Это для того, чтобы дата
изменения была в период апреля-мая, поскольку именно за эти месяцы
хранится детализация на номере. Таким образом можно смоделировать
режим реальной работы системы. Дата за указанный период выбрана
рандомно.
В приложении В.1 имеется код для отображения на главной странице
ЛК текущих пакетов номера: сколько осталось минут, смс, трафика с учетом
имеющихся на номере акций, услуг, тарифа.
На этой же странице отображается и текущий ТП, а именно его
стоимость, дата подключения, название и пр. Потому в action index еще
прописан поиск скидки на ТП, для корректного отображения стоимости АП
за ТП.
Важный момент – статус номера, он также указан. Он меняется в
зависимости от баланса номер. В случае отрицательного баланса, номер
попадает в финансовую блокировку. Есть часть абонентов, которые
обращаются в call-центр и уточняют? почему их номер заблокирован, и
нередко причина тому – отрицательный баланс. Есть, конечно, возможность
проверить баланс по смс, но некоторым абонентам так неудобно, потому
была размещена эта информация в ЛК. Стоит отметить, что при минусе
абонент компании ПАО «Вымпелком» не может зайти в ЛК даже при
включенном Wi-Fi, и потому клиенты порой думают, что сломалось
приложение, что вводит их в заблуждение и принуждает обращаться к
оператору для выяснения причины. Это неудобно.
Action
profile,
размещенный
в
приложении
В.2,
передает
представлению данные о номере: дата регистрации номера, ФИО владельца и
др. Также под этими данными в представлении размещена кнопка для
подключения «Номера мира». В действии проверяется была ли подключена
уже эта услуга. В случае положительного результата в представлении
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
80
отображается второй подключенный номер, иначе остается кнопка с
предложением добавить эту услугу в свой список.
В листинге В.3 размещен код, предназначенный для получения
тарифов оператора. Этот код является одним из самых простых, которые
имеются в приложении В. Сделано это с целью демонстрации формирования
списков услуг, тарифов, акций, которые будет видеть абонент в ЛК. Действие
actionListTariffs вернет все актуальные (не архивные) тарифные планы и тот
ТП, который уже подключен у абонента.
Уже посложнее код в действии actionListTariffsAfterChange. Прежде
чем подключить выбранный тариф, проверяется достаточный ли баланс на
номере. Для смены ТП на номере должен быть баланс больше или равен АП
ТП независимо от того посуточная ли оплата у тарифного плана или
помесячная. Однако спишется она именно с учетом способа оплаты. Если с
балансом все хорошо, то в записи со старым тарифом ставится дата
отключения (19-04-2021) и добавляется новая запись в таблицу «Тарифы на
номерах». Следующий этап – изменение ресурсов на номере. Из текущих
ресурсов вычитается полный пакет старого тарифа, если цифра текущих
пакетов больше, чем цифра пакетов в старом тарифе, иначе просто
обнуляются и записываются полные пакеты нового ТП. Важный момент –
отключение скидки старого тарифа, это тоже прописано в этом действии.
Функция
для
определения
оптимального
тарифа
прописана
в
приложении В.5.
Автоматический подбор тарифа происходит следующим образом.
После вычисления средних расходов за 2 мес. находится разница между
пакетом минут каждого тарифа оператора и реальными расходами минут
абонента. Также происходит вычисление разницы по смс и по Интернету.
Далее находится минимум разницы по каждому пакету и соответствующий
тариф,
предоставляющий
минимальную
разницу.
Если
количество
совпадений подобранных тарифов равно двум, то именно этот тариф и
является оптимальным. Если же количество совпадений равно 1, это значит,
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
81
что на каждый пакет подобран свой тариф. В этом случае, суммируются
разницы смс, минут, Интернета по каждому подобранному тарифу, и
находится минимальная сумма. Оптимальным тарифом является тот,
который стоит напротив минимальной суммы разницы пакетов.
В приложении В.6 вставлен код actionListOPromos контроллера
PromosController.
Перед
отправкой
списка
акций
в
представление
проверяется, подходит ли акция для клиента. А именно проверяются:
•
денежные расходы, проходят ли они заданный порог для той или
иной акции;
•
единоразовая ли акция. Если да, и если она была уже подключена
на номере, то она исключается из списка предложений для абонента;
•
является ли акция скидкой на ТП. В представлении с
предложениями акций отсутствуют скидки на ТП, они размещены на другой
странице;
Только после пройденных проверок отформатированный список акций
предлагается на выбор клиенту.
Действие
actionAddNumberWorld,
код
которого
находится
в
приложении В.7, относится к контроллеру ServicesController. Суть такова:
проверяется подключен ли уже номер без исходящей связи у абонента. Если
нет, то ищется владелец номера, ЛК которого открыт. Далее создается запись
в таблице с активными номерами с одним и тем же владельцем, что у уже
существующего полноценного номера. После происходит отключение
исходящей связи второго номера, и только потом подключается сама услуга
«Номер мира» и списывается за нее АП. Важное замечание: при отключении
услуги «Номер мира» номер без исходящей связи именно удаляется из
таблицы активных номеров. То есть в рамках проекта нет надобности
хранить информацию о предыдущих владельцах номеров.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
82
Скрипт виджета для проверки работоспособности БС размещен в
приложении В.8. Он написан на JS, внедренный в PHP код. Карта из
библиотеки leaflet.js.
Ловятся события мыши при нажатии на карту.
При совершении
события вычисляется расстояние до всех БС от точки расположения абонента
(указывается им на карте). Далее происходит поиск минимального
расстояния. На сайте выдается состояние той БС, которая находится ближе
всего к абоненту.
На
практике,
правда,
все
работает
сложнее.
Абонент
может
подключится и к той соте, которая находится не на самом минимальном
расстоянии от него. Потому могут быть неточности в определении работы
сигнала в зависимости от состояния БС.
Последний листинг В.9 реализует внедрение стороннего сервиса для
определения региона номера и его оператора. Сайт kody.su позволяет
внедрить свой виджет с помощью iframe-кода. В проекте использовался
другой вариант подключения виджета: ссылка встраивалась в объект <a>
HTML кода.
4.4 Описание информационной системы
Навигационная панель размещена слева. Уведомления, которые
приходят пользователю, к примеру уведомление о сообщении от чатоператора, находятся в правом верхнем углу. Там же размещена иконка
человечка, при нажатии на которую появляются функции выхода из ЛК,
просмотра профиля номера и настройка данных пользователей ЛК
(например, почта для отправки детализации).
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
83
Кроме того, на передний план вынесены операции ЛК, которыми чаще
всего пользуются абоненты, рисунок 4.4.1.
Рисунок 4.4.1 – Навигационная панель
На главной
странице, открывающейся после запуска
проекта,
отображены остатки по пакетам услуг, акций, тарифа на номере, баланс и
текущий тарифный план, рисунок 4.4.2. Стоимость тарифа отображена с
учетом наличия скидки на номере. Также указан статус номера абонента:
активный или заблокированный по причине отрицательного баланса.
Рисунок 4.4.2 – Пакеты на номере
На рисунке 4.4.3 изображен профиль номера абонента. Указан сам
номер, регион, дата регистрации номера и ФИО владельца.
ФИО абонента не указано в ЛК у оператора ПАО «Вымпелком». Это
хорошо, с одной стороны, так как оператор усиленно защищает утечку
данных абонента. К тому же доступ в ЛК получить не сложно, имея в руках
найденный телефон с сим-картой, потому что временный пароль ЛК
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
84
приходит на номер в виде смс. С другой стороны, бывают случаи, когда в
большой семье забывается, на кого именно оформлялась сим-карта, а для
оказания некоторых услуг требуется точное ФИО владельца номера, тогда и
возникают сложности, а узнать такую информацию официально, по сути,
невозможно.
Рисунок 4.4.3 – Профиль номера
Под данными о номере размещена кнопка для подключения услуги
«Номер мира». После ее нажатия открывается страница, изображенная на
рисунке 4.4.4. На ней в панели описаны условия работы услуги и свободные
номера для подключения.
Примеры ситуаций, когда может пригодиться «Номер мира»:
•
Разделение делового и личного. Коллеги и клиенты смогут
связаться по второму номеру, а родные и друзья – по основному.
•
Размещение объявлений на сайтах. Покупатели будут звонить на
дополнительный номер, размещенный в объявлении онлайн.
Условия услуги видны на рисунке 4.4.4.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
85
Рисунок 4.4.4 – Подключение услуги «Номер мира»
При наличии достаточного баланса происходит подключение услуги.
«Номер мира» виден в профиле абонента, рисунок 4.4.5. Подключить можно
только один такой номер на одного владельца, т. е. он не привязан к какомуто определенному номеру, он привязан к абоненту.
Рисунок 4.4.5 – Профиль номера после подключения «Номера мира»
В проекте имеется страница с описанием тарифов, один из которых
можно подключить. Предлагается список только доступных, актуальных
тарифных планов. Подключение доступно при наличии достаточного
баланса. Внешний вид страницы представлен на рисунке 4.4.6.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
86
Рисунок 4.4.6 – Список тарифов
Управление списком подключенных услуг по реализации похоже на
управление ТП. Единственное, при подключении услуги в дополнение может
списываться оплата за подключение, а не только АП за услугу, как у
тарифных планов. На рисунке 4.4.7 изображена услуга, позволяющая
подключить рассылку акций через смс. У многих операторов эта услуга на
номерах ставится автоматически. Однако большая часть абонентов на это
жалуется. Потому у оператора «Связион» эта услуга ставится на номер
только по воле клиента.
Рисунок 4.4.7 – Предложение услуг
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
87
Перед подключением услуги/тарифа/акции абонента спрашивают,
уверен ли он, что хочет подключить тот или иной сервис. Подтвердить свое
решение он может в модальном окне, подобно тому, которое изображено на
рисунке 4.4.8.
Рисунок 4.4.8 – Окно подтверждения подключения услуги
Одним из виджетов ЛК является модуль определения региона и
оператора номера. Используется сторонний сервис, предоставляемый сайтом
kody.su. Определяются как российские номера, так и зарубежные. Форма
ввода номера представлена на рисунке 4.4.9.
Рисунок 4.4.9 – Виджет для определения региона и оператора номера
Результат работы виджета ЛК для определения сведений о номере на
рисунке 4.4.10.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
88
Рисунок 4.4.10 – Результат работы виджета для определения региона и
оператора номера
Часть пользователей обращается в call-центр для уточнения, какой
номер им звонил или к какому региону относится номер, на который они
планируют позвонить. Однако благодаря этому виджету эту информацию
можно получить, не тратя 10 минт ожидания ответа от оператора.
Второй виджет также позволяет пользователям самостоятельно решить
свой вопрос. Зачастую, когда портится связь, абоненты звонят на горячую
линию. Причина отсутствия связи может быть массовой в случае поломки
БС. Как раз для проверки состояния БС и придуман сервис с картой.
Пользователь указывает мышкой интересуемое местоположение, и ему
выдается информация о работе близлежащей БС, рисунок 4.4.11. Варианты
результата работы виджета:
Изм. Лист
•
временные затруднения на БС;
•
отсутствие рядом БС компании "Связион»;
•
БС в рабочем состоянии.
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
89
Рисунок 4.4.11 - Виджет для определения работоспособности близлежащей
БС
Важное замечание по поводу виджета с картой: на ней не указывается
покрытие оператора или конкретное расположение БС (конфиденциальная
информация).
На сайте ЛК реализована функция по автоматическому
подбору
тарифа на номер в зависимости от расходов абонента за последние 2 месяца.
Подбирается тариф так, чтобы его пакеты превышали или были равны
расходам клиента. Если абонент немного превышает свой текущий пакет, то
ему все равно подбирается ТП, где пакеты будут больше, даже если разница с
расходами будет большая. Дело в том, что некоторые клиенты остро
реагируют, если их новый тариф, подобранный специалистом на горячей
линии, вышел хоть на одну минуту за пределы пакетов предоставляемого
тарифа.
Касаемо внешнего вида страницы: она содержит в себе информацию о
последних расходах, чтобы абонент мог убедиться, что подобранный тариф
подходит, и само собой предложенный системой тариф, рис. 4.4.12.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
90
Рисунок 4.4.12. – Подбор тарифа по расходам клиента за последние 2 месяца
Предложение скидок на тариф формируется также на основе расходов
абонента, но только уже денежных расходов. Скидки – это акции от
оператора. Они имеют свой минимальный порог трат ДС со стороны клиента.
Если пользователь переступит этот порог, оператор вправе предложить
скидку на тариф или услугу. После соглашения на подключение скидки,
абонент не может самостоятельно отключить ее. Такое возможно только
через оператора на горячей линии. Рисунок страницы с предложением скидок
на ТП имеется на рис. 4.4.13.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
91
Рисунок 4.4.13 – Предложение тарифов со скидками
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
92
5 Безопасность и экологичность работы
5.1 Анализ вредных и опасных факторов,
работника. Мероприятия по улучшению условий труда
влияющих
на
Безопасность жизнедеятельности – это область знаний, в которой
изучаются опасности, которые могут угрожают человеку и природе, а также
закономерности их существования и способы защиты от них.
Целью БЖД как науки является защита человека в техносфере от
различных
негативных
происхождения,
а
воздействий
также
антропогенного
достижение
и
естественного
комфортных
условий
жизнедеятельности.
Во время трудовой деятельности работник может подвергнуться
различным опасным и вредным производственным факторам. Опасные
производственные факторы – это факторы, которые могут привести человека
к различным смертельным и не смертельным травмам, а вредные
производные факторы – это те факторы, которые способны привести
человека к различным хроническим и острым заболеваниям.
Весь свой рабочий день работник проводит в офисе за работой. Для
обеспечения
комфортных
условий
работник
должен
выполнять
определенные мероприятия:
•
Осуществлять вентиляцию рабочего места.
•
Совмещать искусственное и естественное освещение.
•
Поддерживать правильную температуру на рабочем месте.
•
Правильно разместить мебельную гарнитуру.
•
Устраивать физкультурные минутки.
При осуществлении рабочей деятельности опасными и вредными
факторами могу являться:
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
93
Таблица 5.1.1 – Вредные факторы
№
Фактора
1
2
3
Факторы
Химические факторы
Физические факторы
Психофизиологические
факторы
Характеристики
опасных факторов
Пыль
Шум, вибрация
Нервнопсихические
перегрузки
Степень опасности
Средняя
Средняя
Высокая
Вся трудовая деятельность может делится на различные классы.
По степени тяжести трудовая деятельность делится на: легкую
(включает в себя оптимальные физические нагрузки), среднюю (включает в
себя допустимые условия физической нагрузки) и тяжелую (вредные условия
труда). По видам труда на физический (труд, который включает в себя
динамическую и статическую работу) и умственный (труд, включающий в
себя эмоциональные и мыслительные компоненты).
Деятельность разработчика относится к труду средней тяжести.
Основные нагрузки на разработчика носят психофизиологический характер.
Для поддержания собственного здоровья временами следует отвлекаться от
рабочего процесса, выполняя простые физические упражнения. Это позволит
избавиться от усталости и утомления.
Немало важным фактором является процесс улучшения условий труда
работника работодателем. Работодатель способен создать благоприятную
рабочую среду для своих работников. Существуют различные методы, по
улучшению рабочей среды такие как, технические (обновление рабочего
оборудования),
технологические
санитарно-гигиенические
поддержания
(внедрение
(установка
микроклимата),
автоматических
климатической
социальные
(поддержка
систем),
техники
для
инициатив),
эстетические (создание зон отдыха, декор помещения).
Подводя итог, можно сказать, что работник должен следить за своим
здоровьем (держать правильную осанку, устраивать небольшие перерывы и
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
94
т.д.), но также и работодатель должен обеспечить своему работнику
необходимые условия труда для повышения его эффективности.
5.2 Проведение оценки экологичности работы и устойчивости к
чрезвычайным ситуациям
Экологичность работы – это качество, отражающее способность не
наносить вреда окружающей природе.
Для своей работы программист использует специальное оборудование
(ноутбук или компьютер), который оставляет углеродный след. Углеродный
след – это сто совокупность парниковых газов, произведенных прямо и
косвенно человеком, организацией или продуктом. Ноутбук, используемый
программистом, оставляет слабый углеродный след, и эффект от испарений
минимальный.
Чрезвычайная ситуация - это обстановка на определенной территории,
сложившаяся
в
результате
аварии,
опасного
природного
явления,
катастрофы, распространения заболевания, представляющего опасность для
окружающих, стихийного или иного бедствия, которые могут повлечь или
повлекли за собой человеческие жертвы, ущерб здоровью людей или
окружающей среде, значительные материальные потери и нарушение
условий жизнедеятельности людей.
Во время трудовой деятельности на рабочем месте, можно выделить
следующие чрезвычайные ситуации:
1.
Опасность поражения электрическим током – в процессе
использования или проведения технических работ человек может коснуться
частей, находящихся под напряжением.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
95
Возможность возникновения пожара - обусловлена наличием на
2.
рабочем месте программиста возгорающихся предметов (деревянный стол,
стул, бумага, изоляция электрических проводов).
Землетрясения
3.
–
обусловлено
вероятностью
сдвига
тектонических плит.
В
нашем
случае,
особую
опасность
будет
представлять
ЧС
техногенного характера, в особенности пожары. Для предотвращения таких
ЧС используются системы автоматического пожаротушения. Целью их
применения является быстрая локализация и тушение очагов возгорания,
сохранение жизней людей и животных, а также движимого и недвижимого
имущества.
Классификация автоматических установок пожаротушения производится
по следующим критериям:
По огнетушащему веществу:
•
Водяные.
•
Порошковые. Их принцип действия основан на подаче в очаг
возгорания мелкодисперсного порошкового состава;
•
Газовые. При обнаружении очага возгорания установка подаёт
туда огнетушащий газ, который вытесняет из помещения кислород, что
приводит к угасанию огня. Газовые установки применяются для тушения
помещений с дорогостоящим оборудованием;
•
Пенные. В этом случае для тушения пожара используется пена,
которая накрывает пламя и ограничивает к нему доступ кислорода;
•
Аэрозольные.
В
них
в
качестве
огнетушащего
вещества
используют тонкодисперсный порошок.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
96
Как правило, перед началом проектных работ, в ходе осмотра помещения
и общения с заказчиком выясняют:
•
Что тушить?
•
Могут ли быть в помещении люди?
•
Какова категория помещения по пожаробезопасности?
В нашем случае лучше будет использовать газовую систему
пожаротушения, а конкурентно – газовую систему пожаротушения хладоном.
Хладон не образует токсичных веществ и не вытесняет кислород. Он
безопасен для человека и широко применяется для ликвидации горения на
объектах различного назначения. Идеальное решение проблемы.
5.3 Расчёт
помещения
системы
искусственного
освещения
рабочего
Проведем расчёт системы освещения для нашего помещения.
Помещение имеет длину (А) равную 16 м, ширину (B) равную 8 м и высоту
(h) равную 4 м. Коэффициент отражения потолка равен 30, коэффициент стен
равен 10, коэффициент пола равен 10. Высота рабочей поверхности равна 0,8
метра, а расстояние светового центра от потолка равна 0,25.
Для начала рассчитаем высоту подвеса светильника на рабочем месте
по формуле:
Получаем
= 2,4 м – это высота подвеса над рабочей поверхностью.
Далее по формуле определяем индекс помещения:
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
97
В итоге получаем i =2,2. Исходя из полученных данных мы можем
определить коэффициенты K и
(определяются по таблицам). K=1,3, а =48.
Определяем оптимальное расстояние L между рядами светильников по
формуле:
Получаем оптимальное расстояние (L) равное 2,64. Расстояние от стен
до ближайшего ряда ≥ 0,3L, и равно 0,792.
Далее определяем число светильников по формуле:
Для начала подсчитываем Nш и Nдл:
,
В ходе подсчётов получаем значения
=3,03 и
=
. Находим
N: N=9*3 = 27 – столько понадобиться светильников.
Определяем световой поток для одной лампы по формуле:
Световой поток одной лампы равен 2118 л. Сверяем данные,
полученные с таблицей, и получается, что нам нужны люминесцентные
лампы с излучением белого цвета и получаем 2180 лм.
Проверяем, чтобы световой поток соответствовал соотношению:
= (0,9-1,2) *
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
98
Согласно условию
. должен быть в промежутке между
числами: 1962 и 2616. Условие совпадает.
Определяем
соответствие
проектируемой
системы
освещения.
Освещение должно удовлетворять требованиям при условии Eф≥Eн.
Подсчитываем коэффициент Eф по формуле:
И получаем значение
=299,93. После округления
= 300лк.
Следовательно, условие для фактического освещения выполнено.
Определяем потребляемую мощность осветительной установки по
формуле:
Получаем P = 2025 Вт.
Рисунок 5.1 – Схема размещения светильников в помещении
Мощность, потребляемая осветительной установкой, составляет 2025
Вт. Осветительная установка состоит из 27 светильников, в которых
находятся две лампы. Лампы расположены в помещении в три ряда,
расстояние между рядами составляет 2,64 м.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
99
Заключение
1. Проведен анализ готовых программных продуктов операторов
связи. Выявлены минусы и плюсы ЛК трех компаний. Также осуществлен
анализ обращений абонентов на горячую линию с целью выявления
потребностей.
2. Определены основные функции и подфункции подсистемы.
Графически представлены с помощью IDEF0. Основные функции:
управление ТП, списком услуг, участие в акциях, просмотр профиля
номера, использование виджетов.
3. Спроектирована база данных MariaDB, хранящая информацию
расценок услуг оператора связи, а также информацию о номерах и
владельцах. Описана работа биллинговой системы, фиксирующей входящие
и
исходящие
действия
на
номере.
Реализованы
триггеры
для
разработки
веб-
своевременного просчета текущих ресурсов на номере.
4.
Проанализированы
различные
средства
приложений, БД. Обоснован выбор следующих инструментов: Apache,
MariaDB, PHP, Yii2, Bootstrap 3, JS, CSS, HTML. Описана структура
проекта, опирающаяся на паттерн MVC. Графически представлены
реализованные
функции
подсистемы,
одни
из
самых
интересных:
автоматический подбор тарифа, виджет для проверки работоспособности
БС, подключение услуги «Номер мира». В приложении В приложен код.
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
100
Перечень использованных информационных ресурсов
MongoDB Sharding Guide - [Электронный ресурс]. URL:
1.
https://coderlessons.com/articles/programmirovanie/mongodb-sharding-guide,
свободный – (21.06.2021).
2.
Yandex.Cloud
[Электронный
-
ресурс].
URL:
https://cloud.yandex.ru/docs/managed-clickhouse/concepts/sharding , свободный
– (21.06.2021).
Бойченко А. В., Рогожин Д. К., Корнеев Д. Г. Метрики для
3.
динамического масштабирования баз данных в облачных средах –
CyberLeninka,
2014
-[Электронный
ресурс].
URL:
https://cyberleninka.ru/article/n/metriki-dlya-dinamicheskogo-masshtabirovaniyabaz-dannyh-v-oblachnyh-sredah/viewer, свободный - (21.06.2021).
Остонов М. Б., Ахмедов Ж. C. Обеспечение надёжности уровня
4.
данных путём масштабирования на примере информационной системы
оператора роуминга – Universum: технические науки, авг. 2020 [Электронный ресурс]. URL: https://cyberleninka.ru/article/n/obespechenienadyozhnosti-urovnya-dannyh-putyom-masshtabirovaniya-na-primereinformatsionnoy-sistemy-operatora-rouminga/viewer, свободный - (21.06.2021).
Ильин Д. Ю., Никульчев Е. В., Колясников П. В. Выбор
5.
технологических решений для разработки программного обеспечения
распределенных информационных систем– Современные информационные
технологии
и
ИТ-образование,
2018
-[Электронный
ресурс].
URL:
https://cyberleninka.ru/article/n/vybor-tehnologicheskih-resheniy-dlya-razrabotkiprogrammnogo-obespecheniya-raspredelennyh-informatsionnyh-sistem/viewer,
свободный - (21.06.2021).
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
101
Косоруков К.Е., Шурыгин В.Н. Разработка модуля биллинговой
6.
системы для визуализации текстовых данных - Вестник Московского
государственного университета печати, 2013 - [Электронный ресурс]. URL:
https://cyberleninka.ru/article/n/razrabotka-modulya-billingovoy-sistemy-dlyavizualizatsii-tekstovyh-dannyh/viewer, свободный - (21.06.2021).
Дядюнов М. Д. Архитектура биллинговой системы для
7.
мобильной связи – CyberLeninka, 2019 - [Электронный ресурс]. URL:
https://cyberleninka.ru/article/n/arhitektura-billingovoy-sistemy-dlya-mobilnoysvyazi/viewer, свободный - (21.06.2021).
Фомин И. Н. Объектно-реляционное отображение расчётных
8.
моделей
в
корпоративных
информационных системах энергетических
предприятий – Прикладная информатика, 2015 г - [Электронный ресурс].
URL:
https://cyberleninka.ru/article/n/obektno-relyatsionnoe-otobrazhenie-
raschyotnyh-modeley-v-korporativnyh-informatsionnyh-sistemahenergeticheskih-predpriyatiy/viewer, свободный - (21.06.2021).
Ахмадуллин Д. Ф. Системы управления проектами: анализ
9.
существующих программных решений - StudNet Общество с ограниченной
ответственностью «Электронная наука», 2020 г. - [Электронный ресурс].
URL:
https://cyberleninka.ru/article/n/sistemy-upravleniya-proektami-analiz-
suschestvuyuschih-programmnyh-resheniy, свободный - (21.06.2021).
10.
Шварц Б., Зайцев П., Ткаченко В. "MySQL. Оптимизация
производительности" – Символ-плюс, 2010 г. - [Электронный ресурс]. URL:
https://vk.com/doc10903696_294304201?hash=3eddd5c01e61641d02&dl=db28f
be945dfde5c3b, свободный - (21.06.2021).
11.
Полное руководство по Yii 2.0 - [Электронный ресурс]. URL:
https://www.yiiframework.com/doc/guide/2.0/ru, свободный – (21.06.2021).
12.
Bootstrap 3 - [Электронный ресурс]. URL: http://bootstrap-3.ru,
свободный – (21.06.2021).
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
102
13.
Font
Awesome
-
[Электронный
ресурс].
URL:
https://fontawesome.ru, свободный – (21.06.2021).
14.
Leaflet
-
[Электронный
ресурс].
URL:
https://mourner.github.io/Leaflet/index.html, свободный – (11.02.2021).
15.
Crickard P. Leaflet.js Essentials – Packt Publishing Ltd, 2014. -
[Электронный
ресурс].
URL:
https://www.programmer-books.com/wp-
content/uploads/2019/05/Leaflet.js-Essentials.pdf, свободный - (11.02.2021).
16.
Derrough J. Instant Interactive Map designs with Leaflet JavaScript
Library How-to – Packt Publishing Ltd, 2013. - [Электронный ресурс]. URL:
https://www.sites.google.com/site/tibbfecvonas/home/instant-infwfyoazvajixfvap, свободный - (11.02.2021).
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
103
Приложение А
Листинг работы биллинговой системы
Листинг А.1 - Коды номеров для генерации номеров
$russian_codes = array("951", "996", "928", "961", "906",
"908", "952", "988", "957", "958", "929", "938");
$france_codes = array("553", "322", "381", "384");
$belarus_codes = array("1716", "2334", "1775", "1774");
$usa_codes = array("207", "610", "517", "810");
Листинг А.2 - Функция для генерации номера
function generate_number(){
global $russian_codes;
srand((float) microtime() * 10000000);
$start_numb = $russian_codes;
$numb_el = array_rand($start_numb);
$end_numb = rand(1000000, 9999999);
global $start_;
$start_ = $start_numb[$numb_el];
$number = "".$start_numb[$numb_el]."".$end_numb;
return $number;
}
Листинг А.3 - Функция для генерации международного номера
function generate_internat_number(){
srand((float) microtime() * 10000000);
global $france_codes, $usa_codes, $belarus_codes;
global $id_zone_B;
$start_numb_fr_usa = array_merge($france_codes,
$usa_codes);
$start_numb = array_merge($start_numb_fr_usa,
$belarus_codes);
$numb_el = array_rand($start_numb);
$count_numbs = 10 - strlen($start_numb[$numb_el]);
$start_threshold = (int)(9999999999 / pow(10, (10
- $count_numbs)));
$end_threshold = pow(10, $count_numbs - 1);
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
104
$end_numb = rand($start_threshold,
$end_threshold);
global $start_;
if(in_array($start_numb[$numb_el],
$belarus_codes)){
$prefix = 375;
$id_zone_B = 1001;
}
if(in_array($start_numb[$numb_el], $usa_codes)){
$prefix = 1;
$id_zone_B = 1004;
}
if(in_array($start_numb[$numb_el],
$france_codes)){
$prefix = 33;
$id_zone_B = 1003;
}
$start_ = $prefix;
$number = $prefix."".$start_numb[$numb_el]."".$end_numb;
return $number;
}
Листинг А.4 - Функция проверки звонка на выявление типа
function is_intercity_call($id_A, $id_B){
$id_cities_rostov = array(1, 4, 19, 20, 21, 25,
26, 27, 28, 29, 30, 31);
$id_cities_krasnodar = array(5, 16, 17);
$id_operation = 1;
if(in_array($id_A, $id_cities_rostov) &&
in_array($id_B, $id_cities_rostov) ||
in_array($id_A, $id_cities_krasnodar) &&
in_array($id_B, $id_cities_krasnodar)){
$id_operation = 2;
}
return $id_operation;
}
Листинг А.5 - Функция генерации записи международного звонка
function board_call($temp_count_) {
global $arr_id_zones;
global $day, $month, $year;
global $id_zone_A, $id_zone_B;
global $id_place_A, $id_place_B;
global $inc_out;
global $numb_, $date, $time, $duration, $id_operation;
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
105
$inc_out = inc_out_call();
$id_operation = 3;
$duration =
duration_call();
$hour +=
$hour_;
$minute +=
$minute_;
$second += $second_;
$time = time_call();
$day++;
random_day_from_4_or_5_month();
$date = create_date($day, $month, $year);
get_minutes_from_services();
get_minutes_from_operator_promos();
get_minutes_from_partner_promos();
// изменения пакета в зависимости от даты обнов
тарифа
global $month_new_pack_tariff, $min_tar_numb,
$temp_minute, $id;
if($month_new_pack_tariff != $month && $day >= 1){
$month_new_pack_tariff = $month;
$temp_minute += $min_tar_numb[$id];
}
if(rand(0,1) == 0){
if(rand(0,1) == 0){
$numb_ = generate_internat_number();
$id_place_B = NULL;
}
else{
$numb_ = generate_number();
$el = array_rand($arr_id_zones);
$id_zone_A = $arr_id_zones[$el];
$id_place_A = NULL;
}
}
else {
$el = array_rand($arr_id_zones);
$id_zone_A = $arr_id_zones[$el];
$numb_ = generate_internat_number();
$id_place_A = $id_place_B = NULL;
}
$day++;
random_day_from_4_or_5_month();
}
Листинг А.6 - Функция генерации записи звонка между российскими
номерами
function russian_call($id_zone_A_, $id_zone_B_,
$temp_count_){
global $arr_id_cities;
global $day, $month, $year;
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
106
global $id_place_A, $id_place_B;
global $inc_out;
global $numb_, $date, $time, $duration,
$id_operation;
srand((float) microtime() * 10000);
$id_place_A =
$arr_id_cities[array_rand($arr_id_cities)];
srand((float) microtime() * 1000000);
$id_place_B =
$arr_id_cities[array_rand($arr_id_cities)];
$numb_ = generate_number();
$inc_out = inc_out_call();
$id_operation = is_intercity_call($id_place_A,
$id_place_B);
$duration = duration_call();
$hour += $hour_;
$minute += $minute_;
$second += $second_;
$time = time_call();
$date = create_date($day, $month, $year);
}
Листинг А.7 - Функция округления минут длительности звонка
function round_minutes(){
global $hour_, $minute_, $second_;
$minutes = $minute_;
if($second_ > 0){
$minutes += 1;
}
if($hour_ > 0){
$minutes += $hour_ * 60;
}
return $minutes;
}
Листинг А.8 – Функция считывания пакета минут по тарифу
function get_minutes_from_tarrif(){
global $link;
$query_min_tarif ="SELECT tariffs.minutes_package,
t_on_numb.id_number FROM current_operator_tariffs AS tariffs,
tariff_on_numbers AS t_on_numb WHERE t_on_numb.id_tariff =
tariffs.id AND t_on_numb.date_deactivation IS NULL
ORDER BY t_on_numb.id_number";
$result_min_tarif = mysqli_query($link,
$query_min_tarif) or die("Ошибка " . mysqli_error($link));
$minutes_tariff = array();
if($result_min_tarif){
while ($row =
mysqli_fetch_array($result_min_tarif, MYSQLI_NUM)) {
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
107
$minutes_tariff[$row[1]] = $row[0];
}
mysqli_free_result($result_min_tarif);
}
return $minutes_tariff;
}
Листинг А.9 – Функция для проверки наличия услуги «Звонки внутри
сети»
function service_call_inside_web(){
global $start_, $id;
global $link;
global $waste_minutes;
global $day, $month, $year;
$date_call = create_date($day, $month, $year);
$query_numb_service ="SELECT s_on_numb.id_number
FROM current_operator_services AS services, services_on_numbers
AS s_on_numb WHERE s_on_numb.id_service = 6 AND
s_on_numb.date_deactivation IS NULL AND
s_on_numb.date_activation < '".$date_call."' ORDER BY
s_on_numb.id_number";
$result_numb_service = mysqli_query($link,
$query_numb_service) or die("Ошибка " . mysqli_error($link));
$our_start = array("957", "958");
if($result_numb_service){
while ($row =
mysqli_fetch_array($result_numb_service, MYSQLI_NUM)) {
if(in_array($start_, $our_start) && $id
== $row[0]){
$waste_minutes = 0;
return;
}
}
}
}
Листинг А.10 – Функция для просчета стоимости звонка в Белоруссию
с учетом услуги «Звонки в Белоруссию в полцены»
function cost_board_call_due_service_belarus($cost_){
global $link;
global $id, $start_;
global $day, $month, $year;
$date_call = create_date($day, $month, $year);
$query_numb_service_belarus ="SELECT
services.id_number FROM services_on_numbers AS services
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
108
WHERE services.id_service = 9 AND
services.date_deactivation IS NULL AND services.date_activation
< '".$date_call."'
ORDER BY services.id_number";
$result_numb_service_belarus = mysqli_query($link,
$query_numb_service_belarus) or die("Ошибка " .
mysqli_error($link));
if($result_numb_service_belarus){
while ($row =
mysqli_fetch_array($result_numb_service_belarus, MYSQLI_NUM)) {
if($id == $row[0] && $start_ == "375"){
(float)$cost_ /= 2;
}
}
}
return $cost_;
}
Листинг А.11 – Функция для просчета стоимости звонков
function cost_for_call(){
global $temp_minute;
global $waste_minutes;
global $base_cost_for_minute;
global $inc_out;
global $id_zone_A, $id_zone_B;
global $arr_cost_for_zone;
$cost_ = 0;
if($id_zone_A == 1011 && $id_zone_B == 1011){
if($inc_out == "вх"){
$waste_minutes = 0;
}
else{
if($temp_minute - $waste_minutes <= 0){
$cost_ = ($waste_minutes - $temp_minute)
* $base_cost_for_minute;
$temp_minute = 0;
}
else{
$temp_minute -= $waste_minutes;
}
}
}
elseif ($id_zone_A != 1011 || $id_zone_B != 1011
&& $id_zone_A == 1011 && $inc_out == "исх") {
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
109
$cost_ = $arr_cost_for_zone[$id_zone_B] *
$waste_minutes;
$cost_ =
cost_board_call_due_service_belarus($cost_);
}
return $cost_;
}
Листинг А.12 – Функция для занесения записей звонков в таблицу
function create_query_to_table_history_calls(){
global $link;
global $id, $numb_, $date, $time, $duration,
$cost;
global $id_place_A, $id_place_B;
global $inc_out;
global $id_operation, $id_zone_A, $id_zone_B;
if(!isset($id_place_A)){
$query_hc = "INSERT INTO
history_calls_on_numbers (id_number, id_place_subscriber_B,
number_B, date, time, duration, cost, inc_out,
id_type_operation, id_zone_A, id_zone_B) values('".$id."',
'".$id_place_B."',
'".$numb_."', '".$date."', '".$time."',
'".$duration."', '".$cost."', '".$inc_out."',
'".$id_operation."' , '".$id_zone_A."', '".$id_zone_B."')";
}
elseif(!isset($id_place_B)){
$query_hc = "INSERT INTO
history_calls_on_numbers (id_number, id_place_subscriber_A,
number_B, date, time, duration, cost, inc_out,
id_type_operation, id_zone_A, id_zone_B) values('".$id."',
'".$id_place_A."', '".$numb_."', '".$date."', '".$time."',
'".$duration."', '".$cost."', '".$inc_out."',
'".$id_operation."', '".$id_zone_A."', '".$id_zone_B."')";
}
if(!isset($id_place_A) && !isset($id_place_B)){
$query_hc = "INSERT INTO
history_calls_on_numbers (id_number, number_B, date, time,
duration, cost, inc_out, id_type_operation, id_zone_A,
id_zone_B) values('".$id."', '".$numb_."', '".$date."',
'".$time."', '".$duration."', '".$cost."', '".$inc_out."',
'".$id_operation."', '".$id_zone_A."', '".$id_zone_B."')";
}
elseif(isset($id_place_A) && isset($id_place_B)){
$query_hc = "INSERT INTO
history_calls_on_numbers (id_number, id_place_subscriber_A,
id_place_subscriber_B, number_B, date, time, duration, cost,
inc_out, id_type_operation, id_zone_A, id_zone_B)
values('".$id."', '".$id_place_A."', '".$id_place_B."',
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
110
'".$numb_."', '".$date."', '".$time."', '".$duration."',
'".$cost."', '".$inc_out."', '".$id_operation."',
'".$id_zone_A."', '".$id_zone_B."')";
}
}
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
111
Приложение Б
Листинг триггеров
Листинг Б.1 – Изменение пакетов на номере после совершения
звонка
DROP TRIGGER IF EXISTS `after_call`;
DELIMITER //
CREATE TRIGGER `after_call` AFTER INSERT ON
`history_calls_on_numbers`
FOR EACH ROW
BEGIN
DECLARE minutes_ int;
DECLARE balance_ double;
DECLARE v_rowcount integer unsigned;
DECLARE round_minutes int;
DECLARE c CURSOR FOR (SELECT `minutes`, `balance`
FROM `current_recources_on_numbers` WHERE `id_number` =
NEW.id_number);
OPEN c;
SET v_rowcount = found_rows();
IF v_rowcount > 0 THEN
FETCH c INTO minutes_, balance_;
IF (NEW.inc_out = 'исх') THEN
IF balance_ > 0 THEN
SET balance_ = balance_ - NEW.cost;
END IF;
SET round_minutes = MINUTE(NEW.duration) +
hour(NEW.duration) * 60;
IF SECOND(NEW.duration) > 0 THEN
SET round_minutes = round_minutes + 1;
END IF;
SET minutes_ = minutes_ - round_minutes;
IF minutes_ < 0 THEN
SET minutes_ = 0;
END IF;
UPDATE `current_recources_on_numbers` SET
`time` = NEW.time, `date` = NEW.date, `minutes` = minutes_,
`balance` = balance_ WHERE `id_number` = NEW.id_number;
END IF;
END IF;
CLOSE c;
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
112
END //
Листинг Б.2 – Изменение пакетов на номере после отправки смс
DROP TRIGGER IF EXISTS `after_sms`;
DELIMITER //
CREATE TRIGGER `after_sms` AFTER INSERT ON
`history_sms_on_numbers`
FOR EACH ROW
BEGIN
DECLARE sms_ int;
DECLARE balance_ double;
DECLARE v_rowcount integer unsigned;
DECLARE c CURSOR FOR (SELECT `sms`, `balance` FROM
`current_recources_on_numbers` WHERE `id_number` =
NEW.id_number);
OPEN c;
SET v_rowcount = found_rows();
IF v_rowcount > 0 THEN
FETCH c INTO sms_, balance_;
IF (NEW.inc_out = 'исх') THEN
IF balance_ > 0 THEN
SET balance_ = balance_ - NEW.cost;
END IF;
SET sms_ = sms_ - 1;
IF sms_ < 0 THEN
SET sms_ = 0;
END IF;
UPDATE `current_recources_on_numbers` SET
`time` = NEW.time, `date` = NEW.date, `sms` = sms_, `balance`
= balance_ WHERE `id_number` = NEW.id_number;
END IF;
END IF;
CLOSE c;
END //
Листинг Б.3 – Изменение пакетов на номере после выхода в
Интернет
DROP TRIGGER IF EXISTS `after_internet`;
DELIMITER //
CREATE TRIGGER `after_internet` AFTER INSERT ON
`history_trafic_on_numbers`
FOR EACH ROW
BEGIN
DECLARE internet_ int;
DECLARE balance_ double;
DECLARE v_rowcount integer unsigned;
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
113
DECLARE c CURSOR FOR (SELECT `internet`, `balance`
FROM `current_recources_on_numbers` WHERE `id_number` =
NEW.id_number);
OPEN c;
SET v_rowcount = found_rows();
IF v_rowcount > 0 THEN
FETCH c INTO internet_, balance_;
IF balance_ > 0 THEN
SET balance_ = balance_ - NEW.cost;
END IF;
SET internet_ = internet_ - NEW.waste_mb;
IF internet_ < 0 THEN
SET internet_ = 0;
END IF;
UPDATE `current_recources_on_numbers` SET `time` =
NEW.time, `date` = NEW.date, `internet` = internet_, `balance`
= balance_ WHERE `id_number` = NEW.id_number;
END IF;
CLOSE c;
END //
Листинг Б.4 – Изменение пакетов на номере после списаний АП
DROP TRIGGER IF EXISTS `after_withdrawal`;
DELIMITER //
CREATE TRIGGER `after_withdrawal` AFTER INSERT ON
`history_other_withdrawal_on_numbers`
FOR EACH ROW
BEGIN
DECLARE status_ int;
DECLARE balance_ double;
DECLARE v_rowcount integer unsigned;
DECLARE c CURSOR FOR (SELECT `balance` FROM
`current_recources_on_numbers` WHERE `id_number` =
NEW.id_number);
OPEN c;
SET v_rowcount = found_rows();
IF v_rowcount > 0 THEN
FETCH c INTO balance_;
IF balance_ > 0 THEN
SET balance_ = balance_ - NEW.cost;
END IF;
IF (balance_ >= 0) THEN
SET status_ = 1;
ELSE SET status_ = 0;
END IF;
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
114
UPDATE `current_recources_on_numbers` SET `time` =
NEW.time, `date` = NEW.date, `balance` = balance_, `status` =
status_ WHERE `id_number` = NEW.id_number;
END IF;
CLOSE c;
END //
Листинг Б.5 – Изменение пакетов на номере после пополнения
баланса
DROP TRIGGER IF EXISTS `after_payment`;
DELIMITER //
CREATE TRIGGER `after_payment` AFTER INSERT ON `payments`
FOR EACH ROW
BEGIN
DECLARE status_ int;
DECLARE balance_ double;
DECLARE v_rowcount integer unsigned;
DECLARE c CURSOR FOR (SELECT `balance` FROM
`current_recources_on_numbers` WHERE `id_number` =
NEW.id_number);
OPEN c;
SET v_rowcount = found_rows();
IF v_rowcount > 0 THEN
FETCH c INTO balance_;
SET balance_ = balance_ + NEW.currency;
IF (balance_ >= 0) THEN
SET status_ = 1;
ELSE SET status_ = 0;
END IF;
UPDATE `current_recources_on_numbers` SET `time` =
time(NEW.date_time_payment), `date` =
date(NEW.date_time_payment), `balance` = balance_, `status` =
status_ WHERE `id_number` = NEW.id_number;
END IF;
CLOSE c;
END //
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
115
Приложение В
Листинг контроллеров и представлений личного кабинета
Листинг В.1 – Действие actionIndex контроллера MainController
public function actionIndex(){
$curr_pack = Current_recources_on_numbers::find()
->where(['id_number' => $ID_NUMBER])
->all();
$curr_tariff = Tariff_on_numbers::find()
->with('currentOperatorTariffs')
->where(['id_number' => $ID_NUMBER,
'date_deactivation' => null])
->all();
$curr_servs = Services_on_numbers::find()
->with('currentOperatorServices')
->where(['id_number' => $ID_NUMBER,
'date_deactivation' => null])
->all();
$curr_o_promos = Operator_promotions_on_numbers::f
ind()
->with('currentOperatorPromotions')
->where(['id_number' => $ID_NUMBER])
->andWhere(['>=', 'date_deactivation',
date('2021-04-19')])
->andWhere(['>=', 'date_activation',
date('2021-04-01')])
->andWhere(['<=', 'date_activation',
date('2021-05-01')])
->all();
$for_promo_fee_tariff = Operator_promotions_on_num
bers::find()
->with('currentOperatorPromotions')
->where(['id_number' => $ID_NUMBER])
->andWhere(['>', 'date_deactivation',
date('2021-04-19')])
->all();
$curr_p_promos = Partner_promotions_on_numbers::fi
nd()
->with('currentPartnerPromotions')
->where(['id_number' => $ID_NUMBER])
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
116
->andWhere(['>=', 'date_deactivation',
date('2021-04-19')])
->andWhere(['>=', 'date_activation',
date('2021-04-01')])
->andWhere(['<', 'date_activation',
date('2021-05-01')])->all();
return $this->render('index', [
'curr_pack' => $curr_pack,
'curr_tariff' => $curr_tariff,
'curr_servs' => $curr_servs,
'curr_o_promos' => $curr_o_promos,
'curr_p_promos' => $curr_p_promos,
'for_promo_fee_tariff' => $for_promo_fee_tarif
f,
]);
}
Листинг В.2 – Действие actionProfile контроллера MainController
public function actionProfile(){
$info_number = Active_numbers::find()
->with('valueNumber', 'subscriber')
->where(['id_number' => $ID_NUMBER])
->all();
$number = Active_numbers::find()
->where(['id_number' => $ID_NUMBER])
->all();
foreach($number as $numb){
$subscriber = $numb->id_subscriber;
}
$all_numbs_def_subscriber = Active_numbers::find()
->where(['id_subscriber' => $subscriber])
->asArray()
->all();
$all_numbs_definite_subscriber = array_column($all
_numbs_def_subscriber, "id_number");
$is_exist_second_number = Communication_on_numbers
::find()
>where(['in', 'id_number', $all_numbs_definite_subscriber])
->andWhere(['outgoing_call' => 0])
->all();
if(count($is_exist_second_number) == 1){
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
117
foreach($is_exist_second_number as $second_num
b){
$second_numb_ = Active_numbers::find()
->with('valueNumber')
->where(['id_number' => $second_numb>id_number])
->all();
}
}
else{
$second_numb_ = "";
}
return $this->render('profile', [
'info_number' => $info_number,
'second_numb' => $second_numb_,
]);
}
Листинг В.3 – Действие actionListTariffs контроллера MainController
public function actionListTariffs(){
$curr_tariff = Tariff_on_numbers::find()
->where(['id_number' => $ID_NUMBER,
'date_deactivation' => null])
->all();
$all_tariffs = Current_operator_tariffs::find()->all();
return $this->render('list_tariffs', [
'is_change' => 0,
'curr_tariff' => $curr_tariff,
'all_tariffs' => $all_tariffs,
]);
}
Листинг В.4 – Действие actionListTariffsAfterChange контроллера
MainController
public function actionListTariffsAfterChange($id_tariff){
global $is_change;
$is_change = 1;
$all_tariffs = Current_operator_tariffs::find()>all();
$new_tariff = Current_operator_tariffs::find()
->where(['id' => $id_tariff])
->all();
$old_tariff = $curr_tariff = Tariff_on_numbers::fi
nd()
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
118
->with('currentOperatorTariffs')
->where(['id_number' => $ID_NUMBER,
'date_deactivation' => null])
->all();
$curr_pack = Current_recources_on_numbers::findOne
([$ID_NUMBER]);
foreach($new_tariff as $tariff){
if($curr_pack->balance < $tariff>subscription_fee){
$is_change = 2;
foreach($old_tariff as $ot){
$new_t = Current_operator_tariffs::find
()
->where(['id' => $ot->id_tariff])
->all();
}
$new_tariff = $new_t;
}
else{
foreach($old_tariff as $ot){
$ot->date_deactivation =
date('2021-04-19');
$ot->save();
$new_row_tariff_on_numbers = new Tarif
f_on_numbers();
$new_row_tariff_on_numbers>date_activation = date('2021-04-19');
$new_row_tariff_on_numbers>id_tariff = $id_tariff;
$new_row_tariff_on_numbers>id_number = $ot->id_number;
$new_row_tariff_on_numbers->save();
foreach($new_tariff as $new_t){
if($new_t>payment_method == 'посуточно'){
$curr_pack->balance = round($new_t->subscription_fee / 30, 2);
}
else{
$curr_pack->balance -= $new_t>subscription_fee;
}
if($curr_pack->minutes > $ot>currentOperatorTariffs->minutes_package){
$curr_pack>minutes = $curr_pack->minutes - $ot->currentOperatorTariffs>minutes_package + $new_t->minutes_package;
}
else{
$curr_pack->minutes = $new_t>minutes_package;
}
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
119
if($curr_pack->sms > $ot>currentOperatorTariffs->sms_package){
$curr_pack->sms =
$curr_pack->sms –
$ot->currentOperatorTariffs->sms_package
+ $new_t->sms_package;
}
else{
$curr_pack->sms =
$new_t->sms_package;
}
if($curr_pack->internet > $ot>currentOperatorTariffs->internet_package * 1024){
$curr_pack>internet = $curr_pack->internet - $ot>currentOperatorTariffs->internet_package * 1024 + $new_t>internet_package * 1024;
}
else{
$curr_pack->internet = $new_t>internet_package * 1024;
}
$curr_pack->date = date('2021-0419');
$curr_pack>time = date("H:i:s", time());
$curr_pack->save();
$all_promos_for_tariff_ = Current_
operator_promotions::find()
>where(['date_end_for_activation' =>
null, 'id_type_promo' => 2])
->asArray()
->all();
$all_promos_for_tariff =
array_column($all_promos_for_tariff_, "id");
$for_promo_fee_tariff = Operator_p
romotions_on_numbers::find()
>with('currentOperatorPromotions')
>where(['id_number' => $ID_NUMBER])
>andWhere(['>', 'date_deactivation',
date('2021-04-19')])
>andWhere(['in', 'id_promotion',
$all_promos_for_tariff])
->all();
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
120
foreach($for_promo_fee_tariff as $
promo_fee_tariff){
$promo_fee_tariff>date_deactivation = date('2021-04-19');
$promo_fee_tariff->save();
}
}
}
}
}
return $this->render('list_tariffs', [
'is_change' => $is_change,
'curr_tariff' => $new_tariff,
'all_tariffs' => $all_tariffs,
]);
}
Листинг В.5 – Функции для определения оптимального тарифа
function diff_avg_waste_pack_and_real_tariff($all_tariffs_
){
$avg_waste_pack_ = avg_pack();
$diff = array();
$diff_one_tariff = array('min' => 0, 'sms' => 0, 'int'
=> 0, 'id_tariff' => 0);
foreach($all_tariffs_ as $tariff){
$diff_one_tariff['min'] = ($tariff>minutes_package - $avg_waste_pack_['min']);
$diff_one_tariff['sms'] = ($tariff->sms_package $avg_waste_pack_['sms']);
$diff_one_tariff['int'] = ($tariff>internet_package - $avg_waste_pack_['int']);
$diff_one_tariff['id_tariff'] = $tariff->id;
if($diff_one_tariff['min'] >=0 && $diff_one_tariff
['sms'] >=0 && $diff_one_tariff['int'] >=0){
array_push($diff, $diff_one_tariff);
}
}
return $diff;
}
function optimal_tariff($all_tariffs_){
$diff_avg_val_and_tariff = diff_avg_waste_pack_and_rea
l_tariff($all_tariffs_);
$one_array = array('min_t' => 1, 'sms_t' => 1, 'int_t'
=> 1);
$min_arr = array_column($diff_avg_val_and_tariff, "min
");
$min_min = min($min_arr);
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
121
$sms_arr = array_column($diff_avg_val_and_tariff, "sms
");
$sms_min = min($sms_arr);
$int_arr = array_column($diff_avg_val_and_tariff, "int
");
$int_min = min($int_arr);
$same_tariff = 0;
foreach($diff_avg_val_and_tariff as $diff){
if($min_min == $diff['min']){
$one_array['min_t'] = $diff['id_tariff'];
}
if($sms_min == $diff['sms']){
$one_array['sms_t'] = $diff['id_tariff'];
}
if($int_min == $diff['int']){
$one_array['int_t'] = $diff['id_tariff'];
}
}
$unique_tariff = array_unique($one_array);
if(count($unique_tariff) == 3){
$two_arr = array();
foreach($diff_avg_val_and_tariff as $diff){
$two_arr[$diff['id_tariff']] = $diff['min'] +
$diff['sms'] + $diff['int'];
}
$optimal_t = array_keys($two_arr, min($two_arr));
}
else{
$rand_keys = array_rand($one_array, 2);
$optimal_t = $one_array[$rand_keys[0]];
}
return $optimal_t;
}
Листинг В.6
PromosController
–
Действие
actionListOPromos
контроллера
public function actionListOPromos(){
global $is_change;
$withdrawal = 0;
$withdrawal += compute_all_wd_for_one_month(
date('2021-04-1'), date('2021-04-30'));
$withdrawal += compute_all_wd_for_one_month(
date('2021-05-1'), date('2021-05-31'));
$o_promos_on_numb = Operator_promotions_on_numbers
::find()
->where(['id_number' => $ID_NUMBER])
>andWhere(['>', 'date_deactivation', date('2021-04-19')])
>andWhere(['>=', 'date_activation', date('2021-04-01')])
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
122
->asArray()
->all();
$o_promos_on_numb_ = array_column($o_promos_on_num
b, "id_promotion");
$all_ever_promos_on_numb = Operator_promotions_on_
numbers::find()
->where(['id_number' => $ID_NUMBER])
>andWhere(['<=', 'date_deactivation', date('2021-04-19')])
->asArray()
->all();
$all_ever_promos_on_numb_ =
array_column($all_ever_promos_on_numb, "id_promotion");
$all_o_promos = Current_operator_promotions::find(
)
->where(['and', ['<>', 'id_type_promo', 2],
['date_end_for_activation' => null],
['<=', 'min_spend_money_for_month', $withdrawal]])
->orWhere(['and', ['<>', 'id_type_promo', 2],
['date_end_for_activation' => null],
['in', 'id', $o_promos_on_numb_]])
->all();
$all_o_promos_ = Current_operator_promotions::find
()
->where(['and', 'is_oncetime' => 1,
['not in', 'id', $all_ever_promos_on_numb_]])
->orWhere(['is_oncetime' => 0])
->all();
$curr_o_promos = Operator_promotions_on_numbers::f
ind()
->with('currentOperatorPromotions')
->where(['id_number' => $ID_NUMBER])
>andWhere(['>', 'date_deactivation', date('2021-04-19')])
>andWhere(['>=', 'date_activation', date('2021-04-01')])
->all();
return $this->render('o_promos', [
'all_o_promos' => $all_o_promos,
'all_o_promos_' => $all_o_promos_,
'o_promos_on_numb' => $curr_o_promos,
'is_change' => $is_change,
]);
}
Листинг В.7
ServicesController
–
Действие
actionAddNumberWorld
контроллера
public function actionAddNumberWorld($id_second_numb){
global $is_change;
$number = Active_numbers::find()
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
123
->where(['id_number' => $ID_NUMBER])
->all();
foreach($number as $numb){
$subscriber = $numb->id_subscriber;
}
$all_numbs_def_subscriber = Active_numbers::find()
->where(['id_subscriber' => $subscriber])
->asArray()
->all();
$all_numbs_definite_subscriber =
array_column($all_numbs_def_subscriber, "id_number");
$is_exist_second_number = Communication_on_numbers
::find()
>where(['in', 'id_number', $all_numbs_definite_subscriber])
->andWhere(['outgoing_call' => 0])
->all();
if(count($is_exist_second_number) == 0){
$new_serv = Current_operator_services::findOne
([2]);
$curr_pack = Current_recources_on_numbers::fin
dOne([$ID_NUMBER]); //
if($curr_pack->balance <
$new_serv->subscription_fee + $new_serv->inclusion_cost){
$is_change = 2;
}
else{
$is_change = 1;
$fee = compute_fee($new_serv) + $new_serv>inclusion_cost;
$curr_pack->balance -= $fee;
$curr_pack->save();
$second_numb = new Active_numbers();
$second_numb->id_number = $id_second_numb;
$first_number = Active_numbers::findOne(['
id_number' => $ID_NUMBER]);
$second_numb>id_subscriber = $first_number->id_subscriber;
$second_numb>id_city_registration = $first_number->id_city_registration;
$second_numb>date_registration = date('2021-04-19');
$second_numb->save();
$second_numb = new Communication_on_number
s();
$second_numb->id_number = $id_second_numb;
$second_numb->outgoing_call = 0;
$second_numb->outgoing_sms = 0;
$second_numb->incoming_call = 1;
$second_numb->incoming_sms = 1;
$second_numb->internet_access = 0;
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
124
$second_numb->save();
$second_numb = new Tariff_on_numbers();
$second_numb->id_number = $id_second_numb;
$second_numb->id_tariff = 301;
$second_numb>date_activation = date('2021-04-19');
$second_numb->save();
$second_numb_serv = new Services_on_number
s;
$second_numb_serv>id_number = $ID_NUMBER;
$second_numb_serv->id_service = 2;
$second_numb_serv>date_activation = date('2021-04-19');
$second_numb_serv->save();
}
}
else{
$is_change = 3;
}
return $this->runAction('service-number-world');
}
Листинг В.8 – Скрипт виджета для проверки работоспособности БС
$script = js_for_map();
$this->registerJs($script);
function js_for_map(){
$script_ = <<< JS
var map = L.map('map', {
center: [47.237265, 39.712304],
zoom: 17
});
var layer = new L.TileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png');
map.addLayer(layer);
var staticMarker = L.marker();
function onMapClick(e) {
document.addEventListener("mousedown",
(ev)=>{
if(ev.button == 0){
staticMarker.setLatLng(e.latlng);
staticMarker.addTo(map);
}
if(ev.button == 2){
staticMarkerR.setLatLng(e.latlng);
staticMarkerR.addTo(map);
}
});
}
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
125
map.on('mousedown', onMapClick);
let workBS = document.querySelector('.workBS')
;
workBS.onclick = function () {
console.log("ok")
var bs_info_ = $('.workBS').attr('datacontent');
bs_info_ = JSON.parse(bs_info_)
arr_distance = new Array()
for (let i = 0; i < bs_info_.length; i++)
{
var markerBS = L.marker(
[bs_info_[i].latitude, bs_info_[i].longitude]);
console.log(staticMarker.getLatLng())
console.log(markerBS.getLatLng())
distance = getDistanceFromLatLonInKm(m
arkerBS.getLatLng().lat, markerBS.getLatLng().lng, staticMarke
r.getLatLng().lat, staticMarker.getLatLng().lng)
arr_temp = {'distance': distance, 'sta
tus': bs_info_[i].status, 'MHz': bs_info_[i].MHz}
arr_distance.push(arr_temp)
}
arrayMin(arr_distance)
console.log(arr_distance)
min_distance_to_bs = arr_distance[0]
console.log(min_distance_to_bs)
distance = min_distance_to_bs.distance
bs = min_distance_to_bs.MHz
status = min_distance_to_bs.status
is_exist_signal = 0
if(bs == 2100 && distance <= 2){
is_exist_signal = 1
}
else if(bs == 1800 && distance <= 5){
is_exist_signal = 1
}
else if(bs == 900 && distance <= 25){
is_exist_signal = 1
}
else if(bs == 800 && distance <= 40){
is_exist_signal = 1
}
if(is_exist_signal == 1){
if(status == 1){
document.getElementById('res_2').i
nnerHTML = "Близлежащая базовая станция в рабочем состоянии";
}
else{
document.getElementById('res_2').i
nnerHTML = "Временные затруднения на близлежащей базовой станц
ии";
}
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
126
}
else{
document.getElementById('res_2').inner
HTML = "Рядом с Вами не находится базовая станция компании 'Св
язион'";
}
};
function getDistanceFromLatLonInKm(lat1,lon1,l
at2,lon2) {
var R = 6371;
var dLat = deg2rad(lat2-lat1);
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg
2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.
sqrt(1-a));
var d = R * c;
return d;
}
function deg2rad(deg) {
return deg * (Math.PI/180)
}
function arrayMin(arr) {
arr.sort(function(a,b) {
if (a.distance < b.distance) return 1;
if (a.distance > b.distance) return 1;
return 0;
});
}
JS;
return $script_;
}
Листинг В.9 – Код представления для отображения виджета по
определению региона и оператора номера.
<div id="kody_widget">
<a href="https://www.kody.su/" target="_blank"><img a
lt="kody.su: телефонные коды" src="https://www.kody.su/img
/mlogo.png">
</a>
</div>
<script>
var kody_options = {id:'kody_widget', caption:'Операт
ор/город по номеру телефона'};
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
127
(function(){
var s = document.createElement('script'); s.type
= 'text/javascript'; s.charset = 'UTF-8';
s.async = true; s.src = "https://www.kody.su/embe
d/widget.min.js";
document.getElementsByTagName('head')[0].appendCh
ild(s);
})();
</script>
Изм. Лист
№ докум.
Подпись Дата
09.03.03.230000.000 ПЗ
Лист
128
Отзывы:
Авторизуйтесь, чтобы оставить отзыв