state machine config separate methods

This commit is contained in:
ialbert 2025-07-02 15:46:20 +03:00
parent ff060688a3
commit ea3ba70d14
2 changed files with 121 additions and 83 deletions

View file

@ -181,26 +181,6 @@ public class FinalSessionStateMachineConfig
.source(TaskType.RequirementsAndObligationsCreate).target(TaskType.ObligationsAdmission) .source(TaskType.RequirementsAndObligationsCreate).target(TaskType.ObligationsAdmission)
.action(obligationAdmissionAction) .action(obligationAdmissionAction)
.and() .and()
.withExternal()
.source(TaskType.ObligationsAdmission)
.target(TaskType.PSEUDO_waitAfterObligationAdmissionError)
.guard(oblAdmGuard)
.and()
.withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction))
.event(SsnEvent.CONTINUE)
.and()
.withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission)
.action(StateMachineUtil.chain(discardOblAdmStash, obligationAdmissionAction))
.event(SsnEvent.REPEAT)
.and()
.withExternal()
.source(TaskType.ObligationsAdmission).target(TaskType.InclusionToPool)
.guard(invert(oblAdmGuard))
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction))
.and()
.withExternal() .withExternal()
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspOblDepositReturnAction) .action(inspOblDepositReturnAction)
@ -211,6 +191,44 @@ public class FinalSessionStateMachineConfig
.action(formingPaymentInstructionReturnMkrAction) .action(formingPaymentInstructionReturnMkrAction)
.action(formingPaymentInstructionAssetsAction) .action(formingPaymentInstructionAssetsAction)
.and() .and()
.withExternal()
.source(TaskType.FinishingSession)
.target(TaskType.EndStageNotification)
.action(endStageNotificationAction);
sourceObligationAdmission(transitions);
sourcePseudoAfterOAError(transitions);
sourceFormingPaymentInstruction(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
}
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal()
.source(TaskType.ObligationsAdmission)
.target(TaskType.PSEUDO_waitAfterObligationAdmissionError)
.guard(oblAdmGuard)
.and()
.withExternal()
.source(TaskType.ObligationsAdmission).target(TaskType.InclusionToPool)
.guard(invert(oblAdmGuard))
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
}
private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction))
.event(SsnEvent.CONTINUE)
.and()
.withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission)
.action(StateMachineUtil.chain(discardOblAdmStash, obligationAdmissionAction))
.event(SsnEvent.REPEAT);
}
private void sourceFormingPaymentInstruction(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
//если не создалось paymentInstruction'ов //если не создалось paymentInstruction'ов
.withExternal() .withExternal()
.source(TaskType.FormingPaymentInstruction) .source(TaskType.FormingPaymentInstruction)
@ -222,19 +240,17 @@ public class FinalSessionStateMachineConfig
.withExternal() .withExternal()
.source(TaskType.FormingPaymentInstruction) .source(TaskType.FormingPaymentInstruction)
.target(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .target(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)
.guard(PaymentsWereCreatedGuard.instance) .guard(PaymentsWereCreatedGuard.instance);
.and() }
private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)
.target(TaskType.FinishingSession) .target(TaskType.FinishingSession)
.guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance))
.action(finishingSessionAction) .action(finishingSessionAction);
.and() for (var event : EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) {
.withExternal()
.source(TaskType.FinishingSession)
.target(TaskType.EndStageNotification)
.action(endStageNotificationAction);
for (var event: EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) {
transitions transitions
.withInternal() .withInternal()
.source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)

View file

@ -178,26 +178,6 @@ public class IntermediateMkrSessionStateMachineConfig
.source(TaskType.RequirementsAndObligationsCreate).target(TaskType.ObligationsAdmission) .source(TaskType.RequirementsAndObligationsCreate).target(TaskType.ObligationsAdmission)
.action(obligationAdmissionAction) .action(obligationAdmissionAction)
.and() .and()
.withExternal()
.source(TaskType.ObligationsAdmission)
.target(TaskType.PSEUDO_waitAfterObligationAdmissionError)
.guard(oblAdmGuard)
.and()
.withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction))
.event(SsnEvent.CONTINUE)
.and()
.withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission)
.action(StateMachineUtil.chain(discardOblAdmStash, obligationAdmissionAction))
.event(SsnEvent.REPEAT)
.and()
.withExternal()
.source(TaskType.ObligationsAdmission).target(TaskType.InclusionToPool)
.guard(invert(oblAdmGuard))
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction))
.and()
.withExternal() .withExternal()
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.action(inspectionObligationsV2Action) .action(inspectionObligationsV2Action)
@ -206,36 +186,6 @@ public class IntermediateMkrSessionStateMachineConfig
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(formingPaymentInstructionAssetsAction) .action(formingPaymentInstructionAssetsAction)
.and() .and()
//если не создалось paymentInstruction'ов
.withExternal()
.source(TaskType.FormingPaymentInstruction)
.target(TaskType.AgainRevise)
.guard(PaymentsWereNotCreatedGuard.instance)
.action(againRevise)
.and()
//если создались paymentInstruction, переходим в режим ожидания
.withExternal()
.source(TaskType.FormingPaymentInstruction)
.target(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)
.guard(PaymentsWereCreatedGuard.instance)
.and()
.withExternal()
.source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)
.target(TaskType.AgainRevise)
.guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance))
.action(againRevise)
.and()
.withExternal()
.source(TaskType.AgainRevise)
.target(TaskType.FinishingSession)
.action(finishingSessionAction)
.guard(reviseSuccessGuard)
.and()
.withExternal()
.source(TaskType.AgainRevise)
.target(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.guard(invert(reviseSuccessGuard))
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterAgainRevise) .source(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.target(TaskType.AgainRevise) .target(TaskType.AgainRevise)
@ -246,7 +196,64 @@ public class IntermediateMkrSessionStateMachineConfig
.source(TaskType.FinishingSession) .source(TaskType.FinishingSession)
.target(TaskType.EndStageNotification) .target(TaskType.EndStageNotification)
.action(endStageNotificationAction); .action(endStageNotificationAction);
for (var event: EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) { sourceObligationAdmission(transitions);
sourcePseudoWaitAfterObligationAdmissionError(transitions);
sourceFormingPaymentInstructions(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceAgainRevise(transitions);
}
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal()
.source(TaskType.ObligationsAdmission)
.target(TaskType.PSEUDO_waitAfterObligationAdmissionError)
.guard(oblAdmGuard)
.and()
.withExternal()
.source(TaskType.ObligationsAdmission).target(TaskType.InclusionToPool)
.guard(invert(oblAdmGuard))
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
}
private void sourcePseudoWaitAfterObligationAdmissionError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool)
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction))
.event(SsnEvent.CONTINUE)
.and()
.withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission)
.action(StateMachineUtil.chain(discardOblAdmStash, obligationAdmissionAction))
.event(SsnEvent.REPEAT);
}
private void sourceFormingPaymentInstructions(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
//если не создалось paymentInstruction'ов
.withExternal()
.source(TaskType.FormingPaymentInstruction)
.target(TaskType.AgainRevise)
.guard(PaymentsWereNotCreatedGuard.instance)
.action(againRevise)
.and()
//если создались paymentInstruction, переходим в режим ожидания
.withExternal()
.source(TaskType.FormingPaymentInstruction)
.target(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)
.guard(PaymentsWereCreatedGuard.instance);
}
private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal()
.source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)
.target(TaskType.AgainRevise)
.guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance))
.action(againRevise);
for (var event : EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) {
transitions transitions
.withInternal() .withInternal()
.source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)
@ -255,6 +262,21 @@ public class IntermediateMkrSessionStateMachineConfig
} }
} }
private void sourceAgainRevise(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal()
.source(TaskType.AgainRevise)
.target(TaskType.FinishingSession)
.action(finishingSessionAction)
.guard(reviseSuccessGuard)
.and()
.withExternal()
.source(TaskType.AgainRevise)
.target(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.guard(invert(reviseSuccessGuard));
}
@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