Files
magistr/DYNAMIC_SCHEDULE_IMPLEMENTATION.md

6.3 KiB
Raw Blame History

Реализация динамического расписания

Файл фиксирует текущий результат внедрения динамического расписания и календарных учебных графиков.

Статус

Новая модель является базовой схемой проекта и создаётся в backend/src/main/resources/db/migration/V1__init.sql. По требованию текущей ветки новая отдельная Flyway-миграция не создавалась; применение рассчитано на полный сброс БД.

Старый ручной слой занятий удалён. Динамическое расписание строится из правил schedule_rules, слотов schedule_rule_slots и календарного учебного графика группы.

База данных

V1__init.sql создаёт и заполняет:

Таблица Назначение
specialties Коды и названия специальностей
specialty_profiles Профили обучения внутри специальности
student_groups Группы со ссылками на специальность и профиль
education_forms Общий справочник форм обучения для групп и календарных графиков
academic_calendar_activity_types Коды активностей из Excel-графика
academic_calendars Календарные графики профиля, формы обучения и учебного года
academic_calendar_days Дневная сетка графика по курсу и дате
student_group_calendar_assignments Назначения графиков группам по учебному году
time_slots Настраиваемая сетка пар
schedule_rules Правила проведения дисциплин
schedule_rule_groups Группы правила
schedule_rule_slots Шаблонные слоты правила

Праздничные и неучебные дни больше не хранятся отдельной сущностью: они задаются кодами * и = в дневной сетке.

Backend

Добавлены сущности и репозитории для профилей, календарей, кодов активностей, дневной сетки и назначений группам.

Ключевые сервисы:

Сервис Назначение
AcademicDateService Семестр по дате, номер недели, чётность, курс группы, активность дня по назначенному графику
ScheduleGeneratorService Рендер расписания группы или преподавателя на диапазон дат

ScheduleGeneratorService пропускает день, если код активности не разрешает обычные пары. Если у группы нет назначенного графика на учебный год, расписание этой группы возвращается пустым списком.

API

Просмотр расписания:

GET /api/schedule?groupId=1&startDate=2026-04-27&endDate=2026-05-03
GET /api/schedule?teacherId=2&startDate=2026-04-27&endDate=2026-05-03

Административные API:

API Назначение
/api/admin/time-slots CRUD временных слотов
/api/admin/calendar/years CRUD учебных годов
/api/admin/calendar/years/{academicYearId}/semesters Семестры учебного года
/api/admin/calendar/semesters/{id} Обновление семестра
/api/admin/calendar/activity-types CRUD кодов активностей
/api/admin/academic-calendars CRUD календарных учебных графиков
/api/admin/academic-calendars/{id}/grid Получение и сохранение дневной сетки
/api/specialties/{id}/profiles CRUD профилей специальности
/api/groups/{id}/calendar-assignments Назначения графиков группе
/api/admin/schedule-rules CRUD правил расписания

Frontend

Админский экран schedule содержит:

  • конструктор правил динамического расписания;
  • управление временными слотами;
  • учебные годы и семестры;
  • CRUD календарных графиков;
  • Excel-подобный редактор дневной сетки по курсам, датам и кодам активностей.

Экран groups создаёт и редактирует группы с профилем обучения, а также назначает календарный график группе на учебный год.

Экран departments-data управляет кафедрами, специальностями и профилями специальностей.

Проверки

Доступные локальные проверки:

node --check frontend/admin/js/views/schedule.js
node --check frontend/admin/js/views/groups.js
node --check frontend/admin/js/views/departments-data.js
git diff --check

Полная проверка требует окружения с Maven и доступом к Docker:

mvn -DskipTests compile
docker compose down -v
docker compose up -d --build

Следующие этапы

  • Добавить интеграционные тесты генерации по кодам Т, Э, К, *, =.
  • Добавить строгую backend-валидацию конфликтов преподавателей, аудиторий и групп при сохранении правил.
  • Добавить связь пользователя-студента с учебной группой, чтобы кабинет студента не требовал ручного выбора группы.