12 KiB
12 KiB
План выполнения работ по новым интерфейсам расписания
На основе предоставленного технического задания составлен следующий детализированный план разработки макетов и функционала новой подсистемы составления и просмотра расписания.
1. Вкладка "Загрузка аудиторий"
Концепция: Динамическая таблица, визуализирующая текущее использование аудиторного фонда в конкретную учебную неделю.
Интерфейс
- Сетка данных:
- Столбцы: Аудитории.
- Строки: Время пар (расписание звонков).
- Ячейки: Информация о проходящем занятии (Группа, Преподаватель, Дисциплина).
- Элементы управления:
- Календарь недель: Выпадающий список или слайдер для переключения между учебными неделями семестра. Учитывает изменения в графике (сессии, приезд заочников и т.д.).
- Фильтр аудиторий: Чекбоксы, мультиселект или группировка по корпусам/типам, позволяющие скрывать неотображаемые аудитории для удобства просмотра.
Функционал
- Отображение данных на основе сохраненного расписания из БД с привязкой к выбранной неделе.
- Интерактивность: Возможность клика по пустой ячейке для добавления нового занятия. Открывается модальное окно с предзаполненными полями
Аудитория,ВремяиНеделя.
2. Вкладка "Загруженность преподавателей"
Концепция: Интерфейс, дублирующий логику загрузки аудиторий, но с фокусом на профессорско-преподавательский состав (ППС).
Интерфейс
- Сетка данных:
- Столбцы: Список преподавателей.
- Строки: Время пар.
- Ячейки: Информация о занятии (Группа, Аудитория, Дисциплина).
- Элементы управления:
- Календарь недель (аналогично аудиториям).
- Поиск/фильтрация по ФИО преподавателя или кафедре.
3. Рабочее окно составителя расписания
Концепция: Основной инструмент диспетчера. Интерактивная среда для распределения нагрузки.
Интерфейс
- Сетка расписания:
- Столбцы: Учебные группы.
- Строки: Время пар.
- Панель нагрузки: Боковая панель или вызываемое окно со списком нераспределенных предметов для выбранной группы/курса.
Алгоритм работы (User Flow)
- Старт: Диспетчер кликает в конкретную ячейку сетки (выбирает группу и время проведения пары).
- Выбор предмета: Появляется меню со списком предметов, которые необходимо поставить данной группе. Диспетчер выбирает нужный.
- Выбор преподавателя и проверка его занятости:
- Система автоматически подтягивает преподавателя (или список возможных), закрепленного за этой дисциплиной.
- Отображается карта свободных слотов преподавателя, чтобы убедиться, что он не ведет пару в это же время у другой группы (предотвращение накладок).
- Выбор аудитории (Умный подбор):
- Если преподаватель свободен, всплывает карта загрузки аудиторий.
- Аудитории отображаются с цветовой индикацией:
- 🟢 Зеленый: Аудитория свободна и её характеристики (тип, вместимость) полностью подходят для занятия.
- 🟡 Желтый: Аудитория свободна, но не подходит по требованиям (например, это лекционный зал для маленькой группы, или обычная аудитория для компьютерного практикума).
- 🔴 Красный: Аудитория занята (при наведении или клике показывается, кто именно там занимается).
- Диспетчер выбирает подходящую аудиторию.
- Финал: Занятие фиксируется в сетке, предмет вычитается из пула нераспределенной нагрузки.
Этапы реализации и анализ архитектуры БД
На основе анализа существующей базы данных проекта (см. docs/DATABASE.md) выявлено, что значительная часть необходимых данных уже присутствует, однако для полного удовлетворения ТЗ требуются точечные доработки структуры БД.
Анализ требований ТЗ и текущей БД
- "Аудитории: нет пункта о том, в каком корпусе она находится":
- Текущее состояние в БД: В таблице
classroomsуже существуют поляbuilding(Корпус) иfloor(Этаж). - Вывод: Добавление характеристик корпуса в БД не требуется. Информацию нужно просто вывести через Backend API на Frontend.
- Текущее состояние в БД: В таблице
- Динамическое расписание и календарь недель ("закончился семестр у магистров", "заочники"):
- Текущее состояние в БД: Таблица
lessonsсодержит полеweek(с текстовыми значениямиВерхняя / Нижняя / Обе), что подразумевает статический цикличный график (раз в 2 недели). - Чего не хватает: Текущая схема не позволяет гибко привязывать занятия к конкретным календарным датам или конкретным учебным неделям семестра (например, с 1 по 18 неделю).
- Вывод: Потребуется миграция БД для внедрения календаря (например, таблица
academic_weeksили изменение структурыlessons).
- Текущее состояние в БД: Таблица
- Умный подбор аудиторий (желтая индикация — "не подходит оборудование"):
- Текущее состояние в БД: Есть таблица
classroom_equipments, описывающая инвентарь аудитории. - Чего не хватает: В системе отсутствует информация о том, какое оборудование требуется для конкретной дисциплины.
- Вывод: Необходимо добавить новую связующую таблицу (например,
subject_equipmentsилиlesson_type_equipments), чтобы алгоритм мог сопоставлять требования предмета с оснащением выбранной аудитории.
- Текущее состояние в БД: Есть таблица
- Списки нагрузки для распределения:
- Текущее состояние в БД: Присутствует таблица
schedule_dataсо столбцомnumber_of_hours(часы, подлежащие распределению). - Вывод: Архитектура готова. Потребуется лишь бизнес-логика для связывания созданных записей
lessonsс нераспределенной нагрузкойschedule_data(для вычета распределенных часов).
- Текущее состояние в БД: Присутствует таблица
Детализированный план реализации
Этап 1: Доработка базы данных (Flyway миграции)
- Миграция БД (Календарь): Проектирование и создание механизма привязки расписания к конкретным неделям/датам, отход от жесткой привязки "Верхняя/Нижняя".
- Миграция БД (Оборудование): Создание таблицы для хранения технических требований дисциплин к аудиториям (
subject_equipments), чтобы стала возможна "желтая" индикация. - (Напоминание: все миграции создаются как новые файлы
V2__...sql,V3__...sqlв директорииdb/migration/, изменениеV1__init.sqlзапрещено).
Этап 2: Разработка Backend API (Java Spring Boot)
- Эндпоинты получения видов (View API):
- API для сетки аудиторий: агрегация занятий по аудиториям с учетом выбранной недели.
- API для сетки преподавателей: агрегация занятий по преподавателям.
- API нераспределенной нагрузки: получение остатка часов из
schedule_dataдля выбранной группы.
- Интеллектуальные алгоритмы проверок (Service Layer):
- Логика проверки накладок преподавателей.
- Алгоритм "Цветофор" для аудитории:
- Красный (занятость по времени).
- Желтый (сопоставление вместимости
capacityсgroup_size+ проверка наличия нужного оборудования). - Зеленый (все проверки пройдены).
Этап 3: UI-разработка (Frontend)
- Верстка трех основных табличных сеток (Audience Load, Teacher Workload, Schedule Maker).
- Реализация календаря/селектора недель (влияющего на выводимые данные).
- Программирование интерактивного Flow диспетчера в Vanilla JS:
- Клик в ячейку.
- Вызов списка нагрузки -> выбор предмета.
- Отображение свободных слотов преподавателя.
- Вывод карты аудиторий с динамической цветовой индикацией.
- Сохранение результата.
Этап 4: Интеграция и стабилизация
- Интеграция Front и Back-частей.
- Сквозное тестирование сценариев создания, редактирования и удаления занятий с пересчетом часов нагрузки.