Merge branch 'refs/heads/stage-5-state-machine' into dev

This commit is contained in:
etreschenkov 2025-07-14 16:46:48 +03:00
commit 1ff8ea5cef
16 changed files with 477 additions and 61 deletions

View file

@ -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.ObligationAdmissionAction;
import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.Sdf56Action;
import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.action.SdfReceivedAction;
@ -66,8 +67,12 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure
private final AgainReviseStage3Action againRevise; private final AgainReviseStage3Action againRevise;
private final FinishingSessionAction finishingSessionAction; private final FinishingSessionAction finishingSessionAction;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final DiscardRegistriesAction discardOblAdmStash = private final DiscardRegistriesAction discardOblAdmStash =
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
DataEnum.inspectionObligationStashedRgs
);
private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard(
DataEnum.obligationAdmissionStashedRgs DataEnum.obligationAdmissionStashedRgs
); );
@ -93,6 +98,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure
@Qualifier("marketCodesForCurr") @Qualifier("marketCodesForCurr")
Supplier<List<String>> marketCodes, Supplier<List<String>> marketCodes,
SaveRegistriesAndContinueAction obligationAdmissionContinueAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction") @Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction, UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") @Qualifier("activeWorkflowStatusAction")
@ -109,6 +115,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure
this.againRevise = againReviseStage3Action; this.againRevise = againReviseStage3Action;
this.finishingSessionAction = finishingSession; this.finishingSessionAction = finishingSession;
this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction;
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
this.finishingSessionAction.setPr("1"); this.finishingSessionAction.setPr("1");
@ -170,10 +177,6 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsV2Action) .action(inspectionObligationsV2Action)
.and() .and()
.withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionAssetsAction)
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .source(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.target(TaskType.AgainRevise) .target(TaskType.AgainRevise)
@ -182,9 +185,26 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure
sourceObligationAdmission(transitions); sourceObligationAdmission(transitions);
sourcePseudoAfterOAError(transitions); sourcePseudoAfterOAError(transitions);
sourcePseudoAfterIOError(transitions);
sourceFormingPaymentInstruction(transitions); sourceFormingPaymentInstruction(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceAgainRevise(transitions); sourceAgainRevise(transitions);
sourceInspection(transitions);
}
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -203,6 +223,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure
private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//continue and repeat after ObligationAdmission
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction))
@ -214,6 +235,22 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure
.event(SsnEvent.REPEAT); .event(SsnEvent.REPEAT);
} }
private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//если не создалось paymentInstruction'ов //если не создалось paymentInstruction'ов

View file

@ -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.ObligationAdmissionAction;
import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.Sdf56Action;
import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.action.SdfReceivedAction;
@ -69,6 +70,7 @@ public class FinalSessionStateMachineConfig
private final FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction; private final FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction;
private final FinishingSessionAction finishingSessionAction; private final FinishingSessionAction finishingSessionAction;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final DiscardRegistriesAction discardOblAdmStash = private final DiscardRegistriesAction discardOblAdmStash =
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard(
@ -96,12 +98,14 @@ public class FinalSessionStateMachineConfig
FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction, FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction,
FinishingSessionAction finishingSessionAction, FinishingSessionAction finishingSessionAction,
SaveRegistriesAndContinueAction obligationAdmissionContinueAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") UpdateWorkflowStatusAction activeWsAction @Qualifier("activeWorkflowStatusAction") UpdateWorkflowStatusAction activeWsAction
) { ) {
this.sendSdf56Action = sendSdf56Action; this.sendSdf56Action = sendSdf56Action;
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction;
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
Imdg<Registry> rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); Imdg<Registry> rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
@ -207,6 +211,24 @@ public class FinalSessionStateMachineConfig
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
} }
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
.withExternal() .withExternal()

View file

@ -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.ObligationAdmissionAction;
import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.Sdf56Action;
import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.action.SdfReceivedAction;
@ -69,6 +70,10 @@ public class IntermediateMkrSessionStateMachineConfig
private final AgainReviseStage3Action againRevise; private final AgainReviseStage3Action againRevise;
private final FinishingSessionAction finishingSessionAction; private final FinishingSessionAction finishingSessionAction;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
DataEnum.inspectionObligationStashedRgs
);
private final DiscardRegistriesAction discardOblAdmStash = private final DiscardRegistriesAction discardOblAdmStash =
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard(
@ -95,6 +100,7 @@ public class IntermediateMkrSessionStateMachineConfig
FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction, AgainReviseStage3Action againRevise, FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction, AgainReviseStage3Action againRevise,
FinishingSessionAction finishingSessionAction, FinishingSessionAction finishingSessionAction,
SaveRegistriesAndContinueAction obligationAdmissionContinueAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction") @Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction, UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") @Qualifier("activeWorkflowStatusAction")
@ -104,6 +110,7 @@ public class IntermediateMkrSessionStateMachineConfig
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.againRevise = againRevise; this.againRevise = againRevise;
this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction;
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
Imdg<Registry> rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); Imdg<Registry> rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
@ -183,10 +190,6 @@ public class IntermediateMkrSessionStateMachineConfig
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsV2Action) .action(inspectionObligationsV2Action)
.and() .and()
.withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionAssetsAction)
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .source(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.target(TaskType.AgainRevise) .target(TaskType.AgainRevise)
@ -194,10 +197,27 @@ public class IntermediateMkrSessionStateMachineConfig
.action(againRevise); .action(againRevise);
sourceObligationAdmission(transitions); sourceObligationAdmission(transitions);
sourcePseudoWaitAfterObligationAdmissionError(transitions); sourcePseudoAfterOAError(transitions);
sourcePseudoAfterIOError(transitions);
sourceFormingPaymentInstructions(transitions); sourceFormingPaymentInstructions(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceAgainRevise(transitions); sourceAgainRevise(transitions);
sourceInspection(transitions);
}
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -214,8 +234,9 @@ public class IntermediateMkrSessionStateMachineConfig
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
} }
private void sourcePseudoWaitAfterObligationAdmissionError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//continue and repeat after ObligationAdmission
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction))
@ -227,6 +248,22 @@ public class IntermediateMkrSessionStateMachineConfig
.event(SsnEvent.REPEAT); .event(SsnEvent.REPEAT);
} }
private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceFormingPaymentInstructions(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//если не создалось paymentInstruction'ов //если не создалось paymentInstruction'ов

View file

@ -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.ObligationAdmissionAction;
import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.UpdateWorkflowStatusAction; import ru.spcex.clearing.session.state.action.UpdateWorkflowStatusAction;
import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard;
@ -56,11 +57,15 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda
private final AgainReviseStage3Action againRevise; private final AgainReviseStage3Action againRevise;
private final FinishingSessionAction finishingSessionAction; private final FinishingSessionAction finishingSessionAction;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final DiscardRegistriesAction discardOblAdmStash = private final DiscardRegistriesAction discardOblAdmStash =
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard(
DataEnum.obligationAdmissionStashedRgs DataEnum.obligationAdmissionStashedRgs
); );
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
DataEnum.inspectionObligationStashedRgs
);
private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction pauseWsAction;
private final UpdateWorkflowStatusAction activeWsAction; private final UpdateWorkflowStatusAction activeWsAction;
private final Guard<TaskType, SsnEvent> reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final Guard<TaskType, SsnEvent> reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess);
@ -81,11 +86,13 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda
@Qualifier("marketCodesForCurr") @Qualifier("marketCodesForCurr")
Supplier<List<String>> marketCodes, Supplier<List<String>> marketCodes,
SaveRegistriesAndContinueAction obligationAdmissionContinueAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction") @Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction, UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") @Qualifier("activeWorkflowStatusAction")
UpdateWorkflowStatusAction activeWsAction) { UpdateWorkflowStatusAction activeWsAction) {
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
Imdg<ExecutionCurrency> executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class); Imdg<ExecutionCurrency> executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class);
@ -152,10 +159,6 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsV2Action) .action(inspectionObligationsV2Action)
.and() .and()
.withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionAssetsAction)
.and()
.withExternal() .withExternal()
.source(TaskType.FormingPaymentInstruction) .source(TaskType.FormingPaymentInstruction)
.target(TaskType.AgainRevise) .target(TaskType.AgainRevise)
@ -169,6 +172,8 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda
sourceObligationAdmission(transitions); sourceObligationAdmission(transitions);
sourcePseudoAfterOAError(transitions); sourcePseudoAfterOAError(transitions);
sourcePseudoAfterIOError(transitions);
sourceInspection(transitions);
} }
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -185,8 +190,24 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
} }
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//continue and repeat after ObligationAdmission
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction))
@ -198,6 +219,22 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda
.event(SsnEvent.REPEAT); .event(SsnEvent.REPEAT);
} }
private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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 @Override
public void configure(StateMachineConfigurationConfigurer<TaskType, SsnEvent> config) throws Exception { public void configure(StateMachineConfigurationConfigurer<TaskType, SsnEvent> config) throws Exception {
StateMachineListenerAdapter<TaskType, SsnEvent> loggingChangeStateListener StateMachineListenerAdapter<TaskType, SsnEvent> loggingChangeStateListener

View file

@ -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.ObligationAdmissionAction;
import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.Sdf56Action;
import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.action.SdfReceivedAction;
@ -69,8 +70,12 @@ public class PrimaryAuctionB0SessionStateMachineConfig
private final AgainReviseStage3Action againRevise; private final AgainReviseStage3Action againRevise;
private final FinishingSessionAction finishingSessionAction; private final FinishingSessionAction finishingSessionAction;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final DiscardRegistriesAction discardOblAdmStash = private final DiscardRegistriesAction discardOblAdmStash =
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
DataEnum.inspectionObligationStashedRgs
);
private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction pauseWsAction;
private final UpdateWorkflowStatusAction activeWsAction; private final UpdateWorkflowStatusAction activeWsAction;
@ -98,6 +103,7 @@ public class PrimaryAuctionB0SessionStateMachineConfig
FinishingSessionAction finishingSessionAction, FinishingSessionAction finishingSessionAction,
SaveRegistriesAndContinueAction obligationAdmissionContinueAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
@Qualifier("marketCodesForBn") Supplier<List<String>> marketCodes, @Qualifier("marketCodesForBn") Supplier<List<String>> marketCodes,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction") @Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction, UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") @Qualifier("activeWorkflowStatusAction")
@ -105,6 +111,7 @@ public class PrimaryAuctionB0SessionStateMachineConfig
) { ) {
this.sendSdf56Action = sendSdf56Action; this.sendSdf56Action = sendSdf56Action;
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
@ -179,10 +186,6 @@ public class PrimaryAuctionB0SessionStateMachineConfig
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsV2Action) .action(inspectionObligationsV2Action)
.and() .and()
.withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionSecuritiesAction)
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .source(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.target(TaskType.AgainRevise) .target(TaskType.AgainRevise)
@ -190,9 +193,11 @@ public class PrimaryAuctionB0SessionStateMachineConfig
.action(againRevise); .action(againRevise);
sourceObligationAdmission(transitions); sourceObligationAdmission(transitions);
sourcePseudoAfterOAError(transitions); sourcePseudoAfterOAError(transitions);
sourcePseudoAfterIOError(transitions);
sourceFormingPaymentInstruction(transitions); sourceFormingPaymentInstruction(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceAgainRevise(transitions); sourceAgainRevise(transitions);
sourceInspection(transitions);
} }
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -209,8 +214,25 @@ public class PrimaryAuctionB0SessionStateMachineConfig
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
} }
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//continue and repeat after ObligationAdmission
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction))
@ -222,6 +244,22 @@ public class PrimaryAuctionB0SessionStateMachineConfig
.event(SsnEvent.REPEAT); .event(SsnEvent.REPEAT);
} }
private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//если не создалось paymentInstruction'ов //если не создалось paymentInstruction'ов

View file

@ -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.ObligationAdmissionAction;
import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.Sdf56Action;
import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.action.SdfReceivedAction;
@ -65,8 +66,12 @@ public class PrimaryAuctionBnSessionStateMachineConfig
private final FormingPaymentInstructionSecuritiesAction formingPaymentInstructionSecuritiesAction; private final FormingPaymentInstructionSecuritiesAction formingPaymentInstructionSecuritiesAction;
private final FinishingSessionAction finishingSessionAction; private final FinishingSessionAction finishingSessionAction;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final DiscardRegistriesAction discardOblAdmStash = private final DiscardRegistriesAction discardOblAdmStash =
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
DataEnum.inspectionObligationStashedRgs
);
private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction pauseWsAction;
private final UpdateWorkflowStatusAction activeWsAction; private final UpdateWorkflowStatusAction activeWsAction;
@ -94,6 +99,7 @@ public class PrimaryAuctionBnSessionStateMachineConfig
SaveRegistriesAndContinueAction obligationAdmissionContinueAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
@Qualifier("marketCodesForBn") @Qualifier("marketCodesForBn")
Supplier<List<String>> marketCodes, Supplier<List<String>> marketCodes,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction") @Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction, UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") @Qualifier("activeWorkflowStatusAction")
@ -101,6 +107,7 @@ public class PrimaryAuctionBnSessionStateMachineConfig
) { ) {
this.sendSdf56Action = sendSdf56Action; this.sendSdf56Action = sendSdf56Action;
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
@ -170,16 +177,14 @@ public class PrimaryAuctionBnSessionStateMachineConfig
.and() .and()
.withExternal() .withExternal()
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsV2Action) .action(inspectionObligationsV2Action);
.and()
.withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionSecuritiesAction);
sourceObligationAdmission(transitions); sourceObligationAdmission(transitions);
sourcePseudoAfterOAError(transitions); sourcePseudoAfterOAError(transitions);
sourcePseudoAfterIOError(transitions);
sourceFormingPaymentInstruction(transitions); sourceFormingPaymentInstruction(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceInspection(transitions);
} }
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -196,8 +201,24 @@ public class PrimaryAuctionBnSessionStateMachineConfig
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
} }
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//continue and repeat after ObligationAdmission
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction))
@ -209,6 +230,22 @@ public class PrimaryAuctionBnSessionStateMachineConfig
.event(SsnEvent.REPEAT); .event(SsnEvent.REPEAT);
} }
private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//если не создалось paymentInstruction'ов //если не создалось paymentInstruction'ов

View file

@ -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.ObligationAdmissionAction;
import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.Sdf56Action;
import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.action.SdfReceivedAction;
@ -69,8 +70,12 @@ public class PrimaryAuctionT0SessionStateMachineConfig
private final AgainReviseStage3Action againRevise; private final AgainReviseStage3Action againRevise;
private final FinishingSessionAction finishingSessionAction; private final FinishingSessionAction finishingSessionAction;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final DiscardRegistriesAction discardOblAdmStash = private final DiscardRegistriesAction discardOblAdmStash =
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
DataEnum.inspectionObligationStashedRgs
);
private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction pauseWsAction;
private final UpdateWorkflowStatusAction activeWsAction; private final UpdateWorkflowStatusAction activeWsAction;
@ -99,6 +104,7 @@ public class PrimaryAuctionT0SessionStateMachineConfig
SaveRegistriesAndContinueAction obligationAdmissionContinueAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
@Qualifier("marketCodesForT0Primary") @Qualifier("marketCodesForT0Primary")
Supplier<List<String>> marketCodes, Supplier<List<String>> marketCodes,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction") @Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction, UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") @Qualifier("activeWorkflowStatusAction")
@ -106,6 +112,7 @@ public class PrimaryAuctionT0SessionStateMachineConfig
) { ) {
this.sendSdf56Action = sendSdf56Action; this.sendSdf56Action = sendSdf56Action;
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
@ -180,10 +187,6 @@ public class PrimaryAuctionT0SessionStateMachineConfig
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsV2Action) .action(inspectionObligationsV2Action)
.and() .and()
.withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionSecuritiesAction)
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .source(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.target(TaskType.AgainRevise) .target(TaskType.AgainRevise)
@ -192,9 +195,11 @@ public class PrimaryAuctionT0SessionStateMachineConfig
sourceObligationAdmission(transitions); sourceObligationAdmission(transitions);
sourcePseudoAfterOAError(transitions); sourcePseudoAfterOAError(transitions);
sourcePseudoAfterIOError(transitions);
sourceFormingPaymentInstruction(transitions); sourceFormingPaymentInstruction(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceAgainRevise(transitions); sourceAgainRevise(transitions);
sourceInspection(transitions);
} }
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -211,8 +216,24 @@ public class PrimaryAuctionT0SessionStateMachineConfig
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
} }
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//continue and repeat after ObligationAdmission
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction))
@ -224,6 +245,22 @@ public class PrimaryAuctionT0SessionStateMachineConfig
.event(SsnEvent.REPEAT); .event(SsnEvent.REPEAT);
} }
private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//если не создалось paymentInstruction'ов //если не создалось paymentInstruction'ов

View file

@ -19,21 +19,27 @@ import ru.clearing.classes.statics.data.misc.Session;
import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.session.stage.TaskType; 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.SsnEvent;
import ru.spcex.clearing.session.state.action.CreateSessionAction; 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.FinishingSessionAction;
import ru.spcex.clearing.session.state.action.FormingPaymentInstructionDepositReturnAction; import ru.spcex.clearing.session.state.action.FormingPaymentInstructionDepositReturnAction;
import ru.spcex.clearing.session.state.action.InclusionToPoolAction; import ru.spcex.clearing.session.state.action.InclusionToPoolAction;
import ru.spcex.clearing.session.state.action.InspectionObligationsDepositReturnAction; import ru.spcex.clearing.session.state.action.InspectionObligationsDepositReturnAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.Sdf56Action;
import ru.spcex.clearing.session.state.action.SdfReceivedAction; 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.PaymentsWereCreatedListGuard;
import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedListGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedListGuard;
import ru.spcex.clearing.session.state.guard.SdfGuardUtil; import ru.spcex.clearing.session.state.guard.SdfGuardUtil;
import ru.spcex.clearing.session.state.guard.SdfSetGuard; 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 ru.spcex.clearing.session.state.listener.MachineMonitoringListener;
import static ru.spcex.clearing.util.StateMachineUtil.chain; 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.RegistryStatus;
import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.Section;
import ru.spcex.platform.enumeration.SessionType; import ru.spcex.platform.enumeration.SessionType;
@ -53,6 +59,14 @@ public class ReturnDepositSessionStateMachineConfig
private final InspectionObligationsDepositReturnAction inspectionObligationsDepositReturnAction; private final InspectionObligationsDepositReturnAction inspectionObligationsDepositReturnAction;
private final FormingPaymentInstructionDepositReturnAction formingPaymentInstructionDepositReturnAction; private final FormingPaymentInstructionDepositReturnAction formingPaymentInstructionDepositReturnAction;
private final FinishingSessionAction finishingSessionAction; 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 SessionType SESSION_TYPE = SessionType.XDEP;
private final Section SECTION = Section.MKR; private final Section SECTION = Section.MKR;
@ -65,7 +79,12 @@ public class ReturnDepositSessionStateMachineConfig
FinishingSessionAction finishingSessionAction, FinishingSessionAction finishingSessionAction,
@Qualifier("marketCodesForBn") Supplier<List<String>> marketCodes, @Qualifier("marketCodesForBn") Supplier<List<String>> marketCodes,
InspectionObligationsDepositReturnAction inspectionObligationsDepositReturnAction, InspectionObligationsDepositReturnAction inspectionObligationsDepositReturnAction,
FormingPaymentInstructionDepositReturnAction formingPaymentInstructionDepositReturnAction FormingPaymentInstructionDepositReturnAction formingPaymentInstructionDepositReturnAction,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction")
UpdateWorkflowStatusAction activeWsAction
) { ) {
this.sendSdf56Action = sendSdf56Action; this.sendSdf56Action = sendSdf56Action;
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
@ -74,6 +93,9 @@ public class ReturnDepositSessionStateMachineConfig
this.inspectionObligationsDepositReturnAction = inspectionObligationsDepositReturnAction; this.inspectionObligationsDepositReturnAction = inspectionObligationsDepositReturnAction;
this.formingPaymentInstructionDepositReturnAction = formingPaymentInstructionDepositReturnAction; this.formingPaymentInstructionDepositReturnAction = formingPaymentInstructionDepositReturnAction;
this.finishingSessionAction = finishingSessionAction; this.finishingSessionAction = finishingSessionAction;
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction;
this.finishingSessionAction.setPr("4"); this.finishingSessionAction.setPr("4");
Imdg<Registry> rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); Imdg<Registry> rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
@ -126,13 +148,27 @@ public class ReturnDepositSessionStateMachineConfig
.withExternal() .withExternal()
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsDepositReturnAction) .action(inspectionObligationsDepositReturnAction)
.and() .and();
.withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionDepositReturnAction);
sourceFormingPaymentInstruction(transitions); sourceFormingPaymentInstruction(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceInspection(transitions);
sourcePseudoAfterIOError(transitions);
}
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -168,6 +204,22 @@ public class ReturnDepositSessionStateMachineConfig
} }
} }
private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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 @Override
public void configure(StateMachineConfigurationConfigurer<TaskType, SsnEvent> config) throws Exception { public void configure(StateMachineConfigurationConfigurer<TaskType, SsnEvent> config) throws Exception {
StateMachineListenerAdapter<TaskType, SsnEvent> loggingChangeStateListener StateMachineListenerAdapter<TaskType, SsnEvent> loggingChangeStateListener

View file

@ -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.ObligationAdmissionAction;
import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.Sdf56Action;
import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.action.SdfReceivedAction;
@ -69,8 +70,12 @@ public class SecondaryAuctionT0SessionStateMachineConfig
private final AgainReviseStage3Action againRevise; private final AgainReviseStage3Action againRevise;
private final FinishingSessionAction finishingSessionAction; private final FinishingSessionAction finishingSessionAction;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final DiscardRegistriesAction discardOblAdmStash = private final DiscardRegistriesAction discardOblAdmStash =
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
DataEnum.inspectionObligationStashedRgs
);
private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction pauseWsAction;
private final UpdateWorkflowStatusAction activeWsAction; private final UpdateWorkflowStatusAction activeWsAction;
@ -99,6 +104,7 @@ public class SecondaryAuctionT0SessionStateMachineConfig
SaveRegistriesAndContinueAction obligationAdmissionContinueAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
@Qualifier("marketCodesForT0") @Qualifier("marketCodesForT0")
Supplier<List<String>> marketCodes, Supplier<List<String>> marketCodes,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction") @Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction, UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") @Qualifier("activeWorkflowStatusAction")
@ -106,6 +112,7 @@ public class SecondaryAuctionT0SessionStateMachineConfig
) { ) {
this.sendSdf56Action = sendSdf56Action; this.sendSdf56Action = sendSdf56Action;
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
@ -180,10 +187,6 @@ public class SecondaryAuctionT0SessionStateMachineConfig
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsV2Action) .action(inspectionObligationsV2Action)
.and() .and()
.withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionAssetsAction)
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .source(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.target(TaskType.AgainRevise) .target(TaskType.AgainRevise)
@ -192,9 +195,11 @@ public class SecondaryAuctionT0SessionStateMachineConfig
sourceObligationAdmission(transitions); sourceObligationAdmission(transitions);
sourcePseudoAfterOAError(transitions); sourcePseudoAfterOAError(transitions);
sourcePseudoAfterIOError(transitions);
sourceFormingPaymentInstruction(transitions); sourceFormingPaymentInstruction(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceAgainRevise(transitions); sourceAgainRevise(transitions);
sourceInspection(transitions);
} }
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -211,8 +216,24 @@ public class SecondaryAuctionT0SessionStateMachineConfig
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
} }
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//continue and repeat after ObligationAdmission
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) .action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction))
@ -224,6 +245,22 @@ public class SecondaryAuctionT0SessionStateMachineConfig
.event(SsnEvent.REPEAT); .event(SsnEvent.REPEAT);
} }
private void sourcePseudoAfterIOError(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
//если не создалось paymentInstruction'ов //если не создалось paymentInstruction'ов

View file

@ -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.ObligationAdmissionAction;
import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationCompoundAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationCompoundAction;
import ru.spcex.clearing.session.state.action.ReviseStage1Action; 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.SaveRegistriesAndContinueAction;
import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.Sdf56Action;
import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.action.SdfReceivedAction;
@ -71,9 +72,14 @@ public class UnitedSessionStateMachineConfig
private final FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction; private final FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction;
private final AgainReviseStage3Action againRevise; private final AgainReviseStage3Action againRevise;
private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction;
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
private final FinishingSessionAction finishingSessionAction; private final FinishingSessionAction finishingSessionAction;
private final DiscardRegistriesAction discardOblAdmStash = private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); DataEnum.obligationAdmissionStashedRgs
);
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
DataEnum.inspectionObligationStashedRgs
);
private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction pauseWsAction;
private final UpdateWorkflowStatusAction activeWsAction; private final UpdateWorkflowStatusAction activeWsAction;
@ -99,6 +105,7 @@ public class UnitedSessionStateMachineConfig
FinishingSessionAction finishingSessionAction, FinishingSessionAction finishingSessionAction,
@Qualifier("marketCodesForCurr") Supplier<List<String>> marketCodesCurr, @Qualifier("marketCodesForCurr") Supplier<List<String>> marketCodesCurr,
@Qualifier("marketCodesForT0") Supplier<List<String>> marketCodesTrdt, @Qualifier("marketCodesForT0") Supplier<List<String>> marketCodesTrdt,
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
@Qualifier("pauseWorkflowStatusAction") @Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction, UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") @Qualifier("activeWorkflowStatusAction")
@ -117,6 +124,7 @@ public class UnitedSessionStateMachineConfig
this.againRevise = againRevise; this.againRevise = againRevise;
this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction;
this.finishingSessionAction = finishingSessionAction; this.finishingSessionAction = finishingSessionAction;
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
@ -193,10 +201,6 @@ public class UnitedSessionStateMachineConfig
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsV2Action) .action(inspectionObligationsV2Action)
.and() .and()
.withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionAssetsAction)
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .source(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.target(TaskType.AgainRevise) .target(TaskType.AgainRevise)
@ -204,9 +208,11 @@ public class UnitedSessionStateMachineConfig
.action(againRevise); .action(againRevise);
sourceObligationAdmission(transitions); sourceObligationAdmission(transitions);
sourcePseudoAfterOAError(transitions); sourcePseudoAfterOAError(transitions);
sourcePseudoAfterIOError(transitions);
sourceFormingPaymentInstruction(transitions); sourceFormingPaymentInstruction(transitions);
sourceAgainRevise(transitions); sourceAgainRevise(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceInspection(transitions);
} }
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -223,17 +229,49 @@ public class UnitedSessionStateMachineConfig
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
} }
private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .source(TaskType.InspectionObligations)
.action(chain(activeWsAction, obligationAdmissionContinueAction, inclusionToPoolAction)) .target(TaskType.PSEUDO_waitAfterInspectionError)
.event(SsnEvent.CONTINUE) .guard(oblAdmGuard)
.and() .action(pauseWsAction)
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(chain(activeWsAction, discardOblAdmStash, obligationAdmissionAction)) .guard(invert(oblAdmGuard))
.event(SsnEvent.REPEAT); .action(saveRegistriesAfterInspectionAndContinueAction)
.action(formingPaymentInstructionAssetsAction);
}
private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> 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<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception { private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {

View file

@ -59,6 +59,7 @@ public enum TaskType implements IEnumKey {
PSEUDO_waitSdfAfterPaymentInstructions("PSEUDO_waitSdfAfterPaymentInstructions"), PSEUDO_waitSdfAfterPaymentInstructions("PSEUDO_waitSdfAfterPaymentInstructions"),
PSEUDO_waitSdfAfterAgainRevise("PSEUDO_waitSdfAfterAgainRevise"), PSEUDO_waitSdfAfterAgainRevise("PSEUDO_waitSdfAfterAgainRevise"),
PSEUDO_waitAfterObligationAdmissionError("PSEUDO_waitAfterObligationAdmissionError"), PSEUDO_waitAfterObligationAdmissionError("PSEUDO_waitAfterObligationAdmissionError"),
PSEUDO_waitAfterInspectionError("PSEUDO_waitAfterInspectionError"),
PSEUDO_end("PSEUDO_end"), PSEUDO_end("PSEUDO_end"),
; ;

View file

@ -11,6 +11,7 @@ public enum DataEnum {
dealsPreparedCurrency, dealsPreparedCurrency,
counterPartyId, //Long counterPartyId, //Long
obligationAdmissionStashedRgs, //Map<Long, Registry> obligationAdmissionStashedRgs, //Map<Long, Registry>
inspectionObligationStashedRgs, //Map<Long, Registry>
erroneousRegistries, //List<RgsErr> erroneousRegistries, //List<RgsErr>
paymentInstructionReturnMkr, //List<PaymentInstruction> paymentInstructionReturnMkr, //List<PaymentInstruction>
paymentInstructionSecurity, //List<PaymentInstruction> paymentInstructionSecurity, //List<PaymentInstruction>

View file

@ -215,9 +215,9 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct
group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore));
} }
} }
registryImdg.putAll(rgssToStore, 200); // registryImdg.putAll(rgssToStore, 200);
//
planBalanceCalc.stageRevision2(sessionId); // planBalanceCalc.stageRevision2(sessionId);
} }
private static boolean equalByRgs(RegistryTradingParams rgsParams, Registry rgs) { private static boolean equalByRgs(RegistryTradingParams rgsParams, Registry rgs) {

View file

@ -96,7 +96,7 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr
try { try {
Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class); Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class);
this.sessionType = ctx.getExtendedState().get(DataEnum.sessionType, SessionType.class); this.sessionType = ctx.getExtendedState().get(DataEnum.sessionType, SessionType.class);
inspectionObligations(sessionId); inspectionObligations(sessionId, ctx);
} finally { } finally {
a___Cash.clear(); a___Cash.clear();
a__fCash.clear(); a__fCash.clear();
@ -104,7 +104,7 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr
} }
} }
private void inspectionObligations(Long sessionId) { private void inspectionObligations(Long sessionId, StateContext<TaskType, SsnEvent> ctx) {
String sqlCondition = String.format("(%s) and registryStatus = '%s'", String sqlCondition = String.format("(%s) and registryStatus = '%s'",
RegistryCodeSqlBuilder.getInstance(OS_T, OM_T, TS_T, TM_T).build(), RegistryCodeSqlBuilder.getInstance(OS_T, OM_T, TS_T, TM_T).build(),
RegistryStatus.POOL.getKey()); RegistryStatus.POOL.getKey());
@ -267,9 +267,7 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr
} }
} }
} }
registryImdg.putAll(rgssToStore, 200); ctx.getExtendedState().getVariables().put(DataEnum.inspectionObligationStashedRgs, rgssToStore);
planBalanceCalc.stageRevision2(sessionId);
} }

View file

@ -48,9 +48,9 @@ public class PauseWorkflowStatusWithNotificationAction extends UpdateWorkflowSta
case PSEUDO_waitAfterObligationAdmissionError -> { case PSEUDO_waitAfterObligationAdmissionError -> {
return "Ряд обязательств не допущены к клирингу!!!\r\n"; return "Ряд обязательств не допущены к клирингу!!!\r\n";
} }
// case PSEUDO_waitAfterInspectionError -> { case PSEUDO_waitAfterInspectionError -> {
// return "Ряд обязательств подлежит исключению из клирингового пула!!!\r\n"; return "Ряд обязательств подлежит исключению из клирингового пула!!!\r\n";
// } }
default -> { default -> {
return "Ошибка клиринговой сессии\r\n"; return "Ошибка клиринговой сессии\r\n";
} }

View file

@ -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<Registry> 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<TaskType, SsnEvent> ctx) {
@SuppressWarnings("unchecked")
Map<Long, Registry> rgss = ctx.getExtendedState().get(dataEnum, Map.class);
Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class);
registryImdg.putAll(rgss, 200);
planBalanceCalc.stageRevision2(sessionId);
}
}