From 220239de6e0737c0818a712f3c8da09c0fe883cb Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 29 Dec 2022 19:14:37 +0300 Subject: [PATCH] =?UTF-8?q?reports-service=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20IMDG,=20=D1=82.=D0=BA.=20Hazelcast=20<4.0.0=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D1=83=D0=BC=D0=B5=D0=B5=D1=82=20Instant=20?= =?UTF-8?q?=D1=81=D1=80=D0=B0=D0=B2=D0=BD=D0=B8=D0=B2=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20SQL!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reports/services/ReportDataCollector.java | 7 +- .../collector/Bt17_1_P1_collector.java | 24 ++++++- .../collector/Bt17_1_P2_collector.java | 2 +- .../services/collector/Bt17_2_collector.java | 2 +- .../collector/Bt17_5_P1_collector.java | 2 +- .../Repbr0420314_P1_bt_17_4_collector.java | 2 +- .../Repbr0420314_P2_bt_17_4_collector.java | 2 +- .../src/main/resources/application.properties | 2 +- .../iml/hazelcast/adapter/ImdgHazelcast.java | 26 ++++++++ .../ImdgPredicateBuilderHazelcast.java | 65 +++++++++++++++++++ .../predicate/ImdgPredicateHazelcast.java | 24 +++++++ .../java/ru/spcex/platform/imdg/api/Imdg.java | 11 ++++ .../imdg/api/predicate/ImdgPredicate.java | 4 ++ .../api/predicate/ImdgPredicateBuilder.java | 13 ++++ 14 files changed, 176 insertions(+), 10 deletions(-) create mode 100644 platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java create mode 100644 platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateHazelcast.java create mode 100644 platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicate.java create mode 100644 platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java index bb99d1d68..0bf10f174 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportDataCollector.java @@ -58,6 +58,11 @@ public abstract class ReportDataCollector { protected String toString(LocalDate date) { if (date == null) return null; - return DATE_TIME_FORMATTER.format(date); + return DATE_FORMATTER.format(date); + } + + protected String formatToIMDGInstant(LocalDate date) { + LocalDateTime ldt = date.atStartOfDay(); + return DATE_TIME_FORMATTER.format(ldt); } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java index aaa65c199..2972c8974 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P1_collector.java @@ -16,7 +16,11 @@ import ru.spcex.platform.enumeration.ClearingStatus; import ru.spcex.platform.enumeration.Market; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.utils.time.TimeUtil; +import java.time.Instant; import java.time.LocalDate; import java.util.*; @@ -52,6 +56,22 @@ public class Bt17_1_P1_collector extends ReportDataCollector searchLiabilitiesClaimsAssets(LocalDate startDate, LocalDate endDate, Long allowClearingStatusId) { + // String ql = String.format("'%s' <= refundDate and refundDate <= '%s' and clearingStatus=%s", +// formatToIMDGInstant(startDate), formatToIMDGInstant(endDate), allowClearingStatusId); +// Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); + //todo refactoring IMDG API, TimeUtil + ImdgPredicateBuilder pb = liabilitiesClaimsAssetsImdg.predicateBuilder(); + Instant dateTimeLo = startDate.atStartOfDay(TimeUtil.zone).toInstant(); + Instant dateTimeHi = endDate.plusDays(1).atStartOfDay(TimeUtil.zone).minusSeconds(1).toInstant(); + + ImdgPredicate p=pb.and(pb.and(pb.greatEqual("refundDate", dateTimeLo), + pb.lessEqual("refundDate", dateTimeHi)), + pb.equals("clearingStatus", allowClearingStatusId)); + Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(p); + return liabilities; + } + @Override public ReportBR_0420315_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { validateDateRange(startDate, endDate); @@ -63,9 +83,7 @@ public class Bt17_1_P1_collector extends ReportDataCollector liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate, allowClearingStatusId); Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); company_for: diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java index 5c8afe043..33dd36ddc 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_1_P2_collector.java @@ -26,7 +26,7 @@ public class Bt17_1_P2_collector extends ReportDataCollector liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); long contractorQty; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java index b85eed586..8b13a2872 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_2_collector.java @@ -34,7 +34,7 @@ public class Bt17_2_collector extends ReportDataCollector { public ReportBR_0420317 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { validateDateRange(startDate, endDate); - String ql = String.format("'%s' <= updated and updated <= '%s' and service='MKR'", startDate, endDate); + String ql = String.format("'%s' <= updated and updated <= '%s' and service='MKR'", formatToIMDGInstant(startDate), formatToIMDGInstant(endDate)); // todo обговорить про updatedAt updated, todo enum MKR Collection relations = relationImdg.getCollectionObjectsBySQL(ql); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java index 11ccb81d6..7954461bc 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P1_collector.java @@ -55,7 +55,7 @@ public class Bt17_5_P1_collector extends ReportDataCollector liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); for (Map.Entry> companyEntry : indexByCompany.entrySet()) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Repbr0420314_P1_bt_17_4_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Repbr0420314_P1_bt_17_4_collector.java index 6608da0b5..4a3d96b53 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Repbr0420314_P1_bt_17_4_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Repbr0420314_P1_bt_17_4_collector.java @@ -61,7 +61,7 @@ public class Repbr0420314_P1_bt_17_4_collector extends ReportDataCollector liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); for (LiabilitiesClaimsAssets liability: liabilities) { diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Repbr0420314_P2_bt_17_4_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Repbr0420314_P2_bt_17_4_collector.java index b19c54de5..4d5c9fb44 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Repbr0420314_P2_bt_17_4_collector.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Repbr0420314_P2_bt_17_4_collector.java @@ -48,7 +48,7 @@ public class Repbr0420314_P2_bt_17_4_collector extends ReportDataCollector paymentInstructionsAll = paymentInstructionImdg.getCollectionObjectsBySQL(ql); Map> companyIdPyPaymtInstruction = diff --git a/clearing-parent/reports-service/src/main/resources/application.properties b/clearing-parent/reports-service/src/main/resources/application.properties index f4aec6b47..ffa1ebe50 100644 --- a/clearing-parent/reports-service/src/main/resources/application.properties +++ b/clearing-parent/reports-service/src/main/resources/application.properties @@ -18,7 +18,7 @@ reports-service.kafka-consumer.buffer-memory=33554432 #reports-service.kafka-producer.linger-ms=1 #reports-service.kafka-producer.buffer-memory=33554432 -reports-service.hazelcast.cluster-members=127.0.0.1:5701,10.200.200.181:5701 +reports-service.hazelcast.cluster-members=127.0.0.1:5701 #,10.200.200.181:5701 reports-service.hazelcast.login=dev reports-service.hazelcast.password=dev-pass diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java index 43aad9a39..20cc14328 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/ImdgHazelcast.java @@ -11,6 +11,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast; +import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateHazelcast; import ru.spcex.platform.utils.log.ExceptionUtils; import java.util.*; @@ -181,4 +185,26 @@ public class ImdgHazelcast implements Imdg { public void setMapName(String mapName) { this.mapName = mapName; } + + + // Predicate API + @Override + public Collection getCollectionObjectsByPredicate(ImdgPredicate predicateImdg) { + Predicate hazelcastPredicate = ((ImdgPredicateHazelcast) predicateImdg).getRawPredicate(); + Set ids = map.keySet(hazelcastPredicate); + Iterator idIterator = ids.iterator(); + Collection searchResult = new ArrayList<>(); + while (idIterator.hasNext()) { + T element = map.get(idIterator.next()); + if (element != null) { + searchResult.add(element); + } + } + return searchResult; + } + + @Override + public ImdgPredicateBuilder predicateBuilder() { + return new ImdgPredicateBuilderHazelcast(this); + } } 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 new file mode 100644 index 000000000..d3d63f4d8 --- /dev/null +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java @@ -0,0 +1,65 @@ +package ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate; + +import com.hazelcast.query.Predicates; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast; + +public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder { + protected final ImdgHazelcast imdg; + + public ImdgPredicateBuilderHazelcast(ImdgHazelcast imdg) { + this.imdg = imdg; + } + + @Override + public ImdgPredicate equals(String key, Object value) { + Comparable cmpValue = (Comparable) value; + return new ImdgPredicateHazelcast(this, Predicates.equal(key, cmpValue)); + } + + @Override + public ImdgPredicate greatEqual(String key, Comparable cmpValue) { + return new ImdgPredicateHazelcast(this, Predicates.greaterEqual(key, cmpValue)); + } + + @Override + public ImdgPredicate lessEqual(String key, Comparable cmpValue) { + return new ImdgPredicateHazelcast(this, Predicates.lessEqual(key, cmpValue)); + } + + @Override + public ImdgPredicate greater(String key, Comparable cmpValue) { + return new ImdgPredicateHazelcast(this, Predicates.greaterThan(key, cmpValue)); + } + + @Override + public ImdgPredicate less(String key, Comparable cmpValue) { + return new ImdgPredicateHazelcast(this, Predicates.lessThan(key, cmpValue)); + } + + @Override + public ImdgPredicate not(ImdgPredicate param) { + ImdgPredicateHazelcast paramMy = (ImdgPredicateHazelcast) param; + assert this == paramMy.builder; + return new ImdgPredicateHazelcast(this, Predicates.not(paramMy.hazelcastPredicate)); + } + + @Override + public ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB) { + ImdgPredicateHazelcast paramAMy = (ImdgPredicateHazelcast) paramA; + assert this == paramAMy.builder; + ImdgPredicateHazelcast paramBMy = (ImdgPredicateHazelcast) paramB; + assert this == paramBMy.builder; + return new ImdgPredicateHazelcast(this, Predicates.and(paramAMy.hazelcastPredicate, paramBMy.hazelcastPredicate)); + } + + @Override + public ImdgPredicate or(ImdgPredicate paramA, ImdgPredicate paramB) { + ImdgPredicateHazelcast paramAMy = (ImdgPredicateHazelcast) paramA; + assert this == paramAMy.builder; + ImdgPredicateHazelcast paramBMy = (ImdgPredicateHazelcast) paramB; + assert this == paramBMy.builder; + return new ImdgPredicateHazelcast(this, Predicates.or(paramAMy.hazelcastPredicate, paramBMy.hazelcastPredicate)); + } +} diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateHazelcast.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateHazelcast.java new file mode 100644 index 000000000..1c2f36461 --- /dev/null +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateHazelcast.java @@ -0,0 +1,24 @@ +package ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate; + +import com.hazelcast.query.Predicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; + +public class ImdgPredicateHazelcast implements ImdgPredicate { + protected final ImdgPredicateBuilderHazelcast builder; + protected final Predicate hazelcastPredicate; + + protected ImdgPredicateHazelcast(ImdgPredicateBuilderHazelcast builder, Predicate hazelcastPredicate) { + assert hazelcastPredicate != null; + this.builder = builder; + this.hazelcastPredicate = hazelcastPredicate; + } + + public Predicate getRawPredicate() { + return hazelcastPredicate; + } + + @Override + public String toString() { + return "ImdgPredicateHazelcast{" + hazelcastPredicate + '}'; + } +} diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/Imdg.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/Imdg.java index 2784cc2dd..bc4adb9c1 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/Imdg.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/Imdg.java @@ -1,6 +1,8 @@ package ru.spcex.platform.imdg.api; import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.util.Collection; import java.util.Map; @@ -65,4 +67,13 @@ public interface Imdg { default Integer size() { throw new UnsupportedOperationException("not implemented size"); } + + // Predicate API + default Collection getCollectionObjectsByPredicate(ImdgPredicate predicate) { + throw new UnsupportedOperationException("not implemented getCollectionObjectsByPredicate"); + } + + default ImdgPredicateBuilder predicateBuilder() { + throw new UnsupportedOperationException("not implemented predicateBuilder API"); + } } diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicate.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicate.java new file mode 100644 index 000000000..922245086 --- /dev/null +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicate.java @@ -0,0 +1,4 @@ +package ru.spcex.platform.imdg.api.predicate; + +public interface ImdgPredicate { +} 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 new file mode 100644 index 000000000..4ff3d679f --- /dev/null +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java @@ -0,0 +1,13 @@ +package ru.spcex.platform.imdg.api.predicate; + +public interface ImdgPredicateBuilder { + ImdgPredicate equals(String key, Object value); + ImdgPredicate greatEqual(String key, Comparable value); + ImdgPredicate lessEqual(String key, Comparable value); + ImdgPredicate greater(String key, Comparable value); + ImdgPredicate less(String key, Comparable value); + + ImdgPredicate not(ImdgPredicate param); + ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB); + ImdgPredicate or(ImdgPredicate paramA, ImdgPredicate paramB); +}