Поправил теханализ

This commit is contained in:
2025-12-10 12:50:52 +03:00
parent d889dc7b2a
commit 4949a03e68
2 changed files with 72 additions and 6 deletions

View File

@@ -138,7 +138,17 @@
<div class="modal-body"> <div class="modal-body">
<div class="alert alert-info"> <div class="alert alert-info">
<i class="bi bi-info-circle"></i> <i class="bi bi-info-circle"></i>
Будут обновлены только точки с отсутствующими данными (модуляция "-", символьная скорость -1 или 0, стандарт "-"). <strong>Будут обновлены точки с отсутствующими данными:</strong>
<ul class="mb-0 mt-2">
<li>Модуляция (если "-")</li>
<li>Символьная скорость (если -1, 0 или пусто)</li>
<li>Стандарт (если "-")</li>
<li>Частота (если 0, -1 или пусто)</li>
<li>Полоса частот (если 0, -1 или пусто)</li>
<li>Поляризация (если "-")</li>
<li>Транспондер (если не привязан)</li>
<li>Источник LyngSat (если не привязан)</li>
</ul>
</div> </div>
<div class="mb-3"> <div class="mb-3">

View File

@@ -19,7 +19,7 @@ from ..models import (
Parameter, Parameter,
) )
from ..mixins import RoleRequiredMixin from ..mixins import RoleRequiredMixin
from ..utils import parse_pagination_params from ..utils import parse_pagination_params, find_matching_transponder, find_matching_lyngsat
class TechAnalyzeEntryView(LoginRequiredMixin, View): class TechAnalyzeEntryView(LoginRequiredMixin, View):
@@ -190,6 +190,9 @@ class LinkExistingPointsView(LoginRequiredMixin, View):
* Обновить модуляцию (если "-") * Обновить модуляцию (если "-")
* Обновить символьную скорость (если -1.0 или None) * Обновить символьную скорость (если -1.0 или None)
* Обновить стандарт (если "-") * Обновить стандарт (если "-")
* Обновить частоту (если 0 или None)
* Обновить полосу частот (если 0 или None)
* Подобрать подходящий транспондер
""" """
def post(self, request): def post(self, request):
@@ -214,7 +217,7 @@ class LinkExistingPointsView(LoginRequiredMixin, View):
# Получаем все ObjItem для данного спутника # Получаем все ObjItem для данного спутника
objitems = ObjItem.objects.filter( objitems = ObjItem.objects.filter(
parameter_obj__id_satellite=satellite parameter_obj__id_satellite=satellite
).select_related('parameter_obj', 'parameter_obj__modulation', 'parameter_obj__standard') ).select_related('parameter_obj', 'parameter_obj__modulation', 'parameter_obj__standard', 'parameter_obj__polarization')
updated_count = 0 updated_count = 0
skipped_count = 0 skipped_count = 0
@@ -236,7 +239,14 @@ class LinkExistingPointsView(LoginRequiredMixin, View):
parameter.bod_velocity is None or parameter.bod_velocity is None or
parameter.bod_velocity == -1.0 or parameter.bod_velocity == -1.0 or
parameter.bod_velocity == 0 or parameter.bod_velocity == 0 or
(parameter.standard and parameter.standard.name == "-") (parameter.standard and parameter.standard.name == "-") or
parameter.frequency is None or
parameter.frequency == 0 or
parameter.frequency == -1.0 or
parameter.freq_range is None or
parameter.freq_range == 0 or
parameter.freq_range == -1.0 or
objitem.transponder is None
) )
if not needs_update: if not needs_update:
@@ -247,7 +257,7 @@ class LinkExistingPointsView(LoginRequiredMixin, View):
tech_analyze = TechAnalyze.objects.filter( tech_analyze = TechAnalyze.objects.filter(
name=source_name, name=source_name,
satellite=satellite satellite=satellite
).select_related('modulation', 'standard').first() ).select_related('modulation', 'standard', 'polarization').first()
if not tech_analyze: if not tech_analyze:
skipped_count += 1 skipped_count += 1
@@ -272,8 +282,55 @@ class LinkExistingPointsView(LoginRequiredMixin, View):
parameter.standard = tech_analyze.standard parameter.standard = tech_analyze.standard
updated = True updated = True
# Обновляем частоту
if (parameter.frequency is None or parameter.frequency == 0 or parameter.frequency == -1.0) and \
tech_analyze.frequency and tech_analyze.frequency > 0:
parameter.frequency = tech_analyze.frequency
updated = True
# Обновляем полосу частот
if (parameter.freq_range is None or parameter.freq_range == 0 or parameter.freq_range == -1.0) and \
tech_analyze.freq_range and tech_analyze.freq_range > 0:
parameter.freq_range = tech_analyze.freq_range
updated = True
# Обновляем поляризацию если нужно
if parameter.polarization and parameter.polarization.name == "-" and tech_analyze.polarization:
parameter.polarization = tech_analyze.polarization
updated = True
# Сохраняем parameter перед поиском транспондера (чтобы использовать обновленные данные)
if updated: if updated:
parameter.save() parameter.save()
# Подбираем транспондер если его нет (используем функцию из utils)
if objitem.transponder is None and parameter.frequency and parameter.frequency > 0:
transponder = find_matching_transponder(
satellite,
parameter.frequency,
parameter.polarization
)
if transponder:
objitem.transponder = transponder
updated = True
# Подбираем источник LyngSat если его нет (используем функцию из utils)
if objitem.lyngsat_source is None and parameter.frequency and parameter.frequency > 0:
lyngsat_source = find_matching_lyngsat(
satellite,
parameter.frequency,
parameter.polarization,
tolerance_mhz=0.1
)
if lyngsat_source:
objitem.lyngsat_source = lyngsat_source
updated = True
# Сохраняем objitem если были изменения транспондера или lyngsat
if objitem.transponder or objitem.lyngsat_source:
objitem.save()
if updated:
updated_count += 1 updated_count += 1
else: else:
skipped_count += 1 skipped_count += 1
@@ -305,7 +362,6 @@ class LinkExistingPointsView(LoginRequiredMixin, View):
}, status=500) }, status=500)
class TechAnalyzeListView(LoginRequiredMixin, View): class TechAnalyzeListView(LoginRequiredMixin, View):
""" """
Представление для отображения списка данных технического анализа. Представление для отображения списка данных технического анализа.