From a9cc2752d00cff80039d11d131ea98162ad1e16f Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 8 Feb 2023 12:48:23 +0300 Subject: [PATCH 1/2] http://jira.mfd.msk:8088/browse/CLS-188 operation B/S BUY SELL --- .../service/ExecutionDepositComponent.java | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 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 80e8e1bcc..1655d46a9 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 @@ -26,6 +26,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSe import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.enumeration.Allowed; import ru.spcex.platform.enumeration.Market; +import ru.spcex.platform.enumeration.MoneyFlowSide; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -154,10 +155,40 @@ public class ExecutionDepositComponent { } for (STrade trade : sTrades) { - log.trace("Check s_trade[{}].tradeNum={} on date {}", trade.getId(), trade.getTradeNum(), today); - boolean existsEDeposit = existTradeNumsOfExecutionDeposit.contains(trade.getTradeNum()); + log.trace("Check s_trade[{}].tradeNum={} operation={} on date {}", trade.getId(), trade.getTradeNum(), trade.getOperation(), today); + boolean existEDeposit; + { + ImdgPredicateBuilder pb = executionDepositImdg.predicateBuilder(); - if (!existsEDeposit) { + ImdgPredicate predicateOperation = pb.equals("side", trade.getOperation()); + if ("B".equalsIgnoreCase(trade.getOperation())) { + predicateOperation = pb.or(predicateOperation, pb.equals("side", MoneyFlowSide.BUY.getKey())); + } +// if ("BUY".equalsIgnoreCase(trade.getOperation())) { +// predicateOperation = pb.or(predicateOperation, pb.equals("side", "B")); +// } + if ("S".equalsIgnoreCase(trade.getOperation())) { + predicateOperation = pb.or(predicateOperation, pb.equals("side", MoneyFlowSide.SELL.getKey())); + } +// if ("SELL".equalsIgnoreCase(trade.getOperation())) { +// predicateOperation = pb.or(predicateOperation, pb.equals("side", "S")); +// } + + ImdgPredicate predicate = pb.and( + pb.equals("exchangeExecutionId", trade.getTradeNum()), + pb.equals("clearingDate", today), + predicateOperation + ); + Collection existsEDeposit = executionDepositImdg.getCollectionObjectsByPredicate(predicate); +// Collection existsEDeposit=executionDepositImdg.getCollectionObjectsByFieldValues(Map.of( +// "exchangeExecutionId", trade.getTradeNum(), +// "clearingDate", today +// )); + existEDeposit = !existsEDeposit.isEmpty(); + log.trace("Check exist, SQL \"{}\", found {}, exist {}", predicate, existsEDeposit.size(), existEDeposit); + } + + if (!existEDeposit) { log.trace("S_TRADE[{}] new", trade.getId()); // Проверка secCode @@ -270,7 +301,14 @@ public class ExecutionDepositComponent { eDeposit.setFirstLegAmount(sTrade.getValue()); eDeposit.setSecondLegAmount(sTrade.getValue()); //eDeposit.setInterestAmount(null); - eDeposit.setSide(sTrade.getOperation());//Символьный код по справочнику moneyFlowSide), соответствующий значению из s_trade.operation (sTrade.getOperation()) + String operation = sTrade.getOperation(); //Символьный код по справочнику moneyFlowSide), соответствующий значению из s_trade.operation (sTrade.getOperation()) + if ("B".equalsIgnoreCase(operation)) { + operation = MoneyFlowSide.BUY.getKey(); + } + if ("S".equalsIgnoreCase(operation)) { + operation = MoneyFlowSide.SELL.getKey(); + } + eDeposit.setSide(operation); eDeposit.setSettlementCurrency("RUB"); // (справочник currencyCode) eDeposit.setCompanyId(company.getId()); eDeposit.setDuration(sTrade.getDaysToMatDate()); From fa5aa2ea270e174015fc9af5481bcae3d60a9e46 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 8 Feb 2023 13:19:28 +0300 Subject: [PATCH 2/2] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-188=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=D1=82=D0=B0=20=D0=B8=20=D0=B2=D1=8B=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D0=B8=20=D0=BE=D0=B1=D1=8A=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D0=B2,=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BB=D0=BE=D0=B3=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ExecutionDepositComponent.java | 21 +++---------------- .../src/main/resources/logback.xml | 2 +- .../ImdgPredicateBuilderHazelcast.java | 2 +- 3 files changed, 5 insertions(+), 20 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 1655d46a9..56f44c003 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 @@ -134,25 +134,9 @@ public class ExecutionDepositComponent { } } - // Необходимо проверять отсутствие ExecutionDeposit с exchangeExecutionId и clearingDate. + // Необходимо проверять отсутствие ExecutionDeposit с exchangeExecutionId и clearingDate и side. // Но при этом, во время создания новых 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={} operation={} on date {}", trade.getId(), trade.getTradeNum(), trade.getOperation(), today); @@ -185,7 +169,7 @@ public class ExecutionDepositComponent { // "clearingDate", today // )); existEDeposit = !existsEDeposit.isEmpty(); - log.trace("Check exist, SQL \"{}\", found {}, exist {}", predicate, existsEDeposit.size(), existEDeposit); + log.trace("Check exist ExecutionDeposit, SQL \"{}\", found {}, exist {}", predicate, existsEDeposit.size(), existEDeposit); } if (!existEDeposit) { @@ -203,6 +187,7 @@ public class ExecutionDepositComponent { newED = createExecutionDeposit(trade, null, null); executionDepositImdg.insert(newED); sendNotification(newED); + log.debug("New executionDeposit.id={} was created.", newED.getId()); } catch (ClearingException ce) { auditMessage(ce); } catch (Exception e) { diff --git a/clearing-parent/clearing-service/src/main/resources/logback.xml b/clearing-parent/clearing-service/src/main/resources/logback.xml index e2702c011..39d4ebcaa 100644 --- a/clearing-parent/clearing-service/src/main/resources/logback.xml +++ b/clearing-parent/clearing-service/src/main/resources/logback.xml @@ -35,7 +35,7 @@ - + diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java index a512122b1..944dba3ae 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java @@ -60,7 +60,7 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder { public ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB, ImdgPredicate paramC) { ImdgPredicateHazelcast paramAMy = (ImdgPredicateHazelcast) paramA; ImdgPredicateHazelcast paramBMy = (ImdgPredicateHazelcast) paramB; - ImdgPredicateHazelcast paramCMy = (ImdgPredicateHazelcast) paramB; + ImdgPredicateHazelcast paramCMy = (ImdgPredicateHazelcast) paramC; return new ImdgPredicateHazelcast(Predicates.and(paramAMy.hazelcastPredicate, paramBMy.hazelcastPredicate, paramCMy.hazelcastPredicate)); }