From 41c414497d2ecd6c4e05b652879c2e4b300e6951 Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 6 Jun 2023 12:54:56 +0300 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B8=D1=82=D0=BE=D0=B3=D0=BE=D0=B2=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=9C=D0=9A=D0=A0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D1=83=20=D0=BE=D0=B1=D1=8F=D0=B7=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D1=81=D1=82=D0=B2=20=D0=BF=D0=BE=20=D0=B1=D1=83=D0=BC?= =?UTF-8?q?=D0=B0=D0=B3=D0=B0=D0=BC=20=D0=B2=20=D1=88=D0=B0=D0=B3=D0=B5=20?= =?UTF-8?q?5=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BE=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D1=83=D1=81=D0=BE=D0=B2=20=D1=80=D0=B5=D0=B3=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=BE=D0=B2=20=D0=B2=20FAIL=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=B2=D1=82=D0=BE=D1=80=D0=BE=D0=BC=D1=83=20=D0=B4=D0=BD?= =?UTF-8?q?=D1=8E=20=D0=B2=20=D1=88=D0=B0=D0=B3=D0=B5=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../session/stage/FinalMkrSession.java | 1 + .../stage/impl/InspectionObligations.java | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) 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 a63815c1d..e6f066121 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 @@ -80,6 +80,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean @Override public void afterPropertiesSet() throws Exception { dealsPrepare.searchForExecutions(ExecutionType.ExecutionDeposit); + inspectionObligations.setSessionType(sectionType()); } @Override diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java index 02914f8f3..8bef42c94 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java @@ -13,13 +13,16 @@ import ru.spcex.clearing.session.stage.Task; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; +import ru.spcex.platform.utils.collection.Pair; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; import java.time.Instant; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -30,6 +33,7 @@ public class InspectionObligations implements ISessionStage { private ImdgProvider imdgProvider; private Imdg registryImdg; private final IMessageResolver msgResolver = new SimpleMessageResolver(); + private SessionType sessionType; private final static RegistryTradingParams OS_T; private final static RegistryTradingParams OM_T; @@ -65,6 +69,10 @@ public class InspectionObligations implements ISessionStage { this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); } + public void setSessionType(SessionType sessionType) { + this.sessionType = sessionType; + } + @Override public StageResult submit(Task task) { switch (task.getTaskType()) { @@ -95,6 +103,10 @@ public class InspectionObligations implements ISessionStage { boolean isUncovered = false; List checkResults = new ArrayList<>(); for (Registry obligation : obligationsInGroup) { + if (SessionType.FINL.equals(sessionType) && RegistryInstrumentType.S.equalsByKey(obligation.getRegistryInstrumentType())) { + checkResults.add(new CheckResult(obligation, false)); + continue; + } String sqlAssetRegistryCondition = searchAssetsByObligationSql(obligation); log.debug("search asset by registry.id={} sql {}", sqlAssetRegistryCondition, obligation.getId()); Registry asset = registryImdg.getSingleObjectBySQL(sqlAssetRegistryCondition); @@ -154,6 +166,24 @@ public class InspectionObligations implements ISessionStage { tRegistryWithSameCompany.ifPresent(registry -> updateRegistryStatus(registry, RegistryStatus.FAIL)); } } + //проверяем есть ли второй день для сделки (он не входит в пул, поэтому ищем отдельно) + if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null)) { + Optional> groupIdAndSettleDate = registries.stream() + .map(rgs -> new Pair<>(rgs.getGroupId(), rgs.getSettlementDate())) + .filter(pair -> pair.getFirst() != null) + .filter(pair -> pair.getSecond() != null) + .findFirst(); + if (groupIdAndSettleDate.isEmpty()) + return; + ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + Collection refundRgs = registryImdg.getCollectionObjectsByPredicate( + pb.and( + pb.equals("groupId", groupIdAndSettleDate.get().getFirst()), + pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) + ) + ); + refundRgs.forEach(rgs -> updateRegistryStatus(rgs, RegistryStatus.FAIL)); + } } else { registries.forEach(registry -> updateRegistryStatus(registry, RegistryStatus.OK)); }