From d7cda6c3c590e4542509deeb61fff1d7cb4ba616 Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 15 Jul 2025 18:43:56 +0300 Subject: [PATCH] state machine PSEUDO_waitSdfAfterAgainRevise example UnitSession --- .../UnitedSessionStateMachineConfig.java | 30 +++++++++++++------ .../session/state/guard/SdfGuardUtil.java | 17 +++++++++++ 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java index ca6fc78ab..fe0a015a2 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java @@ -41,9 +41,8 @@ import ru.spcex.clearing.session.state.action.UpdateWorkflowStatusAction; import ru.spcex.clearing.session.state.guard.ErroneousRegistriesPresentGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereCreatedGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedGuard; -import ru.spcex.clearing.session.state.guard.SdfGuard; -import ru.spcex.clearing.session.state.guard.SdfGuardExtractorAfterAgainRevise; import ru.spcex.clearing.session.state.guard.SdfGuardUtil; +import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.guard.SdfUnitSetGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; @@ -201,22 +200,35 @@ public class UnitedSessionStateMachineConfig .and() .withExternal() .source(TaskType.InclusionToPool).target(TaskType.InspectionObligations) - .action(inspectionObligationsV2Action) - .and() - .withExternal() - .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) - .target(TaskType.AgainRevise) - .guard(new SdfGuard(SdfGuardExtractorAfterAgainRevise.instance)) - .action(againRevise); + .action(inspectionObligationsV2Action); sourceObligationAdmission(transitions); sourcePseudoAfterOAError(transitions); sourcePseudoAfterIOError(transitions); sourceFormingPaymentInstruction(transitions); sourceAgainRevise(transitions); + sourcePseudoWaitAfterAgainRevise(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceInspection(transitions); } + private void sourcePseudoWaitAfterAgainRevise(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet ssnEvents = SdfGuardUtil.bySectionAfter7StepUnit(); + transitions + .withExternal() + .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) + .target(TaskType.AgainRevise) + .guard(new SdfSetGuard(ssnEvents)) + .action(againRevise); + for (var event : ssnEvents) { + transitions + .withInternal() + .source(TaskType.PSEUDO_waitSdfAfterAgainRevise) + .event(event) + .action(SdfReceivedAction.instance); + } + + } + private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { transitions .withExternal() diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/SdfGuardUtil.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/SdfGuardUtil.java index fbfe66e64..de44c466f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/SdfGuardUtil.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/SdfGuardUtil.java @@ -6,6 +6,23 @@ import ru.spcex.platform.enumeration.Section; public class SdfGuardUtil { + public static EnumSet afterAgainReviseError(Section section) { + switch (section) { + case MKR -> { + return EnumSet.of( + SsnEvent.SDF_57 + ); + } + case FOND, MULT -> { + return EnumSet.of( + SsnEvent.SDF_21, + SsnEvent.SDF_57 + ); + } + default -> throw new IllegalStateException("unknown wait conditions for section " + section); + } + } + public static EnumSet bySectionAfter7Step(Section section) { switch (section) { case MKR -> {