From 3fed3b850dbcd5b42a1216e17d147940ede2c701 Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 24 Mar 2026 17:27:47 +0300 Subject: [PATCH] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-940=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=88=D0=B0=D0=B3?= =?UTF-8?q?=20AgainReviseStage3Action=20CL09=20=D0=B2=20=D1=84=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20=D1=81=D0=B5=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D1=8E=20FinalSessionStateMachineConfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FinalSessionStateMachineConfig.java | 53 ++++++++++++++++--- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java index 3c3e87fad..12f97f132 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.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.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; @@ -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; @@ -44,8 +46,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.RegistryStatus; import ru.spcex.platform.enumeration.Section; @@ -70,6 +71,7 @@ public class FinalSessionStateMachineConfig private final InspectionObligationsV2Action inspectionObligationsV2Action; private final FormingPaymentInstructionReturnMkrAction formingPaymentInstructionReturnMkrAction; private final FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction; + private final AgainReviseStage3Action againRevise; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; @@ -85,6 +87,7 @@ public class FinalSessionStateMachineConfig DataEnum.obligationAdmissionStashedRgs ); private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); + private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.FINL; private final Section SECTION = Section.MKR; @@ -102,7 +105,7 @@ public class FinalSessionStateMachineConfig InspectionObligationsDepositReturnAction inspOblDepositReturnAction, InspectionObligationsV2Action inspectionObligationsV2Action, FormingPaymentInstructionReturnMkrAction formingPaymentInstructionReturnMkrAction, - FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction, + FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction, AgainReviseStage3Action againRevise, FinishingSessionAction finishingSessionAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction, SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @@ -111,6 +114,7 @@ public class FinalSessionStateMachineConfig ) { this.sendSdf56Action = sendSdf56Action; this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + this.againRevise = againRevise; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; @@ -164,6 +168,8 @@ public class FinalSessionStateMachineConfig TaskType.PSEUDO_waitSdfAfterPaymentInstructions, TaskType.PSEUDO_waitAfterObligationAdmissionError, TaskType.InspectionObligationDepositReturn, + TaskType.AgainRevise, + TaskType.PSEUDO_waitSdfAfterAgainRevise, TaskType.PSEUDO_waitAfterInspectionError, TaskType.PSEUDO_waitAfterInspectionDepositReturnError, TaskType.PSEUDO_waitAfterObligationAdmissionRestore, @@ -207,6 +213,8 @@ public class FinalSessionStateMachineConfig sourceIOPause(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); + sourceAgainRevise(transitions); + sourcePseudoWaitAfterAgainRevise(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -313,9 +321,9 @@ public class FinalSessionStateMachineConfig //если не создалось paymentInstruction'ов .withExternal() .source(TaskType.FormingPaymentInstruction) - .target(TaskType.FinishingSession) + .target(TaskType.AgainRevise) .guard(PaymentsWereNotCreatedGuard.instance) - .action(finishingSessionAction) + .action(againRevise) .and() //если создались paymentInstruction, переходим в режим ожидания .withExternal() @@ -329,9 +337,9 @@ public class FinalSessionStateMachineConfig 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() @@ -341,6 +349,37 @@ public class FinalSessionStateMachineConfig } } + 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 { StateMachineListenerAdapter loggingChangeStateListener