From 502a343c556659f91b724137afa3fc2eb8385e19 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 8 Feb 2023 10:58:26 +0300 Subject: [PATCH] =?UTF-8?q?clearing-service=20http://jira.mfd.msk:8088/bro?= =?UTF-8?q?wse/CLS-188=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20ExecutionD?= =?UTF-8?q?epositComponent=20=D0=B4=D0=BB=D1=8F=20http://jira.mfd.msk:8088?= =?UTF-8?q?/browse/CLS-189=20-=20=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D1=81=D1=8C=20S=5FTRADE=20=D0=B1=D1=8B=D0=B2=D0=B0=D1=8E?= =?UTF-8?q?=D1=82=20=D1=81=20=D0=BE=D0=B4=D0=B8=D0=BD=D0=B0=D0=BA=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D0=BC=D0=B8=20tradeNum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ExecutionDepositComponent.java | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionDepositComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionDepositComponent.java index a97c97046..80e8e1bcc 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionDepositComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/ExecutionDepositComponent.java @@ -99,9 +99,12 @@ public class ExecutionDepositComponent { public void processNewTS() { log.debug("Start check new S_TRADE after {}", tradingDay); - ImdgPredicateBuilder pb = sTradeImdg.predicateBuilder(); - ImdgPredicate sql = pb.greatEqual("tradeDateTime", tradingDay); - Collection sTrades = sTradeImdg.getCollectionObjectsByPredicate(sql); + Collection sTrades; + { + ImdgPredicateBuilder pb = sTradeImdg.predicateBuilder(); + ImdgPredicate sql = pb.greatEqual("tradeDateTime", tradingDay); + sTrades = sTradeImdg.getCollectionObjectsByPredicate(sql); + } log.info("Found {} new s_trade with trade_num>{}", sTrades.size(), tradeNum); if (sTrades.isEmpty()) { @@ -130,15 +133,31 @@ public class ExecutionDepositComponent { } } + // Необходимо проверять отсутствие ExecutionDeposit с exchangeExecutionId и clearingDate. + // Но при этом, во время создания новых ExecutionDeposit по STrade, TradeNum могут повторяться. LocalDate today = LocalDate.now(); + HashSet existTradeNumsOfExecutionDeposit = new HashSet<>(); + { + Set tradeNums = sTrades.stream().map(STrade::getTradeNum).filter(Objects::nonNull).collect(Collectors.toSet()); + log.debug("Check {} s_trade tradeNum=[{}] on date {}", sTrades.size(), tradeNums, today); + ImdgPredicateBuilder pb = executionDepositImdg.predicateBuilder(); + Collection existsEDeposit = executionDepositImdg.getCollectionObjectsByPredicate( + pb.and( + pb.in("exchangeExecutionId", tradeNums.toArray(new Comparable[0])), + pb.equals("clearingDate", today) + ) +// Map.of("exchangeExecutionId", trade.getTradeNum(),"clearingDate", today) + ); + for (ExecutionDeposit ed : existsEDeposit) { + existTradeNumsOfExecutionDeposit.add(ed.getExchangeExecutionId()); + } + } + for (STrade trade : sTrades) { log.trace("Check s_trade[{}].tradeNum={} on date {}", trade.getId(), trade.getTradeNum(), today); - Collection existsEDeposit = executionDepositImdg.getCollectionObjectsByFieldValues(Map.of( - "exchangeExecutionId", trade.getTradeNum(), - "clearingDate", today - )); + boolean existsEDeposit = existTradeNumsOfExecutionDeposit.contains(trade.getTradeNum()); - if (existsEDeposit.isEmpty()) { + if (!existsEDeposit) { log.trace("S_TRADE[{}] new", trade.getId()); // Проверка secCode @@ -160,8 +179,7 @@ public class ExecutionDepositComponent { } } else { - long[] idToLong = existsEDeposit.stream().mapToLong(SpcexObjectBase::getId).toArray(); - log.trace("S_TRADE[{}] already has executionDeposit: {}", trade.getId(), Arrays.toString(idToLong)); + log.trace("S_TRADE[{}] already has executionDeposit: exchangeExecutionId={} on date {}", trade.getId(), trade.getTradeNum(), today); } }