Документация Выпускной квалификационной работы бакалавра: Информационная система для администратора молодёжного пространства. Подсистема бронирования
Выполнил студент Б9121-09.03.04, Верховцов Денис Олегович
Научный руководитель: И.о. директора Департамента программной инженерии и искусственного интеллекта, старший преподаватель ДПИиИИ, Крестникова Ольга Александровна
- Введение
- Функциональность
- Структура проекта
- Основные методы
- Диспетчер URL
- Запуск
- Заключение
- Список литературы
Система бронирования молодежных пространств - курсовой проект по предмету Методы и технологии интеллектуализации программных систем, решающий задачу классификации заявок на бронирование по набору правил, задаваемых администратором молодежного пространства (Молодежного коворкинга А11).
- Создание брони: Пользователь может заполнить и сохранить заявку на бронирование молодежного пространства.
- Отображение заявки: Пользователь может посмотреть созданную и сохраненную заявку.
- Визуализация правил: Система отображает множество заявок и список применённых к ней правил классификатора.
- Просмотр архив броней: Система отображает множество заявок с возможностью отображения заявок на выбранный год или месяц.
- Предсказание статуса брони: Система отображает результаты обучения на множестве всех заявок на бронирование.
-
Редактор знаний (CogEditor)
Позволяет создавать и редактировать данные, относящиеся к бронированию. -
Решатель задач (CogSolver)
Позволяет создавать и редактировать правила, относящиеся к классификации статусов согласования. -
ML Модель (CogNeural)
Позволяет просматривать работу модели логистической регрессии.
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| unit | CharField | Наименование структурного подразделения | Да |
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| position | CharField | Наименование должности | Да |
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| full_name | CharField | ФИО сотрудника | Да |
| position | ForeignKey | Должность сотрудника | Да |
| structural_unit | ForeignKey | Структурное подразделение | Да |
| phone_number | CharField | Номер телефона | Нет |
| EmailField | Адрес электронной почты | Нет |
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| role | CharField | Роль участника мероприятия | Да |
| description | TextField | Описание роли участника | Нет |
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| status | CharField | Наименование статуса согласования | Да |
| description | TextField | Описание статуса согласования | Да |
| n_stage | IntegerField | Номер этапа согласования | Да |
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| name | CharField | Наименование приказа | Да |
| date | DateField | Дата приказа | Да |
| number | CharField | Номер приказа | Да |
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| name | CharField | Наименование формата | Да |
| description | TextField | Описание формата | Нет |
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| start | DateTimeField | Начало мероприятия | Нет |
| end | DateTimeField | Окончание мероприятия | Нет |
| all_day | BooleanField | Весь день | Да |
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| name | CharField | Наименование источника | Да |
| Поле | Тип | Описание | Обязательное |
|---|---|---|---|
| subm_date | DateTimeField | Время регистрации заявки | Да |
| application_source | ForeignKey | Способ получения заявки | Нет |
| e_title | TextField | Наименование мероприятия | Да |
| e_description | TextField | Описание мероприятия | Нет |
| e_format | ForeignKey | Формат мероприятия | Нет |
| installation_deinstallation | ForeignKey | Время монтажа/демонтажа | Нет |
| event_schedule | ManyToManyField | Время бронирования | Нет |
| number_of_participants | IntegerField | Количество участников | Да |
| roles | ManyToManyField | Роли участников | Да |
| organizer | ForeignKey | Организатор | Да |
| organizer_employee | ForeignKey | Ответственный за организацию | Нет |
| order | ForeignKey | Приказ на мероприятие | Нет |
| requires_technical_support | BooleanField | Требуется техподдержка | Да |
| audio_training_date | DateField | Дата обучения работе со звуком | Нет |
| technical_requirements | TextField | Технические требования | Нет |
| status | ForeignKey | Статус согласования | Да |
| Поле | Тип | Описание | Обязательное | Параметры/Примечания |
|---|---|---|---|---|
| name | CharField | Наименование правила | Да | max_length=100 |
| description | TextField | Описание правила | Да | - |
| priority | IntegerField | Приоритет выполнения | Да | default=1 |
| is_active | BooleanField | Активно ли правило | Да | default=True |
| condition_type | CharField | Тип условия | Да | Выбор из: "date_compare", "role_check", "text_length", "combined" |
| days_threshold | IntegerField | Порог дней для сравнения дат | Нет | Только для condition_type="date_compare" |
| role_id | ManyToManyField | Роли для проверки | Нет | Связь с ParticipatoryRole, только для condition_type="role_check" |
| min_text_length | IntegerField | Минимальная длина текста | Нет | Только для condition_type="text_length" |
| new_status | ForeignKey | Новый статус при выполнении | Да | Связь с AgreedStatus |
-
RuleEngine (Обработчик правил)
-
apply_rules_to_application(application):
- Применяет все активные правила к заявке (по приоритету)
- Обновляет статус заявки при выполнении правила
- Логирует ошибки выполнения
-
batch_apply_rules():
- Применяет правила ко всем заявкам
- Возвращает список результатов с информацией об изменениях статусов
-
Особенности:
- Правила применяются в порядке убывания приоритета
- При ошибке обработки одного правила, обработка продолжается
- Для combined условий проверяются все указанные параметры
-
-
Rule (Правила)
-
evaluate(application) - Применяет правило к заявке:
- Возвращает True, если условие выполнено
- Обрабатывает разные типы условий (date_compare, role_check и др.)
- Для combined условий проверяет все заданные параметры
-
clean() - Валидация:
- Проверяет наличие необходимых полей для каждого типа условия
- Вызывает ValidationError при несоответствиях
-
- Главная:
localhost/ - Просмотр архива броней за месяц:
localhost/application/archive/<int:year>/<int:month> - Просмотр архива броней за год:
localhost/application/archive/<int:year> - Просмотр архива броней за все время:
localhost/application/archive/ - Просмотр архива по пользователю:
localhost/organizer/<int:id>/events/ - Отображение заявки:
localhost/application/<int:id>
Клонируйте репозиторий methods-of-software-intellectualization на свой компьютер в рабочую папку Dev/. Разверните и активируйте виртуальное окружение в папке Dev/methods-of-software-intellectualization/, установите в него зависимости из /docs/requirements.txt. После установки проекта должна получиться такая структура файлов:
Dev
└── methods-of-software-intellectualization/
├── .vscode/ Служебная папка редактора кода (опционально, скрытая)
├── .git/ Служебная информация Git (скрытая)
├── .venv/ Директория виртуального окружения
├── docs
│ └── requirements.txt Список зависимостей проекта
├── system Директория проекта
│ ├── CogEditor/
│ ├── CogNeural/
│ ├── CogSolver/
│ ├── mysite/
│ ├── static/ Папка со статическими файлами Django
│ ├── templates/ Папка с шаблонами Django
│ ├── db.sqlite3 Файл базы данных (может и не быть)
│ └── manage.py
├── .flake8 Настройки тестов (скрытый)
├── .gitignore Список файлов и папок, скрытых от отслеживания Git (скрытый)
├── .pre-commit-config.yaml Конфигурация Git Хука pre-commit
├── db.json <-- Загрузите фикстуры для базы данных
├── LICENSE Лицензия
├── pyproject.toml Файл с настройками для pre-commit
├── pytest.ini Конфигурация тестов
└── README.md
Скачать и установить, запустить Docker. Собрать и запустить приложение:
docker compose
python manage.py runserver 192.168.1.37:8050 --insecureЗапуск на localhost с возможностью допуска с ПК локальной сети:
python manage.py runserver 0.0.0.0:8050 --insecureЛокальный IP-адрес можно узнать через команду ipconfig
В папке с manage.py выполнить команду для создания дампа в файл dump.json
python manage.py dumpdata --natural-foreign --natural-primary -e contenttypes -e auth.Permission --indent 2 > dump.jsonВ папке с manage.py выполнить команду для загрузки дампа из файла dump.json
python manage.py loaddata dump.jsonЗа цели и задачи работы полностью выполнены. За время работы я приобрел необходимы навыки и компетенции по разработке программных средств, решающих задачи классификации.