backend: правки complex-mission/mission-planing/request + тестовые паспорта
ComplexPlanRunOrchestrationService, MissionController, MissionPlaningService, KafkaProducerConfig; обновлены тестовые JSON-паспорта route-processing.
This commit is contained in:
+22
@@ -10,6 +10,7 @@ import space.nstart.pcp.pcp_satellites_service.entity.ComplexPlanRunEntity
|
||||
import space.nstart.pcp.pcp_types_lib.dto.requests.ComplexPlanProcessRequestDTO
|
||||
import space.nstart.pcp.pcp_types_lib.dto.requests.CoverageCalculationSource
|
||||
import tools.jackson.databind.json.JsonMapper
|
||||
import java.time.Duration
|
||||
import kotlin.system.measureTimeMillis
|
||||
|
||||
@Service
|
||||
@@ -25,6 +26,8 @@ class ComplexPlanRunOrchestrationService(
|
||||
private val objectMapper = JsonMapper.builder().findAndAddModules().build()
|
||||
|
||||
fun process(request: ComplexPlanProcessRequestDTO, requestedBy: String?): ComplexPlanRunResponseDTO {
|
||||
validateInterval(request)
|
||||
|
||||
lateinit var selectedSatelliteIds: List<Long>
|
||||
val resolveSatelliteIdsMs = measureTimeMillis {
|
||||
selectedSatelliteIds = resolveSatelliteIds(request)
|
||||
@@ -161,6 +164,25 @@ class ComplexPlanRunOrchestrationService(
|
||||
request.satelliteId?.let { add(it) }
|
||||
addAll(request.satelliteIds)
|
||||
}.distinct().ifEmpty { satelliteService.satellites.map { it.satelliteId }.distinct() }
|
||||
|
||||
/**
|
||||
* Интервал расчёта обязан быть корректным и не длиннее [MAX_INTERVAL_DAYS] суток: считать
|
||||
* комплексный план по всем КА на больший горизонт слишком тяжело и бессмысленно для оперативного
|
||||
* плана. Проверка до создания run, чтобы не плодить заведомо отклонённые записи.
|
||||
*/
|
||||
private fun validateInterval(request: ComplexPlanProcessRequestDTO) {
|
||||
if (!request.intervalEnd.isAfter(request.intervalStart)) {
|
||||
throw CustomValidationException("Interval end must be after interval start")
|
||||
}
|
||||
if (Duration.between(request.intervalStart, request.intervalEnd) > Duration.ofDays(MAX_INTERVAL_DAYS)) {
|
||||
throw CustomValidationException("Complex plan interval cannot exceed $MAX_INTERVAL_DAYS days")
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
/** Максимальная длина интервала расчёта комплексного плана, суток. */
|
||||
const val MAX_INTERVAL_DAYS = 10L
|
||||
}
|
||||
}
|
||||
|
||||
data class ComplexPlanCalculationResult(
|
||||
|
||||
Reference in New Issue
Block a user