From c3315d8a62ce833116bed2d65b200873b4144a82 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 2 Jul 2025 18:48:21 +0300 Subject: [PATCH] PrimaryAuctionB0SessionStateMachineConfig refactor --- ...aryAuctionB0SessionStateMachineConfig.java | 122 ++++++++++-------- 1 file changed, 71 insertions(+), 51 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java index f751f208f..ee10da6cf 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java @@ -43,7 +43,6 @@ import ru.spcex.clearing.session.state.guard.SdfGuardExtractorAfterAgainRevise; import ru.spcex.clearing.session.state.guard.SdfGuardExtractorAfterAssets; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; -import ru.spcex.clearing.util.StateMachineUtil; import static ru.spcex.clearing.util.StateMachineUtil.*; import ru.spcex.platform.classes.base.interfaces.ExecutionType; import ru.spcex.platform.enumeration.Section; @@ -174,26 +173,6 @@ public class PrimaryAuctionB0SessionStateMachineConfig .source(TaskType.RequirementsAndObligationsCreate).target(TaskType.ObligationsAdmission) .action(obligationAdmissionAction) .and() - .withExternal() - .source(TaskType.ObligationsAdmission) - .target(TaskType.PSEUDO_waitAfterObligationAdmissionError) - .guard(oblAdmGuard) - .and() - .withExternal() - .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) - .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)) - .event(SsnEvent.CONTINUE) - .and() - .withExternal() - .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) - .action(StateMachineUtil.chain(discardOblAdmStash, obligationAdmissionAction)) - .event(SsnEvent.REPEAT) - .and() - .withExternal() - .source(TaskType.ObligationsAdmission).target(TaskType.InclusionToPool) - .guard(invert(oblAdmGuard)) - .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)) - .and() .withExternal() .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .action(inspectionObligationsV2Action) @@ -202,36 +181,6 @@ public class PrimaryAuctionB0SessionStateMachineConfig .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) .action(formingPaymentInstructionSecuritiesAction) .and() - //если не создалось paymentInstruction'ов - .withExternal() - .source(TaskType.FormingPaymentInstruction) - .target(TaskType.AgainRevise) - .guard(PaymentsWereNotCreatedGuard.instance) - .action(againRevise) - .and() - //если создались paymentInstruction, переходим в режим ожидания - .withExternal() - .source(TaskType.FormingPaymentInstruction) - .target(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) - .guard(PaymentsWereCreatedGuard.instance) - .and() - .withExternal() - .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) - .target(TaskType.AgainRevise) - .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) - .action(againRevise) - .and() - .withExternal() - .source(TaskType.AgainRevise) - .target(TaskType.FinishingSession) - .action(finishingSessionAction) - .guard(reviseSuccessGuard) - .and() - .withExternal() - .source(TaskType.AgainRevise) - .target(TaskType.PSEUDO_waitSdfAfterAgainRevise) - .guard(invert(reviseSuccessGuard)) - .and() .withExternal() .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .target(TaskType.AgainRevise) @@ -242,6 +191,62 @@ public class PrimaryAuctionB0SessionStateMachineConfig .source(TaskType.FinishingSession) .target(TaskType.EndStageNotification) .action(endStageNotificationAction); + sourceObligationAdmission(transitions); + sourcePseudoAfterOAError(transitions); + sourceFormingPaymentInstruction(transitions); + sourcePseudoWaitSdfAfterPaymentInstructions(transitions); + sourceAgainRevise(transitions); + } + + private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.ObligationsAdmission) + .target(TaskType.PSEUDO_waitAfterObligationAdmissionError) + .guard(oblAdmGuard) + .and() + .withExternal() + .source(TaskType.ObligationsAdmission).target(TaskType.InclusionToPool) + .guard(invert(oblAdmGuard)) + .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); + } + + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) + .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) + .action(chain(discardOblAdmStash, obligationAdmissionAction)) + .event(SsnEvent.REPEAT); + } + + private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //если не создалось paymentInstruction'ов + .withExternal() + .source(TaskType.FormingPaymentInstruction) + .target(TaskType.AgainRevise) + .guard(PaymentsWereNotCreatedGuard.instance) + .action(againRevise) + .and() + //если создались paymentInstruction, переходим в режим ожидания + .withExternal() + .source(TaskType.FormingPaymentInstruction) + .target(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) + .guard(PaymentsWereCreatedGuard.instance); + } + + private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) + .target(TaskType.AgainRevise) + .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) + .action(againRevise); for (var event: EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) { transitions .withInternal() @@ -251,6 +256,21 @@ public class PrimaryAuctionB0SessionStateMachineConfig } } + private void sourceAgainRevise(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.AgainRevise) + .target(TaskType.FinishingSession) + .action(finishingSessionAction) + .guard(reviseSuccessGuard) + .and() + .withExternal() + .source(TaskType.AgainRevise) + .target(TaskType.PSEUDO_waitSdfAfterAgainRevise) + .guard(invert(reviseSuccessGuard)); + } + + @Override public void configure(StateMachineConfigurationConfigurer config) throws Exception { StateMachineListenerAdapter loggingChangeStateListener