IPOB revise after payment instructions

This commit is contained in:
ialbert 2025-08-12 12:30:29 +03:00
parent 96955aa0aa
commit 733d92bf54

View file

@ -13,6 +13,7 @@ import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter
import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer; import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer;
import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; import org.springframework.statemachine.config.builders.StateMachineStateConfigurer;
import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;
import org.springframework.statemachine.guard.Guard;
import org.springframework.statemachine.listener.StateMachineListenerAdapter; import org.springframework.statemachine.listener.StateMachineListenerAdapter;
import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.misc.Session;
@ -20,6 +21,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.session.stage.TaskType; import ru.spcex.clearing.session.stage.TaskType;
import ru.spcex.clearing.session.state.DataEnum; import ru.spcex.clearing.session.state.DataEnum;
import ru.spcex.clearing.session.state.SsnEvent; import ru.spcex.clearing.session.state.SsnEvent;
import ru.spcex.clearing.session.state.action.AgainReviseStage3Action;
import ru.spcex.clearing.session.state.action.CreateSessionAction; import ru.spcex.clearing.session.state.action.CreateSessionAction;
import ru.spcex.clearing.session.state.action.DealsPrepareAction; import ru.spcex.clearing.session.state.action.DealsPrepareAction;
import ru.spcex.clearing.session.state.action.DiscardRegistriesAction; import ru.spcex.clearing.session.state.action.DiscardRegistriesAction;
@ -42,8 +44,7 @@ import ru.spcex.clearing.session.state.guard.SdfGuardUtil;
import ru.spcex.clearing.session.state.guard.SdfSetGuard; import ru.spcex.clearing.session.state.guard.SdfSetGuard;
import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard;
import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener;
import static ru.spcex.clearing.util.StateMachineUtil.chain; import static ru.spcex.clearing.util.StateMachineUtil.*;
import static ru.spcex.clearing.util.StateMachineUtil.invert;
import ru.spcex.platform.classes.base.interfaces.ExecutionType; import ru.spcex.platform.classes.base.interfaces.ExecutionType;
import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.Section;
import ru.spcex.platform.enumeration.SessionType; import ru.spcex.platform.enumeration.SessionType;
@ -75,11 +76,13 @@ public class PrimaryAuctionBnSessionStateMachineConfig
); );
private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction pauseWsAction;
private final UpdateWorkflowStatusAction activeWsAction; private final UpdateWorkflowStatusAction activeWsAction;
private final AgainReviseStage3Action againRevise;
private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard(
DataEnum.obligationAdmissionStashedRgs DataEnum.obligationAdmissionStashedRgs
); );
private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard();
private final Guard<TaskType, SsnEvent> reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess);
private final SessionType SESSION_TYPE = SessionType.IPOB; private final SessionType SESSION_TYPE = SessionType.IPOB;
private final Section SECTION = Section.FOND; private final Section SECTION = Section.FOND;
@ -104,13 +107,14 @@ public class PrimaryAuctionBnSessionStateMachineConfig
@Qualifier("pauseWorkflowStatusAction") @Qualifier("pauseWorkflowStatusAction")
UpdateWorkflowStatusAction pauseWsAction, UpdateWorkflowStatusAction pauseWsAction,
@Qualifier("activeWorkflowStatusAction") @Qualifier("activeWorkflowStatusAction")
UpdateWorkflowStatusAction activeWsAction UpdateWorkflowStatusAction activeWsAction, AgainReviseStage3Action againRevise
) { ) {
this.sendSdf56Action = sendSdf56Action; this.sendSdf56Action = sendSdf56Action;
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
this.pauseWsAction = pauseWsAction; this.pauseWsAction = pauseWsAction;
this.activeWsAction = activeWsAction; this.activeWsAction = activeWsAction;
this.againRevise = againRevise;
Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); Imdg<ExecutionFond> executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction;
this.reviseStage1Action = reviseStage1Action; this.reviseStage1Action = reviseStage1Action;
@ -153,7 +157,9 @@ public class PrimaryAuctionBnSessionStateMachineConfig
TaskType.PSEUDO_waitAfterObligationAdmissionError, TaskType.PSEUDO_waitAfterObligationAdmissionError,
TaskType.PSEUDO_waitAfterInspectionError, TaskType.PSEUDO_waitAfterInspectionError,
TaskType.PSEUDO_waitAfterObligationAdmissionRestore, TaskType.PSEUDO_waitAfterObligationAdmissionRestore,
TaskType.PSEUDO_waitAfterInspectionRestore TaskType.PSEUDO_waitAfterInspectionRestore,
TaskType.AgainRevise,
TaskType.PSEUDO_waitSdfAfterAgainRevise
))) )))
.end(TaskType.FinishingSession); .end(TaskType.FinishingSession);
} }
@ -189,6 +195,8 @@ public class PrimaryAuctionBnSessionStateMachineConfig
sourceFormingPaymentInstruction(transitions); sourceFormingPaymentInstruction(transitions);
sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
sourceInspection(transitions); sourceInspection(transitions);
sourceAgainRevise(transitions);
sourcePseudoWaitAfterAgainRevise(transitions);
} }
private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception { private void sourceObligationAdmission(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
@ -259,9 +267,9 @@ public class PrimaryAuctionBnSessionStateMachineConfig
//если не создалось paymentInstruction'ов //если не создалось paymentInstruction'ов
.withExternal() .withExternal()
.source(TaskType.FormingPaymentInstruction) .source(TaskType.FormingPaymentInstruction)
.target(TaskType.FinishingSession) .target(TaskType.AgainRevise)
.guard(new PaymentsWereNotCreatedListGuard(FormingPaymentInstructionSecuritiesAction.key)) .guard(new PaymentsWereNotCreatedListGuard(FormingPaymentInstructionSecuritiesAction.key))
.action(finishingSessionAction) .action(againRevise)
.and() .and()
//если создались paymentInstruction, переходим в режим ожидания //если создались paymentInstruction, переходим в режим ожидания
.withExternal() .withExternal()
@ -275,9 +283,9 @@ public class PrimaryAuctionBnSessionStateMachineConfig
transitions transitions
.withExternal() .withExternal()
.source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions) .source(TaskType.PSEUDO_waitSdfAfterPaymentInstructions)
.target(TaskType.FinishingSession) .target(TaskType.AgainRevise)
.guard(new SdfSetGuard(sdfs)) .guard(new SdfSetGuard(sdfs))
.action(finishingSessionAction); .action(againRevise);
for (var event: sdfs) { for (var event: sdfs) {
transitions transitions
.withInternal() .withInternal()
@ -287,6 +295,37 @@ public class PrimaryAuctionBnSessionStateMachineConfig
} }
} }
private void sourceAgainRevise(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
transitions
.withExternal()
.source(TaskType.AgainRevise)
.target(TaskType.FinishingSession)
.action(finishingSessionAction)
.guard(reviseSuccessGuard)
.and()
.withExternal()
.source(TaskType.AgainRevise)
.target(TaskType.PSEUDO_waitSdfAfterAgainRevise)
.guard(invert(reviseSuccessGuard));
}
private void sourcePseudoWaitAfterAgainRevise(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
EnumSet<SsnEvent> ssnEvents = SdfGuardUtil.afterAgainReviseError(SECTION);
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);
}
}
@Override @Override
public void configure(StateMachineConfigurationConfigurer<TaskType, SsnEvent> config) throws Exception { public void configure(StateMachineConfigurationConfigurer<TaskType, SsnEvent> config) throws Exception {