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)); }