From f905772251387c27138a04cd9870398115a8c342 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 4 Oct 2023 19:16:04 +0300 Subject: [PATCH] execution fond status denied --- .../session/stage/impl/FinishingSession.java | 45 ++++++++++++++----- .../builders/ks/KSRepTradesReportBuilder.java | 2 +- .../services/ReportServiceTest_KS.java | 2 +- .../platform/enumeration/CoverageStatus.java | 2 +- 4 files changed, 36 insertions(+), 15 deletions(-) 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 d6ab2b6df..c34d454a3 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 @@ -6,7 +6,6 @@ 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; @@ -34,11 +33,10 @@ import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IMessageResolver; import java.time.Instant; -import java.util.Collection; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.time.LocalDate; +import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError; @@ -112,14 +110,20 @@ public class FinishingSession implements ISessionStage { .filter(rgs -> RegistryStatus.CLRD.equalsByKey(rgs.getRegistryStatus())) .map(Registry::getGroupId) // Registry::getGroupId == Execution.ExchangeExecutionId, см. RegistryFondBuilder/RegistryDepoBuilder .collect(Collectors.toSet()); + Set exchangeExecutionIdsPreviousDay = oRegs.stream() + .filter(rgs -> Objects.nonNull(rgs.getSettlementDate())) + .filter(rgs -> Objects.nonNull(rgs.getTradingDate())) + .filter(rgs -> rgs.getSettlementDate().compareTo(rgs.getTradingDate()) > 0) + .map(Registry::getGroupId) + .collect(Collectors.toSet()); if (IEnumKey.contains(session.getSessionType(), SessionType.FINL, SessionType.MEDM)) { Collection executions = findExecutionDepositBySessionId(sessionId); int notAllowed = 0; for (ExecutionDeposit execution : executions) { CoverageStatus toStatus = exchangeExecutionIdAllowed.contains(execution.getExchangeExecutionId()) ? - CoverageStatus.ALWD : CoverageStatus.DNED; - if (toStatus == CoverageStatus.DNED) + CoverageStatus.ALWD : CoverageStatus.DEND; + if (toStatus == CoverageStatus.DEND) notAllowed++; execution.setCoverageStatus(toStatus.getKey()); execution.setUpdated(Instant.now()); @@ -128,12 +132,15 @@ public class FinishingSession implements ISessionStage { log.trace("By sessionId={} update {} ExecutionDeposit: {} allowed, {} denied", sessionId, executions.size(), exchangeExecutionIdAllowed.size(), notAllowed); } else if (IEnumKey.contains(session.getSessionType(), SessionType.TRDT, SessionType.IPOB, SessionType.IPO0, SessionType.IPOT)) { - Collection executions = findExecutionFondBySessionId(sessionId); + List executions = Stream.concat( + findExecutionFondBySessionId(sessionId).stream(), + findExecutionFondBySessionId(exchangeExecutionIdsPreviousDay).stream()) + .toList(); int notAllowed = 0; for (ExecutionFond execution : executions) { CoverageStatus toStatus = exchangeExecutionIdAllowed.contains(execution.getExchangeExecutionId()) ? - CoverageStatus.ALWD : CoverageStatus.DNED; - if (toStatus == CoverageStatus.DNED) + CoverageStatus.ALWD : CoverageStatus.DEND; + if (toStatus == CoverageStatus.DEND) notAllowed++; execution.setCoverageStatus(toStatus.getKey()); execution.setUpdated(Instant.now()); @@ -242,18 +249,32 @@ public class FinishingSession implements ISessionStage { Collection result = registryImdg.getCollectionObjectsByPredicate(prdct); log.trace("found {} liabilities by query {} ", result.size(), prdct); result = result.stream() + .filter(registry -> Objects.equals(registry.getSettlementDate(), LocalDate.now())) .filter(registry -> Objects.equals(registry.getValueDate(), registry.getSettlementDate())) - .collect(Collectors.toList()); + .collect(Collectors.toList()); log.debug("found {} liabilities 'O' by query {} and ValueDate==SettlementDate", result.size(), prdct); return result; } protected Collection findExecutionFondBySessionId(Long sessionId) { - Collection result = executionFondImdg.getCollectionObjectsByFieldValues(Map.of("sessionId", sessionId)); + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + ImdgPredicate prdct = pb.and( + pb.equals("sessionId", sessionId), + pb.equals("settlementDate", LocalDate.now()) + ); + Collection result = executionFondImdg.getCollectionObjectsByPredicate(prdct); log.trace("found {} ExecutionFond by sessionId={}", result.size(), sessionId); return result; } + protected Collection findExecutionFondBySessionId(Set exchangeIds) { + ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder(); + ImdgPredicate prdct = pb.in("exchangeExecutionId", exchangeIds.toArray(new Long[0])); + Collection result = executionFondImdg.getCollectionObjectsByPredicate(prdct); + log.trace("found {} ExecutionFond from first day", result.size()); + return result; + } + protected Collection findExecutionDepositBySessionId(Long sessionId) { Collection result = executionDepositImdg.getCollectionObjectsByFieldValues(Map.of("sessionId", sessionId)); log.trace("found {} ExecutionDeposit by sessionId={}", result.size(), sessionId); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java index 15dc49eac..3841b8b22 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java @@ -175,7 +175,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder