1. регистрация событий SDF

This commit is contained in:
etreschenkov 2025-07-04 15:00:47 +03:00
parent 453f24f9cd
commit 33785cfac0
14 changed files with 153 additions and 38 deletions

View file

@ -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)

View file

@ -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)) {

View file

@ -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,

View file

@ -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,

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -15,5 +15,6 @@ public enum DataEnum {
paymentInstructionSecurity, //List<PaymentInstruction>
paymentsWereCreatedDepositReturn, //Collection<PaymentInstruction>
paymentInfo,
sdfTables,
againReviseSuccess, //Boolean
}

View file

@ -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) {

View file

@ -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
);
}
}

View file

@ -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;
}
}
}