kafka reports

This commit is contained in:
akulikov 2022-12-27 11:27:50 +03:00
parent 5ce07b5404
commit 59a93ee43f
33 changed files with 248 additions and 120 deletions

View file

@ -6,6 +6,7 @@ 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.reports.AbstractReport;
import ru.spcex.clearing.reports.services.ReportDataCollector;
import ru.spcex.clearing.reports.services.ReportsService;
import ru.spcex.clearing.reports.services.builders.XMLReportBuilder;
@ -31,10 +32,11 @@ public class ReportsServiceApplication {
log.info("Report types: {}", allReports);
for (ReportDataCollector collector:allReports.values()) {
log.info("Make report {}", collector);
XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass(), collector);
XMLReportBuilder<? extends AbstractReport> xmlReportBuilder = new XMLReportBuilder<>(collector.getReportClass());
LocalDate date2 = LocalDate.now();
LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1);
xmlReportBuilder.createReport(date1, date2);
AbstractReport report = collector.collectReportWithPeriod(date1, date2);
xmlReportBuilder.createReport(report);
}
log.info("Shutdown application after work");
context.close(); // todo если будет запущен как сервис, сделать выход опционально, по другому.

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.reports;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@ -13,6 +14,9 @@ public abstract class AbstractReport {
protected static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy");
protected static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy'T'HH:mm:ss");
@XStreamOmitField
protected ReportId reportId;
@XStreamAsAttribute
@XStreamAlias("version")
protected String version;
@ -25,9 +29,11 @@ public abstract class AbstractReport {
@XStreamAlias("name")
protected String name;
public AbstractReport(String version,
public AbstractReport(ReportId reportId,
String version,
String code,
String name) {
this.reportId = reportId;
this.version = version;
this.code = code;
this.name = name;

View file

@ -0,0 +1,24 @@
package ru.spcex.clearing.reports.reports;
/**
* Идентификаторы отчётов
*/
public enum ReportId {
PA_BT2_B, PA_BT2_IV,
BT13_11, BT13_12,
BT16_5,
BR_0420315_P1, BR_0420315_P2,
BR_0420317,
BR_0420318,
BR_0420314_P1, BR_0420314_P2,
BR_0420312_P1, BR_0420312_P2, BR_0420312_P3, BR_0420312_P4,
BR_0420312_P5, BR_0420312_P6, BR_0420312_P7, BR_0420312_P8,
BR_0420312_P9, BR_0420312_P10,
}

View file

@ -2,7 +2,6 @@ package ru.spcex.clearing.reports.reports;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import java.time.LocalDate;
@ -11,13 +10,14 @@ public abstract class ReportWithClearingStatus extends ReportWithPeriod {
@XStreamAlias("clearingStatus")
protected String clearingStatus;
public ReportWithClearingStatus(String version,
public ReportWithClearingStatus(ReportId reportId,
String version,
String code,
String name,
LocalDate startDate,
LocalDate endDate,
String clearingStatus) {
super(version, code, name, startDate, endDate);
super(reportId, version, code, name, startDate, endDate);
this.clearingStatus = clearingStatus;
}

View file

@ -1,9 +1,8 @@
package ru.spcex.clearing.reports;
package ru.spcex.clearing.reports.reports;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.xml_test.FormattedLocalDateConverter;
import java.time.LocalDate;
@ -24,12 +23,13 @@ public abstract class ReportWithPeriod extends AbstractReport {
protected LocalDate endDate;
public ReportWithPeriod(String version,
public ReportWithPeriod(ReportId reportId,
String version,
String code,
String name,
LocalDate startDate,
LocalDate endDate) {
super(version, code, name);
super(reportId, version, code, name);
this.startDate = startDate;
this.endDate = endDate;
}

View file

@ -2,19 +2,18 @@ package ru.spcex.clearing.reports.reports.bt_12_2;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@XStreamAlias("netPositionBank")
public class ReportPA_BT2_B extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("clearingMemberCategory")
private String clearingMemberCategory;
@XStreamAlias("liabilitiesClaimsAssets_fullName")
private String liabilitiesClaimsAssetsFullName;
@ -73,7 +72,8 @@ public class ReportPA_BT2_B extends ReportWithPeriod {
String claimsAmount,
String liabilitiesAmount,
String paymentAmount) {
super("0.0.1",
super(ReportId.PA_BT2_B,
"0.0.1",
"BT2",
"Отчет по нетто-позиции участника клиринга в секции МКР (Уполномоченный банк)",
startDate,

View file

@ -2,19 +2,18 @@ package ru.spcex.clearing.reports.reports.bt_12_2;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@XStreamAlias("netPositionInitiator")
public class ReportPA_BT2_IV extends ReportWithPeriod {
@XStreamAsAttribute
@XStreamAlias("clearingMemberCategory")
private String clearingMemberCategory;
@XStreamAlias("liabilitiesClaimsAssets_fullName")
private String liabilitiesClaimsAssetsFullName;
@ -73,7 +72,8 @@ public class ReportPA_BT2_IV extends ReportWithPeriod {
String claimsAmount,
String liabilitiesAmount,
String paymentAmount) {
super("0.0.1",
super(ReportId.PA_BT2_IV,
"0.0.1",
"BT2",
"Отчет по нетто-позиции участника клиринга в секции МКР (Вкладчик)",
startDate,

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.reports.bt_13;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportId;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -18,7 +19,6 @@ public class Report_BT13_11 extends AbstractReport {
@XStreamAlias("time")
private LocalTime time;
@XStreamAlias("inDocumentJournal_registrationDate")
private String inDocumentJournalRegistrationDate;
@ -74,7 +74,7 @@ public class Report_BT13_11 extends AbstractReport {
String inDocumentJournalDossierNumber,
String inDocumentJournalComment,
String inDocumentJournalReceiptDate) {
super("0.0.1", "BT 13.11", "Журнал Входящих документов");
super(ReportId.BT13_11, "0.0.1", "BT 13.11", "Журнал Входящих документов");
this.date = date;
this.time = time;
this.inDocumentJournalRegistrationDate = inDocumentJournalRegistrationDate;

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.reports.bt_13;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportId;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -18,7 +19,6 @@ public class Report_BT13_12 extends AbstractReport {
@XStreamAlias("time")
private LocalTime time;
@XStreamAlias("outDocumentJournal_registrationDate")
private String outDocumentJournalRegistrationDate;
@ -70,41 +70,7 @@ public class Report_BT13_12 extends AbstractReport {
String outDocumentJournalAmount,
String outDocumentJournalDossierNumber,
String outDocumentJournalPostDate) {
super("0.0.1", "BT 13.12", "Журнал Исходящих документов");
this.date = date;
this.time = time;
this.outDocumentJournalRegistrationDate = outDocumentJournalRegistrationDate;
this.outDocumentJournalRegistrationTime = outDocumentJournalRegistrationTime;
this.outDocumentJournalRegistrationNumber = outDocumentJournalRegistrationNumber;
this.outDocumentJournalDocumentName = outDocumentJournalDocumentName;
this.outDocumentJournalAddress = outDocumentJournalAddress;
this.outDocumentJournalQuantity = outDocumentJournalQuantity;
this.outDocumentJournalClearingCode = outDocumentJournalClearingCode;
this.outDocumentJournalCourierType = outDocumentJournalCourierType;
this.outDocumentJournal_emailDate = outDocumentJournal_emailDate;
this.outDocumentJournalAmount = outDocumentJournalAmount;
this.outDocumentJournalDossierNumber = outDocumentJournalDossierNumber;
this.outDocumentJournalPostDate = outDocumentJournalPostDate;
}
public Report_BT13_12(String version,
String code,
String name,
LocalDate date,
LocalTime time,
String outDocumentJournalRegistrationDate,
String outDocumentJournalRegistrationTime,
String outDocumentJournalRegistrationNumber,
String outDocumentJournalDocumentName,
String outDocumentJournalAddress,
String outDocumentJournalQuantity,
String outDocumentJournalClearingCode,
String outDocumentJournalCourierType,
String outDocumentJournal_emailDate,
String outDocumentJournalAmount,
String outDocumentJournalDossierNumber,
String outDocumentJournalPostDate) {
super(version, code, name);
super(ReportId.BT13_12, "0.0.1", "BT 13.12", "Журнал Исходящих документов");
this.date = date;
this.time = time;
this.outDocumentJournalRegistrationDate = outDocumentJournalRegistrationDate;

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.reports.reports.bt_16_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportId;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -57,7 +58,10 @@ public class Report_BT16_5 extends AbstractReport {
String accountBalanceDebitAmount,
String accountBalanceCreditAmount,
String accountBalanceCloseAmount) {
super("0.0.1", "BT 16.5", "Отчет о денежных средствах на счете внутреннего учета (клиринговом регистре) Участника клиринга");
super(ReportId.BT16_5,
"0.0.1",
"BT 16.5",
"Отчет о денежных средствах на счете внутреннего учета (клиринговом регистре) Участника клиринга");
this.date = date;
this.time = time;
this.clearingHouse = clearingHouse;

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.reports.bt_17_1;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
import java.time.LocalDate;
@ -28,7 +29,8 @@ public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
String destination,
String clearingMemberCategory,
String clearingStatus) {
super("0.0.1",
super(ReportId.BR_0420315_P1,
"0.0.1",
"0420315",
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 1",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_1;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -21,7 +22,8 @@ public class ReportBR_0420315_P2 extends ReportWithPeriod {
String destination,
String contractQty,
String liabilitiesAmount) {
super("0.0.1",
super(ReportId.BR_0420315_P2,
"0.0.1",
"0420315",
"Сведения об исполненных обязательствах, допущенных к клирингу, за отчетный период, часть 2",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_2;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -19,7 +20,8 @@ public class ReportBR_0420317 extends ReportWithPeriod {
private final List<Info_0420317> rows = new ArrayList<>();
public ReportBR_0420317(LocalDate startDate, LocalDate endDate, String destination) {
super("0.0.1",
super(ReportId.BR_0420317,
"0.0.1",
"0420317",
"Сведения о предоставлении, прекращении, приостановке," +
" возобновлении допуска к клиринговому обслуживанию",

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.reports.bt_17_3;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
import java.time.LocalDate;
@ -19,7 +20,8 @@ public class ReportBR_0420318 extends ReportWithClearingStatus {
private final List<Info_0420318> rows = new ArrayList<>();
public ReportBR_0420318(LocalDate startDate, LocalDate endDate, String clearingStatus, String destination) {
super("0.0.1",
super(ReportId.BR_0420318,
"0.0.1",
"0420318",
"Сведения о неисполненных обязательствах",
startDate,

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.reports.reports.bt_17_4;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
import java.time.LocalDate;
@ -19,7 +20,8 @@ public class ReportBR_0420314_P1 extends ReportWithClearingStatus {
private final List<Info_0420314_P1> rows = new ArrayList<>();
public ReportBR_0420314_P1(LocalDate startDate, LocalDate endDate, String clearingStatus, String destination) {
super("0.0.1",
super(ReportId.BR_0420314_P1,
"0.0.1",
"0420314",
"Сведения об УК и операциях, проведенных по торговым счетам, часть 1",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_4;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -23,7 +24,8 @@ public class ReportBR_0420314_P2 extends ReportWithPeriod {
private final List<Info_0420314_P2> rows = new ArrayList<>();
public ReportBR_0420314_P2(LocalDate startDate, LocalDate endDate, String transactionStatus, String destination) {
super("0.0.1",
super(ReportId.BR_0420314_P2,
"0.0.1",
"0420314",
"Сведения об УК и операциях, проведенных по торговым счетам, часть 2",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -22,7 +23,8 @@ public class ReportBR_0420312_P1 extends ReportWithPeriod {
public ReportBR_0420312_P1(LocalDate startDate,
LocalDate endDate,
String destination) {
super("0.0.1",
super(ReportId.BR_0420312_P1,
"0.0.1",
"0420312",
"Сведения о клиринговом обеспечении, часть 1",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -20,7 +21,8 @@ public class ReportBR_0420312_P10 extends ReportWithPeriod {
LocalDate endDate,
String destination,
String liabilitiesAmount) {
super("0.0.5",
super(ReportId.BR_0420312_P10,
"0.0.5",
"0420312",
"Сведения о клиринговом обеспечении, часть 10",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -21,7 +22,8 @@ public class ReportBR_0420312_P2 extends ReportWithPeriod {
String destination,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsAssetsLiabilities) {
super("0.0.1",
super(ReportId.BR_0420312_P2,
"0.0.1",
"0420312",
"Сведения о клиринговом обеспечении, часть 2",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -21,7 +22,8 @@ public class ReportBR_0420312_P3 extends ReportWithPeriod {
String destination,
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsAssetsLiabilities) {
super("0.0.5",
super(ReportId.BR_0420312_P3,
"0.0.5",
"0420312",
"Сведения о клиринговом обеспечении, часть 3",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -20,7 +21,8 @@ public class ReportBR_0420312_P4 extends ReportWithPeriod {
LocalDate endDate,
String destination,
String liabilitiesAmount) {
super("0.0.5",
super(ReportId.BR_0420312_P4,
"0.0.5",
"0420312",
"Сведения о клиринговом обеспечении, часть 4",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -20,7 +21,8 @@ public class ReportBR_0420312_P5 extends ReportWithPeriod {
LocalDate endDate,
String destination,
String liabilitiesAmount) {
super("0.0.5",
super(ReportId.BR_0420312_P5,
"0.0.5",
"0420312",
"Сведения о клиринговом обеспечении, часть 5",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -20,7 +21,8 @@ public class ReportBR_0420312_P6 extends ReportWithPeriod {
LocalDate endDate,
String destination,
String liabilitiesAmount) {
super("0.0.5",
super(ReportId.BR_0420312_P6,
"0.0.5",
"0420312",
"Сведения о клиринговом обеспечении, часть 6",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -20,7 +21,8 @@ public class ReportBR_0420312_P7 extends ReportWithPeriod {
LocalDate endDate,
String destination,
String liabilitiesAmount) {
super("0.0.5",
super(ReportId.BR_0420312_P7,
"0.0.5",
"0420312",
"Сведения о клиринговом обеспечении, часть 7",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -26,7 +27,8 @@ public class ReportBR_0420312_P8 extends ReportWithPeriod {
String companySymbolValue,
String companyInfoCountryCode,
String clearingMemberCategoryClearingMemberCategory) {
super("0.0.5",
super(ReportId.BR_0420312_P8,
"0.0.5",
"0420312",
"Сведения о клиринговом обеспечении, часть 8",
startDate,

View file

@ -2,7 +2,8 @@ package ru.spcex.clearing.reports.reports.bt_17_5;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import ru.spcex.clearing.reports.ReportWithPeriod;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.reports.ReportWithPeriod;
import java.time.LocalDate;
import java.time.LocalDateTime;
@ -23,7 +24,8 @@ public class ReportBR_0420312_P9 extends ReportWithPeriod {
String liabilitiesClaimsAssetsCompanyId,
String liabilitiesClaimsMoneyCurrencyCode,
String liabilitiesClaimsAssetsLiabilities) {
super("0.0.5",
super(ReportId.BR_0420312_P9,
"0.0.5",
"0420312",
"Сведения о клиринговом обеспечении, часть 9",
startDate,

View file

@ -1,27 +1,28 @@
package ru.spcex.clearing.reports.services;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import org.apache.kafka.clients.consumer.Consumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
//import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest; todo use class?
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportWithPeriodRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.reports.ReportId;
import ru.spcex.clearing.reports.services.builders.XMLReportBuilder;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class QCommandExecutor extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Map<ReportId, ReportDataCollector> collectorForReport = new HashMap<>();
// private final ImdgId idGenerator;
// private final KafkaSender kafkaReqProducer;
@ -29,21 +30,45 @@ public class QCommandExecutor extends QueueConsumer implements InitializingBean
public QCommandExecutor(Consumer<String, Object> kafkaQueue, ImdgProvider imdgProvider,
List<ReportDataCollector> listOfCollectors) {
super(kafkaQueue);
// todo constructor
}
@Override
public void afterPropertiesSet() {
log.debug("Init queue listener {}", getClass().getSimpleName());
// callback(Object.class)
// .setConsumer(this::newReportDo)
// .forDestination(Task.getVerification!!!.topic(), callbacks::put); // todo здесь надо указать команду из ТЗ или согласовать с фронтэндом
// init();
callback(ReportWithPeriodRequest.class)
.setConsumer(this::newReportWithPeriod)
.forDestination(Task.createReport.topic(), callbacks::put);
}
private void newReportDo(BaseRequest<Object> userRequest) {
log.debug("newReportDo request received");
// todo logic
private void newReportWithPeriod(BaseRequest<ReportWithPeriodRequest> reportRequest) {
log.debug("newReportWithPeriod request received");
ReportWithPeriodRequest request = reportRequest.getRequestPayload();
if (request.getReportId() == null || request.getReportId().isBlank())
throw new IllegalStateException("ReportID is empty");
ReportId reportId = ReportId.valueOf(request.getReportId());
ReportDataCollector<?> reportDataCollector = collectorForReport.get(reportId);
if (reportDataCollector == null)
throw new IllegalStateException("Collector for ReportID " + reportId + " not implemented yet");
if (request.getStartDate() == null || request.getEndDate() == null)
throw new IllegalStateException("StartDate or EndDate is null");
LocalDate startDate = request.getStartDate();
LocalDate endDate = request.getEndDate();
if (startDate.isAfter(endDate)) throw new IllegalStateException("StartDate > EndDate");
XMLReportBuilder reportBuilder = new XMLReportBuilder(reportDataCollector.getReportClass());
AbstractReport report = reportDataCollector.collectReportWithPeriod(startDate, endDate);
File reportFile = null;
try {
reportFile = reportBuilder.createReport(report);
} catch (IOException e) {
}
if (reportFile != null) {
// put file in folder
}
log.debug("successfully processed");
}
}

View file

@ -7,10 +7,16 @@ import ru.spcex.clearing.reports.reports.AbstractReport;
import java.io.File;
import java.io.IOException;
public abstract class DOCXReportBuilder<R extends AbstractReport> extends FileReportBuilder<R> {
public class DOCXReportBuilder extends FileReportBuilder {
private final Logger log = LoggerFactory.getLogger(getClass());
protected DOCXReportBuilder(Class<R> reportClass, File templateResource) throws IOException {
protected DOCXReportBuilder(Class<? extends AbstractReport> reportClass, File templateResource) throws IOException {
super(reportClass);
}
@Override
public File createReport(AbstractReport report) throws IOException {
// todo implement
return null;
}
}

View file

@ -2,10 +2,13 @@ package ru.spcex.clearing.reports.services.builders;
import ru.spcex.clearing.reports.reports.AbstractReport;
public abstract class FileReportBuilder<R extends AbstractReport> {
protected final Class<R> reportClass;
import java.io.File;
import java.io.IOException;
protected FileReportBuilder(Class<R> reportClass) {
public abstract class FileReportBuilder {
protected final Class<? extends AbstractReport> reportClass;
protected FileReportBuilder(Class<? extends AbstractReport> reportClass) {
this.reportClass = reportClass;
}
@ -13,4 +16,6 @@ public abstract class FileReportBuilder<R extends AbstractReport> {
if (System.getProperty("os.name").toLowerCase().contains("windows")) reportName = reportName.replace(":", "_");
return reportName + extension;
}
public abstract File createReport(AbstractReport report) throws IOException;
}

View file

@ -6,30 +6,24 @@ import com.thoughtworks.xstream.io.xml.XppDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.spcex.clearing.reports.reports.AbstractReport;
import ru.spcex.clearing.reports.services.ReportDataCollector;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class XMLReportBuilder<R extends AbstractReport> extends FileReportBuilder<R> {
public class XMLReportBuilder extends FileReportBuilder {
private final Logger log = LoggerFactory.getLogger(getClass());
protected final XStream xStream;
protected final ReportDataCollector<R> collector;
public XMLReportBuilder(Class<R> reportClass, ReportDataCollector<R> collector) {
public XMLReportBuilder(Class<? extends AbstractReport> reportClass) {
super(reportClass);
this.collector = collector;
this.xStream = new XStream(new XppDriver(new NoNameCoder()));
xStream.processAnnotations(reportClass);
}
public File createReport(LocalDate startDate, LocalDate endDate) throws IOException {
R report = collector.collectReportWithPeriod(startDate, endDate);
@Override
public File createReport(AbstractReport report) throws IOException {
String reportName = report.getReportName(LocalDateTime.now());
String reportFileName = makeFileName(reportName, ".xml");

View file

@ -14,7 +14,8 @@ public enum Task implements IEnumKey {
startPostClearing("SPOC"),// Запуск постклиринга
createOrder("CORD"),
createOrderConfirm("CORC"),
getAllBalance("GALB");
getAllBalance("GALB"),
createReport("RPRT");// Создание отчёта (report-service)
private final String key;

View file

@ -0,0 +1,23 @@
package ru.spcex.clearing.platform.messaging.domain.cud.reports;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Запрос отчёта (без параметров) report-service
*/
public class ReportRequest {
/**
* Идентификатор отчёта
* см. {@link ru.spcex.clearing.reports.reports.ReportsEnum}
*/
@JsonProperty
protected String reportId;
public String getReportId() {
return reportId;
}
public void setReportId(String reportId) {
this.reportId = reportId;
}
}

View file

@ -0,0 +1,40 @@
package ru.spcex.clearing.platform.messaging.domain.cud.reports;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
import java.time.LocalDate;
/**
* Запрос отчёта с периодом report-service
*/
public class ReportWithPeriodRequest extends ReportRequest {
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonProperty
protected LocalDate startDate;
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonProperty
protected LocalDate endDate;
public LocalDate getStartDate() {
return startDate;
}
public void setStartDate(LocalDate startDate) {
this.startDate = startDate;
}
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}
}