CurrencySessionStateMachineConfig refactor

This commit is contained in:
ialbert 2025-07-02 19:06:48 +03:00
parent c3315d8a62
commit 66be672adb

View file

@ -42,7 +42,6 @@ import ru.spcex.clearing.session.state.guard.SdfGuardExtractorAfterAgainRevise;
import ru.spcex.clearing.session.state.guard.SdfGuardExtractorAfterAssets; import ru.spcex.clearing.session.state.guard.SdfGuardExtractorAfterAssets;
import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; 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 ru.spcex.clearing.util.StateMachineUtil;
import static ru.spcex.clearing.util.StateMachineUtil.*; import static ru.spcex.clearing.util.StateMachineUtil.*;
import ru.spcex.platform.classes.base.interfaces.ExecutionType; import ru.spcex.platform.classes.base.interfaces.ExecutionType;
import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.Section;
@ -151,90 +150,106 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure
public void configure(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { public void configure(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions transitions
.withExternal() .withExternal()
.event(SsnEvent.SDF_57) .event(SsnEvent.SDF_57)
.source(TaskType.StartRevise).target(TaskType.StartRevisePart1) .source(TaskType.StartRevise).target(TaskType.StartRevisePart1)
.action(reviseStage1Action) .action(reviseStage1Action)
.and() .and()
.withExternal() .withExternal()
.source(TaskType.StartRevisePart1).target(TaskType.DealsPrepare) .source(TaskType.StartRevisePart1).target(TaskType.DealsPrepare)
.action(dealsPrepareAction) .action(dealsPrepareAction)
.and() .and()
.withExternal() .withExternal()
.source(TaskType.DealsPrepare).target(TaskType.RequirementsAndObligationsCreate) .source(TaskType.DealsPrepare).target(TaskType.RequirementsAndObligationsCreate)
.action(reqAndOblAction) .action(reqAndOblAction)
.and() .and()
.withExternal() .withExternal()
.source(TaskType.RequirementsAndObligationsCreate).target(TaskType.ObligationsAdmission) .source(TaskType.RequirementsAndObligationsCreate).target(TaskType.ObligationsAdmission)
.action(obligationAdmissionAction) .action(obligationAdmissionAction)
.and() .and()
.withExternal() .withExternal()
.source(TaskType.ObligationsAdmission) .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
.target(TaskType.PSEUDO_waitAfterObligationAdmissionError) .action(inspectionObligationsV2Action)
.guard(oblAdmGuard) .and()
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.InclusionToPool) .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)) .action(formingPaymentInstructionAssetsAction)
.event(SsnEvent.CONTINUE) .and()
.and()
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitAfterObligationAdmissionError).target(TaskType.ObligationsAdmission) .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)
.action(StateMachineUtil.chain(discardOblAdmStash, obligationAdmissionAction)) .target(TaskType.AgainRevise)
.event(SsnEvent.REPEAT) .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance))
.and() .action(againRevise)
.and()
.withExternal() .withExternal()
.source(TaskType.ObligationsAdmission).target(TaskType.InclusionToPool) .source(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.guard(invert(oblAdmGuard)) .target(TaskType.AgainRevise)
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)) .guard(new SdfGuard(SdfGuardExtractorAfterAgainRevise.instance))
.and() .action(againRevise)
.and()
.withExternal() .withExternal()
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) .source(TaskType.FinishingSession)
.action(inspectionObligationsV2Action) .target(TaskType.EndStageNotification)
.and() .action(endStageNotificationAction);
sourceObligationAdmission(transitions);
sourcePseudoAfterOAError(transitions);
sourceFormingPaymentInstruction(transitions);
sourceAgainRevise(transitions);
}
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal() .withExternal()
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) .source(TaskType.ObligationsAdmission)
.action(formingPaymentInstructionAssetsAction) .target(TaskType.PSEUDO_waitAfterObligationAdmissionError)
.and() .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(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)
.target(TaskType.AgainRevise) .target(TaskType.AgainRevise)
.guard(PaymentsWereNotCreatedGuard.instance) .guard(PaymentsWereNotCreatedGuard.instance)
.action(againRevise) .action(againRevise)
.and() .and()
//если создались paymentInstruction, переходим в режим ожидания //если создались paymentInstruction, переходим в режим ожидания
.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 sourceAgainRevise(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .source(TaskType.AgainRevise)
.target(TaskType.AgainRevise) .target(TaskType.FinishingSession)
.guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) .action(finishingSessionAction)
.action(againRevise) .guard(reviseSuccessGuard)
.and() .and()
.withExternal() .withExternal()
.source(TaskType.AgainRevise) .source(TaskType.AgainRevise)
.target(TaskType.FinishingSession) .target(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.action(finishingSessionAction) .guard(invert(reviseSuccessGuard));
.guard(reviseSuccessGuard)
.and()
.withExternal()
.source(TaskType.AgainRevise)
.target(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.guard(invert(reviseSuccessGuard))
.and()
.withExternal()
.source(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.target(TaskType.AgainRevise)
.guard(new SdfGuard(SdfGuardExtractorAfterAgainRevise.instance))
.action(againRevise)
.and()
.withExternal()
.source(TaskType.FinishingSession)
.target(TaskType.EndStageNotification)
.action(endStageNotificationAction);
} }
@Override @Override