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:
+14
-1
@@ -3,7 +3,10 @@ package space.nstart.pcp.pcp_mission_planing_service.entity
|
||||
import jakarta.persistence.Column
|
||||
import jakarta.persistence.DiscriminatorValue
|
||||
import jakarta.persistence.Entity
|
||||
import jakarta.persistence.PrePersist
|
||||
import jakarta.persistence.PreUpdate
|
||||
import jakarta.persistence.Table
|
||||
import space.nstart.pcp.pcp_types_lib.dto.satellite.mission.ModeDataRates
|
||||
import java.time.LocalDateTime
|
||||
|
||||
@Entity
|
||||
@@ -20,4 +23,14 @@ class DropModeEntity(
|
||||
|
||||
@Column(name = "duration", nullable = false)
|
||||
var duration: Double = 0.0
|
||||
) : ModeEntity(id, plan, timeStart, revolution)
|
||||
) : ModeEntity(id, plan, timeStart, revolution) {
|
||||
/** Объём сброса, Мбайт. Денормализация: считается из duration (канал 1200 Мбит/с ÷ 8) при сохранении. */
|
||||
@Column(name = "volume_mb", nullable = false)
|
||||
var volumeMb: Double = ModeDataRates.dropVolumeMb(duration)
|
||||
|
||||
@PrePersist
|
||||
@PreUpdate
|
||||
fun computeVolumeMb() {
|
||||
volumeMb = ModeDataRates.dropVolumeMb(duration)
|
||||
}
|
||||
}
|
||||
|
||||
+14
-1
@@ -5,8 +5,11 @@ import jakarta.persistence.DiscriminatorValue
|
||||
import jakarta.persistence.Entity
|
||||
import jakarta.persistence.EnumType
|
||||
import jakarta.persistence.Enumerated
|
||||
import jakarta.persistence.PrePersist
|
||||
import jakarta.persistence.PreUpdate
|
||||
import jakarta.persistence.Table
|
||||
import space.nstart.pcp.pcp_types_lib.dto.routes.SurveyModeStatus
|
||||
import space.nstart.pcp.pcp_types_lib.dto.satellite.mission.ModeDataRates
|
||||
import java.time.LocalDateTime
|
||||
|
||||
@Entity
|
||||
@@ -46,4 +49,14 @@ class SurveyModeEntity(
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name = "source", nullable = false, length = 20)
|
||||
var source: SurveyModeSource = SurveyModeSource.SLOT
|
||||
) : ModeEntity(id, plan, timeStart, revolution)
|
||||
) : ModeEntity(id, plan, timeStart, revolution) {
|
||||
/** Объём маршрута съёмки, Мбайт. Денормализация: считается из duration при построении/сохранении. */
|
||||
@Column(name = "volume_mb", nullable = false)
|
||||
var volumeMb: Double = ModeDataRates.surveyVolumeMb(duration)
|
||||
|
||||
@PrePersist
|
||||
@PreUpdate
|
||||
fun computeVolumeMb() {
|
||||
volumeMb = ModeDataRates.surveyVolumeMb(duration)
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
-- Объём данных как атрибут маршрута, Мбайт. Считается при построении из длительности
|
||||
-- (см. ModeDataRates в pcp-types-lib): съёмка 120 Мбайт/с; сброс — канал 1200 Мбит/с ÷ 8 = 150 Мбайт/с.
|
||||
ALTER TABLE survey_modes ADD COLUMN volume_mb DOUBLE PRECISION NOT NULL DEFAULT 0;
|
||||
ALTER TABLE drop_modes ADD COLUMN volume_mb DOUBLE PRECISION NOT NULL DEFAULT 0;
|
||||
|
||||
-- Бэкфилл существующих маршрутов из длительности.
|
||||
UPDATE survey_modes SET volume_mb = duration * 120;
|
||||
UPDATE drop_modes SET volume_mb = duration * 1200.0 / 8;
|
||||
Reference in New Issue
Block a user