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 61245f873..c65af5313 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 @@ -70,6 +70,9 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure 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 ); @@ -123,6 +126,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure dealsPrepareAction.addExecutionCurrencyCondition(execFondPb.regex("settlementCode", "^T0.*$")); dealsPrepareAction.addExecutionCurrencyCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); this.obligationAdmissionContinueAction.setDataEnum(DataEnum.obligationAdmissionStashedRgs); + this.saveRegistriesAfterInspectionAndContinueAction.setDataEnum(DataEnum.inspectionObligationStashedRgs); } @Override @@ -185,7 +189,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure .action(againRevise); sourceObligationAdmission(transitions); - sourcePseudoAfterOAError(transitions); + sourcePseudoWaitAfterError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); @@ -221,8 +225,9 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } - private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { + private void sourcePseudoWaitAfterError(StateMachineTransitionConfigurer transitions) throws Exception { transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -231,6 +236,19 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) .action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) + .event(SsnEvent.REPEAT) + .and() + //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); } 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..9df86866d 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); @@ -130,6 +137,7 @@ public class IntermediateMkrSessionStateMachineConfig ) ); this.obligationAdmissionContinueAction.setDataEnum(DataEnum.obligationAdmissionStashedRgs); + this.saveRegistriesAfterInspectionAndContinueAction.setDataEnum(DataEnum.inspectionObligationStashedRgs); } @Override @@ -194,10 +202,26 @@ public class IntermediateMkrSessionStateMachineConfig .action(againRevise); sourceObligationAdmission(transitions); - sourcePseudoWaitAfterObligationAdmissionError(transitions); + sourcePseudoWaitAfterError(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 +238,9 @@ public class IntermediateMkrSessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } - private void sourcePseudoWaitAfterObligationAdmissionError(StateMachineTransitionConfigurer transitions) throws Exception { + private void sourcePseudoWaitAfterError(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 +249,19 @@ public class IntermediateMkrSessionStateMachineConfig .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) .action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) + .event(SsnEvent.REPEAT) + .and() + //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); } 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..2dd1a5946 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); @@ -106,6 +113,7 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda dealsPrepareAction.addExecutionCurrencyCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); this.obligationAdmissionContinueAction.setDataEnum(DataEnum.obligationAdmissionStashedRgs); this.formingPaymentInstructionAssetsAction.setDisableCompanyCondition(true); + this.saveRegistriesAfterInspectionAndContinueAction.setDataEnum(DataEnum.inspectionObligationStashedRgs); } @Override @@ -168,7 +176,8 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda .guard(reviseSuccessGuard); sourceObligationAdmission(transitions); - sourcePseudoAfterOAError(transitions); + sourcePseudoWaitAfterError(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -185,8 +194,24 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } - private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { + 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 sourcePseudoWaitAfterError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -195,6 +220,19 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) .action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) + .event(SsnEvent.REPEAT) + .and() + //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); } 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..369cd1d41 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); @@ -126,6 +133,7 @@ public class PrimaryAuctionB0SessionStateMachineConfig dealsPrepareAction.addExecutionFondCondition(execFondPb.equals("settlementCode", "B0")); dealsPrepareAction.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); this.obligationAdmissionContinueAction.setDataEnum(DataEnum.obligationAdmissionStashedRgs); + this.saveRegistriesAfterInspectionAndContinueAction.setDataEnum(DataEnum.inspectionObligationStashedRgs); } @Override @@ -189,10 +197,11 @@ public class PrimaryAuctionB0SessionStateMachineConfig .guard(new SdfGuard(SdfGuardExtractorAfterAgainRevise.instance)) .action(againRevise); sourceObligationAdmission(transitions); - sourcePseudoAfterOAError(transitions); + sourcePseudoWaitAfterError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -209,8 +218,25 @@ public class PrimaryAuctionB0SessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } - private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { + 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 sourcePseudoWaitAfterError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -219,6 +245,19 @@ public class PrimaryAuctionB0SessionStateMachineConfig .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) .action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) + .event(SsnEvent.REPEAT) + .and() + //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); } 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..39ed01314 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); @@ -121,6 +128,7 @@ public class PrimaryAuctionBnSessionStateMachineConfig dealsPrepareAction.addExecutionFondCondition(execFondPb.regex("settlementCode", "^B\\d{2}$")); dealsPrepareAction.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); this.obligationAdmissionContinueAction.setDataEnum(DataEnum.obligationAdmissionStashedRgs); + this.saveRegistriesAfterInspectionAndContinueAction.setDataEnum(DataEnum.inspectionObligationStashedRgs); } @Override @@ -177,9 +185,10 @@ public class PrimaryAuctionBnSessionStateMachineConfig .action(formingPaymentInstructionSecuritiesAction); sourceObligationAdmission(transitions); - sourcePseudoAfterOAError(transitions); + sourcePseudoWaitAfterError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -196,8 +205,24 @@ public class PrimaryAuctionBnSessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } - private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { + 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 sourcePseudoWaitAfterError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -206,6 +231,19 @@ public class PrimaryAuctionBnSessionStateMachineConfig .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) .action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) + .event(SsnEvent.REPEAT) + .and() + //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); } 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..e0e1da056 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); @@ -127,6 +134,7 @@ public class PrimaryAuctionT0SessionStateMachineConfig dealsPrepareAction.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$")); dealsPrepareAction.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); this.obligationAdmissionContinueAction.setDataEnum(DataEnum.obligationAdmissionStashedRgs); + this.saveRegistriesAfterInspectionAndContinueAction.setDataEnum(DataEnum.inspectionObligationStashedRgs); } @Override @@ -191,10 +199,11 @@ public class PrimaryAuctionT0SessionStateMachineConfig .action(againRevise); sourceObligationAdmission(transitions); - sourcePseudoAfterOAError(transitions); + sourcePseudoWaitAfterError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -211,8 +220,24 @@ public class PrimaryAuctionT0SessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } - private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { + 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 sourcePseudoWaitAfterError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -221,6 +246,19 @@ public class PrimaryAuctionT0SessionStateMachineConfig .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) .action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) + .event(SsnEvent.REPEAT) + .and() + //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); } 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..d0ebe64ca 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); @@ -87,6 +109,7 @@ public class ReturnDepositSessionStateMachineConfig rgsPb.less("valueDate", LocalDate.now()) ) ); + this.saveRegistriesAfterInspectionAndContinueAction.setDataEnum(DataEnum.inspectionObligationStashedRgs); } @Override @@ -133,6 +156,23 @@ public class ReturnDepositSessionStateMachineConfig sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); + sourceInspection(transitions); + sourcePseudoWaitAfterError(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 +208,22 @@ public class ReturnDepositSessionStateMachineConfig } } + private void sourcePseudoWaitAfterError(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..5db235eec 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); @@ -127,6 +134,7 @@ public class SecondaryAuctionT0SessionStateMachineConfig dealsPrepareAction.addExecutionFondCondition(execFondPb.regex("settlementCode", "^T0.*$")); dealsPrepareAction.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); this.obligationAdmissionContinueAction.setDataEnum(DataEnum.obligationAdmissionStashedRgs); + this.saveRegistriesAfterInspectionAndContinueAction.setDataEnum(DataEnum.inspectionObligationStashedRgs); } @Override @@ -191,10 +199,11 @@ public class SecondaryAuctionT0SessionStateMachineConfig .action(againRevise); sourceObligationAdmission(transitions); - sourcePseudoAfterOAError(transitions); + sourcePseudoWaitAfterError(transitions); sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -211,8 +220,24 @@ public class SecondaryAuctionT0SessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } - private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { + 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 sourcePseudoWaitAfterError(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + //continue and repeat after ObligationAdmission .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) @@ -221,6 +246,19 @@ public class SecondaryAuctionT0SessionStateMachineConfig .withExternal() .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) .action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) + .event(SsnEvent.REPEAT) + .and() + //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); } 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..b7571a5d1 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; @@ -136,6 +144,7 @@ public class UnitedSessionStateMachineConfig this.finishingSessionAction.setPr("1"); this.obligationAdmissionContinueAction.setDataEnum(DataEnum.obligationAdmissionStashedRgs); + this.saveRegistriesAfterInspectionAndContinueAction.setDataEnum(DataEnum.inspectionObligationStashedRgs); } } @@ -203,10 +212,11 @@ public class UnitedSessionStateMachineConfig .guard(new SdfGuard(SdfGuardExtractorAfterAgainRevise.instance)) .action(againRevise); sourceObligationAdmission(transitions); - sourcePseudoAfterOAError(transitions); + sourcePseudoWaitAfterError(transitions); sourceFormingPaymentInstruction(transitions); sourceAgainRevise(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); + sourceInspection(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -223,17 +233,46 @@ 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 sourcePseudoWaitAfterError(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) + .and() + //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/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/InspectionObligationsV2Action.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java index 8d2473302..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,10 +267,7 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr } } } - //todo save to context -// registryImdg.putAll(rgssToStore, 200); - -// planBalanceCalc.stageRevision2(sessionId); + ctx.getExtendedState().getVariables().put(DataEnum.inspectionObligationStashedRgs, rgssToStore); }