a61e23c095
Проекция будущей цепочки якорилась только на принятый базовый план (currentBasePlanId) и игнорировала выданный, но ещё не принятый план в полёте (ISSUING/WAITING_DECISION). Из-за этого она заново выводила уже выданный слот, и при дрейфе снапшота ЗРВ (сместился КПП или границы окна) точечный дедуп по businessKey в PlanQueryService не срабатывал — на вкладке «Планы» появлялся призрак-дубль PLANNED поверх WAITING_DECISION. Теперь якорь проекции — самая дальняя зафиксированная точка цепочки: если есть план в полёте, цепочку строим после него. На путь выдачи не влияет: там activePlanId к моменту вызова проекции уже снят.
Spacecraft Planning Service
Сервис планирования наблюдений космических аппаратов.
Сервис получает данные о доступных пунктах наблюдения и окнах наблюдения, строит непрерывную цепочку планов для каждого космического аппарата и отправляет уведомления перед началом каждого плана.
Основные возможности
Сервис выполняет следующие функции:
- хранит планы космических аппаратов
- строит непрерывную цепочку планов
- принимает обновления пунктов наблюдения
- пересчитывает планы при обновлении данных
- отправляет Kafka уведомления перед началом плана
- предоставляет REST API для чтения планов
Основные сущности
Plan
План космического аппарата.
Содержит:
- spacecraftId
- startTime
- endTime
- insertionPointId
SpacecraftPoints
Набор входных данных по одному космическому аппарату.
Содержит:
- spacecraftId
- список пунктов наблюдения
InsertionPoint
Пункт закладки.
Содержит:
- pointId
- список окон наблюдения
ObservationWindow
Окно наблюдения космического аппарата.
Содержит:
- startTime
- endTime
- elevationAngle
Алгоритм построения планов
Алгоритм MVP:
- Все
observationWindow.startTimeсчитаются кандидатами на старт плана. - Для текущего старта ищется следующий старт: