diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/CurrencySessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/CurrencySessionStateMachineConfig.java index ed62a4b00..a3780ebf1 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/CurrencySessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/CurrencySessionStateMachineConfig.java @@ -42,7 +42,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; @@ -151,90 +150,106 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure public void configure(StateMachineTransitionConfigurer transitions) throws Exception { transitions .withExternal() - .event(SsnEvent.SDF_57) - .source(TaskType.StartRevise).target(TaskType.StartRevisePart1) - .action(reviseStage1Action) - .and() + .event(SsnEvent.SDF_57) + .source(TaskType.StartRevise).target(TaskType.StartRevisePart1) + .action(reviseStage1Action) + .and() .withExternal() - .source(TaskType.StartRevisePart1).target(TaskType.DealsPrepare) - .action(dealsPrepareAction) - .and() + .source(TaskType.StartRevisePart1).target(TaskType.DealsPrepare) + .action(dealsPrepareAction) + .and() .withExternal() - .source(TaskType.DealsPrepare).target(TaskType.RequirementsAndObligationsCreate) - .action(reqAndOblAction) - .and() + .source(TaskType.DealsPrepare).target(TaskType.RequirementsAndObligationsCreate) + .action(reqAndOblAction) + .and() .withExternal() - .source(TaskType.RequirementsAndObligationsCreate).target(TaskType.ObligationsAdmission) - .action(obligationAdmissionAction) - .and() + .source(TaskType.RequirementsAndObligationsCreate).target(TaskType.ObligationsAdmission) + .action(obligationAdmissionAction) + .and() .withExternal() - .source(TaskType.ObligationsAdmission) - .target(TaskType.PSEUDO_waitAfterObligationAdmissionError) - .guard(oblAdmGuard) - .and() + .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) + .action(inspectionObligationsV2Action) + .and() .withExternal() - .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) - .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)) - .event(SsnEvent.CONTINUE) - .and() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .action(formingPaymentInstructionAssetsAction) + .and() .withExternal() - .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) - .action(StateMachineUtil.chain(discardOblAdmStash, obligationAdmissionAction)) - .event(SsnEvent.REPEAT) - .and() + .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) + .target(TaskType.AgainRevise) + .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) + .action(againRevise) + .and() .withExternal() - .source(TaskType.ObligationsAdmission).target(TaskType.InclusionToPool) - .guard(invert(oblAdmGuard)) - .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)) - .and() + .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) + .target(TaskType.AgainRevise) + .guard(new SdfGuard(SdfGuardExtractorAfterAgainRevise.instance)) + .action(againRevise) + .and() .withExternal() - .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) - .action(inspectionObligationsV2Action) - .and() + .source(TaskType.FinishingSession) + .target(TaskType.EndStageNotification) + .action(endStageNotificationAction); + sourceObligationAdmission(transitions); + sourcePseudoAfterOAError(transitions); + sourceFormingPaymentInstruction(transitions); + sourceAgainRevise(transitions); + } + + private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { + transitions .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionAssetsAction) - .and() + .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() + .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() + .source(TaskType.FormingPaymentInstruction) + .target(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) + .guard(PaymentsWereCreatedGuard.instance); + } + + private void sourceAgainRevise(StateMachineTransitionConfigurer transitions) throws Exception { + transitions .withExternal() - .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) - .target(TaskType.AgainRevise) - .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) - .action(againRevise) - .and() + .source(TaskType.AgainRevise) + .target(TaskType.FinishingSession) + .action(finishingSessionAction) + .guard(reviseSuccessGuard) + .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) - .guard(new SdfGuard(SdfGuardExtractorAfterAgainRevise.instance)) - .action(againRevise) - .and() - .withExternal() - .source(TaskType.FinishingSession) - .target(TaskType.EndStageNotification) - .action(endStageNotificationAction); + .source(TaskType.AgainRevise) + .target(TaskType.PSEUDO_waitSdfAfterAgainRevise) + .guard(invert(reviseSuccessGuard)); } @Override