From 733d92bf546a922b75c56283630dce7ecd349a7d Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 12 Aug 2025 12:30:29 +0300 Subject: [PATCH] IPOB revise after payment instructions --- ...aryAuctionBnSessionStateMachineConfig.java | 55 ++++++++++++++++--- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java index 4e6013048..cff72925b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java @@ -13,6 +13,7 @@ import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer; import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; +import org.springframework.statemachine.guard.Guard; import org.springframework.statemachine.listener.StateMachineListenerAdapter; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.Session; @@ -20,6 +21,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.session.stage.TaskType; import ru.spcex.clearing.session.state.DataEnum; import ru.spcex.clearing.session.state.SsnEvent; +import ru.spcex.clearing.session.state.action.AgainReviseStage3Action; import ru.spcex.clearing.session.state.action.CreateSessionAction; import ru.spcex.clearing.session.state.action.DealsPrepareAction; import ru.spcex.clearing.session.state.action.DiscardRegistriesAction; @@ -42,8 +44,7 @@ import ru.spcex.clearing.session.state.guard.SdfGuardUtil; import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; -import static ru.spcex.clearing.util.StateMachineUtil.chain; -import static ru.spcex.clearing.util.StateMachineUtil.invert; +import static ru.spcex.clearing.util.StateMachineUtil.*; import ru.spcex.platform.classes.base.interfaces.ExecutionType; import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.SessionType; @@ -75,11 +76,13 @@ public class PrimaryAuctionBnSessionStateMachineConfig ); private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction activeWsAction; + private final AgainReviseStage3Action againRevise; private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs ); private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); + private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.IPOB; private final Section SECTION = Section.FOND; @@ -104,13 +107,14 @@ public class PrimaryAuctionBnSessionStateMachineConfig @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") - UpdateWorkflowStatusAction activeWsAction + UpdateWorkflowStatusAction activeWsAction, AgainReviseStage3Action againRevise ) { this.sendSdf56Action = sendSdf56Action; this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; + this.againRevise = againRevise; Imdg executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; this.reviseStage1Action = reviseStage1Action; @@ -153,7 +157,9 @@ public class PrimaryAuctionBnSessionStateMachineConfig TaskType.PSEUDO_waitAfterObligationAdmissionError, TaskType.PSEUDO_waitAfterInspectionError, TaskType.PSEUDO_waitAfterObligationAdmissionRestore, - TaskType.PSEUDO_waitAfterInspectionRestore + TaskType.PSEUDO_waitAfterInspectionRestore, + TaskType.AgainRevise, + TaskType.PSEUDO_waitSdfAfterAgainRevise ))) .end(TaskType.FinishingSession); } @@ -189,6 +195,8 @@ public class PrimaryAuctionBnSessionStateMachineConfig sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceInspection(transitions); + sourceAgainRevise(transitions); + sourcePseudoWaitAfterAgainRevise(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -259,9 +267,9 @@ public class PrimaryAuctionBnSessionStateMachineConfig //если не создалось paymentInstruction'ов .withExternal() .source(TaskType.FormingPaymentInstruction) - .target(TaskType.FinishingSession) + .target(TaskType.AgainRevise) .guard(new PaymentsWereNotCreatedListGuard(FormingPaymentInstructionSecuritiesAction.key)) - .action(finishingSessionAction) + .action(againRevise) .and() //если создались paymentInstruction, переходим в режим ожидания .withExternal() @@ -275,9 +283,9 @@ public class PrimaryAuctionBnSessionStateMachineConfig transitions .withExternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) - .target(TaskType.FinishingSession) + .target(TaskType.AgainRevise) .guard(new SdfSetGuard(sdfs)) - .action(finishingSessionAction); + .action(againRevise); for (var event: sdfs) { transitions .withInternal() @@ -287,6 +295,37 @@ public class PrimaryAuctionBnSessionStateMachineConfig } } + 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)); + } + + private void sourcePseudoWaitAfterAgainRevise(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet ssnEvents = SdfGuardUtil.afterAgainReviseError(SECTION); + transitions + .withExternal() + .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) + .target(TaskType.AgainRevise) + .guard(new SdfSetGuard(ssnEvents)) + .action(againRevise); + for (var event : ssnEvents) { + transitions + .withInternal() + .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) + .event(event) + .action(SdfReceivedAction.instance); + } + } + @Override public void configure(StateMachineConfigurationConfigurer config) throws Exception {