Учреждение образования
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
К защите допустить:
Заведующая кафедрой ПОИТ
__________________ Н. В. Лапицкая
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к дипломному проекту
на тему:
Студент В. А. Грамович
Руководитель И. М. Марина
Консультанты:
от кафедры ПОИТ И. М. Марина
по экономической части К. Р. Литвинович
Нормоконтролер С. В. Болтак
Рецензент
Минск 2018
РЕФЕРАТ
ЗАДАНИЕ
по дипломному проекту студента
Введение
1 Анализ современных государственных информационных систем и определение цели
дипломного проектирования
2 Моделирование предметной области и разработка функциональных требований
3 Проектирование программного средства
4 Реализация программного средства
5 Тестирование программного средства
6 Руководство пользователя
7 Технико-экономическое обоснование
Заключение
Список использованных источников
Приложение А Текст программного средства
5. Перечень графического материала (с точным указанием наименования) и обозначения
вида и типа материала)
Диаграмма базы данных. Плакат – формат А1, лист 1.
Диаграмма прецедентов. Плакат – формат А1, лист 1.
Диаграмма компонентов. Плакат – формат А1, лист 1.
Результат работы программы. Плакат – формат А1, лист 1.
Алгоритм работы приложения. Схема алгоритма – формат А1, лист 1.
Алгоритм добавления лицензии. Алгоритм формирования электронного номера лицензии
Схема алгоритма – формат А1, лист 1.
Алгоритм добавления нового пользователя. Схема алгоритма – формат А1, лист 1.
КАЛЕНДАРНЫЙ ПЛАН
Наименование этапов дипломного проекта Объём Срок Примечан
(работы) этапа в выполнения ие
% этапа
Аналитический обзор программных продуктов,
моделей и методов по теме дипломного
проектирования 15-20 23.03–01.04
Моделирование предметной области и
разработка функциональных требований 20-15 02.04–08.04
Проектирование программного средства 20-15 09.04–15.04
Разработка программного средства 15-20 16.04–29.04
Тестирование программного средства и
создание руководства пользователя 10 30.04–13.05
Оформление пояснительной записки
и графического материала 20 14.05–31.05
Введение ................................................................................................................... 8
1 Анализ современных государственных информационных систем и
определение цели дипломного проектирования .............................................. 9
1.1 Анализ предметной области ........................................................................ 9
1.2 Общая информация о государственных информационных системах ... 10
1.3 Обзор существующих аналогов ................................................................. 10
1.4 Цель и задачи дипломного проекта ........................................................... 20
2 Моделирование предметной области и разработка функциональных
требований ......................................................................................................... 24
2.1 Описание функциональности программного средства ........................... 24
2.2 Спецификация функциональных требований .......................................... 27
3 Проектирование программного средства ........................................................ 33
3.1 Проектирование взаимодействия модулей ПС ........................................ 33
3.2 Обоснование выбора СУБД ....................................................................... 34
3.3 Проектирование модели базы данных ...................................................... 35
3.4 Разработка архитектуры ПС ...................................................................... 40
3.5 Алгоритм работы приложения................................................................... 44
3.6 Алгоритм добавления лицензий ................................................................ 45
3.7 Алгоритм формирования электронного номера лицензии ..................... 47
3.8 Алгоритм добавления нового пользователя ............................................. 48
4 Реализация программного средства ................................................................. 50
4.1 Обоснование выбора языка и среды программирования ........................ 50
4.2 Разработка моделей данных ....................................................................... 53
4.3 Описание классов и методов серверной части приложения .................. 54
5 Тестирование программного средства ............................................................. 58
6 Руководство пользователя ................................................................................. 63
7 Технико-экономическое обоснование разработки и внедрения ПС ............. 69
7.1 Расчёт сметы затрат и цены программного средства .............................. 69
7.2 Расчёт заработной платы исполнителей ................................................... 73
7.3 Оценка экономической эффективности применения программного
средства у пользователя ............................................................................. 76
7.4 Расчёт капитальных затрат......................................................................... 78
7.5 Расчёт экономического эффекта................................................................ 78
7.6 Выводы по технико-экономическому обоснованию ............................... 81
Заключение ............................................................................................................ 82
Список использованных источников .................................................................. 84
Приложение A (обязательное). Исходный код .................................................. 85
5
ОПРЕДЕЛЕНИЯ И СОКРАЩЕНИЯ
6
БД – база данных
ОС – операционная система
ПС – программное средство
СУБД – система управления базами данных
ЭВМ – электронно-вычислительная машина
AJAX – Asynchronous JavaScript and XML («асинхронный JavaScript и
XML»)
API – Application Programming Interface (интерфейс программирования
приложений)
HTTP – HyperText Transfer Protocol (протокол передачи гипертекста)
MVC – Model–View–Controller («Модель–Вид–Контроллер»)
JSON – JavaScript Object Notation (текстовый формат обмена данными,
основанный на JavaScript)
REST – Representational State Transfer («передача состояния представле-
ния» – архитектурный стиль взаимодействия компонентов распределенного
приложения в сети)
UML – Unified Modeling Language (унифицированный язык моделиро-
вания)
XML – Xtensible Markup Language (расширяемый язык разметки)
ГИС – государственная информационная система
ЕРЛ – единый реестр лицензий
ЭЦП – электронно-цифровая подпись
7
ВВЕДЕНИЕ
8
1 АНАЛИЗ СОВРЕМЕННЫХ ГОСУДАРСТВЕННЫХ
ИНФОРМАЦИОННЫХ СИСТЕМ И ОПРЕДЕЛЕНИЕ ЦЕЛИ
ДИПЛОМНОГО ПРОЕКТИРОВАНИЯ
9
Единый реестр лицензий представляет информационный ресурс,
обеспечивающий автоматизированную обработку и хранение сведений о
лицензиатах и выданных им лицензиях.
10
логов переводов человека из класса в класс.
Главная страница портала показана на рисунке 1.2.
11
– извещение о месте несения альтернативной службы;
– поиск транспортного средства без договора страхования;
– запрос о задолженности по алиментам;
– проверка действительности электронного свидетельства;
– дополнение листов нетрудоспособности;
3) услуги чиновника:
– проверка действительности электронного свидетельства;
– ожидающие подписания регистрации места жительства;
– запрос об удостоверениях личности;
– вход в базу данных безопасной трудовой среды;
– вход в клиентский портал Инспекции труда;
– запись об охранительных мерах по наследному имуществу.
Портал «eesti.ee» [2] можно отнести к универсальным средствам
поддержки деятельности граждан практически во всех сферах деятельности.
Данное программное средство имеет довольно обширный набор функций и со-
держит некоторые специфичные особенности, которые отличают его от дру-
гих подобных средств, применяемых в этой сфере.
В государственный портал можно зайти с помощью ID карты, которая
есть у любого гражданина, достигшего 15 летнего возраста, через мобильный
телефон. Вход можно так же осуществить через интернет-банк. Форма входа
на сайт показана на рисунке 1.3.
12
– нахождение контактов государственных органов;
– поддержка трёх языков;
– версия сайта для слабовидящих.
Недостатков информационный системы пока обнаружено не было.
Универсальность – государственный портал может использоваться не
только госслужащим, но и обычными гражданами и частными
предпринимателями.
Многофункциональность − государственный портал имеет обширный
набор функций для решения целого ряда прикладных задач.
Нахождение контактов государственных органов − государственный
портал имеет страницу «Контакты» на которой находятся информация для
связи с любым госорганом.
Версия сайта для слабовидящих – портал имеет функцию перехода в
режим для людей со слабым зрение, с выбором стилей.
13
Функциональные возможности информационного взаимодействия
участников системы – для информационного взаимодействия пользователей
ИСЭЛ реализован сервис личного кабинета. Личный кабинет предоставляет
возможность авторизованным пользователям использовать функциональность
ИСЭЛ согласно назначенной им роли. Информация о прилегающей
инфраструктуре включает в себя данные об учреждениях образования и
медицинских учреждениях.
Программное средство «ИСЭЛ» [3] представлено на рисунке 1.4.
14
– о документах, отправленных лицензирующему органу;
– о документах, полученных от лицензирующего органа;
3) Сообщения от лицензирующего органа. Предоставляется
возможность получать сообщения (уведомления) от лицензирующего органа
о статусах рассмотрения поданных пользователем заявлений.
В личном кабинете пользователя лицензирующий орган может
выполнять следующие функции:
– получает заявления и документы по вопросам лицензирования от
соискателей лицензий (лицензиатов);
– направляет уведомления о результатах рассмотрения заявлений
соискателям лицензий (лицензиатам);
– осуществляет формирование информационных ресурсов – реестр
лицензий и других;
– получает от заинтересованных лиц запросы о предоставлении сведений
о лицензиатах из реестра лицензий и предоставляет сведения о лицензиях;
– формирует информацию статистического и аналитического характера;
– получает информацию о юридических лицах и индивидуальных
предпринимателях, содержащуюся в Едином государственном регистре
юридических лиц и индивидуальных предпринимателей;
– осуществляет формирование и ведение НСИ;
– обновляет правовую информацию;
– размещает новости по вопросам лицензирования;
– обновляет рекомендуемые формы заявлений поступающим по
вопросам лицензирования.
К достоинствам программного средства «ИСЭЛ» можно отнести:
– специфичность;
– универсальность;
– многофункциональность;
– поиск и фильтрация по реестру лицензий.
Среди недостатков программного средства «ИСЭЛ» можно выделить:
– отсутствие возможности регистрации в системе;
– отсутствие возможности изменения поданных заявлений;
– отсутствие тесной интеграции со сторонними сервисами;
– имеется только один язык.
Специфичность − программное средство «ИСЭЛ» имеет характерные
отличительные особенность: возможность подавать заявления о выдаче
лицензий соответствующему органу, осуществляет формирование
информационного ресурса – реестра лицензий.
15
Универсальность − программное средство «ИСЭЛ» может быть полезен
в использовании для всех участников лицензирования, включая
лицензирующий орган, соискателя лицензии, лицензиата, юридическое и
физическое лицо, государственный орган.
Многофункциональность − программное средство «ИСЭЛ» имеет
гораздо более обширный функционал для решения целого ряда прикладных
задач по сравнению с аналогичными программными средствами.
Поиск и фильтрация по реестру лицензий − программное средство
«ИСЭЛ» имеет возможность производить поиск лицензий по номеру
лицензии, наименованию лицензиата и по УНП.
Отсутствие возможности регистрации в системе − программное
средство «ИСЭЛ» не имеет возможности регистрации нового пользователя без
посторонней помощи.
Отсутствие возможности изменения поданных заявлений −
программное средство «ИСЭЛ» не позволяет изменять данные после их
отправки соответствующему госоргану.
Имеется только один язык − программное средство «ИСЭЛ»
поддерживает только русский язык, что может отталкивать некоторые группы
пользователей, которые используют другой язык.
16
обращения или по почте.
– Ознакомиться с нормативными правовыми актами, на основе которых
осуществляется государственная регистрация и ликвидация.
Работать с порталом ЕГР можно как с авторизацией, так и без неё.
Без авторизации с помощью веб-портала ЕГР пользователь может:
– согласовать наименование юридического лица;
– получить информацию юрлица из Единого государственного регистра
юридических лиц и индивидуальных предпринимателей;
– заполнить электронные формы различных заявлений в режиме онлайн
для последующего их представления на бумажном носителе в
регистрирующий орган.
17
сертификата пользователя);
– настроить браузер MS Internet Explorer версии 9.0 и выше.
К достоинствам веб-портала единого государственного регистра
юридических лиц и индивидуальных предпринимателей можно отнести:
– универсальность;
– многофункциональность;
– карта сайта.
Среди недостатков программного средства можно выделить:
– отсутствие возможности регистрации в системе;
– устаревший внешний вид веб-портала;
– отсутствие тесной интеграции со сторонними сервисами;
– ограниченность.
Универсальность – веб-портал ЕГР может быть полезен для
юридических лиц, как для авторизованных пользователей, так и не
авторизованных пользователей.
Многофункциональность − веб-портал ЕГР имеет обширный
функционал для решения ряда прикладных задач для решения юридических
вопросов по сравнению с аналогичными программными средствами.
Отсутствие возможности регистрации в системе – в веб-портале ЕГР нет
возможности, самостоятельной регистрации для пользователей.
Устаревший внешний вид веб-портала – устаревший дизайн выглядит
отталкивающим и не удобно пользоваться панелью навигации.
Ограниченность – для использования портала ЕГР необходимо
использовать специальное дополнительное ПО и возможность правильной
работы только через один браузер.
18
социальной защиты на основе информации из ГИР – государственных
информационных ресурсов – информационных систем, баз данных, которые
наполняет и ведет то или иное ведомство.
19
бесплатны и не требуют регистрации на портале, другие открыты лишь после
проверки идентификационных данных Оператором Портала.
К достоинствам программного средства ОАИС можно отнести:
– универсальность;
– удобство использования;
– поиск и фильтрация услуг.
Недостатком программного средства ОАИС является платный
функционал некоторых его частей.
Универсальность – портал ОАИС позволяет пользоваться услугами веб-
сайта физическим и юридическим лицам, государственным органам и любым
другим организациям.
Удобство использования – портал ОАИС оформлен в современном
дизайне, котором просто и понятно пользоваться.
Поиск и фильтрация услуг производится на основании следующих
заданных критериев:
– тип услуги;
– категория пользователя;
– только услуги ОАИС.
Функционал платный – портал ОАИС имеет услуги, которые можно
получить только платно.
20
– добавление реестров лицензии;
– редактирование реестров лицензии;
– формирование и ведение информационных ресурсов нормативно-
справочной информации системы;
– подготовка и отправление электронных документов, связанных с
осуществлением электронного лицензирования и выдачей информации из
реестра лицензий;
– регистрация пользователей в системе.
21
1.4.3 Входные и выходные данные
Входными параметрами для программного средства являются
следующие данные:
– поисковый запрос пользователя, вносимый в поле для поиска; – личные
данные пользователей;
– личные данные пользователей;
– данные лицензирующего органа, поданные с помощью форматов XML,
EXCEL или с помощью веб-формы.
Выходными параметрами для программного средства являются
следующие данные:
– реестры лицензий;
– документы с информацией.
22
требованиями по эксплуатации программного средства, предъявляемыми к
оборудованию его разработчиками.
Комплекс технических средств должен соответствовать требованиям
техники безопасности, основными из которых являются:
– все внешние элементы технических устройств, находящиеся под
напряжением, должны иметь защитное заземление;
– технические устройства должны быть установлены в местах,
обеспечивающих свободный и безопасный доступ к ним при эксплуатации и
проведении профилактического обслуживания;
– сотрудники, которые работают на технических средствах, должны
проходить обучение, инструктаж, проверку знаний правил, норм и инструкций
по технике безопасности;
– в помещении, предназначенном для эксплуатации технических
средств, должны быть обеспечены противопожарные меры безопасности.
23
2 МОДЕЛИРОВАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ И
РАЗРАБОТКА ФУНКЦИОНАЛЬНЫХ ТРЕБОВАНИЙ
uc Actors
Создание Редактирование
Пользователь
Авторизация «include»
«include» Удаление
Обращение к
сервису ЕГР «include»
Управление
пользователями
Поиск в реестре
лицензий
Поиск по названию «include»
органиазации «include» Назначене роли
«include»
Гость
Регистрация «include»
Поиск по УНП
Администратор
Поиск по номеру
лицензии
Просмотр
информации по
лицензиям
Редактирование
реестра
«include»
Менеджер Управление
реестром
лицензий
«include»
Добавление новых
данных
24
На представленной диаграмме вариантов использования присутствует
четыре основных актера:
– гость;
– менеджер;
– пользователь;
– администратор.
Гость − данный актер ограничен в перечне функций. Он может выпол-
нять следующие функции:
– регистрация в системе;
– авторизация в системе;
– просмотр информации о лицензиях.
Менеджер − данный актер имеет больше всего привилегий в системе. Он
может выполнять следующие функции:
– управление реестром лицензий;
– поиск информации в реестре лицензий.
Пользователь − данный актер может выполнять функцию поиска
информации в реестре лицензий.
Поиск лицензий пользователем может осуществляться по следующим
заданным критериям:
– название предприятия;
– номер лицензии;
– УНП.
Администратор − данный актер имеет возможность управления пользо-
вателями в системе. Управление пользователями в системе включает в себя
следующие функции:
– просмотр;
– добавление;
– удаление;
– назначение роли пользователя.
25
– описание информационных объектов или понятий предметной области
и связей между ними;
– описание ограничений целостности, то есть требований к допустимым
значениям данных и к связям между ними.
Инфологическая модель базы данных представлена на рисунке 2.2.
Основными сущностями системы являются пользователь и лицензии.
Дополнительные сущности отражают результат взаимодействия между двумя
основными сущностями.
26
Сущность «пользователь» содержит следующие данные:
– логин для входа в систему;
– зашифрованный пароль для входа в систему.
Пользователь имеет возможность просматривать реестр лицензий,
обратиться к пользователю с ролью «Администратор» для изменения его
личных данных или роли.
Сущность «Лицензия» хранит в себе информацию о выданной лицензии.
Объект лицензии содержит следующие данные:
– регистрационный номер лицензии в реестре лицензий;
– номер принятия решения о выдаче лицензии;
– дата принятия решения о выдаче лицензии;
– номер бланка лицензии;
– срок действия лицензии (дата окончания).
Данная сущность связана с сущностью «Лицензирующий орган».
Сущность «Лицензиат» содержит информацию, об организации,
которой выдали лицензию. С этой сущностью связана сущность
«Обособленное подразделение лицензиата», в которой хранятся данные об
дополнительных филиалах организации.
Сущность «История лицензии» хранит в себе информацию о всех
действиях, проводимых над определённой лицензией.
Сущность «Сервисы лицензии» содержит данные о функциях лицензии,
срок её действия и территория, на которой возможны эти функции.
27
Требования к регистрации пользователей:
1) права доступа:
– данная функция должна быть доступна любому неавторизован-
ному пользователю приложения;
– доступ к данной функции должны иметь только пользователи с
ролью «гость»;
2) регистрационная форма:
– производиться путем заполнения регистрационной формы;
– с помощью ЭЦП;
3) регистрационные поля:
– имя пользователя (логин);
– пароль;
– данные пользователя (ФИО, Email, место работы).
Требования к авторизации пользователя:
1) права доступа:
– данная функция должна быть доступна любому зарегистрирован-
ному пользователю приложения;
– доступ к данной функции должны иметь пользователи с ролями
«пользователь», «администратор» и «менеджер»;
2) авторизационная форма:
– авторизация пользователя в приложении должна производиться
путем заполнения авторизационной формы;
– с помощью ЭЦП;
3) проверка авторизации:
– проверка авторизации должна осуществляться после ввода ло-
гина и пароля со стороны пользователя;
– проверка авторизации должна производиться путем сравнения
введенных пользователем данных с данными, указанными при регистрации
пользователя в приложении;
– с помощью данных, содержащихся в ЭЦП.
Требования к редактированию профиля пользователя:
1) права доступа:
– доступ к данной функции должны иметь пользователи с ролями:
«пользователь» и «администратор»;
2) форма редактирования:
– редактирование профиля пользователя в приложении должно
осуществляться через форму редактирования;
3) данные для редактирования:
28
– данные пользователя.
Требования к восстановлению пароля:
1) права доступа:
– данная функция должна быть доступна любому зарегистриро-
ванному пользователю приложения;
2) форма восстановления пароля:
– восстановление пароля пользователя в приложении должно
осуществляться через форму восстановления пароля;
3) данные для восстановления пароля:
– адрес электронной почты;
– логин пользователя.
Требования к управлению реестром лицензий:
1) права доступа:
– данная функция должна быть доступна только менеджерам от
лицензирующих органов;
2) формы управления реестром лицензий:
– форма добавления может представлять собой заполнение всех
полей лицензии, либо загрузки целых реестров с помощью XML или Excel;
– форма редактирования должна представлять собой форму
изменения любых данных в выбранной лицензии;
– форма удаления должна позволять удалять саму лицензию, либо
частичную информацию о ней;
3) данные о лицензии:
– номер решения;
– номер формы;
– УНП;
– регистрационный номер;
– комментарий;
– дата принятия решения;
– срок действия.
Требования к просмотру реестра лицензий:
1) права доступа:
– данная функция должна быть доступна всем авторизованным
пользователям приложения;
– доступ к данной функции должны иметь пользователи с ролями
«пользователь», «администратор» и «менеджер»;
2) форма просмотра реестра лицензий:
– через таблицу на сайте;
29
– с помощью скачивания excel файла.
Требования к просмотру подробной информации о лицензии:
1) права доступа:
– данная функция должна быть доступна всем авторизованным
пользователям приложения;
– доступ к данной функции должны иметь пользователи с ролями
«пользователь», «администратор» и «менеджер»;
2) страницы просмотра информации о лицензии:
– просмотр краткой информации должен осуществляться на
странице поиска лицензий;
– просмотр детальной информации о лицензии должен
осуществляться на новой странице;
3) просмотр краткой информации о лицензии:
– для просмотра краткой информации пользователю достаточно
навести курсором на соответствующую лицензию в списке объектов.
Требования к поиску лицензий:
1) права доступа:
– данная функция должна быть доступна всем авторизованным
пользователям приложения;
– доступ к данной функции должны иметь пользователи с ролями
«пользователь», «администратор» и «менеджер»;
2) поиск по названию организации, УНП или номеру лицензии:
– воспользоваться данной функций можно будет путем ввода
поисковой информации в специальное поле.
Требования к управлению пользователями:
1) права доступа:
– доступ к данной функции должен иметь только пользователь с
ролью «администратор»;
2) список функций:
– создание новых пользователей;
– редактирование уже существующих пользователей;
– установление роли пользователя;
– удаление пользователей.
30
а) должен представлять собой перечень краткой информации:
– номер лицензии;
– название организации;
– УНП;
– сервисы;
– вид деятельности;
2) поле поиска лицензий:
а) допустимые значения:
– цифры;
– латинские символы;
– кириллические символы;
б) входные данные:
– УНП;
– номер лицензии;
– название организации;
в) выходные данные:
– список лицензий;
3) страница лицензии:
а) детальная информация о лицензии:
– УНП;
– номер лицензии;
– название организации;
– срок действия;
– вид деятельности;
– адрес лицензиата;
– дата принятия решения;
б) страница детальной информации о лицензии:
– пользователь должен иметь возможность просматривать
детальную информацию о лицензии на отдельной странице;
4) страница редактирования профиля пользователя:
а) данные профиля пользователя:
– информация о себе;
– контактные данные;
б) страница редактирования:
– пользователь должен иметь возможность на отдельной
странице редактировать свой профиль и изменять информацию о себе, а также
свои контактные данные;
5) контактная форма – пользователь должен иметь возможность
31
связаться с администратором приложения через контактную форму.
32
3 ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО СРЕДСТВА
33
Декомпозиции контекстной диаграммы включает следующие функции:
– регистрация;
– авторизация;
– поиск лицензий;
– просмотр списка лицензий;
– добавление новых лицензий.
34
базами данных с открытыми исходными текстами. Она разрабатывается на
протяжении более 15 лет и улучшает архитектуру, чем завоевала репутацию
надежной, интегрированной и масштабируемой СУБД. Она запускается на
всех основных платформах, включая Linux, UNIX и Windows. Она полностью
соответствует ACID, имеет полную поддержку ключей, объединений,
представлений, триггеров, и хранимых процедур. Она включает большинство
типов данных SQL92 и SQL9. Она имеет API для C/C++, Java, Perl, Python,
Ruby, Tcl, ODBC и др.
Являясь СУБД класса предприятия, PostgreSQL [10] предоставляет
такие особенности как Multi-Version Concurrency Control, восстановление по
точке во времени, табличное пространство, асинхронная репликация,
вложенные транзакции, горячее резервирование, планировщик/оптимизатор
запросов, и упреждающее журналирование на случай поломки. Он
поддерживает международные кодировки, в том числе и многобайтовые, при
использовании различных кодировок можно использовать сортировку и
полнотекстовый поиск, различать регистр. Большое количество
подконтрольных данных и большое число одновременно работающих
пользователей, тем не менее, не сильно влияет на масштабируемость системы.
Реализация SQL в PostgreSQL соответствует ANSI-SQL 92/99
стандартам. Он имеет полную поддержку вложенных запросов (включая
выбор из FROM), уровень чтения только зафиксированных данных и
сериализуемые транзакции. И так как PostgreSQL имеет полностью
реляционный системный каталог, поддерживающий множество схем баз
данных, его каталог также доступен посредством информационной схемы в
соответствии со стандартом SQL.
35
– имя первичного ключа формируется из названия таблицы в
единственном числе и суффикса «ID»;
– в именах таблиц каждое новое слово пишется с заглавной буквы;
– имена полей и таблиц начинаются с маленьких букв;
– все поля, содержащие дату и/или время, имеют тип timestamp;
– все поля, содержащие названия категорий имеют тип varchar (50);
– все поля, содержащие целые числа, имеют тип Integer.
Названия и назначения таблиц базы данных приведены в таблице 3.1
36
В каждой таблице существу поля, которые в программе наследуются от
базового класса BasicData, которые представлены в таблице 3.2.
37
Описание полей таблицы «License» приведено в таблице 3.5
38
Описание полей таблицы «Role» приведено в таблице 3.7
39
Описание полей таблицы «KindOfActivity» приведено в таблице 3.9
40
программировании, так как в этом случае модель представляет просто
структуру данных, без методов их обрабатывающих.
Активная модель – модель оповещает представление о том, что в ней
произошли изменения, а представления, которые заинтересованы в
оповещении, подписываются на эти сообщения. Это позволяет сохранить
независимость модели как от контроллера, так и от представления.
Классической реализацией паттерна MVC принято считать версию
именно с активной моделью.
С развитием объектно-ориентированного программирования и понятия
о шаблонах проектирования было создано ряд модификаций концепции MVC,
которые при реализации у разных авторов могут отличаться от оригинальной.
Основная цель применения этой концепции состоит в разделении
бизнес-логики (модели) от её визуализации (представления, вида). За счет
такого разделения повышается возможность повторного использования.
Наиболее полезно применение данной концепции в тех случаях, когда
пользователь должен видеть те же самые данные одновременно в различных
контекстах и/или с различных точек зрения. В частности, выполняются
следующие задачи:
– К одной модели можно присоединить несколько видов, при этом не
затрагивая реализацию модели. Например, некоторые данные могут быть
одновременно представлены в виде электронной таблицы, гистограммы и
круговой диаграммы.
– Не затрагивая реализацию видов, можно изменить реакции на действия
пользователя (нажатие мышью на кнопке, ввод данных), для этого достаточно
использовать другой контроллер.
– Ряд разработчиков специализируются только в одной из областей: или
разрабатывают графический интерфейс или разрабатывают бизнес-логику.
Поэтому возможно добиться, что программисты, занимающиеся разработкой
бизнес-логики (модели), вообще не будут осведомлены о том, какое
представление будет использоваться.
Концепция MVC позволяет разделить данные, представление и
обработку действий пользователя на три отдельных компонента:
– Модель. Предоставляет знания: данные и методы работы с этими
данными, реагирует на запросы, изменяя своё состояние. Не содержит
информации, как эти знания можно визуализировать.
– Представление, вид. Отвечает за отображение информации
(визуализацию). Часто в качестве представления выступает форма (окно) с
графическими элементами.
41
– Контроллер. Обеспечивает связь между пользователем и системой:
контролирует ввод данных пользователем и использует модель и
представление для реализации необходимой реакции.
42
доступ в интернет и веб-браузер.
43
– LicensePrint – модель печати копий лицензии;
– LicenseOwner – модель организации;
– OwnerBranch – модель филиала организации.
На представленной диаграмме указаны следующие представления:
– Index – представление начальной страницы;
– Login – представление страницы авторизации;
– Registration – представление страницы регистрации;
– LicenseList – представление списка лицензий;
– LicenseDetail – представление всех данных определённой лицензии;
– EGR – представление для связи с сервисом ЕГР;
– AddLicense – представление для добавления новой лицензии;
– EditUserInfo – представление изменения данных пользователя;
– Menu – частичное представление меню;
– News – представление страницы новостей;
– 403 – представление страницы для неавторизованного пользователя;
– 404– представление ошибочной страницы.
На представленной диаграмме указаны следующие контроллеры:
– UserController – контроллер пользователя;
– LicenseController – контроллер лицензий;
– EGRController – контроллер сервиса ЕГР;
– AuthentificationController – контроллер авторизации и регистрации;
– HomeController – домашний контроллер;
– AdminController – контроллер администратора.
44
8) проверка введённых данных для регистрации;
9) переход в личный кабинет;
10) отображение страницы с успешной регистрацией;
11) начала цикла, в которой пользователь работает в системе;
12) выбор действия пользователя после авторизации;
13-18) выполнение различных действий на сайте;
19) пользователь решает выйти из системы.
45
4) далее следует блок условия «Все поля заполнены правильно?», на
этапе которого происходит проверка введённых данных лицензии;
5) если данные лицензии были неправильно введены, то выводится
сообщение об ошибке и необходимо ввести их заново;
6) если все данные правильно введены, тогда они преобразуются в json
формат и с помощью Ajax запроса, передаются на контроллер;
7) прибывшие данные преобразуются из json формата в объект;
46
сообщение пользователю;
11) если УНП и даты верны, то формируется электронный номер
лицензии и прикрепляется к этой лицензии;
12) далее следует этап, на котором лицензия добавляется в базу данных
13) после успешного добавления лицензии в базу данных, на
контроллере формируется ответ об успешном добавлении лицензии и
передаётся на представление;
14) в этом этапе на представлении обрабатывается сообщение об
успешном добавлении лицензии и выводится пользователю.
47
2) на этом этапе передаются данные из лицензии;
3) далее происходит получение УНП из данных лицензии;
4) из даты начала действия лицензии извлекается номер года;
5) на этом этапе происходит запрос в базу данных с помощью УНП и
года начала действия лицензии для получения количества выданных лицензий
определённому лицензиату в определённом году;
6) из приходящих данных о лицензии получают код лицензирующего
вида деятельности;
7) на данном этапе происходит формирование лицензии с помощью
УНП, кода вида деятельности, года начала действия лицензии и количестве
выданных лицензий в этом году;
8) полученный электронный номер лицензии передаётся обратно в
вызывающую функцию.
48
сообщение о запросе администратору для изменения роли;
14) происходит отправка запроса администратору;
15) так как пользователь успешно добавлен в базу данных, то выводится
сообщение об успешной регистрации.
49
4 РЕАЛИЗАЦИЯ ПРОГРАММНОГО СРЕДСТВА
50
разбросаны по всей программе, как это нередко бывает в случае процедурного
программирования;
– локализация кода и данных улучшает наглядность и удобство
сопровождения программного обеспечения;
– инкапсуляция информации защищает наиболее критичные данные от
несанкционированного доступа.
51
затрачиваемое на конфигурирование приложения и сосредоточиться
непосредственно на разработке, а также упрощает работу с зависимостями.
Некоторые возможности, предоставляемые Spring Boot:
– создание полноценных Spring приложений;
– встроенный Tomcat или Jetty;
– обеспечивает начальные POMs для упрощения Maven конфигурации;
– автоматическая конфигурация Spring когда это возможно;
– обеспечивает такими возможностями, как метрики, мониторинг
состояниями и расширенная конфигурация;
– абсолютно без генерации кода и без написания XML конфигурация.
Для инициализации Spring Boot приложения в pom файл в качестве
проекта «родителя» установлен «spring-boot-starter-parent». Точкой входа в
приложение является класс Main.java, отмеченный аннотацией
SpringBootApplication. Он содержит единственный метод public static void main
в котором вызывается Start.run. По вызову метода run начинается
инициализация контейнера Spring, сканируются пакеты проекта на наличие
компонентов Spring Framework и их инициализация.
52
при сохранении объекта в базу данных будет сгенерировано автоматически;
3) аннотация @ManyToOne указывает на то, что сущность License
связана с сущностью Ulandie отношением многие к одному, с помощью
аннотации @JoinColumn указывается, какой атрибут таблицы license будет
внешним ключом на таблицу ulandie.
Свойства класса License не помеченные аннотациями отображаются в
атрибуты таблицы license соответствующих типов.
53
Модель LicenseAction представляет собой информацию об изменении в
лицензии. Содержит идентификатор, дату начала и конца действия, код
изменения и название действия.
Модель LicenseActivity представляет вид деятельности. Содержит
идентификатор, код вида деятельности и название вида деятельности.
Модель LicenseServices представляет собой услуги, которые даёт
лицензия. Содержит идентификатор, дату начала и конца действия, код услуги
и название услуги.
Модель AdministrativeTerritories представляет собой административные
территории. Содержит идентификатор, код области, код района, код
сельсовета, код города, название города, название района, СОАТО, название
области и сокращённые названия.
Модель TypeOfCompany представляет тип компании. Содержит
идентификатор, дату начала, дату конца действия, название типа и
сокращённое название типа.
54
– licenseActivityRepository – поле, через которое происходит связь с
таблицей licenseactivityrepository в базе данных, для получения, изменения или
удаления вида деятельности лицензии из базы данных (тип поля -
LicenseActivityRepository);
– log – поле, с помощью которого происходит логирование действий
приложения (тип поля - Logger).
Класс LicenseController имеет единственный конструктор, который
отвечает за его инициализацию:
– public LicenseController(Gson g, EntityManager entityManager,
LicenseRepository licenseRepository, LicenseActivityRepository
licenseActivityRepository) – конструктор, задачей которого является создание
объекта LicenseController, а так же инициализация его приватных полей.
Так же в классе LicenseController имеются следующие методы,
отвечающие за вывод и поиск лицензий:
– public String index() – публичный метод, отвечающий за вывод
начальной страницы с лицензиями;
– public AjaxResponse getLicense(String page) – публичный метод, с
помощью которого из базы берутся 20 лицензий с отступом, переданным в
параметр page;
– public void getPage() – метод, для получения количества страниц;
– private ArrayList<License> ParseLicense(ArrayList<License> License,
List Services) – приватный метод, использующийся, для обработки лицензий,
взятых из базы данных;
– private List parseServices(List<Object[]> serviceList) – приватный метод
для обработки услуг лицензий, взятых из базы данных;
– public AjaxResponse Search(String jsonSearchCriterion) – публичный
метод, с помощью которого происходи поиск по лицензиям.
Класс LicenseInputController используется для вывода лицензий и
осуществления поиска по ним. В него входят приватное поле ulandieRepository
и поля как в классе LicenseController:
– gson;
– entityManager;
– licenseRepository;
– licenseActivityRepository;
– ulandieRepository - поле, через которое происходит связь с таблицей
ulandierepository в базе данных, для получения, изменения или удаления
организации из базы данных (тип поля - UlandieRepository).
Класс LicenseInputController имеет единственный конструктор, который
55
отвечает за его инициализацию:
– public LicenseInputController (LicenseActivityRepository
licenseActivityRepository, UlandieRepository ulandieRepository,
LicenseRepository licenseRepository, UserRepository userRepository, Gson g,
EntityManager entityManager) – конструктор, задачей которого является
создание объекта LicenseInputController, а также инициализация его
приватных полей.
Так же в классе LicenseInputController имеются следующие методы,
отвечающие добавление новой лицензии:
– public String index() – публичный метод, отвечающий за вывод
начальной страницы формой ввода лицензии;
– public DropDown getActivities() – публичный метод, с помощью
которого в представление загружается список видов деятельности;
– private String createElectronicNumberFotLicense(License license) –
приватный метод, формирующий электронный номер лицензии;
– public AjaxResponse saveLicense (String jsonLicense) – публичный
метод, с помощью которого происходи добавление лицензии в базу данных.
Класс WebSecurityConfig используется для авторизации, регистрации и
доступом пользователей. В него входят следующие поля:
– userDetailsService – поле для получения и использования пользователя
(тип поля - UserDetailsService);
– bCryptPasswordEncoder – поле, c помощью которого происходит
шифрование пароля пользователя.
Так же в классе WebSecurityConfig имеются следующие методы:
– public void configureGlobal() – публичный метод, отвечающий за поиск
пользователя в базе данных и установки метода шифрования пароля;
– protected void configure (HttpSecurity http) – метод, в котором
формируется доступ пользователей к различным функциям приложения.
56
Рисунок 4.1 – Диаграмма классов
57
5 ТЕСТИРОВАНИЕ ПРОГРАММНОГО СРЕДСТВА
58
Продолжение таблицы 5.1
№ Описание тест-кейса Ожидаемый результат Фактический
результат
4 1 Запустить приложение Открылась страница со Совпадает с
2 Успешно войти в систему списком лицензий ожидаемым.
3 Нажать на гиперссылку
Личный кабинет
4 Нажать на гиперссылку
посмотреть все лицензии
5 1 Запустить приложение Открылась другая Совпадает с
2 Успешно войти в систему страница с лицензиями ожидаемым.
3 Нажать кнопку Личный
кабинет
4 Нажать кнопу посмотреть
все лицензии
5 Нажать на кнопки
пагинации под списком
лицензий
6 1 Запустить приложение Появляется форма для Совпадает с
2 Успешно войти в систему поиска по лицензиям ожидаемым.
3 Нажать кнопку Личный
кабинет
4 Нажать на гиперссылку
посмотреть все лицензии
5 Нажать кнопку Поиск по
лицензиям
7 1 Запустить приложение Вывод лицензий с Совпадает с
2 Успешно войти в систему заданными критериями ожидаемым.
3 Нажать на гиперссылку
Личный кабинет
4 Нажать на гиперссылку
посмотреть все лицензии
5 Нажать кнопку Поиск по
лицензиям
6 Ввести критерии поиска и
нажать кнопку поиск
59
Продолжение таблицы 5.1
№ Описание тест-кейса Ожидаемый результат Фактический
результат
8 1 Запустить приложение Появляется сообщение с Совпадает с
2 Успешно войти в систему ошибкой, поиск не ожидаемым.
3 Нажать на гиперссылку производится
Личный кабинет
4 Нажать на гиперссылку
посмотреть все лицензии
5 Нажать кнопку Поиск по
лицензиям
6 Ввести неправильные
критерии поиска и нажать
кнопку поиск
9 1 Запустить приложение Отображение формы с Совпадает с
2 Успешно войти в систему вводом УНП и вывод ожидаемым.
3 Нажать на гиперссылку информации о введённой
Личный кабинет организации
4 Нажать на гиперссылку
Единый государственный
регистр юридических лиц и
индивидуальных
предпринимателей
5 Ввести УНП
6 Нажать на кнопку Поиск
10 1 Запустить приложение Открывается страница с Совпадает с
2 Успешно войти в систему формой для ввода ожидаемым.
3 Нажать на гиперссылку информации о лицензии
Личный кабинет
4 Нажать на гиперссылку
Загрузить лицензии
11 1 Запустить приложение Срабатывание Совпадает с
2 Успешно войти в систему выпадающего списка с ожидаемым.
3 Перейти на страницу видами деятельности и
загрузки лицензии успешный выбор одного
4 Нажать на поле Вид из них
деятельности
60
Продолжение таблицы 5.1
№ Описание тест-кейса Ожидаемый результат Фактический
результат
12 1 Запустить приложение Появляется окно с Совпадает с
2 Успешно войти в систему сообщение об успешном ожидаемым.
3 Перейти на страницу добавлении лицензии
загрузки лицензии
4 Ввести правильные
данные и нажать на кнопку
добавить
13 1 Запустить приложение Неправильные Совпадает с
2 Успешно войти в систему введённые поля ожидаемым.
3 Перейти на страницу подсвечиваются
загрузки лицензии красным, под кнопкой
4 Ввести неправильные появляется сообщение с
данные и нажать на кнопку ошибкой
добавить
14 1 Запустить приложение Открывается страница с Совпадает с
2 Успешно войти в систему формой добавления ожидаемым.
в качестве Администратора нового пользователя
3 Нажать на гиперссылку
Личный кабинет
4 Нажать на гиперссылку
Управление пользователями
5 Нажать на гиперссылку
Добавление нового
пользователя
15 1 Запустить приложение Появляется окно с Совпадает с
2 Успешно войти в систему сообщение об успешном ожидаемым.
в качестве Администратора добавлении пользователя
3 Перейти на страницу
добавления нового
пользователя
4 Правильно заполнить
форму и нажать на кнопку
добавить
61
Продолжение таблицы 5.1
№ Описание тест-кейса Ожидаемый результат Фактический
результат
16 1 Запустить приложение Подсвечиваются Совпадает с
2 Успешно войти в систему в красным неправильно ожидаемым.
качестве Администратора заполненные поля и
3 Перейти на страницу вывод сообщения об
добавления нового ошибке
пользователя
4 Неправильно заполнить
форму и нажать на кнопку
добавить
17 1 Запустить приложение Открывается страница Совпадает с
2 Успешно войти в систему в со списком ожидаемым.
качестве Администратора пользователей
3 Перейти на страницу
управления пользователями
4 Нажать на гиперссылку
Просмотр списка всех
пользователей
18 1 Запустить приложение Пользователь исчезает Совпадает с
2 Успешно войти в систему в из списка ожидаемым.
качестве Администратора 3
Создать тестового
пользователя
4 Перейти на страницу списка
всех пользователей
5 Удалить пользователя
62
6 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
63
– загрузки лицензии через xml файл;
– загрузки лицензии через форму;
– страница управления пользователями.
В зависимости от роли пользователя ему доступны различные страницы
приложения. Только пользователю с ролью «Менеджер» доступна
возможность загружать лицензии и только пользователю с ролью
«Администратор» доступна функция управления другими пользователями.
Страница просмотра лицензий доступна для всех пользователей. Она
изображена на рисунке 6.3.
64
Поиск может быть выполнен по 4 полям:
– название организации;
– УНП;
– электронный номер лицензии;
– вид деятельности.
Можно производить поиск как по всем критериям, так и по нескольким.
Поиск по названию организации регистронезависимый и возможен по любой
части названия организации. Критерий «Вид деятельности» – это выпадающий
список, который загружается из базы данных.
Страница просмотра лицензиатов представлена на рисунке 6.5
65
– дата принятия решения;
– регистрационный номер;
– вид деятельности;
– УНП.
Если эти поля не будут заполнены или заполнены неправильно, то, по
нажатию на кнопку «Добавить», они будут подсвечены красны цветом и
появится сообщения об ошибке (рисунок 6.7).
66
На странице управления пользователями доступны две гиперссылки:
– создание нового пользователя;
– просмотр списка пользователей.
Страница добавления нового пользователя показана на рисунке 6.8. На
этой странице находится форма из девяти обязательных полей:
– логин;
– пароль;
– повтор пароля;
– email;
– фамилия;
– полное имя;
– отчество;
– место работы;
– должность.
Все девять полей должны быть правильно заполнены, иначе, при
нажатии на кнопку «Создать», появится сообщение об ошибке выполненном в
стиле, как показано на рисунке 6.7.
67
На странице просмотра списка пользователей (рисунок 6.9) находится
таблица со всеми пользователями и их личными данными. С помощью этой
таблицы можно удалить пользователя или перейти на страницу
редактирования его данных.
68
7 ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ
РАЗРАБОТКИ И ВНЕДРЕНИЯ ПС
69
Объём программного средства определяется с помощью подбора
аналогов на основании классификации типов программных средств, каталога
функций программных средств и каталога аналогов программных средств в
разрезе функций, которые постоянно обновляются и утверждаются в
установленном порядке. На основании информации о функциях
разрабатываемого программного средства по каталогу функций определяется
объём функций. Объем программного средства определяется на основе
нормативных данных, приведённых в таблице 7.2.
𝑉о = ∑ 𝑉𝑖 , (7.1)
𝑖=0
70
На основе данных, приведённых в таблице 7.1, общий объём ПО
составил 𝑉о = 15480 (строк кода).
На основании общего объема ПС определяется нормативная
трудоёмкость (Тн ) с учётом сложности ПС. Для ПС 1-ой группы, к которой
относится разрабатываемый программный продукт, нормативная
трудоёмкость составит 406 человеко-дней.
Нормативная трудоёмкость служит основой для оценки общей
трудоёмкости То . Общая трудоёмкость определяется по формуле 7.2:
Tо = Tн ∙ Кс ∙ Кт ∙ Кн , (7.2)
Кс = 1 + ∑ К𝑖 , (7.3)
𝑖=1
71
миру. Влияние степени новизны на трудоёмкость создания ПО определяется
коэффициентом новизны – Кт . Для разрабатываемого ПО Кн = 0,7.
Подставив приведённые выше коэффициенты для разрабатываемого ПО
в формулу (7.2) получим общую трудоёмкость разработки, рассчитываемую
по формуле 7.5:
То
Чр = , (7.6)
Тр ∙ Фэф
Фэф = Дг − Дп − Дв − До , (7.7)
72
Учитывая срок разработки проекта Тр = 2 мес. = 0,17 года, общую
трудоёмкость и фонд эффективного времени одного работника, вычисленные
ранее, можно рассчитать численность исполнителей проекта по формуле 7.9:
229
Чр = ≈ 6 человек. (7.9)
0,17 ∙ 215
вед.прогр. 33 ∙ 3,48
Тч = = 0,68 руб./ч. (7.10)
168
прогр.Ι−кат. 33 ∙ 3,25
Тч = = 0,64 руб./ч. (7.11)
168
прогр.ΙΙ−кат. 33 ∙ 3,04
Тч = = 0,6 руб./ч. (7.12)
168
73
Расчёт месячных и почасовых тарифных ставок сведен в таблицу 7.3.
Зо = ∑ Т𝑖ч ∙ Тч ∙ Фп ∙ Кп , (7.13)
𝑖=1
74
Фп – плановый фонд рабочего времени i-ого исполнителя, дн.;
Кп – коэффициент премирования.
Сумма основной заработной платы считается по формуле 7.14:
Зо ∙ Нд
Зд = , (7.15)
100%
4210 ∙ 20%
Зд = ≈ 842руб. (7.16)
100%
75
Продолжение таблицы 7.4
Расходы на научные Зо ∙ Нк
Нк = 18% Рк = 757,8
командировки 100%
Прочие прямые Зо ∙ Нпз
Нпз = 21% Пз = 884,1
расходы 100%
Зо ∗ Нрн
Накладные расходы Нрн = 100% Рн = 4210
100%
Сп = Зо + Зд + Зсз +
Полная себестоимость – +Не + М + Рм + Рк + 12717,1
+Пз + Рн
Прогнозируемая С п ∙ Ур
Ур = 30% Ппс = 3815,13
прибыль 100%
Прогнозируемая цена
– Цп = Сп + Ппс 16532,23
без налогов
Отчисления и налоги в
местный и Цп ∙ Нмр
Нмр = 3,9% Омр = 644,76
республиканский 100% − Нмр
бюджеты
Отчисления и налоги в
местный и Цп ∙ Нмр
Нмр = 3,9% Омр = 644,76
республиканский 100% − Нмр
бюджеты
Налог на добавленную (Цп + Омр ) ∙ Ндс
Ндс = 20% НДС = 3435,4
стоимость 100%
Прогнозируемая
– Цо = Цп + Омр + НДС 20612,39
отпускная цена
Сп ∙ Но
Освоение ПС Но = 10% Ро = 1271,71
100%
Сп ∙ Нс
Сопровождение ПС Нс = 20% Рс = 2543,42
100%
76
правами разработчиков). Поэтому расчёт экономического эффекта будем
проводить, опираясь на известные данные показателей базового и нового
варианта ПС. Показатели обоих вариантов приведены в таблице 7.5.
77
7.4 Расчёт капитальных затрат
78
Нп
Пч = Со − Со ∙ , (7.17)
100
𝛼1 = (1 + Е𝑖 )𝑡𝑝−𝑡 , (7.19)
79
Таблица 7.7 – Расчёт экономического эффекта от использования нового
программного средства
Показатели 2018 2019 2020 2021
Результаты
Прирост прибыли
за счет экономии – 12072,59 12072,59 12072,59
затрат, руб.
Прирост прибыли
с учетом фактора – 10498,32 9128,09 7937,73
времени, руб.
Затраты
Приобретение
20612,39 – – –
ПС, руб.
Освоение ПС,
1271,71 – – –
руб.
Сопровождение
2543,42 – – –
ПС, руб.
Всего затрат, руб. 24427,52 – – –
С учётом фактора
24427,52 – – –
времени, руб.
Экономический эффект
Превышение
результата над 24427,52 10498,32 9128,09 7937,73
затратами, руб.
То же с
нарастающим -24427,52 -13929,2 -42a01,11 3736,62
итогом, руб.
Коэффициент
1 0,8696 0,7561 0,6575
приведения, ед.
80
7.6 Выводы по технико-экономическому обоснованию
81
ЗАКЛЮЧЕНИЕ
82
83
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
84
ПРИЛОЖЕНИЕ А
(обязательное)
Исходный код
package ipps.slr.controllers;
import com.google.gson.Gson;
import ipps.slr.helper.AjaxResponse;
import ipps.slr.model.Licenseactivity;
import ipps.slr.repository.LicenseActivityRepository;
import ipps.slr.repository.LicenseRepository;
import lombok.Data;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletResponse;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* Created by Gramovich_V on 19.03.2018.
*/
@Controller
@RequestMapping({"/License", "/license"})
public class LicenseController {
85
@RequestMapping(value = {"", "/", "/Index"}, method =
RequestMethod.GET)
public String index() {
return "license/AllLicense";
}
} catch (Exception e) {
log.error(e.getMessage());
return new AjaxResponse(e);
}
}
86
response.getWriter().write(g.toJson(licensesCount.get(0)));
} catch (Exception e) {
log.error(e.getMessage());
}
License.get(i).setServices(Services.get(i).toString().substring(
0, 1).toUpperCase() + Services.get(i).toString().substring(1));
}
return License;
}
87
List<List<StringBuilder>> stringList = new
ArrayList<>();
List<StringBuilder> resultList = new ArrayList<>();
i = 0;
for (List<Object[]> tempList : resList) {
stringList.add(new ArrayList<>());
stringList.get(i).add(new StringBuilder());
index = 0;
stringList.get(i).get(index).append(tempList.get(0)[1].toString(
)).append(" (").append(tempList.get(0)[2].toString()).append("
").append(tempList.get(0)[3].toString()).append(", ");
for (int y = 1; y < tempList.size(); y++) {
if
(tempList.get(y)[1].toString().equals(tempList.get(y -
1)[1].toString())) {
stringList.get(i).get(index).append(tempList.get(y)[2].toString(
)).append(" ").append(tempList.get(y)[3].toString()).append(",
");
} else {
stringList.get(i).get(index).setLength(stringList.get(i).get(ind
ex).length() - 2);
stringList.get(i).get(index).append("), ");
stringList.get(i).add(new StringBuilder());
index++;
stringList.get(i).get(index).append(tempList.get(y)[1].toString(
)).append(" (").append(tempList.get(y)[2].toString()).append("
").append(tempList.get(y)[3].toString()).append(", ");
}
}
stringList.get(i).get(index).setLength(stringList.get(i).get(ind
ex).length() - 2);
stringList.get(i).get(index).append(")");
resultList.add(new StringBuilder());
for (StringBuilder str : stringList.get(i)) {
resultList.get(i).append(str);
}
i++;
}
return resultList;
}
88
SearchCriterion searchCriterion =
g.fromJson(jsonSearchCriterion, SearchCriterion.class);
StringBuilder sql = new StringBuilder("select * from
sisslr_test.get_license_list() where ");
if (!searchCriterion.getName().equals("")) {
sql.append("ulanidename ilike
'%").append(searchCriterion.Name).append("%' ");
}
if (!searchCriterion.getUNP().equals("")) {
if (!searchCriterion.getName().equals("")) {
sql.append("and ");
}
sql.append("unp =
").append(searchCriterion.getUNP()).append(" ");
}
if
(!searchCriterion.getElectronicNumber().equals("")) {
if ((!searchCriterion.getName().equals("")) ||
(!searchCriterion.getUNP().equals(""))) {
sql.append("and ");
}
sql.append("electronicnumber ilike
'%").append(searchCriterion.getElectronicNumber()).append("%'
");
}
if (!searchCriterion.getActivity().equals("")) {
if ((!searchCriterion.getName().equals("")) ||
(!searchCriterion.getUNP().equals("")) ||
(!searchCriterion.getElectronicNumber().equals(""))) {
sql.append("and ");
}
sql.append("activity_id =
").append(searchCriterion.getActivity());
}
entityManager.createNativeQuery("set search_path =
\"sisslr_test\";");
List<Object[]> licenseList =
entityManager.createNativeQuery(sql.toString()).getResultList();
return new AjaxResponse(licenseList);
} catch (Exception e) {
return new AjaxResponse(e);
}
}
@Data
private class SearchCriterion {
private String Name;
private String UNP;
// private String City;
89
private String ElectronicNumber;
private String Activity;
}
@Data
private class License {
package ipps.slr.controllers;
import com.google.gson.Gson;
import ipps.slr.helper.AjaxResponse;
import ipps.slr.helper.DropDown;
import ipps.slr.helper.DropdownValues;
import ipps.slr.model.AppUser;
import ipps.slr.model.License;
import ipps.slr.model.Licenseactivity;
import ipps.slr.model.Ulandie;
import ipps.slr.repository.LicenseActivityRepository;
import ipps.slr.repository.LicenseRepository;
import ipps.slr.repository.UlandieRepository;
import ipps.slr.repository.UserRepository;
import lombok.Data;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
90
import javax.persistence.EntityManager;
import java.math.BigInteger;
import java.security.Principal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
@Controller
@RequestMapping({"/LicenseInput", "/licenseInput"})
public class LicenseInputController {
public LicenseInputController(LicenseActivityRepository
licenseActivityRepository,
UlandieRepository
ulandieRepository, LicenseRepository licenseRepository,
UserRepository userRepository,
Gson g, EntityManager entityManager) {
this.licenseActivityRepository =
licenseActivityRepository;
this.ulandieRepository = ulandieRepository;
this.licenseRepository = licenseRepository;
this.userRepository = userRepository;
this.g = g;
this.entityManager = entityManager;
}
91
licenseActivity.getName()));
}
return new DropDown(dropdownValuesList);
}
license.setAdvancedrequests(formLicense.getAdvancedRequest());
license.setNumberdesicion(formLicense.getDecisionNumber());
license.setNumberform(formLicense.getNumberForm());
license.setUnpegr(formLicense.getUNP());
92
license.setRegisternumber(Integer.parseInt(formLicense.getRegist
erNumber()));
license.setComment(formLicense.getComments());
license.setElectronicnumber(electronicNumber);
license.setDatestart(parseDate(formLicense.getDateStart()));
license.setDateend(parseDate(dateEnd));
license.setDatedecision(parseDate(formLicense.getDateDecision())
);
license.setLicenseactivityByLicenseactivityId(licenseactivity);
license.setUlandieByUlandiEId(ulandie);
licenseRepository.save(license);
return new AjaxResponse();
} catch (Exception e) {
return new AjaxResponse(e);
}
}
93
break;
}
case "Июль":{
monthNumber=7;
break;
}
case "Август":{
monthNumber=8;
break;
}
case "Сентябрь":{
monthNumber=9;
break;
}
case "Октябрь":{
monthNumber=10;
break;
}
case "Ноябрь":{
monthNumber=11;
break;
}
case "Декабрь":{
monthNumber=12;
break;
}
}
Calendar calendar= Calendar.getInstance();
calendar.set(Calendar.YEAR,Integer.parseInt(year));
calendar.set(Calendar.MONTH,monthNumber-1);
calendar.set(Calendar.DAY_OF_MONTH,Integer.parseInt(day));
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND,0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
return new Timestamp(calendar.getTime().getTime());
}
94
else {
if(number<100){
return "0"+Long.toString(number);
}
else
return Long.toString(number);
}
}
@Data
private class License {
95