1. регистрация событий SDF
This commit is contained in:
parent
453f24f9cd
commit
33785cfac0
14 changed files with 153 additions and 38 deletions
|
|
@ -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<TaskType, SsnEvent> transitions) throws Exception {
|
||||
EnumSet<SsnEvent> 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)
|
||||
|
|
|
|||
|
|
@ -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<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception {
|
||||
EnumSet<SsnEvent> 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)) {
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda
|
|||
);
|
||||
private final Guard<TaskType, SsnEvent> 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<TaskType, SsnEvent> 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,
|
||||
|
|
|
|||
|
|
@ -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<TaskType, SsnEvent> 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,
|
||||
|
|
|
|||
|
|
@ -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<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception {
|
||||
EnumSet<SsnEvent> 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)
|
||||
|
|
|
|||
|
|
@ -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<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception {
|
||||
EnumSet<SsnEvent> 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)
|
||||
|
|
|
|||
|
|
@ -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<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception {
|
||||
EnumSet<SsnEvent> 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)
|
||||
|
|
|
|||
|
|
@ -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<TaskType, SsnEvent> transitions) throws Exception {
|
||||
EnumSet<SsnEvent> 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
|
||||
|
|
|
|||
|
|
@ -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<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception {
|
||||
EnumSet<SsnEvent> 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)
|
||||
|
|
|
|||
|
|
@ -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<TaskType, SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception {
|
||||
|
|
@ -257,6 +263,22 @@ public class UnitedSessionStateMachineConfig
|
|||
.guard(invert(reviseSuccessGuard));
|
||||
}
|
||||
|
||||
private void sourcePseudoWaitSdfAfterPaymentInstructions(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
|
||||
EnumSet<SsnEvent> 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<TaskType, SsnEvent> config) throws Exception {
|
||||
StateMachineListenerAdapter<TaskType, SsnEvent> loggingChangeStateListener
|
||||
|
|
|
|||
|
|
@ -15,5 +15,6 @@ public enum DataEnum {
|
|||
paymentInstructionSecurity, //List<PaymentInstruction>
|
||||
paymentsWereCreatedDepositReturn, //Collection<PaymentInstruction>
|
||||
paymentInfo,
|
||||
sdfTables,
|
||||
againReviseSuccess, //Boolean
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Registry> selectAMBRegistries(Long sessionId) {
|
||||
|
|
|
|||
|
|
@ -28,4 +28,15 @@ public class SdfGuardUtil {
|
|||
default -> throw new IllegalStateException("unknown wait conditions for section " + section);
|
||||
}
|
||||
}
|
||||
|
||||
public static EnumSet<SsnEvent> bySectionAfter7StepUnit() {
|
||||
return EnumSet.of(
|
||||
SsnEvent.SDF_04,
|
||||
SsnEvent.SDF_01,
|
||||
SsnEvent.SDF_57,
|
||||
SsnEvent.SDF_13,
|
||||
SsnEvent.SDF_08,
|
||||
SsnEvent.SDF_21
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<TaskType, SsnEvent> {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final EnumSet<SsnEvent> sdfs;
|
||||
|
||||
public SdfUnitSetGuard(SsnEvent first, SsnEvent... rest) {
|
||||
this.sdfs = EnumSet.of(first, rest);
|
||||
}
|
||||
|
||||
public SdfUnitSetGuard(EnumSet<SsnEvent> sdfs) {
|
||||
this.sdfs = sdfs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean evaluate(StateContext<TaskType, SsnEvent> ctx) {
|
||||
ExtendedState state = ctx.getExtendedState();
|
||||
@SuppressWarnings("unchecked")
|
||||
Collection<SdfTable> sdfTables = ctx.getExtendedState().get(DataEnum.sdfTables, Collection.class);
|
||||
Function<SsnEvent, Boolean> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue