pcp-tgu: слоты по факту закладки, запрет ранней закладки, шире рейл редактора
- слоты (acceptedPlanSlotsUpdate) занимаются на LAID_IN, а не на ACCEPT — до закладки план ещё может быть вытеснен коррекцией - «Подтвердить закладку» недоступно, пока начало плана в будущем - левая панель редактора 15.5rem → 17rem (цифры статистики у границы)
This commit is contained in:
+5
-1
@@ -149,6 +149,10 @@ class HandlePlanDecisionUseCase(
|
||||
|
||||
plannedPlanRepository.save(plan)
|
||||
spacecraftPlanningStateJpaRepository.save(state)
|
||||
|
||||
// Статусы слотов проставляем только по факту закладки на КА (LAID_IN), а не на ACCEPT:
|
||||
// до закладки план ещё может быть вытеснен коррекцией, и занимать слоты рано.
|
||||
acceptedPlanSlotsUpdateJobService.enqueue(plan.planId)
|
||||
}
|
||||
|
||||
/** Гасит в SUPERSEDED ещё не заложенные планы КА, чьё окно пересекается с заложенным. */
|
||||
@@ -247,9 +251,9 @@ class HandlePlanDecisionUseCase(
|
||||
// ACCEPT больше НЕ запирает цепочку и не двигает базу/версию: принятый план лишь ждёт
|
||||
// закладки. Базой (currentBasePlanId) и chainVersion управляет только LAID_IN
|
||||
// ([handleLayinConfirmed]) — до закладки можно отправить и принять коррекцию того же окна.
|
||||
// Статусы слотов тоже проставляются не здесь, а на закладке ([handleLayinConfirmed]).
|
||||
planIssueAttemptRepository.save(attempt)
|
||||
plannedPlanRepository.save(plan)
|
||||
acceptedPlanSlotsUpdateJobService.enqueue(plan.planId)
|
||||
}
|
||||
|
||||
private fun rejectPlan(
|
||||
|
||||
+7
-3
@@ -61,7 +61,7 @@ class PlanIssueAndDecisionFlowTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `accepted decision moves plan to AWAITING_LAYIN and enqueues slots without anchoring base`() {
|
||||
fun `accepted decision moves plan to AWAITING_LAYIN without anchoring base or touching slots`() {
|
||||
val spacecraftId = "25544"
|
||||
val plan = plannedPlan(spacecraftId, time(12), time(13), PlannedPlanStatus.WAITING_DECISION)
|
||||
val attempt = attempt(plan.planId, PlanIssueAttemptStatus.STARTED)
|
||||
@@ -80,7 +80,8 @@ class PlanIssueAndDecisionFlowTest {
|
||||
// ACCEPT больше НЕ делает план базой и не двигает версию — это делает только LAID_IN.
|
||||
assertNull(state.currentBasePlanId)
|
||||
assertEquals(0, state.chainVersion)
|
||||
verify(slotsUpdateJobService).enqueue(plan.planId)
|
||||
// Слоты проставляются на закладке (LAID_IN), а не на ACCEPT.
|
||||
verify(slotsUpdateJobService, never()).enqueue(plan.planId)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -95,12 +96,13 @@ class PlanIssueAndDecisionFlowTest {
|
||||
val state = SpacecraftPlanningStateEntity(spacecraftId = spacecraftId, chainVersion = 4)
|
||||
val processedRepository = mock(ProcessedPlanDecisionEventRepository::class.java)
|
||||
`when`(processedRepository.insertIfAbsent(anyNonNull(), anyNonNull())).thenReturn(1).thenReturn(0)
|
||||
val slotsUpdateJobService = mock(AcceptedPlanSlotsUpdateJobService::class.java)
|
||||
val useCase = HandlePlanDecisionUseCase(
|
||||
processedPlanDecisionEventRepository = processedRepository,
|
||||
planIssueAttemptRepository = attemptRepository(linkedMapOf()),
|
||||
plannedPlanRepository = plannedRepository(store),
|
||||
spacecraftPlanningStateJpaRepository = stateRepository(state),
|
||||
acceptedPlanSlotsUpdateJobService = mock(AcceptedPlanSlotsUpdateJobService::class.java),
|
||||
acceptedPlanSlotsUpdateJobService = slotsUpdateJobService,
|
||||
planningProperties = planningProperties()
|
||||
)
|
||||
val message = feedbackMessage(spacecraftId, laidIn.planId)
|
||||
@@ -113,6 +115,8 @@ class PlanIssueAndDecisionFlowTest {
|
||||
assertEquals(5, state.chainVersion)
|
||||
assertEquals(PlannedPlanStatus.SUPERSEDED, competitor.status)
|
||||
assertEquals(PlannedPlanStatus.AWAITING_LAYIN, unrelated.status)
|
||||
// Слоты проставляются по факту закладки — ровно один раз (второй вызов идемпотентен).
|
||||
verify(slotsUpdateJobService).enqueue(laidIn.planId)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user