diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/CurrencySessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/CurrencySessionStateMachineConfig.java index 6fee17354..61245f873 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/CurrencySessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/CurrencySessionStateMachineConfig.java @@ -31,6 +31,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -66,6 +67,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure private final AgainReviseStage3Action againRevise; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( @@ -93,6 +95,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure @Qualifier("marketCodesForCurr") Supplier> marketCodes, SaveRegistriesAndContinueAction obligationAdmissionContinueAction, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") @@ -109,6 +112,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure this.againRevise = againReviseStage3Action; this.finishingSessionAction = finishingSession; this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; this.finishingSessionAction.setPr("1"); @@ -185,6 +189,22 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure sourceFormingPaymentInstruction(transitions); sourcePseudoWaitSdfAfterPaymentInstructions(transitions); sourceAgainRevise(transitions); + sourceInspection(transitions); + } + + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction); } private void sourceObligationAdmission(StateMachineTransitionConfigurer transitions) throws Exception { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java index 0da8c741a..c3372ccea 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/FinalSessionStateMachineConfig.java @@ -31,6 +31,7 @@ import ru.spcex.clearing.session.state.action.InspectionObligationsV2Action; import ru.spcex.clearing.session.state.action.ObligationAdmissionAction; import ru.spcex.clearing.session.state.action.RequirementAndObligationCreationAction; import ru.spcex.clearing.session.state.action.ReviseStage1Action; +import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndContinueAction; import ru.spcex.clearing.session.state.action.SaveRegistriesAndContinueAction; import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; @@ -69,6 +70,7 @@ public class FinalSessionStateMachineConfig private final FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction; private final FinishingSessionAction finishingSessionAction; private final SaveRegistriesAndContinueAction obligationAdmissionContinueAction; + private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( @@ -96,12 +98,14 @@ public class FinalSessionStateMachineConfig FormingPaymentInstructionAssetsAction formingPaymentInstructionAssetsAction, FinishingSessionAction finishingSessionAction, SaveRegistriesAndContinueAction obligationAdmissionContinueAction, + SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction, @Qualifier("pauseWorkflowStatusAction") UpdateWorkflowStatusAction pauseWsAction, @Qualifier("activeWorkflowStatusAction") UpdateWorkflowStatusAction activeWsAction ) { this.sendSdf56Action = sendSdf56Action; this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); this.obligationAdmissionContinueAction = obligationAdmissionContinueAction; + this.saveRegistriesAfterInspectionAndContinueAction = saveRegistriesAfterInspectionAndContinueAction; this.pauseWsAction = pauseWsAction; this.activeWsAction = activeWsAction; Imdg rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); @@ -207,6 +211,24 @@ public class FinalSessionStateMachineConfig .action(chain(obligationAdmissionContinueAction, inclusionToPoolAction)); } + private void sourceInspection(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(TaskType.InspectionObligations) + .target(TaskType.PSEUDO_waitAfterInspectionError) + .guard(oblAdmGuard) + .action(pauseWsAction) + .and() + .withExternal() + .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) + .guard(invert(oblAdmGuard)) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionAssetsAction) + .action(saveRegistriesAfterInspectionAndContinueAction) + .action(formingPaymentInstructionReturnMkrAction) + .action(formingPaymentInstructionAssetsAction); + } + private void sourcePseudoAfterOAError(StateMachineTransitionConfigurer transitions) throws Exception { transitions .withExternal() diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java index 046aeb695..cc245cff3 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/TaskType.java @@ -59,6 +59,7 @@ public enum TaskType implements IEnumKey { PSEUDO_waitSdfAfterPaymentInstructions("PSEUDO_waitSdfAfterPaymentInstructions"), PSEUDO_waitSdfAfterAgainRevise("PSEUDO_waitSdfAfterAgainRevise"), PSEUDO_waitAfterObligationAdmissionError("PSEUDO_waitAfterObligationAdmissionError"), + PSEUDO_waitAfterInspectionError("PSEUDO_waitAfterInspectionError"), PSEUDO_end("PSEUDO_end"), ; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java index 9e90f1633..f23a79b78 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsDepositReturnAction.java @@ -215,9 +215,9 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); } } - registryImdg.putAll(rgssToStore, 200); - - planBalanceCalc.stageRevision2(sessionId); +// registryImdg.putAll(rgssToStore, 200); +// +// planBalanceCalc.stageRevision2(sessionId); } private static boolean equalByRgs(RegistryTradingParams rgsParams, Registry rgs) { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java index 472823e29..8d2473302 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/InspectionObligationsV2Action.java @@ -267,9 +267,10 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr } } } - registryImdg.putAll(rgssToStore, 200); + //todo save to context +// registryImdg.putAll(rgssToStore, 200); - planBalanceCalc.stageRevision2(sessionId); +// planBalanceCalc.stageRevision2(sessionId); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAfterInspectionAndContinueAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAfterInspectionAndContinueAction.java new file mode 100644 index 000000000..5a5ef0731 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAfterInspectionAndContinueAction.java @@ -0,0 +1,48 @@ +package ru.spcex.clearing.session.state.action; + +import java.util.Map; +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.Service; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.session.stage.TaskType; +import ru.spcex.clearing.session.stage.impl.PlanBalanceCalc; +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; + +@Service +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class SaveRegistriesAfterInspectionAndContinueAction extends AbstractSessionActionForOkErrorHandling { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg registryImdg; + private DataEnum dataEnum; + private final PlanBalanceCalc planBalanceCalc; + + @Autowired + public SaveRegistriesAfterInspectionAndContinueAction(ImdgProvider imdgProvider, + PlanBalanceCalc planBalanceCalc) { + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.planBalanceCalc = planBalanceCalc; + } + + public void setDataEnum(DataEnum dataEnum) { + this.dataEnum = dataEnum; + } + + @Override + protected void actualExecute(StateContext ctx) { + @SuppressWarnings("unchecked") + Map rgss = ctx.getExtendedState().get(dataEnum, Map.class); + Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class); + registryImdg.putAll(rgss, 200); + planBalanceCalc.stageRevision2(sessionId); + } + +}