From 1d4d831ea777bc81c5b53e1816b507bd06f7fcdc Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 20 Nov 2023 13:07:52 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-590 --- .../session/stage/FinalMkrSession.java | 1 + .../session/stage/IntermediateMkrSession.java | 1 + .../stage/PrimaryAuctionB0Session.java | 1 + .../stage/PrimaryAuctionBnSession.java | 1 + .../stage/PrimaryAuctionT0Session.java | 1 + .../session/stage/ReturnDepositSession.java | 1 + .../stage/SecondaryAuctionT0Session.java | 1 + .../session/stage/impl/FinishingSession.java | 48 +++++++++---------- 8 files changed, 31 insertions(+), 24 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java index 7323b0eff..cd7f7e05f 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/FinalMkrSession.java @@ -112,6 +112,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean inspectionObligations.setSection(section()); formingPaymentInstructionDeals.setSection(section()); formingPaymentInstructionDeals.setSessionType(sessionType()); + finishingSession.setSessionType(sessionType()); imdgProvider.waitAvailable(); initSessionIfPresent(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/IntermediateMkrSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/IntermediateMkrSession.java index 2aad817aa..c376df3eb 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/IntermediateMkrSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/IntermediateMkrSession.java @@ -106,6 +106,7 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ inspectionObligations.setSection(section()); formingPaymentInstructionDeals.setSection(section()); formingPaymentInstructionDeals.setSessionType(sessionType()); + finishingSession.setSessionType(sessionType()); imdgProvider.waitAvailable(); initSessionIfPresent(); } 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 94b627840..fe13068f7 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 @@ -98,6 +98,7 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali inclusionObligations.setSessionType(sessionType()); inspectionObligations.setSection(section()); finishingSession.setSection(section()); + finishingSession.setSessionType(sessionType()); imdgProvider.waitAvailable(); initSessionIfPresent(); } 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 833d337eb..58acc7656 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 @@ -99,6 +99,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali inclusionObligations.setSessionType(sessionType()); inspectionObligations.setSection(section()); finishingSession.setSection(section()); + finishingSession.setSessionType(sessionType()); imdgProvider.waitAvailable(); initSessionIfPresent(); } 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 3fa6566d1..2cb7e5e4c 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 @@ -99,6 +99,7 @@ public class PrimaryAuctionT0Session extends AbstractSession implements Initiali inclusionObligations.setSessionType(sessionType()); inspectionObligations.setSection(section()); finishingSession.setSection(section()); + finishingSession.setSessionType(sessionType()); imdgProvider.waitAvailable(); initSessionIfPresent(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/ReturnDepositSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/ReturnDepositSession.java index 227555640..28118a16b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/ReturnDepositSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/ReturnDepositSession.java @@ -90,6 +90,7 @@ public class ReturnDepositSession extends AbstractSession implements Initializin rgsPrctBuilder.less("valueDate", LocalDate.now()) ) ); + finishingSession.setSessionType(sessionType()); imdgProvider.waitAvailable(); initSessionIfPresent(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java index c41448168..29bb87216 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/SecondaryAuctionT0Session.java @@ -93,6 +93,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia inclusionObligations.setSessionType(sessionType()); inspectionObligations.setSection(section()); finishingSession.setSection(section()); + finishingSession.setSessionType(sessionType()); imdgProvider.waitAvailable(); initSessionIfPresent(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java index cd6176096..93d33960a 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/FinishingSession.java @@ -35,10 +35,12 @@ import ru.spcex.platform.utils.enumeration.IMessageResolver; import java.time.Instant; import java.time.LocalDate; -import java.util.*; +import java.util.Collection; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError; import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; @@ -58,6 +60,7 @@ public class FinishingSession implements ISessionStage { private final IMessageResolver msgResolver; private final Sdf05Sender sdf05Sender; private final Sdf14Sender sdf14Sender; + private SessionType sessionType; private Section section; @Autowired @@ -77,6 +80,9 @@ public class FinishingSession implements ISessionStage { public void setSection(Section section) { this.section = section; } + public void setSessionType(SessionType sessionType) { + this.sessionType = sessionType; + } @Override public StageResult submit(Task task) { @@ -109,7 +115,6 @@ public class FinishingSession implements ISessionStage { log.error("Session id={} not found. Can not update Execution's.", sessionId); } else { Collection oRegs = findORegistryBySessionId(sessionId); - log.trace("found {} obligation registers by sessionId {}", oRegs.size(), sessionId); Map obligationStatusByGroupId; obligationStatusByGroupId = oRegs.stream() .map(rgs -> new Pair<>(rgs.getGroupId(), getEnumByKey(RegistryStatus.class, rgs.getRegistryStatus()))) @@ -159,10 +164,7 @@ public class FinishingSession implements ISessionStage { notAllowed, executions.size() - (allowed + notAllowed)); } else if (IEnumKey.contains(session.getSessionType(), SessionType.TRDT, SessionType.IPOB, SessionType.IPO0, SessionType.IPOT)) { - List executions = Stream.concat( - findExecutionFondBySessionId(sessionId).stream(), - findExecutionFondByExchangeId(exchangeExecutionIdsPreviousDay).stream()) - .toList(); + Collection executions = findExecutionFondBySessionId(sessionId); log.trace("loaded {} ExecutionFonds for sessionId {}", executions.size(), sessionId); for (ExecutionFond execution : executions) { CoverageStatus toStatus = statusByExchangeId.apply(execution.getExchangeExecutionId()); @@ -201,7 +203,7 @@ public class FinishingSession implements ISessionStage { return sResult; } for (Registry registryA : forRegistries) { - if (!RegistryDesignation.A.equalsByKey(registryA.getRegistryUnit())) { + if (!RegistryDesignation.A.equalsByKey(registryA.getRegistryUnit())) { //fixme Unit -> Designation log.warn("For registry {}.RegistryDesignation is not A.", registryA.getId()); continue; } @@ -285,40 +287,38 @@ public class FinishingSession implements ISessionStage { // registryStatus - любой статус pb.equals("registryDesignation", RegistryDesignation.O.getKey())); Collection result = registryImdg.getCollectionObjectsByPredicate(prdct); - log.trace("found {} liabilities by query {} ", result.size(), prdct); + int size = result.size(); result = result.stream() .filter(registry -> Objects.equals(registry.getSettlementDate(), LocalDate.now())) .filter(registry -> Objects.equals(registry.getValueDate(), registry.getSettlementDate())) .collect(Collectors.toList()); - log.debug("found {} liabilities 'O' by query {} and ValueDate==SettlementDate", result.size(), prdct); + log.debug("found {} liabilities by query {} and {} liabilities after filtering ValueDate==SettlementDate", + size, result.size(), prdct); return result; } protected Collection findExecutionFondBySessionId(Long sessionId) { ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); - ImdgPredicate prdct = pb.and( + ImdgPredicate prdct = pb.or( pb.equals("sessionId", sessionId), pb.equals("settlementDate", LocalDate.now()) ); - Collection result = executionFondImdg.getCollectionObjectsByPredicate(prdct); + Collection result = executionFondImdg.getCollectionObjectsByPredicate(prdct) + .stream() + .filter(eFond -> Objects.nonNull(eFond.getSessionId())) + .filter(eFond -> { + if (sessionId.equals(eFond.getSessionId())) return true; + Session session = sessionImdg.getSingleObjectByID(eFond.getSessionId()); + return sessionType.equalsByKey(session.getSessionType()); + }) + .toList(); log.trace("found {} ExecutionFond by sessionId={}", result.size(), sessionId); return result; } - protected Collection findExecutionFondByExchangeId(Set exchangeIds) { - ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); - ImdgPredicate prdct = pb.and( - pb.in("exchangeExecutionId", exchangeIds.toArray(new Long[0])), - pb.not(pb.equals("settlementDate", LocalDate.now())) - ); - Collection result = executionFondImdg.getCollectionObjectsByPredicate(prdct); - log.trace("found {} ExecutionFond from first day", result.size()); - return result; - } - protected Collection findExecutionDepositBySessionId(Long sessionId) { ImdgPredicateBuilder pb = executionDepositImdg.predicateBuilder(); - ImdgPredicate prdct = pb.and( + ImdgPredicate prdct = pb.or( pb.equals("sessionId", sessionId), pb.equals("firstLegSettlementDate", LocalDate.now()) );