From efe3d58b2a68b24dfbe0bf6096513749843eaa27 Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 14 Jul 2025 16:02:26 +0300 Subject: [PATCH] InspectionObligations guard --- .../CurrencySessionStateMachineConfig.java | 6 ++++-- ...ermediateMkrSessionStateMachineConfig.java | 6 ++++-- .../PaymSessionStateMachineConfig.java | 13 ++++++++----- ...aryAuctionB0SessionStateMachineConfig.java | 6 ++++-- ...aryAuctionBnSessionStateMachineConfig.java | 11 ++++++----- ...aryAuctionT0SessionStateMachineConfig.java | 6 ++++-- ...eturnDepositSessionStateMachineConfig.java | 6 ++++-- ...aryAuctionT0SessionStateMachineConfig.java | 6 ++++-- .../UnitedSessionStateMachineConfig.java | 6 ++++-- .../clearing/session/stage/TaskType.java | 1 + ...pectionObligationsDepositReturnAction.java | 17 +++++++++++++++++ .../action/InspectionObligationsV2Action.java | 16 ++++++++++++++-- ...eWorkflowStatusWithNotificationAction.java | 2 +- ...triesAfterInspectionAndContinueAction.java | 1 + .../SaveRegistriesAndContinueAction.java | 1 + .../ErroneousRegistriesPresentGuard.java | 19 +++++++++++++++++++ 16 files changed, 96 insertions(+), 27 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/ErroneousRegistriesPresentGuard.java 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 72af779ba..dd6abfa24 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 @@ -36,6 +36,7 @@ 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.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; @@ -76,6 +77,7 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs ); + private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction activeWsAction; @@ -197,12 +199,12 @@ public class CurrencySessionStateMachineConfig extends EnumStateMachineConfigure .withExternal() .source(TaskType.InspectionObligations) .target(TaskType.PSEUDO_waitAfterInspectionError) - .guard(oblAdmGuard) + .guard(inspErrGuard) .action(pauseWsAction) .and() .withExternal() .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .guard(invert(oblAdmGuard)) + .guard(invert(inspErrGuard)) .action(saveRegistriesAfterInspectionAndContinueAction) .action(formingPaymentInstructionAssetsAction); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java index 7b4b6bf77..514a6a650 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/IntermediateMkrSessionStateMachineConfig.java @@ -36,6 +36,7 @@ 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.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; @@ -74,6 +75,7 @@ public class IntermediateMkrSessionStateMachineConfig private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( DataEnum.inspectionObligationStashedRgs ); + private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( @@ -210,12 +212,12 @@ public class IntermediateMkrSessionStateMachineConfig .withExternal() .source(TaskType.InspectionObligations) .target(TaskType.PSEUDO_waitAfterInspectionError) - .guard(oblAdmGuard) + .guard(inspErrGuard) .action(pauseWsAction) .and() .withExternal() .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .guard(invert(oblAdmGuard)) + .guard(invert(inspErrGuard)) .action(saveRegistriesAfterInspectionAndContinueAction) .action(formingPaymentInstructionAssetsAction); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java index da3e31dbc..d1381cd62 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PaymSessionStateMachineConfig.java @@ -33,6 +33,7 @@ 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.UpdateWorkflowStatusAction; +import ru.spcex.clearing.session.state.guard.ErroneousRegistriesPresentGuard; import ru.spcex.clearing.session.state.guard.StashedRegistriesPresentGuard; import ru.spcex.clearing.session.state.listener.MachineMonitoringListener; import static ru.spcex.clearing.util.StateMachineUtil.*; @@ -60,14 +61,16 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda private final SaveRegistriesAfterInspectionAndContinueAction saveRegistriesAfterInspectionAndContinueAction; private final DiscardRegistriesAction discardOblAdmStash = new DiscardRegistriesAction(DataEnum.obligationAdmissionStashedRgs); - private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( - DataEnum.obligationAdmissionStashedRgs - ); private final DiscardRegistriesAction discardInspOblStash = new DiscardRegistriesAction( DataEnum.inspectionObligationStashedRgs ); private final UpdateWorkflowStatusAction pauseWsAction; private final UpdateWorkflowStatusAction activeWsAction; + + private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( + DataEnum.obligationAdmissionStashedRgs + ); + private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.PAYM; private final Section SECTION = Section.CURR; @@ -195,12 +198,12 @@ public class PaymSessionStateMachineConfig extends EnumStateMachineConfigurerAda .withExternal() .source(TaskType.InspectionObligations) .target(TaskType.PSEUDO_waitAfterInspectionError) - .guard(oblAdmGuard) + .guard(inspErrGuard) .action(pauseWsAction) .and() .withExternal() .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .guard(invert(oblAdmGuard)) + .guard(invert(inspErrGuard)) .action(saveRegistriesAfterInspectionAndContinueAction) .action(formingPaymentInstructionAssetsAction); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java index 1e3d8d923..9b0778fbf 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionB0SessionStateMachineConfig.java @@ -37,6 +37,7 @@ 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.action.UpdateWorkflowStatusAction; +import ru.spcex.clearing.session.state.guard.ErroneousRegistriesPresentGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereCreatedListGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedListGuard; import ru.spcex.clearing.session.state.guard.SdfGuard; @@ -82,6 +83,7 @@ public class PrimaryAuctionB0SessionStateMachineConfig private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs ); + private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.IPO0; @@ -219,12 +221,12 @@ public class PrimaryAuctionB0SessionStateMachineConfig .withExternal() .source(TaskType.InspectionObligations) .target(TaskType.PSEUDO_waitAfterInspectionError) - .guard(oblAdmGuard) + .guard(inspErrGuard) .action(pauseWsAction) .and() .withExternal() .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .guard(invert(oblAdmGuard)) + .guard(invert(inspErrGuard)) .action(saveRegistriesAfterInspectionAndContinueAction) .action(formingPaymentInstructionSecuritiesAction); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java index 605569a23..f4e1092d5 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionBnSessionStateMachineConfig.java @@ -13,7 +13,6 @@ import org.springframework.statemachine.config.EnumStateMachineConfigurerAdapter import org.springframework.statemachine.config.builders.StateMachineConfigurationConfigurer; import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; -import org.springframework.statemachine.guard.Guard; import org.springframework.statemachine.listener.StateMachineListenerAdapter; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.Session; @@ -36,13 +35,15 @@ 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.action.UpdateWorkflowStatusAction; +import ru.spcex.clearing.session.state.guard.ErroneousRegistriesPresentGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereCreatedListGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedListGuard; 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.*; +import static ru.spcex.clearing.util.StateMachineUtil.chain; +import static ru.spcex.clearing.util.StateMachineUtil.invert; import ru.spcex.platform.classes.base.interfaces.ExecutionType; import ru.spcex.platform.enumeration.Section; import ru.spcex.platform.enumeration.SessionType; @@ -78,7 +79,7 @@ public class PrimaryAuctionBnSessionStateMachineConfig private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs ); - private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); + private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final SessionType SESSION_TYPE = SessionType.IPOB; private final Section SECTION = Section.FOND; @@ -206,12 +207,12 @@ public class PrimaryAuctionBnSessionStateMachineConfig .withExternal() .source(TaskType.InspectionObligations) .target(TaskType.PSEUDO_waitAfterInspectionError) - .guard(oblAdmGuard) + .guard(inspErrGuard) .action(pauseWsAction) .and() .withExternal() .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .guard(invert(oblAdmGuard)) + .guard(invert(inspErrGuard)) .action(saveRegistriesAfterInspectionAndContinueAction) .action(formingPaymentInstructionSecuritiesAction); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java index 2386a3d67..ab8968a5b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/PrimaryAuctionT0SessionStateMachineConfig.java @@ -37,6 +37,7 @@ 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.action.UpdateWorkflowStatusAction; +import ru.spcex.clearing.session.state.guard.ErroneousRegistriesPresentGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereCreatedListGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedListGuard; import ru.spcex.clearing.session.state.guard.SdfGuard; @@ -82,6 +83,7 @@ public class PrimaryAuctionT0SessionStateMachineConfig private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs ); + private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.IPOT; @@ -221,12 +223,12 @@ public class PrimaryAuctionT0SessionStateMachineConfig .withExternal() .source(TaskType.InspectionObligations) .target(TaskType.PSEUDO_waitAfterInspectionError) - .guard(oblAdmGuard) + .guard(inspErrGuard) .action(pauseWsAction) .and() .withExternal() .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .guard(invert(oblAdmGuard)) + .guard(invert(inspErrGuard)) .action(saveRegistriesAfterInspectionAndContinueAction) .action(formingPaymentInstructionSecuritiesAction); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java index a0c1906a8..05a1cdd60 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/ReturnDepositSessionStateMachineConfig.java @@ -32,6 +32,7 @@ import ru.spcex.clearing.session.state.action.SaveRegistriesAfterInspectionAndCo import ru.spcex.clearing.session.state.action.Sdf56Action; import ru.spcex.clearing.session.state.action.SdfReceivedAction; import ru.spcex.clearing.session.state.action.UpdateWorkflowStatusAction; +import ru.spcex.clearing.session.state.guard.ErroneousRegistriesPresentGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereCreatedListGuard; import ru.spcex.clearing.session.state.guard.PaymentsWereNotCreatedListGuard; import ru.spcex.clearing.session.state.guard.SdfGuardUtil; @@ -67,6 +68,7 @@ public class ReturnDepositSessionStateMachineConfig ); private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs); + private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final SessionType SESSION_TYPE = SessionType.XDEP; private final Section SECTION = Section.MKR; @@ -161,12 +163,12 @@ public class ReturnDepositSessionStateMachineConfig .withExternal() .source(TaskType.InspectionObligations) .target(TaskType.PSEUDO_waitAfterInspectionError) - .guard(oblAdmGuard) + .guard(inspErrGuard) .action(pauseWsAction) .and() .withExternal() .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .guard(invert(oblAdmGuard)) + .guard(invert(inspErrGuard)) .action(saveRegistriesAfterInspectionAndContinueAction) .action(formingPaymentInstructionDepositReturnAction); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java index 0e30d0c65..773bac383 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/SecondaryAuctionT0SessionStateMachineConfig.java @@ -37,6 +37,7 @@ 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.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; @@ -82,6 +83,7 @@ public class SecondaryAuctionT0SessionStateMachineConfig private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs ); + private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.TRDT; @@ -221,12 +223,12 @@ public class SecondaryAuctionT0SessionStateMachineConfig .withExternal() .source(TaskType.InspectionObligations) .target(TaskType.PSEUDO_waitAfterInspectionError) - .guard(oblAdmGuard) + .guard(inspErrGuard) .action(pauseWsAction) .and() .withExternal() .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .guard(invert(oblAdmGuard)) + .guard(invert(inspErrGuard)) .action(saveRegistriesAfterInspectionAndContinueAction) .action(formingPaymentInstructionAssetsAction); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java index 150bbaf6f..ca6fc78ab 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/state_machine_2/specific/UnitedSessionStateMachineConfig.java @@ -38,6 +38,7 @@ 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.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; @@ -86,6 +87,7 @@ public class UnitedSessionStateMachineConfig private final StashedRegistriesPresentGuard oblAdmGuard = new StashedRegistriesPresentGuard( DataEnum.obligationAdmissionStashedRgs ); + private final ErroneousRegistriesPresentGuard inspErrGuard = new ErroneousRegistriesPresentGuard(); private final Guard reviseSuccessGuard = guardCheckCtxForFlag(DataEnum.againReviseSuccess); private final SessionType SESSION_TYPE = SessionType.UNIT; private final Section SECTION = Section.MULT; @@ -234,12 +236,12 @@ public class UnitedSessionStateMachineConfig .withExternal() .source(TaskType.InspectionObligations) .target(TaskType.PSEUDO_waitAfterInspectionError) - .guard(oblAdmGuard) + .guard(inspErrGuard) .action(pauseWsAction) .and() .withExternal() .source(TaskType.InspectionObligations).target(TaskType.FormingPaymentInstruction) - .guard(invert(oblAdmGuard)) + .guard(invert(inspErrGuard)) .action(saveRegistriesAfterInspectionAndContinueAction) .action(formingPaymentInstructionAssetsAction); } 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 cc245cff3..dd70f4f46 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 @@ -60,6 +60,7 @@ public enum TaskType implements IEnumKey { PSEUDO_waitSdfAfterAgainRevise("PSEUDO_waitSdfAfterAgainRevise"), PSEUDO_waitAfterObligationAdmissionError("PSEUDO_waitAfterObligationAdmissionError"), PSEUDO_waitAfterInspectionError("PSEUDO_waitAfterInspectionError"), + PSEUDO_waitAfterInspectionDepositReturnError("PSEUDO_waitAfterInspectionDepositReturnError"), 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 f23a79b78..fe5d093ed 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 @@ -2,6 +2,7 @@ package ru.spcex.clearing.session.state.action; import java.math.BigDecimal; import java.time.Instant; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -31,6 +32,7 @@ import ru.spcex.clearing.session.stage.impl.GatewayRequester; 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.clearing.session.state.model.RgsErr; import ru.spcex.platform.enumeration.ClearingCategory; import ru.spcex.platform.enumeration.RegistryCapacity; import ru.spcex.platform.enumeration.RegistryDesignation; @@ -82,6 +84,7 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct Collection registriesToProcess = registryImdg.getCollectionObjectsBySQL(sqlCondition); Map rgssToStore = new HashMap<>(registriesToProcess.size()); //вторые ноги у сделок - нужна ли оптимизация? + List errs = new ArrayList<>(); List>> registriesByGroupSorted = registryImdg.getCollectionObjectsBySQL(sqlCondition) .stream() @@ -99,6 +102,7 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct if (omtInGroupO.isEmpty() || tmtInGroupO.isEmpty()) { log.error("groupId/market {}/{} failed to find OM*T/TM*T registry", entry.getKey().groupId(), entry.getKey().market()); group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(), rgssToStore)); // FAIL or MNG + group.forEach(rgs -> errs.add(new RgsErr(rgs, "Не удалось найти обязательства/требования в группе"))); //never continue; } Registry omtRgs = omtInGroupO.get(); @@ -129,6 +133,7 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct //для OM*T uncovered остальным фейл group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); updateRegistryStatus(dmx.get(), RegistryStatus.UNCV, rgssToStore); + errs.add(new RgsErr(dmx.get(), biErr(dmx.get()))); } continue; } @@ -139,12 +144,14 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct log.error("OM*T register.id={} groupId={}, market={} failed to find AM*F asset", omtRgs.getId(), entry.getKey().groupId(), entry.getKey().market()); group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(), rgssToStore)); // FAIL or MNG + errs.add(new RgsErr(omtRgs, biErr(omtRgs))); continue; } if (amfAssetReceiverO.isEmpty()) { log.error("TM*T register.id={} groupId={}, market={} failed to find AM*F asset", tmtRgs.getId(), entry.getKey().groupId(), entry.getKey().market()); group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(), rgssToStore)); // FAIL or MNG + errs.add(new RgsErr(tmtRgs, "Не удалось найти AM*F")); continue; } @@ -176,6 +183,7 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct continue; } else if (SessionType.XDEP.equals(sessionType)) { group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); // для финальной UNCV or FAIL ; другие MNG + errs.add(new RgsErr(omtRgs, biErr(omtRgs))); // updateStatus(dmtInfo.get(), RegistryStatus.UNCV); не меняет статус, статус определяется OM*T continue; } @@ -195,6 +203,7 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct continue; } else if (SessionType.XDEP.equals(sessionType)) { group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); + errs.add(new RgsErr(omtRgs, biErr(omtRgs))); // updateStatus(dmtClnr.get(), RegistryStatus.UNCV); не меняет статус, статус определяется OM*T continue; } @@ -213,13 +222,21 @@ public class InspectionObligationsDepositReturnAction extends AbstractSessionAct log.info("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. setting {} status to group", omtRgs.getId(), registryStatusFailed()); group.forEach(rgs -> updateRegistryStatus(rgs, registryStatusFailed(rgs), rgssToStore)); + errs.add(new RgsErr(omtRgs, biErr(omtRgs))); } } + + ctx.getExtendedState().getVariables().put(DataEnum.erroneousRegistries, errs); + ctx.getExtendedState().getVariables().put(DataEnum.inspectionObligationStashedRgs, rgssToStore); // registryImdg.putAll(rgssToStore, 200); // // planBalanceCalc.stageRevision2(sessionId); } + private static String biErr(Registry rgs) { + return "Недостаточно средств по инструменту " + rgs.getSecuritySymbol(); + } + private static boolean equalByRgs(RegistryTradingParams rgsParams, Registry rgs) { return rgsParams.equalByRegistry( IEnumKey.getEnumByKey(RegistryDesignation.class, rgs.getRegistryDesignation()), 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 df60f7d0a..7def16b29 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 @@ -39,6 +39,7 @@ import ru.spcex.clearing.session.stage.impl.PlanBalanceCalc; import ru.spcex.clearing.session.stage.util.RegistryUtil; import ru.spcex.clearing.session.state.DataEnum; import ru.spcex.clearing.session.state.SsnEvent; +import ru.spcex.clearing.session.state.model.RgsErr; import ru.spcex.platform.enumeration.RegistryDesignation; import ru.spcex.platform.enumeration.RegistryInstrumentType; import ru.spcex.platform.enumeration.RegistryStatus; @@ -110,6 +111,7 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr RegistryStatus.POOL.getKey()); Collection registriesToProcess = registryImdg.getCollectionObjectsBySQL(sqlCondition); + List errs = new ArrayList<>(); Map rgssToStore = new HashMap<>(registriesToProcess.size()); //вторые ноги у сделок - нужна ли оптимизация? List>> registriesByGroupSorted = registriesToProcess.stream() .collect(Collectors.groupingBy(registry -> new GroupRgsKey(registry.getGroupId(), registry.getMarket()))) @@ -161,6 +163,7 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr msgResolver.resolve(new EnumMessage(ClearingError.InsecurityObligation, obligation.getCompanyId()))); isUncovered = true; } + if (isUncovered) errs.add(new RgsErr(obligation, biErr(obligation))); checkResults.add(new CheckResult(obligation, isUncovered)); isUncovered = false; } @@ -169,8 +172,10 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr for (Registry rgs : group) { Runnable failGroup = () -> Stream.concat(group.stream(), getRefundDateRgsIfPresent(group).stream()) .forEach(registry -> { - registry.setComment(msgResolver.resolve(RgsError.A__tNotFound)); + String err = msgResolver.resolve(RgsError.A__tNotFound); + registry.setComment(err); updateRegistryStatus(registry, RegistryStatus.FAIL, rgssToStore); + errs.add(new RgsErr(registry, err)); }); RegistryInstrumentType mOrS = IEnumKey.getEnumByKey(RegistryInstrumentType.class, rgs.getRegistryInstrumentType()); if (mOrS == null) { @@ -205,7 +210,10 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr checkResults.stream() .filter(chk -> chk.registry().getId().equals(omt.get().getId())) .findFirst() - .ifPresent(chk -> chk.isUncovered = true); + .ifPresent(chk -> { + chk.isUncovered = true; + errs.add(new RgsErr(omt.get(), biErr(omt.get()))); + }); } } defineStatusAndUpdateRegistry(checkResults, group, rgssToStore); @@ -267,9 +275,13 @@ public class InspectionObligationsV2Action extends AbstractSessionActionForOkErr } } } + ctx.getExtendedState().getVariables().put(DataEnum.erroneousRegistries, errs); ctx.getExtendedState().getVariables().put(DataEnum.inspectionObligationStashedRgs, rgssToStore); } + private static String biErr(Registry rgs) { + return "Недостаточно средств по инструменту " + rgs.getSecuritySymbol(); + } private Registry copyF(Registry rgs) { Registry rgsF = rgs.clone(); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/PauseWorkflowStatusWithNotificationAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/PauseWorkflowStatusWithNotificationAction.java index 1240636e9..ec64fbca1 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/PauseWorkflowStatusWithNotificationAction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/PauseWorkflowStatusWithNotificationAction.java @@ -48,7 +48,7 @@ public class PauseWorkflowStatusWithNotificationAction extends UpdateWorkflowSta case PSEUDO_waitAfterObligationAdmissionError -> { return "Ряд обязательств не допущены к клирингу!!!\r\n"; } - case PSEUDO_waitAfterInspectionError -> { + case PSEUDO_waitAfterInspectionError, PSEUDO_waitAfterInspectionDepositReturnError -> { return "Ряд обязательств подлежит исключению из клирингового пула!!!\r\n"; } default -> { 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 index 1699647c3..d13ae278a 100644 --- 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 @@ -39,6 +39,7 @@ public class SaveRegistriesAfterInspectionAndContinueAction extends AbstractSess Long sessionId = ctx.getExtendedState().get(DataEnum.sessionId, Long.class); registryImdg.putAll(rgss, 200); planBalanceCalc.stageRevision2(sessionId); + ctx.getExtendedState().getVariables().remove(dataEnum); } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAndContinueAction.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAndContinueAction.java index eeb33096a..14f5bf810 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAndContinueAction.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/action/SaveRegistriesAndContinueAction.java @@ -37,5 +37,6 @@ public class SaveRegistriesAndContinueAction extends AbstractSessionActionForOkE @SuppressWarnings("unchecked") Map rgss = ctx.getExtendedState().get(dataEnum, Map.class); registryImdg.putAll(rgss, 200); + ctx.getExtendedState().getVariables().remove(dataEnum); } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/ErroneousRegistriesPresentGuard.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/ErroneousRegistriesPresentGuard.java new file mode 100644 index 000000000..42461f906 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/state/guard/ErroneousRegistriesPresentGuard.java @@ -0,0 +1,19 @@ +package ru.spcex.clearing.session.state.guard; + +import java.util.Collection; +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; + +public class ErroneousRegistriesPresentGuard implements Guard { + + public ErroneousRegistriesPresentGuard() {} + + @Override + public boolean evaluate(StateContext ctx) { + Collection rgss = ctx.getExtendedState().get(DataEnum.erroneousRegistries, Collection.class); + return rgss != null && !rgss.isEmpty(); + } +} \ No newline at end of file