From 52365c093f70342d6d62dd33b0d4c98350d35306 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 9 Jan 2023 19:16:19 +0300 Subject: [PATCH] cls-52/53 --- .../reports/ReportsServiceApplication.java | 65 ++++-- .../reports/bt_12_2/ReportPA_BT2_B.java | 194 +++++++++++------- .../reports/bt_12_2/ReportPA_BT2_IV.java | 185 ++++++++++------- .../reports/services/ReportsService.java | 76 +++---- .../services/builders/DOCXReportBuilder.java | 22 -- .../collector/ReportPA_BT2_B_Collector.java | 109 ++++++++++ .../collector/ReportPA_BT2_IV_Collector.java | 114 ++++++++++ .../src/main/resources/application.properties | 12 +- 8 files changed, 548 insertions(+), 229 deletions(-) delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_BT2_B_Collector.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_BT2_IV_Collector.java 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 c6862616f..7cf290dd9 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 @@ -1,15 +1,23 @@ package ru.spcex.clearing.reports; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.naming.NoNameCoder; +import com.thoughtworks.xstream.io.xml.XppDriver; import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.context.ConfigurableApplicationContext; +import ru.spcex.clearing.reports.notifications.REXNotificationBuilder; import ru.spcex.clearing.reports.reports.AbstractReport; +import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_BT2_B; +import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_BT2_IV; import ru.spcex.clearing.reports.services.ReportDataCollector; import ru.spcex.clearing.reports.services.ReportsService; import ru.spcex.clearing.reports.services.builders.XMLReportBuilder; +import ru.spcex.clearing.reports.services.collector.ReportPA_BT2_B_Collector; +import ru.spcex.clearing.reports.services.collector.ReportPA_BT2_IV_Collector; import ru.spcex.platform.imdg.api.ImdgProvider; import java.io.File; @@ -21,32 +29,49 @@ public class ReportsServiceApplication { public static void main(String[] args) { try { SpringApplicationBuilder builder = new SpringApplicationBuilder(ReportsServiceApplication.class); + builder.run(args); ConfigurableApplicationContext context = builder.run(args); + test(context); + //todo это тест. Переписать код: - Logger log = LoggerFactory.getLogger(ReportsServiceApplication.class); - ImdgProvider imdg = context.getBean(ImdgProvider.class); - log.info("Wait IMDG..."); - imdg.waitAvailable(); - log.info("Run generate report."); - Map allReports = context.getBeansOfType(ReportDataCollector.class); - log.info("Report types: {}", allReports); - for (ReportDataCollector collector : allReports.values()) { - log.info("Make report {}", collector); - File outPath=new File("."); - XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass(), outPath); - LocalDate date2 = LocalDate.now(); - LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1); - AbstractReport report = collector.collectReportWithPeriod(date1, date2); - xmlReportBuilder.createReport(report); - } - log.info("Shutdown application after work"); - context.close(); // todo если будет запущен как сервис, сделать выход опционально, по другому. +// Logger log = LoggerFactory.getLogger(ReportsServiceApplication.class); +// ImdgProvider imdg = context.getBean(ImdgProvider.class); +// log.info("Wait IMDG..."); +// imdg.waitAvailable(); +// log.info("Run generate report."); +// Map allReports = context.getBeansOfType(ReportDataCollector.class); +// log.info("Report types: {}", allReports); +// for (ReportDataCollector collector : allReports.values()) { +// log.info("Make report {}", collector); +// File outPath=new File("."); +// XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass(), outPath); +// LocalDate date2 = LocalDate.now(); +// LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1); +// AbstractReport report = collector.collectReportWithPeriod(date1, date2); +// xmlReportBuilder.createReport(report); +// } +// log.info("Shutdown application after work"); +// context.close(); // todo если будет запущен как сервис, сделать выход опционально, по другому. } catch (Throwable e) { LoggerFactory.getLogger(ReportsServiceApplication.class).error("Report-service start failed: {} -> {}", e.getClass().getSimpleName(), ExceptionUtils.getStackTrace(e)); System.exit(-1); } - ReportsService reportsService = new ReportsService(); - reportsService.writeXML(); +// ReportsService reportsService = new ReportsService(); +// reportsService.writeXML(); + } + + + public static void test(ConfigurableApplicationContext context) { + ImdgProvider imdg = context.getBean(ImdgProvider.class); + ReportPA_BT2_IV_Collector collector = new ReportPA_BT2_IV_Collector(imdg); + ReportPA_BT2_IV report = collector.collectReportWithPeriod( + LocalDate.of(2022, 12, 1), + LocalDate.of(2023, 1, 1) + ); + XStream xStream = new XStream(new XppDriver(new NoNameCoder())); + xStream.processAnnotations(ReportPA_BT2_IV.class); + String out = xStream.toXML(report); + System.out.println(out); } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_B.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_B.java index ff587a3b4..443b7cccb 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_B.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_B.java @@ -2,11 +2,15 @@ package ru.spcex.clearing.reports.reports.bt_12_2; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamConverter; import ru.spcex.clearing.reports.reports.ReportId; import ru.spcex.clearing.reports.reports.ReportWithPeriod; +import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; @XStreamAlias("netPositionBank") public class ReportPA_BT2_B extends ReportWithPeriod { @@ -14,111 +18,155 @@ public class ReportPA_BT2_B extends ReportWithPeriod { @XStreamAlias("clearingMemberCategory") private String clearingMemberCategory; - @XStreamAlias("liabilitiesClaimsAssets_fullName") - private String liabilitiesClaimsAssetsFullName; - - @XStreamAlias("company_clearingCode") - private String companyClearingCode; - - @XStreamAlias("liabilitiesClaimsAssets_settlementDate") - private String liabilitiesClaimsAssetsSettlementDate; - - @XStreamAlias("liabilitiesClaimsAssets_refundDate") - private String liabilitiesClaimsAssetsRefundDate; - - @XStreamAlias("liabilitiesClaimsAssets_tradingDate") - private String liabilitiesClaimsAssetsTradingDate; - - @XStreamAlias("liabilitiesClaimsAssets_contract") - private String liabilitiesClaimsAssetsContract; - - @XStreamAlias("liabilitiesClaimsAssets_liabilitiesQuantity") - private String liabilitiesClaimsAssetsLiabilitiesQuantity; - - @XStreamAlias("chargeCommission") - private String chargeCommission; - - @XStreamAlias("liabilitiesClaimsAssets_ClaimsQuantity") - private String liabilitiesClaimsAssetsClaimsQuantity; - - @XStreamAlias("liabilitiesClaimsAssets_refundPaymentId") - private String liabilitiesClaimsAssetsRefundPaymentId; - - @XStreamAlias("liabilitiesClaimsAssets_clearingStatus") - private String liabilitiesClaimsAssetsClearingStatus; - - @XStreamAlias("liabilitiesClaimsAssets_comment") - private String liabilitiesClaimsAssetsComment; + @XStreamAlias("rows") + private List rows; @XStreamAlias("total") private Total total; - public ReportPA_BT2_B(LocalDate startDate, - LocalDate endDate, - String clearingMemberCategory, - String liabilitiesClaimsAssetsFullName, - String companyClearingCode, - String liabilitiesClaimsAssetsSettlementDate, - String liabilitiesClaimsAssetsRefundDate, - String liabilitiesClaimsAssetsTradingDate, - String liabilitiesClaimsAssetsContract, - String liabilitiesClaimsAssetsLiabilitiesQuantity, - String chargeCommission, - String liabilitiesClaimsAssetsClaimsQuantity, - String liabilitiesClaimsAssetsRefundPaymentId, - String liabilitiesClaimsAssetsClearingStatus, - String liabilitiesClaimsAssetsComment, - String claimsAmount, - String liabilitiesAmount, - String paymentAmount) { + LocalDate endDate) { super(ReportId.PA_BT2_B, "0.0.1", - "BT2", + "BT12.2", "Отчет по нетто-позиции участника клиринга в секции МКР (Уполномоченный банк)", startDate, endDate); - this.clearingMemberCategory = clearingMemberCategory; - this.liabilitiesClaimsAssetsFullName = liabilitiesClaimsAssetsFullName; - this.companyClearingCode = companyClearingCode; - this.liabilitiesClaimsAssetsSettlementDate = liabilitiesClaimsAssetsSettlementDate; - this.liabilitiesClaimsAssetsRefundDate = liabilitiesClaimsAssetsRefundDate; - this.liabilitiesClaimsAssetsTradingDate = liabilitiesClaimsAssetsTradingDate; - this.liabilitiesClaimsAssetsContract = liabilitiesClaimsAssetsContract; - this.liabilitiesClaimsAssetsLiabilitiesQuantity = liabilitiesClaimsAssetsLiabilitiesQuantity; - this.chargeCommission = chargeCommission; - this.liabilitiesClaimsAssetsClaimsQuantity = liabilitiesClaimsAssetsClaimsQuantity; - this.liabilitiesClaimsAssetsRefundPaymentId = liabilitiesClaimsAssetsRefundPaymentId; - this.liabilitiesClaimsAssetsClearingStatus = liabilitiesClaimsAssetsClearingStatus; - this.liabilitiesClaimsAssetsComment = liabilitiesClaimsAssetsComment; - this.total = new Total(claimsAmount, liabilitiesAmount, paymentAmount); + this.clearingMemberCategory = "B"; } @Override public String getReportName(LocalDateTime reportDateTime) { - return "REPPA.BT12.2.B.%s-%s.%s".formatted( + return "REPPA.B.%s-%s.%s".formatted( DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate), DATE_TIME_FORMATTER.format(reportDateTime) ); } + public Total getTotal() { + return total; + } + + public void setTotal(Total total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + @XStreamAlias("total") public static class Total { + @XStreamAsAttribute @XStreamAlias("claimsAmount") - private String claimsAmount; + private BigDecimal claimsAmount; + @XStreamAsAttribute @XStreamAlias("liabilitiesAmount") - private String liabilitiesAmount; + private BigDecimal liabilitiesAmount; + @XStreamAsAttribute @XStreamAlias("paymentAmount") - private String paymentAmount; + private BigDecimal paymentAmount; - public Total(String claimsAmount, String liabilitiesAmount, String paymentAmount) { + public Total(BigDecimal claimsAmount, BigDecimal liabilitiesAmount, BigDecimal paymentAmount) { this.claimsAmount = claimsAmount; this.liabilitiesAmount = liabilitiesAmount; this.paymentAmount = paymentAmount; } } + + @XStreamAlias("row") + public static class Row { + @XStreamAsAttribute + @XStreamAlias("id") + private Long id; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_fullName") + private String liabilitiesClaimsAssetsFullName; + + @XStreamAsAttribute + @XStreamAlias("company_clearingCode") + private String companyClearingCode; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_settlementDate") + @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) + private LocalDate liabilitiesClaimsAssetsSettlementDate; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_refundDate") + @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) + private LocalDate liabilitiesClaimsAssetsRefundDate; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_tradingDate") + @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) + private LocalDate liabilitiesClaimsAssetsTradingDate; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_contract") + private String liabilitiesClaimsAssetsContract; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_liabilitiesQuantity") + private BigDecimal liabilitiesClaimsAssetsLiabilitiesQuantity; + + @XStreamAsAttribute + @XStreamAlias("chargeCommission") + private String chargeCommission; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_ClaimsQuantity") + private BigDecimal liabilitiesClaimsAssetsClaimsQuantity; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_refundPaymentId") + private Long liabilitiesClaimsAssetsRefundPaymentId; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_clearingStatus") + private Long liabilitiesClaimsAssetsClearingStatus; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_comment") + private String liabilitiesClaimsAssetsComment; + + public Row(Long id, + String liabilitiesClaimsAssetsFullName, + String companyClearingCode, + LocalDate liabilitiesClaimsAssetsSettlementDate, + LocalDate liabilitiesClaimsAssetsRefundDate, + LocalDate liabilitiesClaimsAssetsTradingDate, + String liabilitiesClaimsAssetsContract, + BigDecimal liabilitiesClaimsAssetsLiabilitiesQuantity, + String chargeCommission, + BigDecimal liabilitiesClaimsAssetsClaimsQuantity, + Long liabilitiesClaimsAssetsRefundPaymentId, + Long liabilitiesClaimsAssetsClearingStatus, + String liabilitiesClaimsAssetsComment) { + this.id = id; + this.liabilitiesClaimsAssetsFullName = liabilitiesClaimsAssetsFullName; + this.companyClearingCode = companyClearingCode; + this.liabilitiesClaimsAssetsSettlementDate = liabilitiesClaimsAssetsSettlementDate; + this.liabilitiesClaimsAssetsRefundDate = liabilitiesClaimsAssetsRefundDate; + this.liabilitiesClaimsAssetsTradingDate = liabilitiesClaimsAssetsTradingDate; + this.liabilitiesClaimsAssetsContract = liabilitiesClaimsAssetsContract; + this.liabilitiesClaimsAssetsLiabilitiesQuantity = liabilitiesClaimsAssetsLiabilitiesQuantity; + this.chargeCommission = chargeCommission; + this.liabilitiesClaimsAssetsClaimsQuantity = liabilitiesClaimsAssetsClaimsQuantity; + this.liabilitiesClaimsAssetsRefundPaymentId = liabilitiesClaimsAssetsRefundPaymentId; + this.liabilitiesClaimsAssetsClearingStatus = liabilitiesClaimsAssetsClearingStatus; + this.liabilitiesClaimsAssetsComment = liabilitiesClaimsAssetsComment; + } + } + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_IV.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_IV.java index dfae151ed..5895f61a7 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_IV.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bt_12_2/ReportPA_BT2_IV.java @@ -2,11 +2,15 @@ package ru.spcex.clearing.reports.reports.bt_12_2; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamConverter; import ru.spcex.clearing.reports.reports.ReportId; import ru.spcex.clearing.reports.reports.ReportWithPeriod; +import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; @XStreamAlias("netPositionInitiator") public class ReportPA_BT2_IV extends ReportWithPeriod { @@ -14,84 +18,22 @@ public class ReportPA_BT2_IV extends ReportWithPeriod { @XStreamAlias("clearingMemberCategory") private String clearingMemberCategory; - @XStreamAlias("liabilitiesClaimsAssets_fullName") - private String liabilitiesClaimsAssetsFullName; - - @XStreamAlias("company_clearingCode") - private String companyClearingCode; - - @XStreamAlias("liabilitiesClaimsAssets_settlementDate") - private String liabilitiesClaimsAssetsSettlementDate; - - @XStreamAlias("liabilitiesClaimsAssets_refundDate") - private String liabilitiesClaimsAssetsRefundDate; - - @XStreamAlias("liabilitiesClaimsAssets_tradingDate") - private String liabilitiesClaimsAssetsTradingDate; - - @XStreamAlias("liabilitiesClaimsAssets_contract") - private String liabilitiesClaimsAssetsContract; - - @XStreamAlias("liabilitiesClaimsAssets_liabilitiesQuantity") - private String liabilitiesClaimsAssetsLiabilitiesQuantity; - - @XStreamAlias("chargeCommission") - private String chargeCommission; - - @XStreamAlias("liabilitiesClaimsAssets_ClaimsQuantity") - private String liabilitiesClaimsAssetsClaimsQuantity; - - @XStreamAlias("liabilitiesClaimsAssets_refundPaymentId") - private String liabilitiesClaimsAssetsRefundPaymentId; - - @XStreamAlias("liabilitiesClaimsAssets_clearingStatus") - private String liabilitiesClaimsAssetsClearingStatus; - - @XStreamAlias("liabilitiesClaimsAssets_comment") - private String liabilitiesClaimsAssetsComment; + @XStreamAlias("rows") + private List rows; @XStreamAlias("total") private Total total; public ReportPA_BT2_IV(LocalDate startDate, - LocalDate endDate, - String clearingMemberCategory, - String liabilitiesClaimsAssetsFullName, - String companyClearingCode, - String liabilitiesClaimsAssetsSettlementDate, - String liabilitiesClaimsAssetsRefundDate, - String liabilitiesClaimsAssetsTradingDate, - String liabilitiesClaimsAssetsContract, - String liabilitiesClaimsAssetsLiabilitiesQuantity, - String chargeCommission, - String liabilitiesClaimsAssetsClaimsQuantity, - String liabilitiesClaimsAssetsRefundPaymentId, - String liabilitiesClaimsAssetsClearingStatus, - String liabilitiesClaimsAssetsComment, - String claimsAmount, - String liabilitiesAmount, - String paymentAmount) { + LocalDate endDate) { super(ReportId.PA_BT2_IV, "0.0.1", "BT2", "Отчет по нетто-позиции участника клиринга в секции МКР (Вкладчик)", startDate, endDate); - this.clearingMemberCategory = clearingMemberCategory; - this.liabilitiesClaimsAssetsFullName = liabilitiesClaimsAssetsFullName; - this.companyClearingCode = companyClearingCode; - this.liabilitiesClaimsAssetsSettlementDate = liabilitiesClaimsAssetsSettlementDate; - this.liabilitiesClaimsAssetsRefundDate = liabilitiesClaimsAssetsRefundDate; - this.liabilitiesClaimsAssetsTradingDate = liabilitiesClaimsAssetsTradingDate; - this.liabilitiesClaimsAssetsContract = liabilitiesClaimsAssetsContract; - this.liabilitiesClaimsAssetsLiabilitiesQuantity = liabilitiesClaimsAssetsLiabilitiesQuantity; - this.chargeCommission = chargeCommission; - this.liabilitiesClaimsAssetsClaimsQuantity = liabilitiesClaimsAssetsClaimsQuantity; - this.liabilitiesClaimsAssetsRefundPaymentId = liabilitiesClaimsAssetsRefundPaymentId; - this.liabilitiesClaimsAssetsClearingStatus = liabilitiesClaimsAssetsClearingStatus; - this.liabilitiesClaimsAssetsComment = liabilitiesClaimsAssetsComment; - this.total = new Total(claimsAmount, liabilitiesAmount, paymentAmount); + this.clearingMemberCategory = "I,V"; } @Override @@ -103,22 +45,125 @@ public class ReportPA_BT2_IV extends ReportWithPeriod { ); } + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public Total getTotal() { + return total; + } + + public void setTotal(Total total) { + this.total = total; + } + @XStreamAlias("total") public static class Total { @XStreamAlias("claimsAmount") - private String claimsAmount; + private BigDecimal claimsAmount; @XStreamAlias("liabilitiesAmount") - private String liabilitiesAmount; + private BigDecimal liabilitiesAmount; @XStreamAlias("paymentAmount") - private String paymentAmount; + private BigDecimal paymentAmount; - public Total(String claimsAmount, String liabilitiesAmount, String paymentAmount) { + public Total(BigDecimal claimsAmount, BigDecimal liabilitiesAmount, BigDecimal paymentAmount) { this.claimsAmount = claimsAmount; this.liabilitiesAmount = liabilitiesAmount; this.paymentAmount = paymentAmount; } } + @XStreamAlias("row") + public static class Row { + @XStreamAsAttribute + @XStreamAlias("id") + private Long id; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_fullName") + private String liabilitiesClaimsAssetsFullName; + + @XStreamAsAttribute + @XStreamAlias("company_clearingCode") + private String companyClearingCode; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_settlementDate") + @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) + private LocalDate liabilitiesClaimsAssetsSettlementDate; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_refundDate") + @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) + private LocalDate liabilitiesClaimsAssetsRefundDate; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_tradingDate") + @XStreamConverter(value = FormattedLocalDateConverter.class, strings = {"dd.MM.yyyy"}) + private LocalDate liabilitiesClaimsAssetsTradingDate; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_contract") + private String liabilitiesClaimsAssetsContract; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_liabilitiesQuantity") + private BigDecimal liabilitiesClaimsAssetsLiabilitiesQuantity; + + @XStreamAsAttribute + @XStreamAlias("chargeCommission") + private String chargeCommission; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_ClaimsQuantity") + private BigDecimal liabilitiesClaimsAssetsClaimsQuantity; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_refundPaymentId") + private Long liabilitiesClaimsAssetsRefundPaymentId; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_clearingStatus") + private Long liabilitiesClaimsAssetsClearingStatus; + + @XStreamAsAttribute + @XStreamAlias("liabilitiesClaimsAssets_comment") + private String liabilitiesClaimsAssetsComment; + + + public Row(Long id, + String liabilitiesClaimsAssetsFullName, + String companyClearingCode, + LocalDate liabilitiesClaimsAssetsSettlementDate, + LocalDate liabilitiesClaimsAssetsRefundDate, + LocalDate liabilitiesClaimsAssetsTradingDate, + String liabilitiesClaimsAssetsContract, + BigDecimal liabilitiesClaimsAssetsLiabilitiesQuantity, + String chargeCommission, + BigDecimal liabilitiesClaimsAssetsClaimsQuantity, + Long liabilitiesClaimsAssetsRefundPaymentId, + Long liabilitiesClaimsAssetsClearingStatus, + String liabilitiesClaimsAssetsComment) { + this.id = id; + this.liabilitiesClaimsAssetsFullName = liabilitiesClaimsAssetsFullName; + this.companyClearingCode = companyClearingCode; + this.liabilitiesClaimsAssetsSettlementDate = liabilitiesClaimsAssetsSettlementDate; + this.liabilitiesClaimsAssetsRefundDate = liabilitiesClaimsAssetsRefundDate; + this.liabilitiesClaimsAssetsTradingDate = liabilitiesClaimsAssetsTradingDate; + this.liabilitiesClaimsAssetsContract = liabilitiesClaimsAssetsContract; + this.liabilitiesClaimsAssetsLiabilitiesQuantity = liabilitiesClaimsAssetsLiabilitiesQuantity; + this.chargeCommission = chargeCommission; + this.liabilitiesClaimsAssetsClaimsQuantity = liabilitiesClaimsAssetsClaimsQuantity; + this.liabilitiesClaimsAssetsRefundPaymentId = liabilitiesClaimsAssetsRefundPaymentId; + this.liabilitiesClaimsAssetsClearingStatus = liabilitiesClaimsAssetsClearingStatus; + this.liabilitiesClaimsAssetsComment = liabilitiesClaimsAssetsComment; + } + } + } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportsService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportsService.java index c6f0a6eb5..999a08190 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportsService.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportsService.java @@ -226,45 +226,45 @@ public class ReportsService { /* ========= БТ 12.2 ========== */ - ReportPA_BT2_IV reportPA_bt2_iv = new ReportPA_BT2_IV(LocalDate.now(), - LocalDate.now(), - "clearingMemberCategory", - "liabilitiesClaimsAssetsFullName", - "companyClearingCode", - "liabilitiesClaimsAssetsSettlementDate", - "liabilitiesClaimsAssetsRefundDate", - "liabilitiesClaimsAssetsTradingDate", - "liabilitiesClaimsAssetsContract", - "liabilitiesClaimsAssetsLiabilitiesQuantity", - "chargeCommission", - "liabilitiesClaimsAssetsClaimsQuantity", - "liabilitiesClaimsAssetsRefundPaymentId", - "liabilitiesClaimsAssetsClearingStatus", - "liabilitiesClaimsAssetsComment", - "claimsAmount", - "liabilitiesAmount", - "paymentAmount"); - log.info("ReportPA_BT2_IV:\n{}\n", xStream.toXML(reportPA_bt2_iv)); +// ReportPA_BT2_IV reportPA_bt2_iv = new ReportPA_BT2_IV(LocalDate.now(), +// LocalDate.now(), +// "clearingMemberCategory", +// "liabilitiesClaimsAssetsFullName", +// "companyClearingCode", +// "liabilitiesClaimsAssetsSettlementDate", +// "liabilitiesClaimsAssetsRefundDate", +// "liabilitiesClaimsAssetsTradingDate", +// "liabilitiesClaimsAssetsContract", +// "liabilitiesClaimsAssetsLiabilitiesQuantity", +// "chargeCommission", +// "liabilitiesClaimsAssetsClaimsQuantity", +// "liabilitiesClaimsAssetsRefundPaymentId", +// "liabilitiesClaimsAssetsClearingStatus", +// "liabilitiesClaimsAssetsComment", +// "claimsAmount", +// "liabilitiesAmount", +// "paymentAmount"); +// log.info("ReportPA_BT2_IV:\n{}\n", xStream.toXML(reportPA_bt2_iv)); - ReportPA_BT2_B reportPA_bt2_b = new ReportPA_BT2_B(LocalDate.now(), - LocalDate.now(), - "clearingMemberCategory", - "liabilitiesClaimsAssetsFullName", - "companyClearingCode", - "liabilitiesClaimsAssetsSettlementDate", - "liabilitiesClaimsAssetsRefundDate", - "liabilitiesClaimsAssetsTradingDate", - "liabilitiesClaimsAssetsContract", - "liabilitiesClaimsAssetsLiabilitiesQuantity", - "chargeCommission", - "liabilitiesClaimsAssetsClaimsQuantity", - "liabilitiesClaimsAssetsRefundPaymentId", - "liabilitiesClaimsAssetsClearingStatus", - "liabilitiesClaimsAssetsComment", - "claimsAmount", - "liabilitiesAmount", - "paymentAmount"); - log.info("ReportPA_BT2_B:\n{}\n", xStream.toXML(reportPA_bt2_b)); +// ReportPA_BT2_B reportPA_bt2_b = new ReportPA_BT2_B(LocalDate.now(), +// LocalDate.now(), +// "clearingMemberCategory", +// "liabilitiesClaimsAssetsFullName", +// "companyClearingCode", +// "liabilitiesClaimsAssetsSettlementDate", +// "liabilitiesClaimsAssetsRefundDate", +// "liabilitiesClaimsAssetsTradingDate", +// "liabilitiesClaimsAssetsContract", +// "liabilitiesClaimsAssetsLiabilitiesQuantity", +// "chargeCommission", +// "liabilitiesClaimsAssetsClaimsQuantity", +// "liabilitiesClaimsAssetsRefundPaymentId", +// "liabilitiesClaimsAssetsClearingStatus", +// "liabilitiesClaimsAssetsComment", +// "claimsAmount", +// "liabilitiesAmount", +// "paymentAmount"); +// log.info("ReportPA_BT2_B:\n{}\n", xStream.toXML(reportPA_bt2_b)); diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java deleted file mode 100644 index 2788ca791..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/builders/DOCXReportBuilder.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.spcex.clearing.reports.services.builders; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import ru.spcex.clearing.reports.reports.AbstractReport; - -import java.io.File; -import java.io.IOException; - -public class DOCXReportBuilder extends FileReportBuilder { - private final Logger log = LoggerFactory.getLogger(getClass()); - - protected DOCXReportBuilder(Class reportClass, File templateResource) throws IOException { - super(reportClass); - } - - @Override - public File createReport(AbstractReport report) throws IOException { - // todo implement - return null; - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_BT2_B_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_BT2_B_Collector.java new file mode 100644 index 000000000..6fca54da0 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_BT2_B_Collector.java @@ -0,0 +1,109 @@ +package ru.spcex.clearing.reports.services.collector; + +import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.clearing.platform.dictionary.ClearingStatusDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_BT2_B; +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 ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast; +import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateHazelcast; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +public class ReportPA_BT2_B_Collector extends ReportDataCollector { + private final Imdg liabilitiesClaimsAssetsImdg; + private final Imdg clearingStatusDictionaryImdg; + private final Imdg clearingMemberCategoryImdg; + + public ReportPA_BT2_B_Collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_LiabilitiesClaimsAssets, + LiabilitiesClaimsAssets.class + ); + clearingStatusDictionaryImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_ClearingStatusDictionary, + ClearingStatusDictionary.class + ); + clearingMemberCategoryImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_ClearingMemberCategory, + ClearingMemberCategory.class + ); + } + + @Override + public ReportPA_BT2_B collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + ImdgPredicateBuilder builder = new ImdgPredicateBuilderHazelcast(); + + ImdgPredicate clearingMemberCategoryPredicate = builder.equals("clearingMemberCategory", "B"); + Collection clearingMemberCategories = + clearingMemberCategoryImdg.getCollectionObjectsByPredicate(clearingMemberCategoryPredicate); + Set companyIds = clearingMemberCategories.stream() + .map(ClearingMemberCategory::getCompanyId) + .collect(Collectors.toSet()); + + ImdgPredicate refundDatePredicate = builder.and( + builder.greatEqual("refundDate", toInstantStartDay(startDate)), + builder.lessEqual("refundDate", toInstantStartDay(endDate)) + ); + ImdgPredicate companyIdPredicates = builder.equals("companyId", -1); + for (Long companyId : companyIds) { + companyIdPredicates = builder.or(companyIdPredicates, builder.equals("companyId", companyId)); + } + ImdgPredicate finalPredicate = builder.and(refundDatePredicate, companyIdPredicates); + Collection liabilitiesClaimsAssets = + liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(finalPredicate); + + ReportPA_BT2_B report = new ReportPA_BT2_B(startDate, endDate); + List rows = new ArrayList<>(liabilitiesClaimsAssets.size()); + BigDecimal claimsAmount = BigDecimal.ZERO; + BigDecimal liabilitiesAmount = BigDecimal.ZERO; + BigDecimal paymentAmount = BigDecimal.ZERO; + for (LiabilitiesClaimsAssets liabilitiesClaimsAsset : liabilitiesClaimsAssets) { + ReportPA_BT2_B.Row row = new ReportPA_BT2_B.Row( + liabilitiesClaimsAsset.getId(), + liabilitiesClaimsAsset.getFullName(), + liabilitiesClaimsAsset.getClearingCode(), + liabilitiesClaimsAsset.getSettlementDate() != null ? LocalDate.ofInstant(liabilitiesClaimsAsset.getSettlementDate(), ZoneId.systemDefault()) : null, + liabilitiesClaimsAsset.getRefundDate() != null ? LocalDate.ofInstant(liabilitiesClaimsAsset.getRefundDate(), ZoneId.systemDefault()) : null, + liabilitiesClaimsAsset.getTradingDate() != null ? LocalDate.ofInstant(liabilitiesClaimsAsset.getTradingDate(), ZoneId.systemDefault()) : null, + liabilitiesClaimsAsset.getContract(), + liabilitiesClaimsAsset.getLiabilitiesQuantity(), + "NOT PRESENTED ON DB", // todo спросить в таске, в базе нету этого поля + liabilitiesClaimsAsset.getClaimsQuantity(), + liabilitiesClaimsAsset.getRefundPaymentId(), + liabilitiesClaimsAsset.getClearingStatus(), + liabilitiesClaimsAsset.getComment() + ); + rows.add(row); + + if (liabilitiesClaimsAsset.getClaimsQuantity() != null) + claimsAmount = claimsAmount.add(liabilitiesClaimsAsset.getClaimsQuantity()); + + if (liabilitiesClaimsAsset.getLiabilitiesQuantity() != null) + liabilitiesAmount = liabilitiesAmount.add(liabilitiesClaimsAsset.getLiabilitiesQuantity()); + + paymentAmount = paymentAmount.add(BigDecimal.ZERO); // todo спросить в таске, в тз не указано поле для подсчёта + } + ReportPA_BT2_B.Total total = new ReportPA_BT2_B.Total(claimsAmount, liabilitiesAmount, paymentAmount); + report.setRows(rows); + report.setTotal(total); + + return report; + } + + @Override + public Class getReportClass() { + return ReportPA_BT2_B.class; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_BT2_IV_Collector.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_BT2_IV_Collector.java new file mode 100644 index 000000000..19fb88630 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/collector/ReportPA_BT2_IV_Collector.java @@ -0,0 +1,114 @@ +package ru.spcex.clearing.reports.services.collector; + +import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; +import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets; +import ru.clearing.platform.dictionary.ClearingStatusDictionary; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_BT2_B; +import ru.spcex.clearing.reports.reports.bt_12_2.ReportPA_BT2_IV; +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 ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public class ReportPA_BT2_IV_Collector extends ReportDataCollector { + private final Imdg liabilitiesClaimsAssetsImdg; + private final Imdg clearingStatusDictionaryImdg; + private final Imdg clearingMemberCategoryImdg; + + public ReportPA_BT2_IV_Collector(ImdgProvider imdgProvider) { + liabilitiesClaimsAssetsImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_LiabilitiesClaimsAssets, + LiabilitiesClaimsAssets.class + ); + clearingStatusDictionaryImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_ClearingStatusDictionary, + ClearingStatusDictionary.class + ); + clearingMemberCategoryImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_ClearingMemberCategory, + ClearingMemberCategory.class + ); + } + + @Override + public ReportPA_BT2_IV collectReportWithPeriod(LocalDate startDate, LocalDate endDate) { + validateDateRange(startDate, endDate); + ImdgPredicateBuilder builder = new ImdgPredicateBuilderHazelcast(); + + ImdgPredicate clearingMemberCategoryPredicate = builder.or( + builder.equals("clearingMemberCategory", "I"), + builder.equals("clearingMemberCategory", "V") + ); + Collection clearingMemberCategories = + clearingMemberCategoryImdg.getCollectionObjectsByPredicate(clearingMemberCategoryPredicate); + Set companyIds = clearingMemberCategories.stream() + .map(ClearingMemberCategory::getCompanyId) + .collect(Collectors.toSet()); + + ImdgPredicate refundDatePredicate = builder.and( + builder.greatEqual("refundDate", toInstantStartDay(startDate)), + builder.lessEqual("refundDate", toInstantStartDay(endDate)) + ); + ImdgPredicate companyIdPredicates = builder.equals("companyId", -1); + for (Long companyId : companyIds) { + companyIdPredicates = builder.or(companyIdPredicates, builder.equals("companyId", companyId)); + } + ImdgPredicate finalPredicate = builder.and(refundDatePredicate, companyIdPredicates); + Collection liabilitiesClaimsAssets = + liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(finalPredicate); + + ReportPA_BT2_IV report = new ReportPA_BT2_IV(startDate, endDate); + List rows = new ArrayList<>(liabilitiesClaimsAssets.size()); + BigDecimal claimsAmount = BigDecimal.ZERO; + BigDecimal liabilitiesAmount = BigDecimal.ZERO; + BigDecimal paymentAmount = BigDecimal.ZERO; + for (LiabilitiesClaimsAssets liabilitiesClaimsAsset : liabilitiesClaimsAssets) { + ReportPA_BT2_IV.Row row = new ReportPA_BT2_IV.Row( + liabilitiesClaimsAsset.getId(), + liabilitiesClaimsAsset.getFullName(), + liabilitiesClaimsAsset.getClearingCode(), + liabilitiesClaimsAsset.getSettlementDate() != null ? LocalDate.ofInstant(liabilitiesClaimsAsset.getSettlementDate(), ZoneId.systemDefault()) : null, + liabilitiesClaimsAsset.getRefundDate() != null ? LocalDate.ofInstant(liabilitiesClaimsAsset.getRefundDate(), ZoneId.systemDefault()) : null, + liabilitiesClaimsAsset.getTradingDate() != null ? LocalDate.ofInstant(liabilitiesClaimsAsset.getTradingDate(), ZoneId.systemDefault()) : null, + liabilitiesClaimsAsset.getContract(), + liabilitiesClaimsAsset.getLiabilitiesQuantity(), + "NOT PRESENTED ON DB", // todo спросить в таске, в базе нету этого поля + liabilitiesClaimsAsset.getClaimsQuantity(), + liabilitiesClaimsAsset.getRefundPaymentId(), + liabilitiesClaimsAsset.getClearingStatus(), + liabilitiesClaimsAsset.getComment() + ); + rows.add(row); + + if (liabilitiesClaimsAsset.getClaimsQuantity() != null) + claimsAmount = claimsAmount.add(liabilitiesClaimsAsset.getClaimsQuantity()); + + if (liabilitiesClaimsAsset.getLiabilitiesQuantity() != null) + liabilitiesAmount = liabilitiesAmount.add(liabilitiesClaimsAsset.getLiabilitiesQuantity()); + + paymentAmount = paymentAmount.add(BigDecimal.ZERO); // todo спросить в таске, в тз не указано поле для подсчёта + } + ReportPA_BT2_IV.Total total = new ReportPA_BT2_IV.Total(claimsAmount, liabilitiesAmount, paymentAmount); + report.setRows(rows); + report.setTotal(total); + + return report; + } + + @Override + public Class getReportClass() { + return ReportPA_BT2_IV.class; + } +} diff --git a/clearing-parent/reports-service/src/main/resources/application.properties b/clearing-parent/reports-service/src/main/resources/application.properties index ffa1ebe50..5f6e86d9e 100644 --- a/clearing-parent/reports-service/src/main/resources/application.properties +++ b/clearing-parent/reports-service/src/main/resources/application.properties @@ -11,12 +11,12 @@ reports-service.kafka-consumer.auto-offset-reset=latest reports-service.kafka-consumer.linger-ms=1 reports-service.kafka-consumer.buffer-memory=33554432 -#reports-service.kafka-producer.bootstrap-servers=localhost:9092 -#reports-service.kafka-producer.acks=all -#reports-service.kafka-producer.retries=0 -#reports-service.kafka-producer.batch-size=16384 -#reports-service.kafka-producer.linger-ms=1 -#reports-service.kafka-producer.buffer-memory=33554432 +reports-service.kafka-producer.bootstrap-servers=localhost:9092 +reports-service.kafka-producer.acks=all +reports-service.kafka-producer.retries=0 +reports-service.kafka-producer.batch-size=16384 +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