From 16a443b1373b321ec317827c3786df0473fba5e4 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 10 Jan 2023 12:13:38 +0300 Subject: [PATCH] =?UTF-8?q?reports-service=20http://jira.mfd.msk:8088/brow?= =?UTF-8?q?se/CLS-29=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D1=8B=20=D0=B4=D0=BB=D1=8F=20(0420312)=20[=D0=91=D0=A2?= =?UTF-8?q?=2017.5]=20=D0=A1=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BE=20=D0=BA=D0=BB=D0=B8=D1=80=D0=B8=D0=BD=D0=B3=D0=BE=D0=B2?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=BE=D0=B1=D0=B5=D1=81=D0=BF=D0=B5=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reports/bt_17_5/ReportBR_0420312_P10.java | 2 +- .../reports/bt_17_5/ReportBR_0420312_P2.java | 25 +++- .../reports/bt_17_5/ReportBR_0420312_P3.java | 25 +++- .../reports/bt_17_5/ReportBR_0420312_P8.java | 36 ++++-- .../reports/bt_17_5/ReportBR_0420312_P9.java | 32 +++-- .../collector/Bt17_5_P10_collector.java | 64 ++++++++++ .../collector/Bt17_5_P2_collector.java | 77 ++++++++++++ .../collector/Bt17_5_P3_collector.java | 77 ++++++++++++ .../collector/Bt17_5_P4_collector.java | 64 ++++++++++ .../collector/Bt17_5_P5_collector.java | 64 ++++++++++ .../collector/Bt17_5_P6_collector.java | 64 ++++++++++ .../collector/Bt17_5_P7_collector.java | 66 ++++++++++ .../collector/Bt17_5_P8_collector.java | 114 ++++++++++++++++++ .../collector/Bt17_5_P9_collector.java | 100 +++++++++++++++ 14 files changed, 777 insertions(+), 33 deletions(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P10_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P2_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P3_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P4_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P5_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P6_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P7_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P8_collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P9_collector.java diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java index 04dc1bc7f..b0d7546e8 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P10.java @@ -14,7 +14,7 @@ public class ReportBR_0420312_P10 extends ReportWithPeriod { @XStreamAlias("destination") private String destination; - @XStreamAlias("part_10") + @XStreamAlias("rows") private final Info_0420312_P10 part_10; public ReportBR_0420312_P10(LocalDate startDate, diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java index 4623ebdcf..f1531e2ac 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P2.java @@ -7,6 +7,8 @@ import ru.spcex.clearing.reports.reports.ReportWithPeriod; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @XStreamAlias("clearingCoverage2") public class ReportBR_0420312_P2 extends ReportWithPeriod { @@ -14,14 +16,12 @@ public class ReportBR_0420312_P2 extends ReportWithPeriod { @XStreamAlias("destination") private String destination; - @XStreamAlias("part_2") - private final Info_0420312_P2 part_2; + @XStreamAlias("rows") + private final List rows = new ArrayList<>(); public ReportBR_0420312_P2(LocalDate startDate, LocalDate endDate, - String destination, - String liabilitiesClaimsAssetsCompanyId, - String liabilitiesClaimsAssetsLiabilities) { + String destination) { super(ReportId.BR_0420312_P2, "0.0.1", "0420312", @@ -29,7 +29,16 @@ public class ReportBR_0420312_P2 extends ReportWithPeriod { startDate, endDate); this.destination = destination; - part_2 = new Info_0420312_P2(liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsAssetsLiabilities); + } + + @Deprecated + public ReportBR_0420312_P2(LocalDate startDate, + LocalDate endDate, + String destination, + String liabilitiesClaimsAssetsCompanyId, + String liabilitiesClaimsAssetsLiabilities) { + this(startDate, endDate, destination); + rows.add(new Info_0420312_P2(liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsAssetsLiabilities)); } public static class Info_0420312_P2 { @@ -48,6 +57,10 @@ public class ReportBR_0420312_P2 extends ReportWithPeriod { } } + public List getRows() { + return rows; + } + @Override public String getReportName(LocalDateTime reportDateTime) { return "REPBR.0420312_р1-2.%s-%s.%s".formatted( diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java index 466573a88..9fa6c6c8e 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P3.java @@ -7,6 +7,8 @@ import ru.spcex.clearing.reports.reports.ReportWithPeriod; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @XStreamAlias("clearingCoverage3") public class ReportBR_0420312_P3 extends ReportWithPeriod { @@ -14,14 +16,12 @@ public class ReportBR_0420312_P3 extends ReportWithPeriod { @XStreamAlias("destination") private String destination; - @XStreamAlias("part_3") - private final Info_0420312_P3 part_3; + @XStreamAlias("rows") + private final List rows = new ArrayList<>(); public ReportBR_0420312_P3(LocalDate startDate, LocalDate endDate, - String destination, - String liabilitiesClaimsAssetsCompanyId, - String liabilitiesClaimsAssetsLiabilities) { + String destination) { super(ReportId.BR_0420312_P3, "0.0.5", "0420312", @@ -29,7 +29,16 @@ public class ReportBR_0420312_P3 extends ReportWithPeriod { startDate, endDate); this.destination = destination; - part_3 = new Info_0420312_P3(liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsAssetsLiabilities); + } + + @Deprecated + public ReportBR_0420312_P3(LocalDate startDate, + LocalDate endDate, + String destination, + String liabilitiesClaimsAssetsCompanyId, + String liabilitiesClaimsAssetsLiabilities) { + this(startDate, endDate, destination); + rows.add(new Info_0420312_P3(liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsAssetsLiabilities)); } public static class Info_0420312_P3 { @@ -49,6 +58,10 @@ public class ReportBR_0420312_P3 extends ReportWithPeriod { } } + public List getRows() { + return rows; + } + @Override public String getReportName(LocalDateTime reportDateTime) { return "REPBR.0420312_р1-3.%s-%s.%s".formatted( diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java index cf09746f6..2568023af 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P8.java @@ -7,6 +7,8 @@ import ru.spcex.clearing.reports.reports.ReportWithPeriod; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @XStreamAlias("clearingCoverage8") public class ReportBR_0420312_P8 extends ReportWithPeriod { @@ -14,9 +16,23 @@ public class ReportBR_0420312_P8 extends ReportWithPeriod { @XStreamAlias("destination") private String destination; - @XStreamAlias("part_8") - private final Info_0420312_P8 part_8; + @XStreamAlias("rows") + private final List rows = new ArrayList<>(); + + public ReportBR_0420312_P8(LocalDate startDate, + LocalDate endDate, + String destination) { + super(ReportId.BR_0420312_P8, + "0.0.5", + "0420312", + "Сведения о клиринговом обеспечении, часть 8", + startDate, + endDate); + this.destination = destination; + } + + @Deprecated public ReportBR_0420312_P8(LocalDate startDate, LocalDate endDate, String destination, @@ -27,20 +43,14 @@ public class ReportBR_0420312_P8 extends ReportWithPeriod { String companySymbolValue, String companyInfoCountryCode, String clearingMemberCategoryClearingMemberCategory) { - super(ReportId.BR_0420312_P8, - "0.0.5", - "0420312", - "Сведения о клиринговом обеспечении, часть 8", - startDate, - endDate); - this.destination = destination; - part_8 = new Info_0420312_P8(currencyId, + this(startDate, endDate, destination); + rows.add(new Info_0420312_P8(currencyId, liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsAssetsFullName, companySymbolCode, companySymbolValue, companyInfoCountryCode, - clearingMemberCategoryClearingMemberCategory); + clearingMemberCategoryClearingMemberCategory)); } public static class Info_0420312_P8 { @@ -89,6 +99,10 @@ public class ReportBR_0420312_P8 extends ReportWithPeriod { } } + public List getRows() { + return rows; + } + @Override public String getReportName(LocalDateTime reportDateTime) { return "REPBR.0420312_р3-1.%s-%s.%s".formatted( diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java index 5973b8bbc..8a7cc05f6 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_17_5/ReportBR_0420312_P9.java @@ -7,6 +7,8 @@ import ru.spcex.clearing.reports.reports.ReportWithPeriod; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @XStreamAlias("clearingCoverage9") public class ReportBR_0420312_P9 extends ReportWithPeriod { @@ -14,16 +16,13 @@ public class ReportBR_0420312_P9 extends ReportWithPeriod { @XStreamAlias("destination") private String destination; - @XStreamAlias("part_9") - private final Info_0420312_P9 part_9; + @XStreamAlias("rows") + private final List rows = new ArrayList<>(); + public ReportBR_0420312_P9(LocalDate startDate, LocalDate endDate, - String destination, - String currencyId, - String liabilitiesClaimsAssetsCompanyId, - String liabilitiesClaimsMoneyCurrencyCode, - String liabilitiesClaimsAssetsLiabilities) { + String destination) { super(ReportId.BR_0420312_P9, "0.0.5", "0420312", @@ -31,10 +30,21 @@ public class ReportBR_0420312_P9 extends ReportWithPeriod { startDate, endDate); this.destination = destination; - part_9 = new Info_0420312_P9(currencyId, + } + @Deprecated + public ReportBR_0420312_P9(LocalDate startDate, + LocalDate endDate, + String destination, + String currencyId, + String liabilitiesClaimsAssetsCompanyId, + String liabilitiesClaimsMoneyCurrencyCode, + String liabilitiesClaimsAssetsLiabilities) { + this(startDate, + endDate, destination); + rows.add( new Info_0420312_P9(currencyId, liabilitiesClaimsAssetsCompanyId, liabilitiesClaimsMoneyCurrencyCode, - liabilitiesClaimsAssetsLiabilities); + liabilitiesClaimsAssetsLiabilities)); } public static class Info_0420312_P9 { @@ -65,6 +75,10 @@ public class ReportBR_0420312_P9 extends ReportWithPeriod { } } + public List getRows() { + return rows; + } + @Override public String getReportName(LocalDateTime reportDateTime) { return "REPBR.0420312_р3-2.%s-%s.%s".formatted( diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P10_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P10_collector.java new file mode 100644 index 000000000..754f89d70 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P10_collector.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P10; +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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; + +@Component +public class Bt17_5_P10_collector extends ReportDataCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public Bt17_5_P10_collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + Collection 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_P10 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate); + + BigDecimal liabilitiesQuantitySum = liabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P10 reportBR_0420312P10 = new ReportBR_0420312_P10(startDate, endDate, "BR", + toString(liabilitiesQuantitySum) + ); + + return reportBR_0420312P10; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P10.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P2_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P2_collector.java new file mode 100644 index 000000000..a06e635ac --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P2_collector.java @@ -0,0 +1,77 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Component +public class Bt17_5_P2_collector extends ReportDataCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public Bt17_5_P2_collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + Collection 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_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420312_P2 reportBR_0420312P1 = new ReportBR_0420312_P2(startDate, endDate, "BR"); + + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate); + Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); + + for (Map.Entry> companyEntry : indexByCompany.entrySet()) { + final Long companyId = companyEntry.getKey(); + List companyLiabilities=companyEntry.getValue(); + + BigDecimal liabilitiesQuantitySum = companyLiabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P2.Info_0420312_P2 info_0420312_p2 = new ReportBR_0420312_P2.Info_0420312_P2( + toString(companyId), + toString(liabilitiesQuantitySum) + ); + reportBR_0420312P1.getRows().add(info_0420312_p2); + } + + return reportBR_0420312P1; + } + + + @Override + public Class getReportClass() { + return ReportBR_0420312_P2.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P3_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P3_collector.java new file mode 100644 index 000000000..b688219d3 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P3_collector.java @@ -0,0 +1,77 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P3; +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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Component +public class Bt17_5_P3_collector extends ReportDataCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public Bt17_5_P3_collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + Collection 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_P3 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420312_P3 reportBR_0420312P1 = new ReportBR_0420312_P3(startDate, endDate, "BR"); + + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate); + Map> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId); + + for (Map.Entry> companyEntry : indexByCompany.entrySet()) { + final Long companyId = companyEntry.getKey(); + List companyLiabilities=companyEntry.getValue(); + + BigDecimal liabilitiesQuantitySum = companyLiabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + // расчёт похож на ReportBR_0420312_P2 + ReportBR_0420312_P3.Info_0420312_P3 info_0420312_p3 = new ReportBR_0420312_P3.Info_0420312_P3( + toString(companyId), + toString(liabilitiesQuantitySum) + ); + reportBR_0420312P1.getRows().add(info_0420312_p3); + } + + return reportBR_0420312P1; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P3.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P4_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P4_collector.java new file mode 100644 index 000000000..2d64f0d9b --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P4_collector.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P4; +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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; + +@Component +public class Bt17_5_P4_collector extends ReportDataCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public Bt17_5_P4_collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + Collection 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_P4 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate); + + BigDecimal liabilitiesQuantitySum = liabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P4 reportBR_0420312P4 = new ReportBR_0420312_P4(startDate, endDate, + "BR", + toString(liabilitiesQuantitySum)); + + return reportBR_0420312P4; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P4.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P5_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P5_collector.java new file mode 100644 index 000000000..2b6ada458 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P5_collector.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P5; +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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; + +@Component +public class Bt17_5_P5_collector extends ReportDataCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public Bt17_5_P5_collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + Collection 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_P5 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate); + + BigDecimal liabilitiesQuantitySum = liabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P5 reportBR_0420312P5 = new ReportBR_0420312_P5(startDate, endDate, + "BR", + toString(liabilitiesQuantitySum)); + + return reportBR_0420312P5; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P5.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P6_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P6_collector.java new file mode 100644 index 000000000..f6a837457 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P6_collector.java @@ -0,0 +1,64 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P6; +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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; + +@Component +public class Bt17_5_P6_collector extends ReportDataCollector { + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public Bt17_5_P6_collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + Collection 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_P6 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate); + + BigDecimal liabilitiesQuantitySum = liabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P6 reportBR_0420312P5 = new ReportBR_0420312_P6(startDate, endDate, + "BR", + toString(liabilitiesQuantitySum)); + + return reportBR_0420312P5; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P6.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P7_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P7_collector.java new file mode 100644 index 000000000..5a53bde8d --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P7_collector.java @@ -0,0 +1,66 @@ +package ru.spcex.clearing.reports.services.collector; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P7; +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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Objects; + +@Component +public class Bt17_5_P7_collector extends ReportDataCollector { + private Imdg companyImdg; + private Imdg liabilitiesClaimsAssetsImdg; + + @Autowired + public Bt17_5_P7_collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + } + + Collection 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_P7 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + Collection liabilities = searchLiabilitiesClaimsAssets(startDate, endDate); + + BigDecimal liabilitiesQuantitySum = liabilities.stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add).orElse(BigDecimal.ZERO); + + ReportBR_0420312_P7 reportBR_0420312P5 = new ReportBR_0420312_P7(startDate, endDate, + "BR", + toString(liabilitiesQuantitySum)); + + return reportBR_0420312P5; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P7.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P8_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P8_collector.java new file mode 100644 index 000000000..55dbd36d1 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P8_collector.java @@ -0,0 +1,114 @@ +package ru.spcex.clearing.reports.services.collector; + +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.generated.ClearingMemberCategory; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.clearing.platform.dictionary.CurrencyCodeDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P8; +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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +@Component +public class Bt17_5_P8_collector extends ReportDataCollector { + private Imdg companyImdg; + private Imdg companySymbolsImdg; + private Imdg clearingMemberCategoryImdg; + private Imdg liabilitiesClaimsAssetsImdg; + private Imdg currencyCodeDictionaryImdg; + + @Autowired + public Bt17_5_P8_collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class); + currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class); + } + + protected CompanySymbols findSymbol(DocumentTypes docType, Long companyId) { + CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of( + "companySymbol", docType.getKey(), + "companyId", companyId + )); + return companySymbol; + } + + Collection 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_P8 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420312_P8 reportBR_0420312P8 = new ReportBR_0420312_P8(startDate, endDate, "BR"); + + 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)); + String clearingMemberCategory = cmc == null ? null : cmc.getClearingMemberCategory(); + + + List companyLiabilities = companyEntry.getValue(); + Map> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency); + for (Map.Entry> currencyEntry : indexByCurrency.entrySet()) { + String currencyCode = currencyEntry.getKey(); + Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode); + if (currencyId == null) { + log.warn("No currency found for code \"{}\"", currencyEntry.getKey()); + } + ReportBR_0420312_P8.Info_0420312_P8 info_0420312_p8 = new ReportBR_0420312_P8.Info_0420312_P8( + toString(currencyId), + toString(companyId), + company.getFullName(), + companySymbolINN == null ? null : companySymbolINN.getCompanySymbolValue(), + companySymbolOGRN == null ? null : companySymbolOGRN.getCompanySymbolValue(), + company.getProfile().getCountryCode(), + clearingMemberCategory + ); + reportBR_0420312P8.getRows().add(info_0420312_p8); + } + } + + return reportBR_0420312P8; + } + + + @Override + public Class getReportClass() { + return ReportBR_0420312_P8.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P9_collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P9_collector.java new file mode 100644 index 000000000..b7763cd0e --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/Bt17_5_P9_collector.java @@ -0,0 +1,100 @@ +package ru.spcex.clearing.reports.services.collector; + +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.generated.ClearingMemberCategory; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.clearing.platform.dictionary.CurrencyCodeDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P1; +import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P9; +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.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Component +public class Bt17_5_P9_collector extends ReportDataCollector { + private Imdg companyImdg; + private Imdg liabilitiesClaimsAssetsImdg; + private Imdg currencyCodeDictionaryImdg; + + @Autowired + public Bt17_5_P9_collector(ImdgProvider imdgProvider) { + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class); + currencyCodeDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class); + } + + + Collection 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_P9 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + + ReportBR_0420312_P9 reportBR_0420312P9 = new ReportBR_0420312_P9(startDate, endDate, "BR"); + + 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; + } + List companyLiabilities = companyEntry.getValue(); + Map> indexByCurrency = MapUtil.indexList(companyLiabilities, LiabilitiesClaimsAssets::getCurrency); + for (Map.Entry> currencyEntry : indexByCurrency.entrySet()) { + String currencyCode = currencyEntry.getKey(); + Long currencyId = MapUtil.getDictionaryIdByCode(currencyCodeDictionaryImdg, currencyCode); + if (currencyId == null) { + log.warn("No currency found for code \"{}\"", currencyEntry.getKey()); + } + BigDecimal summOfLiabilities = currencyEntry.getValue().stream() + .map(LiabilitiesClaimsAssets::getLiabilitiesQuantity) + .filter(Objects::nonNull) + .reduce(BigDecimal::add) + .orElse(BigDecimal.ZERO); + ReportBR_0420312_P9.Info_0420312_P9 info_0420312_p9 = new ReportBR_0420312_P9.Info_0420312_P9( + toString(currencyId), + toString(companyId), + currencyCode, + toString(summOfLiabilities) + ); + reportBR_0420312P9.getRows().add(info_0420312_p9); + } + } + + return reportBR_0420312P9; + } + + @Override + public Class getReportClass() { + return ReportBR_0420312_P9.class; + } +}