From 55e0dc1c87fb8548b87f942270556f02c5c7b5ef Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 30 Dec 2022 11:41:01 +0300 Subject: [PATCH] =?UTF-8?q?imdg,=20reports-service=20=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8=20IMDG,=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=BA=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=D1=87=D1=91=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reports/ReportsServiceApplication.java | 2 +- .../reports/services/ReportDataCollector.java | 17 +++++-- .../collector/Bt17_1_P1_collector.java | 10 ++--- .../collector/Bt17_1_P2_collector.java | 19 ++++++-- .../services/collector/Bt17_2_collector.java | 20 +++++++-- .../collector/Bt17_5_P1_collector.java | 31 ++++++++----- .../Repbr0420314_P1_bt_17_4_collector.java | 24 ++++++++-- .../Repbr0420314_P2_bt_17_4_collector.java | 20 +++++++-- .../iml/hazelcast/adapter/ImdgHazelcast.java | 2 +- .../ImdgPredicateBuilderHazelcast.java | 45 ++++++++++++------- .../predicate/ImdgPredicateHazelcast.java | 10 ++--- .../api/predicate/ImdgPredicateBuilder.java | 2 + 12 files changed, 145 insertions(+), 57 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java index 99a580de8..643b8f596 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java @@ -30,7 +30,7 @@ public class ReportsServiceApplication { log.info("Run generate report."); Map allReports = context.getBeansOfType(ReportDataCollector.class); log.info("Report types: {}", allReports); - for (ReportDataCollector collector:allReports.values()) { + for (ReportDataCollector collector : allReports.values()) { log.info("Make report {}", collector); XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass()); LocalDate date2 = LocalDate.now(); 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 0bf10f174..143ffe7dd 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 @@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.services; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.spcex.clearing.reports.reports.AbstractReport; +import ru.spcex.platform.utils.time.TimeUtil; import java.math.BigDecimal; import java.time.Instant; @@ -21,6 +22,7 @@ public abstract class ReportDataCollector { /** * T extends ReportWithPeriod + * * @return */ abstract public T collectReportWithPeriod(LocalDate startDate, LocalDate endDate); @@ -41,6 +43,13 @@ public abstract class ReportDataCollector { } } + protected Instant toInstantStartDay(LocalDate date) { + return date.atStartOfDay(TimeUtil.zone).toInstant(); + } + protected Instant toInstantEndDay(LocalDate date) { + return date.plusDays(1).atStartOfDay(TimeUtil.zone).minusSeconds(1).toInstant(); + } + protected String toString(Long val) { if (val == null) return null; return val.toString(); @@ -61,8 +70,8 @@ public abstract class ReportDataCollector { return DATE_FORMATTER.format(date); } - protected String formatToIMDGInstant(LocalDate date) { - LocalDateTime ldt = date.atStartOfDay(); - return DATE_TIME_FORMATTER.format(ldt); - } +// 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 2972c8974..7774d4b6d 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 @@ -60,13 +60,11 @@ public class Bt17_1_P1_collector extends ReportDataCollector 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)), + ImdgPredicateBuilder pb = liabilitiesClaimsAssetsImdg.predicateBuilder(); + Instant dateTimeLo = toInstantStartDay(startDate); + Instant dateTimeHi = toInstantStartDay(endDate); + ImdgPredicate p = pb.and(pb.greatEqual("refundDate", dateTimeLo), pb.lessEqual("refundDate", dateTimeHi), pb.equals("clearingStatus", allowClearingStatusId)); Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(p); return liabilities; 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 33dd36ddc..69040ecd4 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 @@ -9,9 +9,11 @@ import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P2; import ru.spcex.clearing.reports.services.ReportDataCollector; 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 java.time.Instant; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.*; @Component @@ -23,11 +25,22 @@ public class Bt17_1_P2_collector extends ReportDataCollector searchLiabilitiesClaimsAssets(LocalDate startDate, LocalDate endDate) { +// String ql = String.format("'%s' <= refundDate and refundDate <= '%s'", formatToIMDGInstant(startDate), formatToIMDGInstant(endDate)); +// Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); + + ImdgPredicateBuilder pb = liabilitiesClaimsAssetsImdg.predicateBuilder(); + Instant dateTimeLo = toInstantStartDay(startDate); + Instant dateTimeHi = toInstantStartDay(endDate); + ImdgPredicate p = pb.and(pb.greatEqual("refundDate", dateTimeLo), pb.lessEqual("refundDate", dateTimeHi)); + Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(p); + return liabilities; + } + @Override public ReportBR_0420315_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { validateDateRange(startDate, endDate); - String ql = String.format("'%s' <= refundDate and refundDate <= '%s'", formatToIMDGInstant(startDate), formatToIMDGInstant(endDate)); - Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate); long contractorQty; double liabilitiesAmount = 0; 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 8b13a2872..272becd5d 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 @@ -11,10 +11,11 @@ import ru.spcex.clearing.reports.services.ReportDataCollector; import ru.spcex.platform.enumeration.DocumentTypes; 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 java.time.Instant; import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.*; @Component @@ -30,13 +31,24 @@ public class Bt17_2_collector extends ReportDataCollector { companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); } + Collection searchRelation(LocalDate startDate, LocalDate endDate, String service) { +// String ql = String.format("'%s' <= updated and updated <= '%s' and service='MKR'", startDate, endDate); +// Collection relations = relationImdg.getCollectionObjectsBySQL(ql); + + ImdgPredicateBuilder pb = relationImdg.predicateBuilder(); + Instant dateTimeLo = toInstantStartDay(startDate); + Instant dateTimeHi = toInstantStartDay(endDate); + ImdgPredicate p = pb.and(pb.greatEqual("updated", dateTimeLo), pb.lessEqual("updated", dateTimeHi), + pb.equals("service", service)); + Collection relations = relationImdg.getCollectionObjectsByPredicate(p); + return relations; + } + @Override public ReportBR_0420317 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { validateDateRange(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); + Collection relations = searchRelation(startDate, endDate, "MKR"); ReportBR_0420317 reportBR_0420317 = new ReportBR_0420317(startDate, endDate, "BR"); for (Relation relation: relations) { 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 7954461bc..804ace657 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 @@ -4,17 +4,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.company.relation.Relation; import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; -import ru.clearing.platform.dictionary.CountryCodeDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P1; import ru.spcex.clearing.reports.services.ReportDataCollector; import ru.spcex.platform.enumeration.DocumentTypes; 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 java.time.Instant; import java.time.LocalDate; import java.util.Collection; import java.util.List; @@ -23,9 +24,7 @@ import java.util.Map; @Component public class Bt17_5_P1_collector extends ReportDataCollector { private Imdg companyImdg; - // private Imdg relationImdg; private Imdg companySymbolsImdg; - private Imdg countryCodeDictionaryImdg; private Imdg clearingMemberCategoryImdg; private Imdg liabilitiesClaimsAssetsImdg; @@ -33,10 +32,8 @@ public class Bt17_5_P1_collector extends ReportDataCollector searchLiabilitiesClaimsAssets(LocalDate startDate, LocalDate endDate) { +// String ql = String.format("'%s' <= refundDate and refundDate <= '%s'", formatToIMDGInstant(startDate), formatToIMDGInstant(endDate)); +// Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); + + ImdgPredicateBuilder pb = liabilitiesClaimsAssetsImdg.predicateBuilder(); + Instant dateTimeLo = toInstantStartDay(startDate); + Instant dateTimeHi = toInstantStartDay(endDate); + ImdgPredicate p = pb.and(pb.greatEqual("refundDate", dateTimeLo), pb.lessEqual("refundDate", dateTimeHi)); + Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(p); + return liabilities; + } + @Override public ReportBR_0420312_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { validateDateRange(startDate, endDate); ReportBR_0420312_P1 reportBR_0420312P1 = new ReportBR_0420312_P1(startDate, endDate, "BR"); - // todo обговорить про updatedAt updated, todo enum MKR - String ql = String.format("'%s' <= refundDate and refundDate <= '%s'", - formatToIMDGInstant(startDate), formatToIMDGInstant(endDate)); - Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate); Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); + for (Map.Entry> companyEntry : indexByCompany.entrySet()) { final Long companyId = companyEntry.getKey(); Company company = companyImdg.getSingleObjectByID(companyId); + if (company == null) { + log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); + continue; + } CompanySymbols companySymbolINN = findSymbol(DocumentTypes.inn, company.getId()); CompanySymbols companySymbolOGRN = findSymbol(DocumentTypes.ogrn, company.getId()); ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId)); 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 4a3d96b53..6dc1e1bfd 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 @@ -14,8 +14,11 @@ import ru.spcex.platform.enumeration.ClearingStatus; import ru.spcex.platform.enumeration.DocumentTypes; 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.Collection; import java.util.Map; @@ -50,6 +53,19 @@ public class Repbr0420314_P1_bt_17_4_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); + + ImdgPredicateBuilder pb = liabilitiesClaimsAssetsImdg.predicateBuilder(); + Instant dateTimeLo = toInstantStartDay(startDate); + Instant dateTimeHi = toInstantStartDay(endDate); + ImdgPredicate p = pb.and(pb.greatEqual("refundDate", dateTimeLo), pb.lessEqual("refundDate", dateTimeHi), + pb.equals("clearingStatus", allowClearingStatusId)); + Collection liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(p); + return liabilities; + } @Override public ReportBR_0420314_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { @@ -60,13 +76,15 @@ public class Repbr0420314_P1_bt_17_4_collector extends ReportDataCollector liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql); + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate, allowClearingStatusId); for (LiabilitiesClaimsAssets liability: liabilities) { final Long companyId = liability.getCompanyId(); Company company = companyImdg.getSingleObjectByID(companyId); + if (company == null) { + log.warn("Company not found by LiabilitiesClaimsAssets.CompanyId={}", companyId); + continue; + } Collection cmcLst = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(Map.of("companyId", companyId)); // boolean checkCategory = cmcLst.stream().anyMatch(cmc -> ALLOW_CLEARING_MEMBER_CATEGORY.contains(cmc.getClearingMemberCategory())); // if (!checkCategory) { 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 4d5c9fb44..9dd77e4c0 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 @@ -14,7 +14,10 @@ import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.DocumentTypes; 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 java.time.Instant; import java.time.LocalDate; import java.util.Collection; import java.util.List; @@ -39,6 +42,19 @@ public class Repbr0420314_P2_bt_17_4_collector extends ReportDataCollector searchPaymentInstruction(LocalDate startDate, LocalDate endDate) { +// String ql = String.format("'%s' <= created and created <= '%s'", +// formatToIMDGInstant(startDate), formatToIMDGInstant(endDate)); +// Collection paymentInstructionsAll = paymentInstructionImdg.getCollectionObjectsBySQL(ql); + + ImdgPredicateBuilder pb = paymentInstructionImdg.predicateBuilder(); + Instant dateTimeLo = toInstantStartDay(startDate); + Instant dateTimeHi = toInstantStartDay(endDate); + ImdgPredicate p = pb.and(pb.greatEqual("created", dateTimeLo), pb.lessEqual("created", dateTimeHi)); + Collection paymentInstructionsAll = paymentInstructionImdg.getCollectionObjectsByPredicate(p); + return paymentInstructionsAll; + } + @Override public ReportBR_0420314_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { validateDateRange(startDate, endDate); @@ -47,9 +63,7 @@ public class Repbr0420314_P2_bt_17_4_collector extends ReportDataCollector paymentInstructionsAll = paymentInstructionImdg.getCollectionObjectsBySQL(ql); + Collection paymentInstructionsAll = searchPaymentInstruction(startDate, endDate); Map> companyIdPyPaymtInstruction = MapUtil.indexList(paymentInstructionsAll, PaymentInstruction::getSenderId); 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 20cc14328..c447524f6 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 @@ -205,6 +205,6 @@ public class ImdgHazelcast implements Imdg { @Override public ImdgPredicateBuilder predicateBuilder() { - return new ImdgPredicateBuilderHazelcast(this); + return ImdgPredicateBuilderHazelcast.instance(); } } 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 d3d63f4d8..0764ac47c 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 @@ -3,63 +3,74 @@ 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; + protected static final ImdgPredicateBuilderHazelcast instance = new ImdgPredicateBuilderHazelcast(); - public ImdgPredicateBuilderHazelcast(ImdgHazelcast imdg) { - this.imdg = imdg; + public static ImdgPredicateBuilderHazelcast instance() { + return instance; } + @Override public ImdgPredicate equals(String key, Object value) { Comparable cmpValue = (Comparable) value; - return new ImdgPredicateHazelcast(this, Predicates.equal(key, cmpValue)); + return new ImdgPredicateHazelcast(Predicates.equal(key, cmpValue)); } @Override public ImdgPredicate greatEqual(String key, Comparable cmpValue) { - return new ImdgPredicateHazelcast(this, Predicates.greaterEqual(key, cmpValue)); + return new ImdgPredicateHazelcast(Predicates.greaterEqual(key, cmpValue)); } @Override public ImdgPredicate lessEqual(String key, Comparable cmpValue) { - return new ImdgPredicateHazelcast(this, Predicates.lessEqual(key, cmpValue)); + return new ImdgPredicateHazelcast(Predicates.lessEqual(key, cmpValue)); } @Override public ImdgPredicate greater(String key, Comparable cmpValue) { - return new ImdgPredicateHazelcast(this, Predicates.greaterThan(key, cmpValue)); + return new ImdgPredicateHazelcast(Predicates.greaterThan(key, cmpValue)); } @Override public ImdgPredicate less(String key, Comparable cmpValue) { - return new ImdgPredicateHazelcast(this, Predicates.lessThan(key, cmpValue)); + return new ImdgPredicateHazelcast(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)); + return new ImdgPredicateHazelcast(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)); + return new ImdgPredicateHazelcast(Predicates.and(paramAMy.hazelcastPredicate, paramBMy.hazelcastPredicate)); + } + + @Override + public ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB, ImdgPredicate paramC) { + ImdgPredicateHazelcast paramAMy = (ImdgPredicateHazelcast) paramA; + ImdgPredicateHazelcast paramBMy = (ImdgPredicateHazelcast) paramB; + ImdgPredicateHazelcast paramCMy = (ImdgPredicateHazelcast) paramB; + return new ImdgPredicateHazelcast(Predicates.and(paramAMy.hazelcastPredicate, paramBMy.hazelcastPredicate, paramCMy.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)); + return new ImdgPredicateHazelcast(Predicates.or(paramAMy.hazelcastPredicate, paramBMy.hazelcastPredicate)); + } + + @Override + public ImdgPredicate or(ImdgPredicate paramA, ImdgPredicate paramB, ImdgPredicate paramC) { + ImdgPredicateHazelcast paramAMy = (ImdgPredicateHazelcast) paramA; + ImdgPredicateHazelcast paramBMy = (ImdgPredicateHazelcast) paramB; + ImdgPredicateHazelcast paramCMy = (ImdgPredicateHazelcast) paramC; + return new ImdgPredicateHazelcast(Predicates.or(paramAMy.hazelcastPredicate, paramBMy.hazelcastPredicate, paramCMy.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 index 1c2f36461..e2ee78c25 100644 --- 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 @@ -3,13 +3,13 @@ package ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate; import com.hazelcast.query.Predicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import java.util.Objects; + 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; + protected ImdgPredicateHazelcast(Predicate hazelcastPredicate) { + Objects.requireNonNull(hazelcastPredicate); this.hazelcastPredicate = hazelcastPredicate; } @@ -19,6 +19,6 @@ public class ImdgPredicateHazelcast implements ImdgPredicate { @Override public String toString() { - return "ImdgPredicateHazelcast{" + hazelcastPredicate + '}'; + return hazelcastPredicate.toString(); } } 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 4ff3d679f..09b135a35 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 @@ -9,5 +9,7 @@ public interface ImdgPredicateBuilder { ImdgPredicate not(ImdgPredicate param); ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB); + ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB, ImdgPredicate paramC); ImdgPredicate or(ImdgPredicate paramA, ImdgPredicate paramB); + ImdgPredicate or(ImdgPredicate paramA, ImdgPredicate paramB, ImdgPredicate paramC); }