From a529135daf1eef1af887ba1c7ff6c66db09296a1 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 5 Jul 2023 12:36:06 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-398 --- .../clearing/service/RegistryService.java | 36 +++++++++++++------ .../ImdgPredicateBuilderHazelcast.java | 5 +++ .../api/predicate/ImdgPredicateBuilder.java | 2 ++ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java index 15b00c391..8ff2b72ee 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java @@ -20,6 +20,7 @@ import java.time.Instant; import java.util.Collection; import java.util.Map; import java.util.Optional; +import java.util.function.Function; @Service public class RegistryService { @@ -68,8 +69,13 @@ public class RegistryService { return; } log.debug("TCR new event, TCR#id={}", tcr.getId()); - Long accountId = tcr.getMoneyAccountId() != null ? tcr.getMoneyAccountId() : tcr.getDepoAccountId(); - Collection registries = findRegistry(tcr.getCompanyId(), accountId); + Optional registriesCondition = registsryPredicate(tcr.getCompanyId(), tcr.getMoneyAccountId(), tcr.getDepoAccountId()); + if (registriesCondition.isEmpty()) { + log.debug("TCR#id={} couldn't construct registry search condition", tcr.getId()); + return; + } + log.debug("TCR#id registries condition {}", registriesCondition.get()); + Collection registries = registryImdg.getCollectionObjectsByPredicate(registriesCondition.get()); log.debug("TCR#id={} registries for update found: {}", tcr.getId(), registries.size()); registries.forEach(rgs -> { rgs.setTradingClearingRegistryId(tcr.getId()); @@ -77,23 +83,33 @@ public class RegistryService { rgs.setRegistryCapacity(tcr.getTradingClearingRegistryType()); rgs.setUpdated(Instant.now()); registryImdg.update(rgs); + log.trace("TCR#id={} registry#id={} updated", tcr.getId(), rgs.getId()); }); } /** * находим все регистры AM__/AS__ по пришедшему ТКР */ - private Collection findRegistry(Long companyId, Long accountId) { //String account + private Optional registsryPredicate(Long companyId, Long moneyAccountId, Long depoAccountId) { ImdgPredicateBuilder prdBldr = registryImdg.predicateBuilder(); - String rgsCodeSQL = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM__, RegistryTradingParams.AS__).build(); - ImdgPredicate rgsCodeSqlPredicate = prdBldr.and( - prdBldr.sql(rgsCodeSQL), + Function sql = p -> RegistryCodeSqlBuilder.getInstance(p).build(); + Optional moneyPredicate = Optional.ofNullable(moneyAccountId) + .map(accId -> sql.apply(RegistryTradingParams.AM__)) + .map(prdBldr::sql) + .map(codePredicate -> prdBldr.and(codePredicate, prdBldr.equals("accountId", moneyAccountId))); + Optional depoPredicate = Optional.ofNullable(depoAccountId) + .map(accId -> sql.apply(RegistryTradingParams.AS__)) + .map(prdBldr::sql) + .map(codePredicate -> prdBldr.and(codePredicate, prdBldr.equals("accountId", depoAccountId))); + if (moneyPredicate.isEmpty() && depoPredicate.isEmpty()) { + return Optional.empty(); + } + return Optional.ofNullable(prdBldr.and( + prdBldr.or(moneyPredicate.orElse(prdBldr.alwaysTrue()), depoPredicate.orElse(prdBldr.alwaysTrue())), prdBldr.equals("companyId", companyId), - prdBldr.equals("accountId", accountId), -// prdBldr.equals("account", account), + prdBldr.equals("accountId", moneyAccountId), prdBldr.sql("tradingClearingRegistryId is null") - ); - return registryImdg.getCollectionObjectsByPredicate(rgsCodeSqlPredicate); + )); } private RegistryTradingParams createRegistryInfoByType(String type) { 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 c3391a42d..a7f2dc192 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 @@ -92,4 +92,9 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder { public ImdgPredicate regex(String key, String regex) { return new ImdgPredicateHazelcast(Predicates.regex(key, regex)); } + + @Override + public ImdgPredicate alwaysTrue() { + return new ImdgPredicateHazelcast(Predicates.alwaysTrue()); + } } diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java index e664ebe0b..dba3f77e8 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java @@ -17,4 +17,6 @@ public interface ImdgPredicateBuilder { ImdgPredicate sql(String sql); ImdgPredicate regex(String key, String regex); + + ImdgPredicate alwaysTrue(); }