routes: объём маршрута (volumeMb) — расчёт, хранение в БД и отображение

Объём режима = скорость × длительность, Мбайт: съёмка 120 Мбайт/с (12 ГБ / 100 с), сброс — канал 1200 Мбит/с ÷ 8. Единый источник — ModeDataRates в pcp-types-lib. Хранится колонкой volume_mb (Flyway V10 mission-planing, V9 complex-mission, бэкфилл из duration), заполняется на всех путях построения через @PrePersist/@PreUpdate. DTO отдают вычисляемое read-only поле (та же формула). Фронт pcp-tgu-ops-ui показывает объём в редакторе (инспектор, построенный маршрут) и в сводке комплексного плана.
This commit is contained in:
Дмитрий Соловьев
2026-06-06 18:34:29 +03:00
parent 316e0ee552
commit 2499aebf2d
20 changed files with 190 additions and 13 deletions
@@ -12,8 +12,11 @@ import jakarta.persistence.Id
import jakarta.persistence.OneToMany
import jakarta.persistence.JoinColumn
import jakarta.persistence.ManyToOne
import jakarta.persistence.PrePersist
import jakarta.persistence.PreUpdate
import jakarta.persistence.Table
import jakarta.persistence.Index
import space.nstart.pcp.pcp_types_lib.dto.satellite.mission.ModeDataRates
import java.time.LocalDateTime
@Entity
@@ -92,4 +95,14 @@ class SatelliteModeEntity(
fetch = FetchType.LAZY
)
var cells: MutableList<SatelliteModeCellEntity> = mutableListOf()
)
) {
/** Объём маршрута, Мбайт. Денормализация: считается из duration при построении (satellite_modes — только SURVEY). */
@Column(name = "volume_mb", nullable = false)
var volumeMb: Double = ModeDataRates.surveyVolumeMb(duration)
@PrePersist
@PreUpdate
fun computeVolumeMb() {
volumeMb = ModeDataRates.surveyVolumeMb(duration)
}
}
@@ -0,0 +1,6 @@
-- Объём маршрута съёмки как атрибут, Мбайт. Считается при построении из длительности
-- (см. ModeDataRates в pcp-types-lib): накопление 120 Мбайт/с. satellite_modes — только SURVEY.
ALTER TABLE satellite_modes ADD COLUMN volume_mb DOUBLE PRECISION NOT NULL DEFAULT 0;
-- Бэкфилл существующих маршрутов из длительности.
UPDATE satellite_modes SET volume_mb = duration * 120;