отображение забронированных слотов и тестовые НУ

This commit is contained in:
emelianov
2026-05-25 21:02:53 +03:00
parent f549e15c63
commit d4682fdeb7
2 changed files with 47 additions and 1 deletions
@@ -1,6 +1,7 @@
package space.nstart.pcp.slots_service.controller package space.nstart.pcp.slots_service.controller
import jakarta.validation.Valid import jakarta.validation.Valid
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.DeleteMapping import org.springframework.web.bind.annotation.DeleteMapping
import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.GetMapping
@@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController import org.springframework.web.bind.annotation.RestController
import org.springframework.web.server.ResponseStatusException
import space.nstart.pcp.pcp_types_lib.dto.ballistics.InitialConditionsDTO import space.nstart.pcp.pcp_types_lib.dto.ballistics.InitialConditionsDTO
import space.nstart.pcp.pcp_types_lib.dto.requests.slots.SlotCalculationSummaryDTO import space.nstart.pcp.pcp_types_lib.dto.requests.slots.SlotCalculationSummaryDTO
import space.nstart.pcp.pcp_types_lib.dto.satellite.SatelliteCreateDTO import space.nstart.pcp.pcp_types_lib.dto.satellite.SatelliteCreateDTO
@@ -24,6 +26,9 @@ import space.nstart.pcp.slots_service.service.SatelliteCatalogService
import space.nstart.pcp.slots_service.service.SatellitePdcmService import space.nstart.pcp.slots_service.service.SatellitePdcmService
import space.nstart.pcp.slots_service.service.SlotService import space.nstart.pcp.slots_service.service.SlotService
import java.time.LocalDateTime import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.time.format.DateTimeParseException
import java.time.format.ResolverStyle
@RestController @RestController
@RequestMapping("/api/catalog") @RequestMapping("/api/catalog")
@@ -33,6 +38,8 @@ class CatalogRestController(
private val groupStateService: GroupStateService, private val groupStateService: GroupStateService,
private val satellitePdcmService: SatellitePdcmService private val satellitePdcmService: SatellitePdcmService
) { ) {
private val sendInitialConditionsTimeFormatter =
DateTimeFormatter.ofPattern("dd.MM.uuuu HH:mm:ss.SSS").withResolverStyle(ResolverStyle.STRICT)
@GetMapping("/satellites") @GetMapping("/satellites")
fun allSatellites() = satelliteCatalogService.allSatellites() fun allSatellites() = satelliteCatalogService.allSatellites()
@@ -56,6 +63,31 @@ class CatalogRestController(
@GetMapping("/satellites/pdcm/{satelliteId}") @GetMapping("/satellites/pdcm/{satelliteId}")
fun satellitePdcm(@PathVariable satelliteId: Long) = satellitePdcmService.satelliteDetails(satelliteId) fun satellitePdcm(@PathVariable satelliteId: Long) = satellitePdcmService.satelliteDetails(satelliteId)
@PostMapping("/satellites/pdcm/{satelliteId}/send-ic")
fun sendSatelliteInitialConditions(
@PathVariable satelliteId: Long,
@RequestParam(required = false) time: String?
): ResponseEntity<Void> {
val requestedTime = parseSendInitialConditionsTime(time)
slotService.sendSatelliteInitialConditions(satelliteId, requestedTime)
return ResponseEntity.accepted().build()
}
private fun parseSendInitialConditionsTime(time: String?): LocalDateTime {
val normalizedTime = time?.trim()?.takeIf { it.isNotEmpty() }
?: return LocalDateTime.now()
return try {
LocalDateTime.parse(normalizedTime, sendInitialConditionsTimeFormatter)
} catch (exception: DateTimeParseException) {
throw ResponseStatusException(
HttpStatus.BAD_REQUEST,
"Параметр time должен быть в формате dd.mm.yyyy hh:MM:ss.zzz",
exception
)
}
}
@PostMapping("/satellites") @PostMapping("/satellites")
fun createSatellite(@Valid @RequestBody request: SatelliteCreateDTO) = fun createSatellite(@Valid @RequestBody request: SatelliteCreateDTO) =
satelliteCatalogService.createSatellite(request) satelliteCatalogService.createSatellite(request)
@@ -15,8 +15,22 @@
<h2 class="mb-1">Параметры движения центра масс</h2> <h2 class="mb-1">Параметры движения центра масс</h2>
<div class="catalog-helper">Табличное представление asc-node по выбранному спутнику.</div> <div class="catalog-helper">Табличное представление asc-node по выбранному спутнику.</div>
</div> </div>
<div class="d-flex gap-2 flex-wrap justify-content-end align-items-end satellite-pdcm-send-controls">
<div>
<label for="satellite-pdcm-send-ic-time" class="form-label catalog-helper mb-1">Время НУ</label>
<input
id="satellite-pdcm-send-ic-time"
type="text"
class="form-control satellite-pdcm-send-time"
inputmode="numeric"
placeholder="dd.mm.yyyy hh:MM:ss.zzz"
aria-label="Время НУ"
/>
</div>
<button id="satellite-pdcm-send-ic" type="button" class="btn btn-outline-primary" disabled>Передать НУ в slot-service</button>
<button id="satellite-pdcm-refresh" type="button" class="btn btn-outline-secondary">Обновить</button> <button id="satellite-pdcm-refresh" type="button" class="btn btn-outline-secondary">Обновить</button>
</div> </div>
</div>
<div id="satellite-pdcm-alert"></div> <div id="satellite-pdcm-alert"></div>