From c6a7ab20c19737da11d14865c0bfd1ce49f88a84 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Mon, 29 May 2023 14:07:48 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-290 --- .../session/stage/AbstractSession.java | 4 +- .../stage/PrimaryAuctionB0Session.java | 1 + .../stage/PrimaryAuctionBnSession.java | 1 + .../stage/PrimaryAuctionT0Session.java | 1 + .../session/stage/SessionManager.java | 47 +++++++++++++++++++ .../stage/impl/InclusionObligations.java | 7 ++- 6 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SessionManager.java diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java index 0ab74d8e1..db16d4dd4 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/AbstractSession.java @@ -4,13 +4,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.clearing.classes.statics.data.misc.Session; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; import java.util.concurrent.atomic.AtomicReference; -public class AbstractSession { +public abstract class AbstractSession { private final Logger log = LoggerFactory.getLogger(getClass()); protected final Imdg sessionImdg; @@ -46,6 +47,7 @@ public class AbstractSession { return (StageResult) stgRes; } + protected abstract void runSession(BaseRequest req); protected void endSession() { synchronized (this.currStage) { this.currStage.set(null); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java index 758bac3ae..2efa5f36e 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionB0Session.java @@ -73,6 +73,7 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali dealsPrepare.addExecutionFondCondition(execFondPb.equals("marketType", MarketType.PRMR.getKey())); } + @Override public void runSession(BaseRequest req) { if (!startSession()) { return; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java index 2461ee207..056272ba2 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java @@ -86,6 +86,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0]))); } + @Override public void runSession(BaseRequest req) { if (!startSession()) { return; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java index 3289b5ba0..252cea890 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionT0Session.java @@ -73,6 +73,7 @@ public class PrimaryAuctionT0Session extends AbstractSession implements Initiali dealsPrepare.addExecutionFondCondition(execFondPb.equals("marketType", MarketType.PRMR.getKey())); } + @Override public void runSession(BaseRequest req) { if (!startSession()) { return; diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SessionManager.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SessionManager.java new file mode 100644 index 000000000..ae34ca9c8 --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SessionManager.java @@ -0,0 +1,47 @@ +package ru.spcex.clearing.session.stage; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; +import ru.spcex.platform.enumeration.Section; +import ru.spcex.platform.enumeration.SessionType; +import ru.spcex.platform.utils.enumeration.IEnumKey; + +@Service +public class SessionManager { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final PrimaryAuctionT0Session primaryAuctionT0Session; + private final PrimaryAuctionBnSession primaryAuctionBnSession; + private final PrimaryAuctionB0Session primaryAuctionB0Session; + + public SessionManager(PrimaryAuctionT0Session primaryAuctionT0Session, + PrimaryAuctionBnSession primaryAuctionBnSession, + PrimaryAuctionB0Session primaryAuctionB0Session) { + this.primaryAuctionT0Session = primaryAuctionT0Session; + this.primaryAuctionBnSession = primaryAuctionBnSession; + this.primaryAuctionB0Session = primaryAuctionB0Session; + } + + public void defineAndStartSession(LauncherCommandRequest commandRequest) { + Long sessionId = commandRequest.getSessionId(); + SessionType sessionType = IEnumKey.getEnumByKey(SessionType.class, commandRequest.getSessionType()); + Section section = IEnumKey.getEnumByKey(Section.class, commandRequest.getSection()); + if (sessionType == null || section == null) { + log.warn("Unknown sessionType: {} or section: {}", section, sessionType); + return; + } + BaseRequest baseRequest = new BaseRequest<>(); + AbstractSession session = null; + switch (sessionType){ + case IPOB : session = primaryAuctionBnSession; + case IPOT : session = primaryAuctionT0Session; + case IPO0 : session = primaryAuctionBnSession; + } + + if (session != null) { + session.runSession(baseRequest); + } + } +} 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 01e0f7d6c..901c1fb15 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 @@ -60,17 +60,16 @@ public class InclusionObligations implements ISessionStage { "registryInstrumentType in ('%s', '%s') and " + "registryUnit = '%s' and " + "registryStatus = '%s' and " + - "settlementDate = '%s' and " + "sessionType = '%s'", "O", "T", "S", "M", "T", "PROC", - LocalDate.now(), sessionType); Collection obligations = registryImdg.getCollectionObjectsBySQL(sqlCondition); - Map> registryByGroupId = obligations.stream(). - collect(Collectors.groupingBy(Registry::getGroupId)); + Map> registryByGroupId = obligations.stream() + .filter(registry -> registry.getSettlementDate().isEqual(LocalDate.now())) + .collect(Collectors.groupingBy(Registry::getGroupId)); for (Map.Entry> entrySet : registryByGroupId.entrySet()) { log.debug("Processing set of registry with groupId: {}", entrySet.getKey());