From 624f0dfd296a0bf128d1641e78e24ad8f8323dae Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 30 Jan 2024 17:52:54 +0300 Subject: [PATCH] sessionId for executions --- .../stage/impl/InclusionObligations.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java index d2bcadb50..fdc9be3a4 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InclusionObligations.java @@ -6,6 +6,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.execution.ExecutionCommon; +import ru.clearing.classes.statics.data.execution.ExecutionDeposit; +import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -22,6 +25,7 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.utils.enumeration.IEnumKey; +import java.time.Instant; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -36,6 +40,8 @@ public class InclusionObligations implements ISessionStage { private ImdgId idGenerator; private Imdg registryImdg; private Imdg sessionImdg; + private final Imdg executionDepositImdg; + private final Imdg executionFondImdg; private KafkaSender kafkaSender; private final List registryConditions = new ArrayList<>(); private SessionType sessionType; @@ -47,6 +53,8 @@ public class InclusionObligations implements ISessionStage { this.idGenerator = imdgProvider.getImdgIdGenerator(); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class); + this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); + this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); this.rgsPb = registryImdg.predicateBuilder(); } @@ -114,12 +122,42 @@ public class InclusionObligations implements ISessionStage { registry.setSessionId(sessionId); obtainSessionType(sessionId).ifPresent(st -> registry.setSessionType(st.getKey())); registryImdg.update(registry); + updateExecutions(sessionId, entrySet.getKey()); } } return new StageResult(null, true); } + @SuppressWarnings("unchecked") + private void updateExecutions(Long sessionId, Long rgsGroupId) { + Instant now = Instant.now(); + SessionType ssnTpe = obtainSessionType(sessionId).orElse(null); + if (ssnTpe == null || sessionId == null) { + log.debug("will not update executions#sessionId - couldn't determine session type"); + return; + } + Imdg execImdg; + switch (ssnTpe) { + case MEDM, FINL, XDEP -> execImdg = (Imdg) executionDepositImdg; + case IPO0, IPOB, TRDT, IPOT -> execImdg = (Imdg) executionFondImdg; + default -> execImdg = null; + } + if (execImdg == null) { + log.warn("couldn't define Execution Type for session {}. Will not update executions#sessionId", + sessionType); + return; + } + ImdgPredicateBuilder pb = execImdg.predicateBuilder(); + ImdgPredicate prdct = pb.equals("exchangeExecutionId", rgsGroupId); + Collection execs = execImdg.getCollectionObjectsByPredicate(prdct); + execs.forEach(e -> { + e.setUpdated(now); + e.setSessionId(sessionId); + execImdg.update(e); + }); + } + private Optional obtainSessionType(Long sessionId) { if (this.sessionType != null) { return Optional.of(this.sessionType);