Синхронизация групп
Dispace запрашивает данные из ЦИУ о группах.
Модели
Процессы
Запрос информации
DiSpace запрашивает данные у ЦИУ по ссылке (пример ссылки ниже). В ответ приходят данные в формате JSON.
https://api.ciu.nstu.ru/v1.0/sync_ido/study_groups/${workspaceID}?decode_unicode_escape=1&json_indent=1
Параметры запроса:
- workspaceID - int - обязательный параметр, ID рабочего пространства
- decode_unicode_escape - обязательный параметр.
- json_indent - обязательный параметр.
Периодичность синхронизации
Синхронизация выполняется в начале каждого семестра, а так же в течении семестра в ручном режиме. У суперюзера есть страница запуска всех синхронизаций. Там через интерфейс можно выбрать пространство и запустить любой из указанных скриптов.
Обработка информации
Данные от ЦИУ приходят в формате JSON, ниже указаны какие конкретно атрибуты передаются:
- FK_STUDY_GROUP — id_ciu группы
- NAME — название группы
- ID_FACULTET — id_ciu факультета.
- ID_WORK_SPACE — наше id пространства (например, 100 — заочное, 200 — очное).
- YEAR_ENR — год набора (набор происходит в сентябре).
После получения списка всех групп ЦИУ по рабочим пространствам, также получаем из базы список наших активных групп (status = 1) и начинается сверка этих списков.
Делаем обход по списку групп из ЦИУ. Для каждой такой группы из ЦИУ, в модели группы DiSpace происходят следующие процессы: - Получаем группу из нашей БД с тем же id_ciu. - Если группа из ЦИУ найдена в DiSpace: - Обновляем title, faculty_id, workspace_id. - Если эта группа у нас закончила обучение (status = 2), включаем её (status → 1). - Если из ЦИУ пришло явное указание года набора year и он отличается у нашей группы, доверяем ЦИУ, обновляем его. - Если группа по id_ciu не найдена, ищем у нас по тому же названию. - Если такая группа найдена и id_ciu у неё не задан, записываем его. - Если группа у нас не найдена по названию или id_ciu, создаем её.
Отчисление
Считается, что в списке от ЦИУ приходят только актуальные группы. Поэтому отчисляем оставшиеся наши группы в рабочем пространстве, которые не затронули в алгоритме обновления выше. У отчисляемых групп, которые не входят в Исключение 1 и 2, устанавливается статус → 2. Всем студентам в отчисленных группах устанавливается статус → 3 (отчислены).
- Исключение 1: пространство магистратуры и абитуриентов — в них никого не отчисляем никогда, так как риск ошибки слишком велик.
- Исключение 2: группы со строками в названии
- Демо
- Олимпиада
- Пробные (устарело)
- ШР-2020 (устарело)
- РУМЦ (устарело)
- Преподаватели (устарело)
- ФПК-ЕСКД (устарело)
- ЛДвЭЭС (устарело)
- Группы с ID (устаревшая проверка):
- 7827, 12550, 12546, … ,13801.
После выполнения всех операций, если выбрана соответствующая опция (по умолчанию выбрана), запускается следующий скрипт синхронизации студентов.