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 6fee17354..72af779ba 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 @@ -31,6 +31,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -66,8 +67,12 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure private final AgainReviseStage3Action againRevise; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); + private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( + DataEnum.inspectionObligationStashedRgs + ); private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs ); @@ -93,6 +98,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure @Qualifier("marketCodesForCurr") Supplier> marketCodes, SaveRegistriesAndContinueAction obligationAdmissionContinueAction, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") @@ -109,6 +115,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure this.againRevise = againReviseStage3Action; this.finishingSessionAction = finishingSession; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; this.finishingSessionAction.setPr("1"); @@ -170,10 +177,6 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .action(inspectionObligationsV2Action) .and() - .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionAssetsAction) - .and() .withExternal() .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .target(TaskType.AgainRevise) @@ -182,9 +185,26 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure sourceObligationAdmission(transitions); sourcePseudoAfterOAError(transitions); + sourcePseudoAfterIOError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); + sourceInspection(transitions); + } + + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -203,6 +223,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -214,6 +235,22 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure .event(SsnEvent.REPEAT); } + private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after InspectionObligations + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction) + .action(activeWsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations) + .action(chain(activeWsAction, discardInspOblStash, inspectionObligationsV2Action)) + .event(SsnEvent.REPEAT); + } + private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer transitions) throws Exception { transitions //если не создалось paymentInstruction'ов 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 0da8c741a..c3372ccea 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 @@ -31,6 +31,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -69,6 +70,7 @@ public class FinalSessionStateMachineConfig private final FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( @@ -96,12 +98,14 @@ public class FinalSessionStateMachineConfig FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction, FinishingSessionAction finishingSessionAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") UpdateWorkflowStatusAction activeWsAction ) { this.sendSdf56Action = sendSdf56Action; this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; Imdg rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -207,6 +211,24 @@ public class FinalSessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionReturnMkrAction) + .action(formingPaymentInstructionAssetsAction); + } + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { transitions .withExternal() diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java index 19e02f9a3..7b4b6bf77 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java @@ -31,6 +31,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -69,6 +70,10 @@ public class IntermediateMkrSessionStateMachineConfig private final AgainReviseStage3Action againRevise; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; + private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( + DataEnum.inspectionObligationStashedRgs + ); private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( @@ -95,6 +100,7 @@ public class IntermediateMkrSessionStateMachineConfig FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction, AgainReviseStage3Action againRevise, FinishingSessionAction finishingSessionAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") @@ -104,6 +110,7 @@ public class IntermediateMkrSessionStateMachineConfig this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.againRevise = againRevise; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; Imdg rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -183,10 +190,6 @@ public class IntermediateMkrSessionStateMachineConfig .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .action(inspectionObligationsV2Action) .and() - .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionAssetsAction) - .and() .withExternal() .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .target(TaskType.AgainRevise) @@ -194,10 +197,27 @@ public class IntermediateMkrSessionStateMachineConfig .action(againRevise); sourceObligationAdmission(transitions); - sourcePseudoWaitAfterObligationAdmissionError(transitions); + sourcePseudoAfterOAError(transitions); + sourcePseudoAfterIOError(transitions); sourceFormingPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); + sourceInspection(transitions); + } + + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -214,8 +234,9 @@ public class IntermediateMkrSessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } - private void sourcePseudoWaitAfterObligationAdmissionError(StateMachineTransitionConfigurer transitions) throws Exception { + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -227,6 +248,22 @@ public class IntermediateMkrSessionStateMachineConfig .event(SsnEvent.REPEAT); } + private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after InspectionObligations + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction) + .action(activeWsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations) + .action(chain(activeWsAction, discardInspOblStash, inspectionObligationsV2Action)) + .event(SsnEvent.REPEAT); + } + private void sourceFormingPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { transitions //если не создалось paymentInstruction'ов diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java index c9ffa609d..da3e31dbc 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java @@ -30,6 +30,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.UpdateWorkflowStatusAction; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; @@ -56,11 +57,15 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda private final AgainReviseStage3Action againRevise; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs ); + private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( + DataEnum.inspectionObligationStashedRgs + ); private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction activeWsAction; private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); @@ -81,11 +86,13 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda @Qualifier("marketCodesForCurr") Supplier> marketCodes, SaveRegistriesAndContinueAction obligationAdmissionContinueAction, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") UpdateWorkflowStatusAction activeWsAction) { this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; Imdg executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class); @@ -152,10 +159,6 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .action(inspectionObligationsV2Action) .and() - .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionAssetsAction) - .and() .withExternal() .source(TaskType.FormingPaymentInstruction) .target(TaskType.AgainRevise) @@ -169,6 +172,8 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda sourceObligationAdmission(transitions); sourcePseudoAfterOAError(transitions); + sourcePseudoAfterIOError(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -185,8 +190,24 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction); + } + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -198,6 +219,22 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda .event(SsnEvent.REPEAT); } + private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after InspectionObligations + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction) + .action(activeWsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations) + .action(chain(activeWsAction, discardInspOblStash, inspectionObligationsV2Action)) + .event(SsnEvent.REPEAT); + } + @Override public void configure(StateMachineConfigurationConfigurer config) throws Exception { StateMachineListenerAdapter loggingChangeStateListener 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 9a1bafe8d..1e3d8d923 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 @@ -32,6 +32,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -69,8 +70,12 @@ public class PrimaryAuctionB0SessionStateMachineConfig private final AgainReviseStage3Action againRevise; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); + private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( + DataEnum.inspectionObligationStashedRgs + ); private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction activeWsAction; @@ -98,6 +103,7 @@ public class PrimaryAuctionB0SessionStateMachineConfig FinishingSessionAction finishingSessionAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction, @Qualifier("marketCodesForBn") Supplier> marketCodes, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") @@ -105,6 +111,7 @@ public class PrimaryAuctionB0SessionStateMachineConfig ) { this.sendSdf56Action = sendSdf56Action; this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; Imdg executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -179,10 +186,6 @@ public class PrimaryAuctionB0SessionStateMachineConfig .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .action(inspectionObligationsV2Action) .and() - .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionSecuritiesAction) - .and() .withExternal() .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .target(TaskType.AgainRevise) @@ -190,9 +193,11 @@ public class PrimaryAuctionB0SessionStateMachineConfig .action(againRevise); sourceObligationAdmission(transitions); sourcePseudoAfterOAError(transitions); + sourcePseudoAfterIOError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -209,8 +214,25 @@ public class PrimaryAuctionB0SessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionSecuritiesAction); + } + + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -222,6 +244,22 @@ public class PrimaryAuctionB0SessionStateMachineConfig .event(SsnEvent.REPEAT); } + private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after InspectionObligations + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction) + .action(activeWsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionSecuritiesAction) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations) + .action(chain(activeWsAction, discardInspOblStash, inspectionObligationsV2Action)) + .event(SsnEvent.REPEAT); + } + private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer transitions) throws Exception { transitions //если не создалось paymentInstruction'ов 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 fcdabc406..605569a23 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 @@ -31,6 +31,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -65,8 +66,12 @@ public class PrimaryAuctionBnSessionStateMachineConfig private final FormingPaymentInstructionSecuritiesAction formingPaymentInstructionSecuritiesAction; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); + private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( + DataEnum.inspectionObligationStashedRgs + ); private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction activeWsAction; @@ -94,6 +99,7 @@ public class PrimaryAuctionBnSessionStateMachineConfig SaveRegistriesAndContinueAction obligationAdmissionContinueAction, @Qualifier("marketCodesForBn") Supplier> marketCodes, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") @@ -101,6 +107,7 @@ public class PrimaryAuctionBnSessionStateMachineConfig ) { this.sendSdf56Action = sendSdf56Action; this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; Imdg executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -170,16 +177,14 @@ public class PrimaryAuctionBnSessionStateMachineConfig .and() .withExternal() .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) - .action(inspectionObligationsV2Action) - .and() - .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionSecuritiesAction); + .action(inspectionObligationsV2Action); sourceObligationAdmission(transitions); sourcePseudoAfterOAError(transitions); + sourcePseudoAfterIOError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -196,8 +201,24 @@ public class PrimaryAuctionBnSessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionSecuritiesAction); + } + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -209,6 +230,22 @@ public class PrimaryAuctionBnSessionStateMachineConfig .event(SsnEvent.REPEAT); } + private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after InspectionObligations + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction) + .action(activeWsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionSecuritiesAction) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations) + .action(chain(activeWsAction, discardInspOblStash, inspectionObligationsV2Action)) + .event(SsnEvent.REPEAT); + } + private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer transitions) throws Exception { transitions //если не создалось paymentInstruction'ов diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java index 792a81943..2386a3d67 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java @@ -32,6 +32,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -69,8 +70,12 @@ public class PrimaryAuctionT0SessionStateMachineConfig private final AgainReviseStage3Action againRevise; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); + private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( + DataEnum.inspectionObligationStashedRgs + ); private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction activeWsAction; @@ -99,6 +104,7 @@ public class PrimaryAuctionT0SessionStateMachineConfig SaveRegistriesAndContinueAction obligationAdmissionContinueAction, @Qualifier("marketCodesForT0Primary") Supplier> marketCodes, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") @@ -106,6 +112,7 @@ public class PrimaryAuctionT0SessionStateMachineConfig ) { this.sendSdf56Action = sendSdf56Action; this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; Imdg executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -180,10 +187,6 @@ public class PrimaryAuctionT0SessionStateMachineConfig .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .action(inspectionObligationsV2Action) .and() - .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionSecuritiesAction) - .and() .withExternal() .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .target(TaskType.AgainRevise) @@ -192,9 +195,11 @@ public class PrimaryAuctionT0SessionStateMachineConfig sourceObligationAdmission(transitions); sourcePseudoAfterOAError(transitions); + sourcePseudoAfterIOError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -211,8 +216,24 @@ public class PrimaryAuctionT0SessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionSecuritiesAction); + } + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -224,6 +245,22 @@ public class PrimaryAuctionT0SessionStateMachineConfig .event(SsnEvent.REPEAT); } + private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after InspectionObligations + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction) + .action(activeWsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionSecuritiesAction) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations) + .action(chain(activeWsAction, discardInspOblStash, inspectionObligationsV2Action)) + .event(SsnEvent.REPEAT); + } + private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer transitions) throws Exception { transitions //если не создалось paymentInstruction'ов diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java index 512770d83..a0c1906a8 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java @@ -19,21 +19,27 @@ import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; 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.CreateSessionAction; +import ru.spcex.clearing.session.state.action.DiscardRegistriesAction; import ru.spcex.clearing.session.state.action.FinishingSessionAction; import ru.spcex.clearing.session.state.action.FormingPaymentInstructionDepositReturnAction; import ru.spcex.clearing.session.state.action.InclusionToPoolAction; import ru.spcex.clearing.session.state.action.InspectionObligationsDepositReturnAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; +import ru.spcex.clearing.session.state.action.UpdateWorkflowStatusAction; import ru.spcex.clearing.session.state.guard.PaymentsWereCreatedListGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedListGuard; 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 ru.spcex.platform.enumeration.RegistryStatus; import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.SessionType; @@ -53,6 +59,14 @@ public class ReturnDepositSessionStateMachineConfig private final InspectionObligationsDepositReturnAction inspectionObligationsDepositReturnAction; private final FormingPaymentInstructionDepositReturnAction formingPaymentInstructionDepositReturnAction; private final FinishingSessionAction finishingSessionAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; + private final UpdateWorkflowStatusAction pauseWsAction; + private final UpdateWorkflowStatusAction activeWsAction; + private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( + DataEnum.inspectionObligationStashedRgs + ); + private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( + DataEnum.obligationAdmissionStashedRgs); private final SessionType SESSION_TYPE = SessionType.XDEP; private final Section SECTION = Section.MKR; @@ -65,7 +79,12 @@ public class ReturnDepositSessionStateMachineConfig FinishingSessionAction finishingSessionAction, @Qualifier("marketCodesForBn") Supplier> marketCodes, InspectionObligationsDepositReturnAction inspectionObligationsDepositReturnAction, - FormingPaymentInstructionDepositReturnAction formingPaymentInstructionDepositReturnAction + FormingPaymentInstructionDepositReturnAction formingPaymentInstructionDepositReturnAction, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, + @Qualifier("pauseWorkflowStatusAction") + UpdateWorkflowStatusAction pauseWsAction, + @Qualifier("activeWorkflowStatusAction") + UpdateWorkflowStatusAction activeWsAction ) { this.sendSdf56Action = sendSdf56Action; this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); @@ -74,6 +93,9 @@ public class ReturnDepositSessionStateMachineConfig this.inspectionObligationsDepositReturnAction = inspectionObligationsDepositReturnAction; this.formingPaymentInstructionDepositReturnAction = formingPaymentInstructionDepositReturnAction; this.finishingSessionAction = finishingSessionAction; + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; + this.pauseWsAction = pauseWsAction; + this.activeWsAction = activeWsAction; this.finishingSessionAction.setPr("4"); Imdg rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -126,13 +148,27 @@ public class ReturnDepositSessionStateMachineConfig .withExternal() .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .action(inspectionObligationsDepositReturnAction) - .and() - .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionDepositReturnAction); + .and(); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); + sourceInspection(transitions); + sourcePseudoAfterIOError(transitions); + } + + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionDepositReturnAction); } private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer transitions) throws Exception { @@ -168,6 +204,22 @@ public class ReturnDepositSessionStateMachineConfig } } + private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after InspectionObligations + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction) + .action(activeWsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionDepositReturnAction) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations) + .action(chain(activeWsAction, discardInspOblStash, inspectionObligationsDepositReturnAction)) + .event(SsnEvent.REPEAT); + } + @Override public void configure(StateMachineConfigurationConfigurer config) throws Exception { StateMachineListenerAdapter loggingChangeStateListener diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java index 68b24e06b..0e30d0c65 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java @@ -32,6 +32,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -69,8 +70,12 @@ public class SecondaryAuctionT0SessionStateMachineConfig private final AgainReviseStage3Action againRevise; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); + private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( + DataEnum.inspectionObligationStashedRgs + ); private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction activeWsAction; @@ -99,6 +104,7 @@ public class SecondaryAuctionT0SessionStateMachineConfig SaveRegistriesAndContinueAction obligationAdmissionContinueAction, @Qualifier("marketCodesForT0") Supplier> marketCodes, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") @@ -106,6 +112,7 @@ public class SecondaryAuctionT0SessionStateMachineConfig ) { this.sendSdf56Action = sendSdf56Action; this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; Imdg executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); @@ -180,10 +187,6 @@ public class SecondaryAuctionT0SessionStateMachineConfig .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .action(inspectionObligationsV2Action) .and() - .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionAssetsAction) - .and() .withExternal() .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .target(TaskType.AgainRevise) @@ -192,9 +195,11 @@ public class SecondaryAuctionT0SessionStateMachineConfig sourceObligationAdmission(transitions); sourcePseudoAfterOAError(transitions); + sourcePseudoAfterIOError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -211,8 +216,24 @@ public class SecondaryAuctionT0SessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction); + } + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -224,6 +245,22 @@ public class SecondaryAuctionT0SessionStateMachineConfig .event(SsnEvent.REPEAT); } + private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after InspectionObligations + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction) + .action(activeWsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations) + .action(chain(activeWsAction, discardInspOblStash, inspectionObligationsV2Action)) + .event(SsnEvent.REPEAT); + } + private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer transitions) throws Exception { transitions //если не создалось paymentInstruction'ов diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java index c7be92521..150bbaf6f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java @@ -33,6 +33,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationCompoundAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -71,9 +72,14 @@ public class UnitedSessionStateMachineConfig private final FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction; private final AgainReviseStage3Action againRevise; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final FinishingSessionAction finishingSessionAction; - private final DiscardRegistriesAction discardOblAdmStash = - new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); + private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction( + DataEnum.obligationAdmissionStashedRgs + ); + private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( + DataEnum.inspectionObligationStashedRgs + ); private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction activeWsAction; @@ -99,6 +105,7 @@ public class UnitedSessionStateMachineConfig FinishingSessionAction finishingSessionAction, @Qualifier("marketCodesForCurr") Supplier> marketCodesCurr, @Qualifier("marketCodesForT0") Supplier> marketCodesTrdt, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") @@ -117,6 +124,7 @@ public class UnitedSessionStateMachineConfig this.againRevise = againRevise; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; this.finishingSessionAction = finishingSessionAction; + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; @@ -193,10 +201,6 @@ public class UnitedSessionStateMachineConfig .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .action(inspectionObligationsV2Action) .and() - .withExternal() - .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .action(formingPaymentInstructionAssetsAction) - .and() .withExternal() .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .target(TaskType.AgainRevise) @@ -204,9 +208,11 @@ public class UnitedSessionStateMachineConfig .action(againRevise); sourceObligationAdmission(transitions); sourcePseudoAfterOAError(transitions); + sourcePseudoAfterIOError(transitions); sourceFormingPaymentInstruction(transitions); sourceAgainRevise(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -223,17 +229,49 @@ public class UnitedSessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } - private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { transitions .withExternal() - .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) - .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) - .event(SsnEvent.CONTINUE) - .and() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() .withExternal() - .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) - .action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) - .event(SsnEvent.REPEAT); + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction); + } + + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after ObligationAdmission + .withExternal() + .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) + .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) + .action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) + .event(SsnEvent.REPEAT); + } + + private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after InspectionObligations + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction) + .action(activeWsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction) + .event(SsnEvent.CONTINUE) + .and() + .withExternal() + .source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations) + .action(chain(activeWsAction, discardInspOblStash, inspectionObligationsV2Action)) + .event(SsnEvent.REPEAT); } private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer transitions) throws Exception { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java index 046aeb695..cc245cff3 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java @@ -59,6 +59,7 @@ public enum TaskType implements IEnumKey { PSEUDO_waitSdfAfterPaymentInstructions("PSEUDO_waitSdfAfterPaymentInstructions"), PSEUDO_waitSdfAfterAgainRevise("PSEUDO_waitSdfAfterAgainRevise"), PSEUDO_waitAfterObligationAdmissionError("PSEUDO_waitAfterObligationAdmissionError"), + PSEUDO_waitAfterInspectionError("PSEUDO_waitAfterInspectionError"), PSEUDO_end("PSEUDO_end"), ; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/DataEnum.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/DataEnum.java index e75092e32..1426c20f1 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/DataEnum.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/DataEnum.java @@ -11,6 +11,7 @@ public enum DataEnum { dealsPreparedCurrency, counterPartyId, //Long obligationAdmissionStashedRgs, //Map + inspectionObligationStashedRgs, //Map erroneousRegistries, //List paymentInstructionReturnMkr, //List paymentInstructionSecurity, //List diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java index 9e90f1633..f23a79b78 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java @@ -215,9 +215,9 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); } } - registryImdg.putAll(rgssToStore, 200); - - planBalanceCalc.stageRevision2(sessionId); +// registryImdg.putAll(rgssToStore, 200); +// +// planBalanceCalc.stageRevision2(sessionId); } private static boolean equalByRgs(RegistryTradingParams rgsParams, Registry rgs) { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java index 472823e29..df60f7d0a 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java @@ -96,7 +96,7 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr try { Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class); this.sessionType = ctx.getExtendedState().get(DataEnum.sessionType, SessionType.class); - inspectionObligations(sessionId); + inspectionObligations(sessionId, ctx); } finally { a___Cash.clear(); a__fCash.clear(); @@ -104,7 +104,7 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr } } - private void inspectionObligations(Long sessionId) { + private void inspectionObligations(Long sessionId, StateContext ctx) { String sqlCondition = String.format("(%s) and registryStatus = '%s'", RegistryCodeSqlBuilder.getInstance(OS_T, OM_T, TS_T, TM_T).build(), RegistryStatus.POOL.getKey()); @@ -267,9 +267,7 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr } } } - registryImdg.putAll(rgssToStore, 200); - - planBalanceCalc.stageRevision2(sessionId); + ctx.getExtendedState().getVariables().put(DataEnum.inspectionObligationStashedRgs, rgssToStore); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/PauseWorkflowStatusWithNotificationAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/PauseWorkflowStatusWithNotificationAction.java index 72e823b46..1240636e9 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/PauseWorkflowStatusWithNotificationAction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/PauseWorkflowStatusWithNotificationAction.java @@ -48,9 +48,9 @@ public class PauseWorkflowStatusWithNotificationAction extends UpdateWorkflowSta case PSEUDO_waitAfterObligationAdmissionError -> { return "Ряд обязательств не допущены к клирингу!!!\r\n"; } -// case PSEUDO_waitAfterInspectionError -> { -// return "Ряд обязательств подлежит исключению из клирингового пула!!!\r\n"; -// } + case PSEUDO_waitAfterInspectionError -> { + return "Ряд обязательств подлежит исключению из клирингового пула!!!\r\n"; + } default -> { return "Ошибка клиринговой сессии\r\n"; } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAfterInspectionAndContinueAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAfterInspectionAndContinueAction.java new file mode 100644 index 000000000..1699647c3 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAfterInspectionAndContinueAction.java @@ -0,0 +1,44 @@ +package ru.spcex.clearing.session.state.action; + +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.statemachine.StateContext; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.session.stage.TaskType; +import ru.spcex.clearing.session.stage.impl.PlanBalanceCalc; +import ru.spcex.clearing.session.state.DataEnum; +import ru.spcex.clearing.session.state.SsnEvent; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Service +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class SaveRegistriesAfterInspectionAndContinueAction extends AbstractSessionActionForOkErrorHandling { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg registryImdg; + private final DataEnum dataEnum = DataEnum.inspectionObligationStashedRgs; + private final PlanBalanceCalc planBalanceCalc; + + @Autowired + public SaveRegistriesAfterInspectionAndContinueAction(ImdgProvider imdgProvider, + PlanBalanceCalc planBalanceCalc) { + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.planBalanceCalc = planBalanceCalc; + } + + @Override + protected void actualExecute(StateContext ctx) { + @SuppressWarnings("unchecked") + Map rgss = ctx.getExtendedState().get(dataEnum, Map.class); + Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class); + registryImdg.putAll(rgss, 200); + planBalanceCalc.stageRevision2(sessionId); + } + +}