diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java index 4429efd0a..0cdae1407 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java @@ -37,8 +37,8 @@ import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; 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.SdfGuardExtractorAfterAssets; +import ru.spcex.clearing.session.state.guard.SdfGuardUtil; +import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import ru.spcex.clearing.util.StateMachineUtil; @@ -78,7 +78,7 @@ public class FinalSessionStateMachineConfig ); private final SessionType SESSION_TYPE = SessionType.FINL; - + private final Section SECTION = Section.MKR; @Autowired public FinalSessionStateMachineConfig( @@ -133,7 +133,7 @@ public class FinalSessionStateMachineConfig states .withStates() .initial(TaskType.StartRevise, chain( - new CreateSessionAction(sessionImdg, SESSION_TYPE, Section.MKR), + new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION), sendSdf56Action)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, @@ -237,13 +237,14 @@ public class FinalSessionStateMachineConfig } private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet sdfs = SdfGuardUtil.bySectionAfter7Step(SECTION); transitions .withExternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .target(TaskType.FinishingSession) - .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) + .guard(new SdfSetGuard(sdfs)) .action(finishingSessionAction); - for (var event : EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) { + for (var event : sdfs) { transitions .withInternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java index 31e5d2c5c..a6a4c9c55 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java @@ -39,7 +39,8 @@ 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.SdfGuardExtractorAfterAssets; +import ru.spcex.clearing.session.state.guard.SdfGuardUtil; +import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import ru.spcex.clearing.util.StateMachineUtil; @@ -78,7 +79,7 @@ public class IntermediateMkrSessionStateMachineConfig private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.MEDM; - + private final Section SECTION = Section.MKR; @Autowired public IntermediateMkrSessionStateMachineConfig( @@ -130,7 +131,7 @@ public class IntermediateMkrSessionStateMachineConfig states .withStates() .initial(TaskType.StartRevise, chain( - new CreateSessionAction(sessionImdg, SESSION_TYPE, Section.MKR), + new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION), sendSdf56Action)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, @@ -240,11 +241,12 @@ public class IntermediateMkrSessionStateMachineConfig } private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet sdfs = SdfGuardUtil.bySectionAfter7Step(SECTION); transitions .withExternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .target(TaskType.AgainRevise) - .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) + .guard(new SdfSetGuard(sdfs)) .action(againRevise); for (var event : EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java index c67c8983b..00f59f7f6 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java @@ -64,6 +64,7 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda ); private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.PAYM; + private final Section SECTION = Section.CURR; public PaymSessionStateMachineConfig(ImdgProvider imdgProvider, ReviseStage1Action reviseStage1Action, @@ -106,7 +107,7 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda public void configure(StateMachineStateConfigurer states) throws Exception { states .withStates() - .initial(TaskType.StartRevise, new CreateSessionAction(sessionImdg, SESSION_TYPE, Section.CURR)) + .initial(TaskType.StartRevise, new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, TaskType.StartRevisePart1, diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrepSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrepSessionStateMachineConfig.java index 603de00b0..a6d2785ef 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrepSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrepSessionStateMachineConfig.java @@ -54,6 +54,7 @@ public class PrepSessionStateMachineConfig extends EnumStateMachineConfigurerAda DataEnum.obligationAdmissionStashedRgs ); private final SessionType SESSION_TYPE = SessionType.PREP; + private final Section SECTION = Section.CURR; public PrepSessionStateMachineConfig(ImdgProvider imdgProvider, @@ -91,7 +92,7 @@ public class PrepSessionStateMachineConfig extends EnumStateMachineConfigurerAda public void configure(StateMachineStateConfigurer states) throws Exception { states .withStates() - .initial(TaskType.StartRevise, new CreateSessionAction(sessionImdg, SESSION_TYPE, Section.CURR)) + .initial(TaskType.StartRevise, new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, TaskType.DealsPrepare, diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java index 4d71887c1..8b5661f4b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java @@ -40,7 +40,8 @@ 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.SdfGuardExtractorAfterAssets; +import ru.spcex.clearing.session.state.guard.SdfGuardUtil; +import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import static ru.spcex.clearing.util.StateMachineUtil.*; @@ -78,7 +79,7 @@ public class PrimaryAuctionB0SessionStateMachineConfig private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.IPO0; - + private final Section SECTION = Section.FOND; @Autowired public PrimaryAuctionB0SessionStateMachineConfig( @@ -124,7 +125,7 @@ public class PrimaryAuctionB0SessionStateMachineConfig states .withStates() .initial(TaskType.StartRevise, chain( - new CreateSessionAction(sessionImdg, SESSION_TYPE, Section.FOND), + new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION), sendSdf56Action)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, @@ -234,13 +235,14 @@ public class PrimaryAuctionB0SessionStateMachineConfig } private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet sdfs = SdfGuardUtil.bySectionAfter7Step(SECTION); transitions .withExternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .target(TaskType.AgainRevise) - .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) + .guard(new SdfSetGuard(sdfs)) .action(againRevise); - for (var event: EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) { + for (var event: sdfs) { transitions .withInternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java index 7bd373252..2ec80cee5 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java @@ -37,8 +37,8 @@ import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; 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.SdfGuardExtractorAfterAssets; +import ru.spcex.clearing.session.state.guard.SdfGuardUtil; +import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import static ru.spcex.clearing.util.StateMachineUtil.*; @@ -75,7 +75,7 @@ public class PrimaryAuctionBnSessionStateMachineConfig private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.IPOB; - + private final Section SECTION = Section.FOND; @Autowired public PrimaryAuctionBnSessionStateMachineConfig( @@ -119,7 +119,7 @@ public class PrimaryAuctionBnSessionStateMachineConfig states .withStates() .initial(TaskType.StartRevise, chain( - new CreateSessionAction(sessionImdg, SESSION_TYPE, Section.FOND), + new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION), sendSdf56Action)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, @@ -221,13 +221,14 @@ public class PrimaryAuctionBnSessionStateMachineConfig } private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet sdfs = SdfGuardUtil.bySectionAfter7Step(SECTION); transitions .withExternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .target(TaskType.FinishingSession) - .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) + .guard(new SdfSetGuard(sdfs)) .action(finishingSessionAction); - for (var event: EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) { + for (var event: sdfs) { transitions .withInternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java index f2c01a111..5b21ef3c1 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java @@ -40,7 +40,8 @@ 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.SdfGuardExtractorAfterAssets; +import ru.spcex.clearing.session.state.guard.SdfGuardUtil; +import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import static ru.spcex.clearing.util.StateMachineUtil.*; @@ -78,7 +79,7 @@ public class PrimaryAuctionT0SessionStateMachineConfig private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.IPOT; - + private final Section SECTION = Section.FOND; @Autowired public PrimaryAuctionT0SessionStateMachineConfig( @@ -124,7 +125,7 @@ public class PrimaryAuctionT0SessionStateMachineConfig states .withStates() .initial(TaskType.StartRevise, chain( - new CreateSessionAction(sessionImdg, SESSION_TYPE, Section.FOND), + new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION), sendSdf56Action)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, @@ -234,13 +235,14 @@ public class PrimaryAuctionT0SessionStateMachineConfig } private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet sdfs = SdfGuardUtil.bySectionAfter7Step(SECTION); transitions .withExternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .target(TaskType.AgainRevise) - .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) + .guard(new SdfSetGuard(sdfs)) .action(againRevise); - for (var event: EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) { + for (var event: sdfs) { transitions .withInternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java index f0e495e62..401d10357 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java @@ -31,8 +31,8 @@ import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.guard.PaymentsWereCreatedListGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedListGuard; -import ru.spcex.clearing.session.state.guard.SdfGuard; -import ru.spcex.clearing.session.state.guard.SdfGuardExtractorAfterAssets; +import ru.spcex.clearing.session.state.guard.SdfGuardUtil; +import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import static ru.spcex.clearing.util.StateMachineUtil.chain; import ru.spcex.platform.enumeration.RegistryStatus; @@ -56,6 +56,7 @@ public class ReturnDepositSessionStateMachineConfig private final FinishingSessionAction finishingSessionAction; private final EndStageNotificationAction endStageNotificationAction; private final SessionType SESSION_TYPE = SessionType.XDEP; + private final Section SECTION = Section.MKR; @Autowired public ReturnDepositSessionStateMachineConfig( @@ -93,7 +94,7 @@ public class ReturnDepositSessionStateMachineConfig states .withStates() .initial(TaskType.StartRevise, chain( - new CreateSessionAction(sessionImdg, SESSION_TYPE, Section.MKR), + new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION), sendSdf56Action)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, @@ -156,11 +157,12 @@ public class ReturnDepositSessionStateMachineConfig } private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet sdfs = SdfGuardUtil.bySectionAfter7Step(SECTION); transitions .withExternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .target(TaskType.FinishingSession) - .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) + .guard(new SdfSetGuard(sdfs)) .action(finishingSessionAction); for (var event: EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) { transitions diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java index b495405b0..5b8395c63 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java @@ -40,7 +40,8 @@ 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.SdfGuardExtractorAfterAssets; +import ru.spcex.clearing.session.state.guard.SdfGuardUtil; +import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import static ru.spcex.clearing.util.StateMachineUtil.*; @@ -78,7 +79,7 @@ public class SecondaryAuctionT0SessionStateMachineConfig private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.TRDT; - + private final Section SECTION = Section.FOND; @Autowired public SecondaryAuctionT0SessionStateMachineConfig( @@ -124,7 +125,7 @@ public class SecondaryAuctionT0SessionStateMachineConfig states .withStates() .initial(TaskType.StartRevise, chain( - new CreateSessionAction(sessionImdg, SESSION_TYPE, Section.FOND), + new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION), sendSdf56Action)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, @@ -234,13 +235,14 @@ public class SecondaryAuctionT0SessionStateMachineConfig } private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet sdfs = SdfGuardUtil.bySectionAfter7Step(SECTION); transitions .withExternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .target(TaskType.AgainRevise) - .guard(new SdfGuard(SdfGuardExtractorAfterAssets.instance)) + .guard(new SdfSetGuard(sdfs)) .action(againRevise); - for (var event: EnumSet.of(SsnEvent.SDF_01, SsnEvent.SDF_57, SsnEvent.SDF_04)) { + for (var event: sdfs) { transitions .withInternal() .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) 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 887539cba..bd49a7112 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 @@ -1,6 +1,7 @@ package ru.spcex.clearing.config.state_machine_2.specific; import java.util.Arrays; +import java.util.EnumSet; import java.util.HashSet; import java.util.List; import java.util.function.Supplier; @@ -34,11 +35,14 @@ import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAc import ru.spcex.clearing.session.state.action.ReviseStage1Action; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; +import ru.spcex.clearing.session.state.action.SdfReceivedAction; 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.SdfGuardExtractorAfterAssets; +import ru.spcex.clearing.session.state.guard.SdfGuardUtil; +import ru.spcex.clearing.session.state.guard.SdfUnitSetGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import static ru.spcex.clearing.util.StateMachineUtil.*; @@ -75,6 +79,7 @@ public class UnitedSessionStateMachineConfig ); private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.UNIT; + private final Section SECTION = Section.MULT; public UnitedSessionStateMachineConfig(ImdgProvider imdgProvider, Sdf56Action sendSdf56Action, @@ -129,7 +134,7 @@ public class UnitedSessionStateMachineConfig states .withStates() .initial(TaskType.StartRevise, chain( - new CreateSessionAction(sessionImdg, SessionType.UNIT, Section.MULT), + new CreateSessionAction(sessionImdg, SESSION_TYPE, SECTION), sendSdf56Action)) .states(new HashSet<>(Arrays.asList( TaskType.StartRevise, @@ -199,6 +204,7 @@ public class UnitedSessionStateMachineConfig sourcePseudoAfterOAError(transitions); sourceFormingPaymentInstruction(transitions); sourceAgainRevise(transitions); + sourcePseudoWaitSdfAfterPaymentInstructions(transitions); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { @@ -257,6 +263,22 @@ public class UnitedSessionStateMachineConfig .guard(invert(reviseSuccessGuard)); } + private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer transitions) throws Exception { + EnumSet sdfs = SdfGuardUtil.bySectionAfter7StepUnit(); + transitions + .withExternal() + .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) + .target(TaskType.AgainRevise) + .guard(new SdfUnitSetGuard(sdfs)) + .action(againRevise); + for (var event: sdfs) { + transitions + .withInternal() + .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) + .event(event) + .action(SdfReceivedAction.instance); + } + } @Override public void configure(StateMachineConfigurationConfigurer config) throws Exception { StateMachineListenerAdapter loggingChangeStateListener diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/DataEnum.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/DataEnum.java index 335976609..47a888ac0 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/DataEnum.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/DataEnum.java @@ -15,5 +15,6 @@ public enum DataEnum { paymentInstructionSecurity, //List paymentsWereCreatedDepositReturn, //Collection paymentInfo, + sdfTables, againReviseSuccess, //Boolean } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/FormingPaymentInstructionAssetsAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/FormingPaymentInstructionAssetsAction.java index 9de554e51..f9bd8dc4c 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/FormingPaymentInstructionAssetsAction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/FormingPaymentInstructionAssetsAction.java @@ -340,6 +340,12 @@ public class FormingPaymentInstructionAssetsAction extends AbstractSessionAction .getExtendedState() .getVariables() .put(DataEnum.paymentInfo, paymentInfo); + if (SessionType.UNIT == sessionType) { + ctx + .getExtendedState() + .getVariables() + .put(DataEnum.sdfTables, sdfTables); + } } private Collection selectAMBRegistries(Long sessionId) { 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 52056132e..b12893806 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 @@ -28,4 +28,15 @@ public class SdfGuardUtil { default -> throw new IllegalStateException("unknown wait conditions for section " + section); } } + + public static EnumSet bySectionAfter7StepUnit() { + return EnumSet.of( + SsnEvent.SDF_04, + SsnEvent.SDF_01, + SsnEvent.SDF_57, + SsnEvent.SDF_13, + SsnEvent.SDF_08, + SsnEvent.SDF_21 + ); + } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/SdfUnitSetGuard.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/SdfUnitSetGuard.java new file mode 100644 index 000000000..b92420c60 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/SdfUnitSetGuard.java @@ -0,0 +1,61 @@ +package ru.spcex.clearing.session.state.guard; + +import java.util.Collection; +import java.util.EnumSet; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.statemachine.ExtendedState; +import org.springframework.statemachine.StateContext; +import org.springframework.statemachine.guard.Guard; +import ru.spcex.clearing.session.stage.TaskType; +import ru.spcex.clearing.session.state.DataEnum; +import ru.spcex.clearing.session.state.SsnEvent; +import ru.spcex.platform.enumeration.SdfTable; + +public class SdfUnitSetGuard implements Guard { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final EnumSet sdfs; + + public SdfUnitSetGuard(SsnEvent first, SsnEvent... rest) { + this.sdfs = EnumSet.of(first, rest); + } + + public SdfUnitSetGuard(EnumSet sdfs) { + this.sdfs = sdfs; + } + + @Override + public boolean evaluate(StateContext ctx) { + ExtendedState state = ctx.getExtendedState(); + @SuppressWarnings("unchecked") + Collection sdfTables = ctx.getExtendedState().get(DataEnum.sdfTables, Collection.class); + Function was = sdf -> state.get(sdf.name(), Object.class) != null; + + boolean everySdfConditionMet; + if (sdfTables.contains(SdfTable.SDF_12)) { + everySdfConditionMet = sdfs + .stream() + .allMatch(was::apply); + } else { + everySdfConditionMet = Stream.of(SsnEvent.SDF_04, SsnEvent.SDF_01, SsnEvent.SDF_57) + .allMatch(was::apply); + } + if (everySdfConditionMet) { + log.info("all of {} conditions were met", sdfs); + sdfs.forEach(sdf -> state.getVariables().remove(sdf.name())); + sdfTables.forEach(sdfTable -> ctx.getExtendedState().getVariables().remove(sdfTable)); + return true; + } else { + log.info("conditions: {}", + sdfs + .stream() + .map(sdf -> "%s: %s".formatted(sdf.name(), was.apply(sdf) ? "received" : "waiting")) + .collect(Collectors.joining(";", "[", "]")) + ); + return false; + } + } +}