state machine PSEUDO_waitSdfAfterAgainRevise example UnitSession

This commit is contained in:
ialbert 2025-07-15 18:43:56 +03:00
parent 5dc32f283e
commit d7cda6c3c5
2 changed files with 38 additions and 9 deletions

View file

@ -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<TaskType, SsnEvent> transitions) throws Exception {
EnumSet<SsnEvent> 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<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal()

View file

@ -6,6 +6,23 @@ import ru.spcex.platform.enumeration.Section;
public class SdfGuardUtil {
public static EnumSet<SsnEvent> 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<SsnEvent> bySectionAfter7Step(Section section) {
switch (section) {
case MKR -> {