FinalMkrSession state machine integration
This commit is contained in:
parent
ae3245f069
commit
a36abc2b98
3 changed files with 120 additions and 11 deletions
|
|
@ -35,7 +35,9 @@ import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndCo
|
||||||
import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction;
|
import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction;
|
||||||
import ru.spcex.clearing.session.state.action.Sdf56Action;
|
import ru.spcex.clearing.session.state.action.Sdf56Action;
|
||||||
import ru.spcex.clearing.session.state.action.SdfReceivedAction;
|
import ru.spcex.clearing.session.state.action.SdfReceivedAction;
|
||||||
|
import ru.spcex.clearing.session.state.action.UpdateSessionStatusAction;
|
||||||
import ru.spcex.clearing.session.state.action.UpdateWorkflowStatusAction;
|
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.PaymentsWereCreatedGuard;
|
||||||
import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedGuard;
|
import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedGuard;
|
||||||
import ru.spcex.clearing.session.state.guard.SdfGuardUtil;
|
import ru.spcex.clearing.session.state.guard.SdfGuardUtil;
|
||||||
|
|
@ -73,11 +75,17 @@ public class FinalSessionStateMachineConfig
|
||||||
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
|
private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction;
|
||||||
private final DiscardRegistriesAction discardOblAdmStash =
|
private final DiscardRegistriesAction discardOblAdmStash =
|
||||||
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
|
new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs);
|
||||||
|
private final UpdateWorkflowStatusAction pauseWsAction;
|
||||||
|
private final UpdateWorkflowStatusAction activeWsAction;
|
||||||
|
private final UpdateSessionStatusAction inspectionStatusAction;
|
||||||
|
private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction(
|
||||||
|
DataEnum.inspectionObligationStashedRgs
|
||||||
|
);
|
||||||
|
|
||||||
private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard(
|
private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard(
|
||||||
DataEnum.obligationAdmissionStashedRgs
|
DataEnum.obligationAdmissionStashedRgs
|
||||||
);
|
);
|
||||||
private final UpdateWorkflowStatusAction pauseWsAction;
|
private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard();
|
||||||
private final UpdateWorkflowStatusAction activeWsAction;
|
|
||||||
|
|
||||||
private final SessionType SESSION_TYPE = SessionType.FINL;
|
private final SessionType SESSION_TYPE = SessionType.FINL;
|
||||||
private final Section SECTION = Section.MKR;
|
private final Section SECTION = Section.MKR;
|
||||||
|
|
@ -100,7 +108,7 @@ public class FinalSessionStateMachineConfig
|
||||||
SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
|
SaveRegistriesAndContinueAction obligationAdmissionContinueAction,
|
||||||
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
|
SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction,
|
||||||
@Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction,
|
@Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction,
|
||||||
@Qualifier("activeWorkflowStatusAction") UpdateWorkflowStatusAction activeWsAction
|
@Qualifier("activeWorkflowStatusAction") UpdateWorkflowStatusAction activeWsAction, UpdateSessionStatusAction inspectionStatusAction
|
||||||
) {
|
) {
|
||||||
this.sendSdf56Action = sendSdf56Action;
|
this.sendSdf56Action = sendSdf56Action;
|
||||||
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||||
|
|
@ -108,6 +116,7 @@ public class FinalSessionStateMachineConfig
|
||||||
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
|
this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction;
|
||||||
this.pauseWsAction = pauseWsAction;
|
this.pauseWsAction = pauseWsAction;
|
||||||
this.activeWsAction = activeWsAction;
|
this.activeWsAction = activeWsAction;
|
||||||
|
this.inspectionStatusAction = inspectionStatusAction.status(TaskType.InspectionObligations);
|
||||||
Imdg<Registry> rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
Imdg<Registry> rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
this.reviseStage1Action = reviseStage1Action;
|
this.reviseStage1Action = reviseStage1Action;
|
||||||
this.dealsPrepareAction = dealsPrepareAction;
|
this.dealsPrepareAction = dealsPrepareAction;
|
||||||
|
|
@ -155,7 +164,9 @@ public class FinalSessionStateMachineConfig
|
||||||
TaskType.FormingPaymentInstruction,
|
TaskType.FormingPaymentInstruction,
|
||||||
TaskType.FinishingSession,
|
TaskType.FinishingSession,
|
||||||
TaskType.PSEUDO_waitSdfAfterPaymentInstructions,
|
TaskType.PSEUDO_waitSdfAfterPaymentInstructions,
|
||||||
TaskType.PSEUDO_waitAfterObligationAdmissionError
|
TaskType.PSEUDO_waitAfterObligationAdmissionError,
|
||||||
|
TaskType.PSEUDO_InspectionObligationDepositReturn,
|
||||||
|
TaskType.PSEUDO_waitAfterInspectionDepositReturnError
|
||||||
)))
|
)))
|
||||||
.end(TaskType.FinishingSession);
|
.end(TaskType.FinishingSession);
|
||||||
}
|
}
|
||||||
|
|
@ -182,9 +193,10 @@ public class FinalSessionStateMachineConfig
|
||||||
.action(obligationAdmissionAction)
|
.action(obligationAdmissionAction)
|
||||||
.and()
|
.and()
|
||||||
.withExternal()
|
.withExternal()
|
||||||
.source(TaskType.InclusionToPool).target(TaskType.InspectionObligations)
|
.source(TaskType.InclusionToPool).target(TaskType.PSEUDO_InspectionObligationDepositReturn)
|
||||||
|
//нужно сменить статус ручками, т.к. псевдо состояние
|
||||||
|
.action(chain(inspectionStatusAction, inspOblDepositReturnAction))
|
||||||
.action(inspOblDepositReturnAction)
|
.action(inspOblDepositReturnAction)
|
||||||
.action(inspectionObligationsV2Action)
|
|
||||||
.and()
|
.and()
|
||||||
.withExternal()
|
.withExternal()
|
||||||
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
|
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
|
||||||
|
|
@ -193,6 +205,10 @@ public class FinalSessionStateMachineConfig
|
||||||
|
|
||||||
sourceObligationAdmission(transitions);
|
sourceObligationAdmission(transitions);
|
||||||
sourcePseudoAfterOAError(transitions);
|
sourcePseudoAfterOAError(transitions);
|
||||||
|
sourceIODepositReturn(transitions);
|
||||||
|
sourceIODepositReturnError(transitions);
|
||||||
|
sourceIO(transitions);
|
||||||
|
sourceIOError(transitions);
|
||||||
sourceFormingPaymentInstruction(transitions);
|
sourceFormingPaymentInstruction(transitions);
|
||||||
sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
|
sourcePseudoWaitSdfAfterPaymentInstructions(transitions);
|
||||||
}
|
}
|
||||||
|
|
@ -211,24 +227,72 @@ public class FinalSessionStateMachineConfig
|
||||||
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
|
.action(chain(obligationAdmissionContinueAction, inclusionToPoolAction));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sourceInspection(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
|
private void sourceIODepositReturn(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
|
||||||
|
transitions
|
||||||
|
.withExternal()
|
||||||
|
.source(TaskType.PSEUDO_InspectionObligationDepositReturn)
|
||||||
|
.target(TaskType.PSEUDO_waitAfterInspectionDepositReturnError)
|
||||||
|
.guard(inspErrGuard)
|
||||||
|
.action(pauseWsAction)
|
||||||
|
.and()
|
||||||
|
.withExternal()
|
||||||
|
.source(TaskType.PSEUDO_InspectionObligationDepositReturn)
|
||||||
|
.target(TaskType.InspectionObligations)
|
||||||
|
.guard(invert(inspErrGuard))
|
||||||
|
.action(saveRegistriesAfterInspectionAndContinueAction)
|
||||||
|
.action(inspectionObligationsV2Action);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sourceIODepositReturnError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
|
||||||
|
transitions
|
||||||
|
//continue and repeat after InspectionObligations
|
||||||
|
.withExternal()
|
||||||
|
.source(TaskType.PSEUDO_waitAfterInspectionDepositReturnError).target(TaskType.InspectionObligations)
|
||||||
|
.action(activeWsAction)
|
||||||
|
.action(saveRegistriesAfterInspectionAndContinueAction)
|
||||||
|
.action(inspectionObligationsV2Action)
|
||||||
|
.event(SsnEvent.CONTINUE)
|
||||||
|
.and()
|
||||||
|
.withExternal()
|
||||||
|
.source(TaskType.PSEUDO_waitAfterInspectionDepositReturnError).target(TaskType.PSEUDO_InspectionObligationDepositReturn)
|
||||||
|
.action(chain(activeWsAction, discardInspOblStash, inspOblDepositReturnAction))
|
||||||
|
.event(SsnEvent.REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sourceIO(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
|
||||||
transitions
|
transitions
|
||||||
.withExternal()
|
.withExternal()
|
||||||
.source(TaskType.InspectionObligations)
|
.source(TaskType.InspectionObligations)
|
||||||
.target(TaskType.PSEUDO_waitAfterInspectionError)
|
.target(TaskType.PSEUDO_waitAfterInspectionError)
|
||||||
.guard(oblAdmGuard)
|
.guard(inspErrGuard)
|
||||||
.action(pauseWsAction)
|
.action(pauseWsAction)
|
||||||
.and()
|
.and()
|
||||||
.withExternal()
|
.withExternal()
|
||||||
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
|
.source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction)
|
||||||
.guard(invert(oblAdmGuard))
|
.guard(invert(inspErrGuard))
|
||||||
.action(saveRegistriesAfterInspectionAndContinueAction)
|
|
||||||
.action(formingPaymentInstructionAssetsAction)
|
|
||||||
.action(saveRegistriesAfterInspectionAndContinueAction)
|
.action(saveRegistriesAfterInspectionAndContinueAction)
|
||||||
.action(formingPaymentInstructionReturnMkrAction)
|
.action(formingPaymentInstructionReturnMkrAction)
|
||||||
.action(formingPaymentInstructionAssetsAction);
|
.action(formingPaymentInstructionAssetsAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sourceIOError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
|
||||||
|
transitions
|
||||||
|
//continue and repeat after InspectionObligations
|
||||||
|
.withExternal()
|
||||||
|
.source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.FormingPaymentInstruction)
|
||||||
|
.action(activeWsAction)
|
||||||
|
.action(saveRegistriesAfterInspectionAndContinueAction)
|
||||||
|
.action(formingPaymentInstructionReturnMkrAction)
|
||||||
|
.action(formingPaymentInstructionAssetsAction)
|
||||||
|
.event(SsnEvent.CONTINUE)
|
||||||
|
.and()
|
||||||
|
.withExternal()
|
||||||
|
.source(TaskType.PSEUDO_waitAfterInspectionError).target(TaskType.InspectionObligations)
|
||||||
|
.action(chain(activeWsAction, discardInspOblStash, inspectionObligationsV2Action))
|
||||||
|
.event(SsnEvent.REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
|
private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer<TaskType, SsnEvent> transitions) throws Exception {
|
||||||
transitions
|
transitions
|
||||||
.withExternal()
|
.withExternal()
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,7 @@ public enum TaskType implements IEnumKey {
|
||||||
PSEUDO_waitAfterObligationAdmissionError("PSEUDO_waitAfterObligationAdmissionError"),
|
PSEUDO_waitAfterObligationAdmissionError("PSEUDO_waitAfterObligationAdmissionError"),
|
||||||
PSEUDO_waitAfterInspectionError("PSEUDO_waitAfterInspectionError"),
|
PSEUDO_waitAfterInspectionError("PSEUDO_waitAfterInspectionError"),
|
||||||
PSEUDO_waitAfterInspectionDepositReturnError("PSEUDO_waitAfterInspectionDepositReturnError"),
|
PSEUDO_waitAfterInspectionDepositReturnError("PSEUDO_waitAfterInspectionDepositReturnError"),
|
||||||
|
PSEUDO_InspectionObligationDepositReturn("PSEUDO_InspectionObligationDepositReturn"),
|
||||||
PSEUDO_end("PSEUDO_end"),
|
PSEUDO_end("PSEUDO_end"),
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
package ru.spcex.clearing.session.state.action;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||||
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.statemachine.StateContext;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.clearing.classes.statics.data.misc.Session;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
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.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||||
|
public class UpdateSessionStatusAction extends AbstractSessionActionForOkErrorHandling {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
private final Imdg<Session> ssnImdg;
|
||||||
|
private TaskType status;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public UpdateSessionStatusAction(ImdgProvider imdgProvider) {
|
||||||
|
this.ssnImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UpdateSessionStatusAction status(TaskType status) {
|
||||||
|
this.status = status;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void actualExecute(StateContext<TaskType, SsnEvent> ctx) {
|
||||||
|
Session session = ctx.getExtendedState().get(DataEnum.session, Session.class);
|
||||||
|
if (status == null)
|
||||||
|
throw new IllegalStateException("status must be set for %s action".formatted(getClass()));
|
||||||
|
session.setSessionStatus(status.getKey());
|
||||||
|
log.info("updating session status to {}", status);
|
||||||
|
ssnImdg.update(session);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue