From 150468f8237ec9817ba7bbdbca37ba956dab090f Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 7 Feb 2023 19:07:22 +0300 Subject: [PATCH 1/3] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-189=20f?= =?UTF-8?q?ix=20PaymentInstructionCreator=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20AddresseeId=20=D0=B4=D0=BB=D1=8F=20V?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/service/builder/PaymentInstructionCreator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionCreator.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionCreator.java index a46892ee2..9d74251a8 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionCreator.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/builder/PaymentInstructionCreator.java @@ -245,8 +245,8 @@ public class PaymentInstructionCreator { payment1.setSenderId(SPVB_ID); // СПВБ { - String sqlLCA = String.format("securityId = %s and companyId != %s", - liabilitiesClaimsAssets.getSecurityId(), liabilitiesClaimsAssets.getCompanyId()); + String sqlLCA = String.format("exchangeExecutionId = %s and side != '%s'", + executionDeposit.getExchangeExecutionId(), executionDeposit.getSide()); ExecutionDeposit counterExecutionDeposit = executionDepositImdg.getSingleObjectBySQL(sqlLCA); if (counterExecutionDeposit == null) { log.warn("Counter ExecutionDeposit not found for : {}", sqlLCA); From 502a343c556659f91b724137afa3fc2eb8385e19 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 8 Feb 2023 10:58:26 +0300 Subject: [PATCH 2/3] =?UTF-8?q?clearing-service=20http://jira.mfd.msk:8088?= =?UTF-8?q?/browse/CLS-188=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20Execut?= =?UTF-8?q?ionDepositComponent=20=D0=B4=D0=BB=D1=8F=20http://jira.mfd.msk:?= =?UTF-8?q?8088/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); } } From e6e7dd57c6eac1a78134f13bd70a5c1df09ad901 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 8 Feb 2023 11:08:50 +0300 Subject: [PATCH 3/3] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-189=20f?= =?UTF-8?q?ix=20npe=20=D1=82=D1=80=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../clearing/service/SdfCreatorBySTLDPayment.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java index 8cec0b877..d73d9d0d8 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/SdfCreatorBySTLDPayment.java @@ -181,9 +181,13 @@ public class SdfCreatorBySTLDPayment { ClearingCategory getClearingCategory(PaymentInstruction paymentInstruction) { ClearingMemberCategory category = clearingMemberCategoryImdg.getSingleObjectByFieldValues( - Map.of("companyId", paymentInstruction.getSenderId())); - String categoryKey = !TextUtil.isEmpty(category.getClearingMemberCategory()) - ? category.getClearingMemberCategory() : ""; + Map.of("companyId", paymentInstruction.getSenderId())); + if (category == null) { + log.trace("ClearingMemberCategory not found by paymentInstruction[{}].companyId={}", + paymentInstruction.getId(), paymentInstruction.getSenderId()); + } + String categoryKey = category != null + ? category.getClearingMemberCategory() : ""; return IEnumKey.getEnumByKeyOrUndefined(ClearingCategory.class, categoryKey); }