Система бронирования молодежных пространств - курсовой проект по предмету Методы и технологии интеллектуализации программных систем, решающий задачу классификации заявок на бронирование по набору правил, задаваемых администратором молодежного пространства (Молодежного коворкинга А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
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
За цели и задачи работы полностью выполнены. За время работы я приобрел необходимы навыки и компетенции по разработке программных средств, решающих задачи классификации.