From c6b644d1180579217ff8c924f95162fc1d823250 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 24 Jun 2025 11:13:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D0=B5=20=D0=BD=D0=B0=20mar?= =?UTF-8?q?ket=20=D0=BD=D0=B0=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=BA=D1=83?= =?UTF-8?q?=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../session/stage/impl/InspectionObligations.java | 14 ++++++++++---- .../stage/impl/InspectionObligationsV2.java | 15 ++++++++++----- .../impl/RequirementsAndObligationCreation.java | 12 ++++++++---- 3 files changed, 28 insertions(+), 13 deletions(-) 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 f4b1d26a2..88b5953fc 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 @@ -17,7 +17,9 @@ 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 org.springframework.util.StringUtils; import ru.clearing.classes.statics.data.registry.Registry; +import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.error.RgsError; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -348,8 +350,8 @@ public class InspectionObligations implements ISessionStage { private Collection getRefundDateRgsIfPresent(List registries) { if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null) && !SessionType.MEDM.equals(sessionType)) { - Optional> groupIdAndSettleDate = registries.stream() - .map(rgs -> new Pair<>(rgs.getGroupId(), rgs.getSettlementDate())) + Optional> groupIdAndSettleDate = registries.stream() + .map(rgs -> new Pair<>(new GroupRgsKey(rgs.getGroupId(),rgs.getMarket()), rgs.getSettlementDate())) .filter(pair -> pair.getFirst() != null) .filter(pair -> pair.getSecond() != null) .findFirst(); @@ -359,8 +361,12 @@ public class InspectionObligations implements ISessionStage { ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); return registryImdg.getCollectionObjectsByPredicate( pb.and( - pb.equals("groupId", groupIdAndSettleDate.get().getFirst()), - pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) + pb.and( + pb.equals("groupId", groupIdAndSettleDate.get().getFirst().groupId()), + StringUtils.hasText(groupIdAndSettleDate.get().getFirst().market()) ? + pb.equals("market", groupIdAndSettleDate.get().getFirst().market()) : pb.alwaysTrue() + ), + pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) ) ); } else return Collections.emptyList(); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java index 34fc51e3b..73ba32bb0 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligationsV2.java @@ -18,6 +18,7 @@ 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 org.springframework.util.StringUtils; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.component.GroupRgsKey; import ru.spcex.clearing.component.predicate.cash.registry.AssetByTcrCompanyAccountCashedPredicate; @@ -347,8 +348,8 @@ public class InspectionObligationsV2 implements ISessionStage { private Collection getRefundDateRgsIfPresent(List registries) { if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null) && !SessionType.MEDM.equals(sessionType)) { //доп группировка по market не нужна, лист registries уже сгруппирован - Optional> groupIdAndSettleDate = registries.stream() - .map(rgs -> new Pair<>(rgs.getGroupId(), rgs.getSettlementDate())) + Optional> groupIdAndSettleDate = registries.stream() + .map(rgs -> new Pair<>(new GroupRgsKey(rgs.getGroupId(),rgs.getMarket()), rgs.getSettlementDate())) .filter(pair -> pair.getFirst() != null) .filter(pair -> pair.getSecond() != null) .findFirst(); @@ -357,10 +358,14 @@ public class InspectionObligationsV2 implements ISessionStage { } ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); return registryImdg.getCollectionObjectsByPredicate( + pb.and( pb.and( - pb.equals("groupId", groupIdAndSettleDate.get().getFirst()), - pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) - ) + pb.equals("groupId", groupIdAndSettleDate.get().getFirst().groupId()), + StringUtils.hasText(groupIdAndSettleDate.get().getFirst().market()) ? + pb.equals("market", groupIdAndSettleDate.get().getFirst().market()) : pb.alwaysTrue() + ), + pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond())) + ) ); } else return Collections.emptyList(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java index 2aa2cd40f..48bd186c6 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java @@ -15,6 +15,7 @@ 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 org.springframework.util.StringUtils; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.ClearingAccount; import ru.clearing.classes.statics.data.account.DepoAccount; @@ -363,7 +364,8 @@ public class RequirementsAndObligationCreation implements ISessionStage { exec.getCompanyId(), settlementDt(exec), exec.getSessionId(), - exec.getExchangeExecutionId() + exec.getExchangeExecutionId(), + exec.getMarket() ); } @@ -396,11 +398,12 @@ public class RequirementsAndObligationCreation implements ISessionStage { exec.getCompanyId(), ((ExecutionDeposit) exec).getSecondLegSettlementDate(), exec.getSessionId(), - exec.getExchangeExecutionId()); + exec.getExchangeExecutionId(), + exec.getMarket()); } public Optional imdgRegSearch(RegistryTradingParams p, Long tcrId, Long companyId, LocalDate settlementDt, - Long sessionId, Long exchangeExecutionId) { + Long sessionId, Long exchangeExecutionId, String market) { String sql = RegistryCodeSqlBuilder.getInstance(p).build(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); ImdgPredicate rgstrPredicate = pb.and(pb.sql(sql), @@ -408,7 +411,8 @@ public class RequirementsAndObligationCreation implements ISessionStage { pb.equals("companyId", companyId), pb.equals("settlementDate", settlementDt), pb.equals("sessionId", sessionId), - pb.equals("groupId", exchangeExecutionId) + pb.equals("groupId", exchangeExecutionId), + StringUtils.hasText(market) ? pb.equals("market", market) : pb.alwaysTrue() ); Registry rgs = registryImdg.getSingleObjectByPredicate(rgstrPredicate); log.trace("rgs.id={} found by: {}", rgs == null ? "'not found'" : rgs.getId(), rgstrPredicate.toString());