На деплой

This commit is contained in:
2025-11-24 13:57:31 +03:00
parent a591b79656
commit 1c18ae96f7
14 changed files with 2 additions and 2249 deletions

View File

@@ -1,154 +0,0 @@
# Страница Кубсат
## Описание
Страница "Кубсат" предназначена для фильтрации источников сигнала (Source) по различным критериям и экспорта результатов в Excel.
## Доступ
Страница доступна по адресу: `/kubsat/`
Также добавлена в навигационное меню между "Наличие сигнала" и "3D карта".
## Функциональность
### Фильтры
#### Реализованные фильтры:
1. **Спутники** (мультивыбор) - фильтрация по спутникам из связанных ObjItem
2. **Полоса спутника** (выбор) - выбор диапазона частот
3. **Поляризация** (мультивыбор) - фильтрация по поляризации сигнала
4. **Центральная частота** (диапазон) - фильтрация по частоте от/до в МГц
5. **Полоса** (диапазон) - фильтрация по полосе частот от/до в МГц
6. **Модуляция** (мультивыбор) - фильтрация по типу модуляции
7. **Тип объекта** (мультивыбор) - фильтрация по типу объекта (ObjectInfo)
8. **Количество привязанных ObjItem** (radio button):
- Все
- 1
- 2 и более
#### Фиктивные фильтры (заглушки):
9. **Принадлежность объекта** (мультивыбор) - пока не реализовано
10. **Планы на** (radio да/нет) - фиктивный фильтр
11. **Успех 1** (radio да/нет) - фиктивный фильтр
12. **Успех 2** (radio да/нет) - фиктивный фильтр
13. **Диапазон дат** (от/до) - фиктивный фильтр
### Таблица результатов
После применения фильтров отображается таблица на всю ширину страницы с колонками:
- ID Source - идентификатор источника (объединяет несколько точек)
- Тип объекта - тип источника
- Кол-во точек - количество точек источника (автоматически пересчитывается при удалении)
- Имя точки - название точки (ObjItem)
- Спутник (имя и NORAD ID)
- Частота (МГц)
- Полоса (МГц)
- Поляризация
- Модуляция
- Координаты ГЛ - координаты из geo_obj точки
- Дата ГЛ - дата геолокации точки
- Действия (кнопки удаления)
**Важно**:
- Таблица показывает все точки (ObjItem) для каждого источника (Source)
- Точки одного источника группируются вместе
- Колонки ID Source, Тип объекта и Кол-во точек объединены для всех строк источника (rowspan)
- Количество точек автоматически пересчитывается при удалении строк
- Таблица имеет фиксированную высоту с прокруткой и sticky заголовок
### Двухэтапная фильтрация
Фильтрация происходит в два этапа:
**Этап 1: Фильтрация по дате ГЛ**
- Если задан диапазон дат (от/до), отображаются только те точки, у которых дата ГЛ попадает в этот диапазон
- Точки без даты ГЛ исключаются, если фильтр по дате задан
- Если фильтр не задан, показываются все точки
**Этап 2: Фильтрация по количеству точек**
- Применяется к уже отфильтрованным по дате точкам
- Варианты:
- "Все" - показываются источники с любым количеством точек
- "1" - только источники с ровно 1 точкой (после фильтрации по дате)
- "2 и более" - только источники с 2 и более точками (после фильтрации по дате)
**Важно**: Фильтр по количеству точек учитывает только те точки, которые прошли фильтрацию по дате!
### Управление данными в таблице
**Кнопки удаления:**
- **Кнопка с иконкой корзины** (для каждой точки) - удаляет конкретную точку (ObjItem) из таблицы
- **Кнопка с иконкой заполненной корзины** (для первой точки источника) - удаляет все точки источника (Source) из таблицы
**Важно**: Все удаления происходят только из таблицы, **БЕЗ удаления из базы данных**. Это позволяет пользователю исключить ненужные записи перед экспортом.
### Экспорт в Excel
Кнопка "Экспорт в Excel" создает файл со следующими колонками:
1. **Дата** - текущая дата (без времени)
2. **Широта, град** - рассчитывается как **инкрементальное среднее** из координат оставшихся в таблице точек
3. **Долгота, град** - рассчитывается как **инкрементальное среднее** из координат оставшихся в таблице точек
4. **Высота, м** - всегда 0
5. **Местоположение** - из geo_obj.location первого ObjItem
6. **ИСЗ** - имя спутника и NORAD ID в скобках
7. **Прямой канал, МГц** - частота + перенос из транспондера
8. **Обратный канал, МГц** - частота источника
9. **Перенос** - из объекта Transponder
10. **Получено координат, раз** - количество точек (ObjItem), оставшихся в таблице для данного источника
11. **Период получения координат** - диапазон дат ГЛ в формате "5.11.2025-15.11.2025" (от самой ранней до самой поздней даты среди точек источника). Если все точки имеют одну дату, показывается только одна дата.
12. **Зеркала** - все имена зеркал через перенос строки (из оставшихся точек)
13. **СКО, км** - не заполняется
14. **Примечание** - не заполняется
15. **Оператор** - имя текущего пользователя
**Важно**:
- Экспортируются только точки (ObjItem), оставшиеся в таблице после удалений
- Координаты рассчитываются по алгоритму инкрементального среднего из функции `calculate_mean_coords` (аналогично `fill_data_from_df`)
- Если пользователь удалил некоторые точки, координаты будут рассчитаны только по оставшимся
Файл сохраняется с именем `kubsat_YYYYMMDD_HHMMSS.xlsx`.
## Технические детали
### Файлы
- **Форма**: `dbapp/mainapp/forms.py` - класс `KubsatFilterForm`
- **Представления**: `dbapp/mainapp/views/kubsat.py` - классы `KubsatView` и `KubsatExportView`
- **Шаблон**: `dbapp/mainapp/templates/mainapp/kubsat.html`
- **URL**: `/kubsat/` и `/kubsat/export/`
### Зависимости
- openpyxl - для создания Excel файлов
- Django GIS - для работы с координатами
### Оптимизация запросов
Используется `select_related` и `prefetch_related` для минимизации количества запросов к базе данных:
```python
queryset = Source.objects.select_related('info').prefetch_related(
'source_objitems__parameter_obj__id_satellite',
'source_objitems__parameter_obj__polarization',
'source_objitems__parameter_obj__modulation',
'source_objitems__transponder__sat_id'
)
```
## Использование
1. Откройте страницу "Кубсат" из навигационного меню
2. Выберите нужные фильтры (спутники, поляризация, частота и т.д.)
3. Опционально укажите диапазон дат для фильтрации точек по дате ГЛ (Этап 1)
4. Опционально выберите количество точек (1 или 2+) - применяется к отфильтрованным по дате точкам (Этап 2)
5. Нажмите "Применить фильтры"
6. В таблице отобразятся точки (ObjItem) сгруппированные по источникам (Source)
7. При необходимости удалите отдельные точки или целые объекты кнопками в колонке "Действия"
8. Нажмите "Экспорт в Excel" для скачивания файла с оставшимися данными
9. Форма не сбрасывается после экспорта - можно продолжить работу
## Примечания
- Форма не сбрасывается после экспорта
- Удаление точек/объектов из таблицы не влияет на базу данных
- Экспортируются только оставшиеся в таблице точки
- Координаты в Excel рассчитываются как инкрементальное среднее из оставшихся точек
- Фильтр по дате скрывает неподходящие точки (не показывает их в таблице)
- Каждая строка таблицы = одна точка (ObjItem), строки группируются по источникам (Source)
- Количество точек в колонке "Кол-во точек" автоматически пересчитывается при удалении строк

View File

@@ -125,9 +125,9 @@ def get_all_constants():
sats = [sat.name for sat in Satellite.objects.all()]
standards = [sat.name for sat in Standard.objects.all()]
pols = [sat.name for sat in Polarization.objects.all()]
mirrors = [sat.name for sat in Mirror.objects.all()]
# mirrors = [sat.name for sat in Mirror.objects.all()]
modulations = [sat.name for sat in Modulation.objects.all()]
return sats, standards, pols, mirrors, modulations
return sats, standards, pols, modulations
def find_mirror_satellites(mirror_names: list) -> list: