Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
fa2ecfb3a7
49 changed files with 1298 additions and 167 deletions
|
|
@ -11,7 +11,7 @@ import java.time.LocalDate;
|
||||||
/**
|
/**
|
||||||
* Шапка для отчётов, содержащих startDate и endDate
|
* Шапка для отчётов, содержащих startDate и endDate
|
||||||
*/
|
*/
|
||||||
public class ReportWithPeriod extends AbstractReport {
|
public abstract class ReportWithPeriod extends AbstractReport {
|
||||||
|
|
||||||
@XStreamAsAttribute
|
@XStreamAsAttribute
|
||||||
@XStreamAlias("startDate")
|
@XStreamAlias("startDate")
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,43 @@
|
||||||
package ru.spcex.clearing.reports;
|
package ru.spcex.clearing.reports;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||||
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import ru.spcex.clearing.reports.services.ReportDataCollector;
|
||||||
import ru.spcex.clearing.reports.services.ReportsService;
|
import ru.spcex.clearing.reports.services.ReportsService;
|
||||||
|
import ru.spcex.clearing.reports.services.builders.XMLReportBuilder;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class ReportsServiceApplication {
|
public class ReportsServiceApplication {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
try {
|
try {
|
||||||
SpringApplicationBuilder builder = new SpringApplicationBuilder(ReportsServiceApplication.class);
|
SpringApplicationBuilder builder = new SpringApplicationBuilder(ReportsServiceApplication.class);
|
||||||
builder.run(args);
|
ConfigurableApplicationContext context = builder.run(args);
|
||||||
|
|
||||||
|
//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<String, ReportDataCollector> allReports = context.getBeansOfType(ReportDataCollector.class);
|
||||||
|
log.info("Report types: {}", allReports);
|
||||||
|
for (ReportDataCollector collector:allReports.values()) {
|
||||||
|
log.info("Make report {}", collector);
|
||||||
|
XMLReportBuilder xmlReportBuilder = new XMLReportBuilder(collector.getReportClass(), collector);
|
||||||
|
LocalDate date2 = LocalDate.now();
|
||||||
|
LocalDate date1 = LocalDate.of(date2.getYear(), date2.getMonth(), 1);//date2.minusMonths(1);
|
||||||
|
xmlReportBuilder.createReport(date1, date2);
|
||||||
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LoggerFactory.getLogger(ReportsServiceApplication.class).error("DBF-Loader start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage());
|
LoggerFactory.getLogger(ReportsServiceApplication.class).error("Report-service start failed: {} -> {}", e.getClass().getSimpleName(), ExceptionUtils.getStackTrace(e));
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
ReportsService reportsService = new ReportsService();
|
ReportsService reportsService = new ReportsService();
|
||||||
|
|
|
||||||
|
|
@ -3,18 +3,19 @@ package ru.spcex.clearing.reports.config.element;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.context.annotation.PropertySource;
|
import org.springframework.context.annotation.PropertySource;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
//import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings;
|
|
||||||
//import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
|
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
|
import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Параметр запуска: XMLReportBuilder
|
||||||
|
* --spring.config.location=E:/MFD_GIT_REPO/clearing/clearing-parent/reports-service/src/main/resources
|
||||||
|
*
|
||||||
|
*/
|
||||||
@Component
|
@Component
|
||||||
@PropertySource("file:${spring.config.location}/application.properties")
|
@PropertySource("file:${spring.config.location}/application.properties")
|
||||||
//todo for test @PropertySource("classpath:application.properties")
|
|
||||||
@ConfigurationProperties("reports-service")
|
@ConfigurationProperties("reports-service")
|
||||||
public class ReportsServiceSettings {
|
public class ReportsServiceSettings {
|
||||||
private HazelcastClientParams hazelcast;
|
private HazelcastClientParams hazelcast;
|
||||||
// private KafkaConsumerSettings kafkaConsumer;
|
private String reportModuleOut;
|
||||||
// private KafkaProducerSettings kafkaProducer;
|
|
||||||
|
|
||||||
public HazelcastClientParams getHazelcast() {
|
public HazelcastClientParams getHazelcast() {
|
||||||
return hazelcast;
|
return hazelcast;
|
||||||
|
|
@ -24,19 +25,12 @@ public class ReportsServiceSettings {
|
||||||
this.hazelcast = hazelcast;
|
this.hazelcast = hazelcast;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public KafkaConsumerSettings getKafkaConsumer() {
|
|
||||||
// return kafkaConsumer;
|
public String getReportModuleOut() {
|
||||||
// }
|
return reportModuleOut;
|
||||||
//
|
}
|
||||||
// public void setKafkaConsumer(KafkaConsumerSettings kafkaConsumer) {
|
|
||||||
// this.kafkaConsumer = kafkaConsumer;
|
public void setReportModuleOut(String reportModuleOut) {
|
||||||
// }
|
this.reportModuleOut = reportModuleOut;
|
||||||
//
|
}
|
||||||
// public KafkaProducerSettings getKafkaProducer() {
|
|
||||||
// return kafkaProducer;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public void setKafkaProducer(KafkaProducerSettings kafkaProducer) {
|
|
||||||
// this.kafkaProducer = kafkaProducer;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,15 @@ package ru.spcex.clearing.reports.reports;
|
||||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Общая шапка (атрибуты) для всех отчетов
|
* Общая шапка (атрибуты) для всех отчетов
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractReport {
|
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");
|
||||||
|
|
||||||
@XStreamAsAttribute
|
@XStreamAsAttribute
|
||||||
@XStreamAlias("version")
|
@XStreamAlias("version")
|
||||||
|
|
@ -28,4 +33,6 @@ public abstract class AbstractReport {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract public String getReportName(LocalDateTime reportDateTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("netPositionBank")
|
@XStreamAlias("netPositionBank")
|
||||||
public class ReportPA_BT2_B extends ReportWithPeriod {
|
public class ReportPA_BT2_B extends ReportWithPeriod {
|
||||||
|
|
@ -93,6 +94,15 @@ public class ReportPA_BT2_B extends ReportWithPeriod {
|
||||||
this.total = new Total(claimsAmount, liabilitiesAmount, paymentAmount);
|
this.total = new Total(claimsAmount, liabilitiesAmount, paymentAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPPA.BT12.2.B.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@XStreamAlias("total")
|
@XStreamAlias("total")
|
||||||
public static class Total {
|
public static class Total {
|
||||||
@XStreamAlias("claimsAmount")
|
@XStreamAlias("claimsAmount")
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("netPositionInitiator")
|
@XStreamAlias("netPositionInitiator")
|
||||||
public class ReportPA_BT2_IV extends ReportWithPeriod {
|
public class ReportPA_BT2_IV extends ReportWithPeriod {
|
||||||
|
|
@ -93,6 +94,15 @@ public class ReportPA_BT2_IV extends ReportWithPeriod {
|
||||||
this.total = new Total(claimsAmount, liabilitiesAmount, paymentAmount);
|
this.total = new Total(claimsAmount, liabilitiesAmount, paymentAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPPA.BT12.2.IV.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@XStreamAlias("total")
|
@XStreamAlias("total")
|
||||||
public static class Total {
|
public static class Total {
|
||||||
@XStreamAlias("claimsAmount")
|
@XStreamAlias("claimsAmount")
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.reports.AbstractReport;
|
import ru.spcex.clearing.reports.reports.AbstractReport;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
|
||||||
@XStreamAlias("incomingDocuments")
|
@XStreamAlias("incomingDocuments")
|
||||||
|
|
@ -91,4 +92,10 @@ public class Report_BT13_11 extends AbstractReport {
|
||||||
this.inDocumentJournalReceiptDate = inDocumentJournalReceiptDate;
|
this.inDocumentJournalReceiptDate = inDocumentJournalReceiptDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "DOCIN.%s".formatted(
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.reports.AbstractReport;
|
import ru.spcex.clearing.reports.reports.AbstractReport;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
|
||||||
@XStreamAlias("outgoingDocuments")
|
@XStreamAlias("outgoingDocuments")
|
||||||
|
|
@ -119,4 +120,11 @@ public class Report_BT13_12 extends AbstractReport {
|
||||||
this.outDocumentJournalDossierNumber = outDocumentJournalDossierNumber;
|
this.outDocumentJournalDossierNumber = outDocumentJournalDossierNumber;
|
||||||
this.outDocumentJournalPostDate = outDocumentJournalPostDate;
|
this.outDocumentJournalPostDate = outDocumentJournalPostDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "DOCOUT.%s".formatted(
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.reports.AbstractReport;
|
import ru.spcex.clearing.reports.reports.AbstractReport;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
|
||||||
@XStreamAlias("accountBalanceInfo")
|
@XStreamAlias("accountBalanceInfo")
|
||||||
|
|
@ -69,4 +70,11 @@ public class Report_BT16_5 extends AbstractReport {
|
||||||
this.accountBalanceCloseAmount = accountBalanceCloseAmount;
|
this.accountBalanceCloseAmount = accountBalanceCloseAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "INACCNT.%s.%s".formatted(
|
||||||
|
companyClearingCode,
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
|
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -76,4 +77,13 @@ public class ReportBR_0420315_P1 extends ReportWithClearingStatus {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420315.P1.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearedLiabilitiesTotal")
|
@XStreamAlias("clearedLiabilitiesTotal")
|
||||||
public class ReportBR_0420315_P2 extends ReportWithPeriod {
|
public class ReportBR_0420315_P2 extends ReportWithPeriod {
|
||||||
|
|
@ -68,4 +69,13 @@ public class ReportBR_0420315_P2 extends ReportWithPeriod {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420315.P2.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -89,4 +90,13 @@ public class ReportBR_0420317 extends ReportWithPeriod {
|
||||||
this.relationComment = relationComment;
|
this.relationComment = relationComment;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420317.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
|
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -114,4 +115,13 @@ public class ReportBR_0420318 extends ReportWithClearingStatus {
|
||||||
this.liabilitiesClaimsAssetsFullNames = liabilitiesClaimsAssetsFullNames;
|
this.liabilitiesClaimsAssetsFullNames = liabilitiesClaimsAssetsFullNames;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420318.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
|
import ru.spcex.clearing.reports.reports.ReportWithClearingStatus;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -90,4 +91,13 @@ public class ReportBR_0420314_P1 extends ReportWithClearingStatus {
|
||||||
this.liabilitiesClaimsAssetsLiabilitiesQuantity = liabilitiesClaimsAssetsLiabilitiesQuantity;
|
this.liabilitiesClaimsAssetsLiabilitiesQuantity = liabilitiesClaimsAssetsLiabilitiesQuantity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420314.P1.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -83,4 +84,13 @@ public class ReportBR_0420314_P2 extends ReportWithPeriod {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420314.P2.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage1")
|
@XStreamAlias("clearingCoverage1")
|
||||||
public class ReportBR_0420312_P1 extends ReportWithPeriod {
|
public class ReportBR_0420312_P1 extends ReportWithPeriod {
|
||||||
|
|
@ -87,4 +88,13 @@ public class ReportBR_0420312_P1 extends ReportWithPeriod {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420312_р1-1.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage10")
|
@XStreamAlias("clearingCoverage10")
|
||||||
public class ReportBR_0420312_P10 extends ReportWithPeriod {
|
public class ReportBR_0420312_P10 extends ReportWithPeriod {
|
||||||
|
|
@ -37,4 +38,13 @@ public class ReportBR_0420312_P10 extends ReportWithPeriod {
|
||||||
this.liabilitiesAmount = liabilitiesAmount;
|
this.liabilitiesAmount = liabilitiesAmount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420312_р3-3.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage2")
|
@XStreamAlias("clearingCoverage2")
|
||||||
public class ReportBR_0420312_P2 extends ReportWithPeriod {
|
public class ReportBR_0420312_P2 extends ReportWithPeriod {
|
||||||
|
|
@ -45,4 +46,13 @@ public class ReportBR_0420312_P2 extends ReportWithPeriod {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420312_р1-2.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage3")
|
@XStreamAlias("clearingCoverage3")
|
||||||
public class ReportBR_0420312_P3 extends ReportWithPeriod {
|
public class ReportBR_0420312_P3 extends ReportWithPeriod {
|
||||||
|
|
@ -46,4 +47,12 @@ public class ReportBR_0420312_P3 extends ReportWithPeriod {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420312_р1-3.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage4")
|
@XStreamAlias("clearingCoverage4")
|
||||||
public class ReportBR_0420312_P4 extends ReportWithPeriod {
|
public class ReportBR_0420312_P4 extends ReportWithPeriod {
|
||||||
|
|
@ -38,4 +39,12 @@ public class ReportBR_0420312_P4 extends ReportWithPeriod {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420312_р1-4.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage5")
|
@XStreamAlias("clearingCoverage5")
|
||||||
public class ReportBR_0420312_P5 extends ReportWithPeriod {
|
public class ReportBR_0420312_P5 extends ReportWithPeriod {
|
||||||
|
|
@ -37,4 +38,13 @@ public class ReportBR_0420312_P5 extends ReportWithPeriod {
|
||||||
this.liabilitiesAmount = liabilitiesAmount;
|
this.liabilitiesAmount = liabilitiesAmount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420312_р1-5.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage6")
|
@XStreamAlias("clearingCoverage6")
|
||||||
public class ReportBR_0420312_P6 extends ReportWithPeriod {
|
public class ReportBR_0420312_P6 extends ReportWithPeriod {
|
||||||
|
|
@ -37,4 +38,13 @@ public class ReportBR_0420312_P6 extends ReportWithPeriod {
|
||||||
this.liabilitiesAmount = liabilitiesAmount;
|
this.liabilitiesAmount = liabilitiesAmount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420312_р1-6.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage7")
|
@XStreamAlias("clearingCoverage7")
|
||||||
public class ReportBR_0420312_P7 extends ReportWithPeriod {
|
public class ReportBR_0420312_P7 extends ReportWithPeriod {
|
||||||
|
|
@ -37,4 +38,13 @@ public class ReportBR_0420312_P7 extends ReportWithPeriod {
|
||||||
this.liabilitiesAmount = liabilitiesAmount;
|
this.liabilitiesAmount = liabilitiesAmount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420312_р1-7.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage8")
|
@XStreamAlias("clearingCoverage8")
|
||||||
public class ReportBR_0420312_P8 extends ReportWithPeriod {
|
public class ReportBR_0420312_P8 extends ReportWithPeriod {
|
||||||
|
|
@ -85,4 +86,13 @@ public class ReportBR_0420312_P8 extends ReportWithPeriod {
|
||||||
this.clearingMemberCategoryClearingMemberCategory = clearingMemberCategoryClearingMemberCategory;
|
this.clearingMemberCategoryClearingMemberCategory = clearingMemberCategoryClearingMemberCategory;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return " REPBR.0420312_р3-1.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||||
import ru.spcex.clearing.reports.ReportWithPeriod;
|
import ru.spcex.clearing.reports.ReportWithPeriod;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@XStreamAlias("clearingCoverage9")
|
@XStreamAlias("clearingCoverage9")
|
||||||
public class ReportBR_0420312_P9 extends ReportWithPeriod {
|
public class ReportBR_0420312_P9 extends ReportWithPeriod {
|
||||||
|
|
@ -61,4 +62,13 @@ public class ReportBR_0420312_P9 extends ReportWithPeriod {
|
||||||
this.liabilitiesClaimsAssetsLiabilities = liabilitiesClaimsAssetsLiabilities;
|
this.liabilitiesClaimsAssetsLiabilities = liabilitiesClaimsAssetsLiabilities;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getReportName(LocalDateTime reportDateTime) {
|
||||||
|
return "REPBR.0420312_р3-2.%s-%s.%s".formatted(
|
||||||
|
DATE_FORMATTER.format(startDate),
|
||||||
|
DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(reportDateTime)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,11 @@ import java.util.stream.Collectors;
|
||||||
/**
|
/**
|
||||||
* Сервис для работы с DOCX файлами
|
* Сервис для работы с DOCX файлами
|
||||||
* Читает шаблон .docx и во всех текстовых элементах меняет переданные ключи на соответствующие им значения
|
* Читает шаблон .docx и во всех текстовых элементах меняет переданные ключи на соответствующие им значения
|
||||||
|
* Пример ключа по умолчанию: ${ключ}
|
||||||
|
*
|
||||||
|
* При использовании нового шаблона, необходимо отредактировать docx документ так, чтобы ключ содержался в одном
|
||||||
|
* элементе. Для этого нужно вырезать ключ и в это же место вставить его как текст, без форматирования. Если нужно,
|
||||||
|
* идентификатору потом можно установить стиль, который будет применён к вставляемой строке.
|
||||||
*/
|
*/
|
||||||
public class DOCXService {
|
public class DOCXService {
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,10 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.spcex.clearing.reports.reports.AbstractReport;
|
import ru.spcex.clearing.reports.reports.AbstractReport;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -20,22 +22,37 @@ public abstract class ReportDataCollector<T extends AbstractReport> {
|
||||||
* T extends ReportWithPeriod
|
* T extends ReportWithPeriod
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
abstract public List<T> collectReportWithPeriod(LocalDate startDate, LocalDate endDate);
|
abstract public T collectReportWithPeriod(LocalDate startDate, LocalDate endDate);
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * T extends ReportWithClearingStatus
|
||||||
|
// * @param startDate
|
||||||
|
// * @param endDate
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// abstract public List<T> collectReportWithClearingStatus(LocalDate startDate, LocalDate endDate, String clearingStatus);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* T extends ReportWithClearingStatus
|
* todo убрать метод, он уже лишний
|
||||||
* @param startDate
|
|
||||||
* @param endDate
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
abstract public List<T> collectReportWithClearingStatus(LocalDate startDate, LocalDate endDate, String clearingStatus);
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param startDate
|
* @param startDate
|
||||||
* @param endDate
|
* @param endDate
|
||||||
* @param dateTimeNow LocalDateTime.now()
|
* @param dateTimeNow LocalDateTime.now()
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
abstract public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow);
|
@Deprecated
|
||||||
|
public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) {
|
||||||
|
throw new IllegalArgumentException("deprecated");
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract public Class<T> getReportClass();
|
||||||
|
|
||||||
|
protected String toString(Long val) {
|
||||||
|
if (val == null) return null;
|
||||||
|
return val.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String toString(Instant val) {
|
||||||
|
if (val == null) return null;
|
||||||
|
return DATE_TIME_FORMATTER.format(val.atZone(ZoneId.systemDefault()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
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 abstract class DOCXReportBuilder<R extends AbstractReport> extends FileReportBuilder<R> {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
|
protected DOCXReportBuilder(Class<R> reportClass, File templateResource) throws IOException {
|
||||||
|
super(reportClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
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;
|
||||||
|
|
||||||
|
protected FileReportBuilder(Class<R> reportClass) {
|
||||||
|
this.reportClass = reportClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
package ru.spcex.clearing.reports.services.builders;
|
||||||
|
|
||||||
|
import com.thoughtworks.xstream.XStream;
|
||||||
|
import com.thoughtworks.xstream.io.naming.NoNameCoder;
|
||||||
|
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> {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
|
protected final XStream xStream;
|
||||||
|
|
||||||
|
protected final ReportDataCollector<R> collector;
|
||||||
|
|
||||||
|
public XMLReportBuilder(Class<R> reportClass, ReportDataCollector<R> collector) {
|
||||||
|
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);
|
||||||
|
String reportName = report.getReportName(LocalDateTime.now());
|
||||||
|
|
||||||
|
if (System.getProperty("os.name").toLowerCase().contains("windows")) reportName = reportName.replace(":", "_");
|
||||||
|
|
||||||
|
String reportFileName = reportName + ".xml";
|
||||||
|
File reportFile = new File(reportFileName);
|
||||||
|
if (reportFile.exists()) {
|
||||||
|
if (reportFile.isFile()) {
|
||||||
|
log.warn("Файл {} существует и будет перезаписан", reportFileName);
|
||||||
|
boolean deleteOk = reportFile.delete();
|
||||||
|
if (!deleteOk) throw new IOException("Не удалось удалить файл " + reportFileName);
|
||||||
|
} else throw new IOException(reportFileName + " существует, но не является файлом");
|
||||||
|
}
|
||||||
|
try (FileOutputStream fos = new FileOutputStream(reportFile)) {
|
||||||
|
xStream.toXML(report, fos);
|
||||||
|
}
|
||||||
|
return reportFile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,143 @@
|
||||||
|
package ru.spcex.clearing.reports.services.collector;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
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.generated.ClearingMemberCategory;
|
||||||
|
import ru.clearing.classes.statics.data.misc.Listing;
|
||||||
|
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_17_1.ReportBR_0420315_P1;
|
||||||
|
import ru.spcex.clearing.reports.services.ReportDataCollector;
|
||||||
|
import ru.spcex.platform.enumeration.ClearingCategory;
|
||||||
|
import ru.spcex.platform.enumeration.ClearingStatus;
|
||||||
|
import ru.spcex.platform.enumeration.Market;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class Bt17_1_P1_collector extends ReportDataCollector<ReportBR_0420315_P1> {
|
||||||
|
protected static final List<String> ALLOW_CLEARING_MEMBER_CATEGORY = Arrays.asList(ClearingCategory.I.getKey(), ClearingCategory.V.getKey());
|
||||||
|
protected static final String ALLOW_CLEARING_STATUS = ClearingStatus.OK.getKey();
|
||||||
|
|
||||||
|
private Imdg<Company> companyImdg;
|
||||||
|
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
|
||||||
|
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
|
||||||
|
private Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg;
|
||||||
|
private Imdg<Listing> listingImdg;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public Bt17_1_P1_collector(ImdgProvider imdgProvider) {
|
||||||
|
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
|
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
|
||||||
|
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
||||||
|
clearingStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingStatusDictionary, ClearingStatusDictionary.class);
|
||||||
|
listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param onMarket Market.mkrs.getKey()
|
||||||
|
* @param securityId liability.getSecurityId()
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected Listing findListing(Market onMarket, Long securityId) {
|
||||||
|
Map qParam = new HashMap<>();
|
||||||
|
qParam.put("market", onMarket.getKey());
|
||||||
|
qParam.put("securityId", securityId);
|
||||||
|
return listingImdg.getSingleObjectByFieldValues(qParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReportBR_0420315_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
|
||||||
|
if (startDate.isAfter(endDate)) {
|
||||||
|
throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")");
|
||||||
|
}
|
||||||
|
ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(startDate, endDate,
|
||||||
|
"BR",
|
||||||
|
"I,V", // cmc.getClearingMemberCategory()
|
||||||
|
ALLOW_CLEARING_STATUS //clearingStatus.getCode() "OK"
|
||||||
|
);
|
||||||
|
|
||||||
|
ClearingStatusDictionary allowClearingStatus = clearingStatusDictionaryImdg.getSingleObjectByFieldValues(Map.of("code", ALLOW_CLEARING_STATUS));
|
||||||
|
if (allowClearingStatus == null) {
|
||||||
|
throw new IllegalStateException("ClearingStatusDictionary with code=\"" + ALLOW_CLEARING_STATUS + "\" not fount");
|
||||||
|
}
|
||||||
|
final Long allowClearingStatusId = allowClearingStatus.getId(); // "OK"
|
||||||
|
|
||||||
|
String ql = String.format("'%s' <= refundDate and refundDate <= '%s' and clearingStatus=%s",
|
||||||
|
startDate, endDate, allowClearingStatusId);
|
||||||
|
Collection<LiabilitiesClaimsAssets> liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql);
|
||||||
|
|
||||||
|
Map<Long, List<LiabilitiesClaimsAssets>> indexByCompany = MapUtil.indexList(liabilities, LiabilitiesClaimsAssets::getCompanyId);
|
||||||
|
for (Map.Entry<Long, List<LiabilitiesClaimsAssets>> companyEntry : indexByCompany.entrySet()) {
|
||||||
|
final Long companyId = companyEntry.getKey();
|
||||||
|
List<LiabilitiesClaimsAssets> liabilitiesOfCompany = companyEntry.getValue();
|
||||||
|
Company company = companyImdg.getSingleObjectByID(companyId);
|
||||||
|
if (company != null) {
|
||||||
|
ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId));
|
||||||
|
String checkCategory = cmc == null ? null : cmc.getClearingMemberCategory();
|
||||||
|
if (!ALLOW_CLEARING_MEMBER_CATEGORY.contains(checkCategory)) {
|
||||||
|
// фильтруются <> I, V
|
||||||
|
log.trace("Filtered company[{}] ClearingMemberCategory[{}].ClearingMemberCategory={}",
|
||||||
|
companyId, cmc == null ? null : cmc.getId(), checkCategory);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashSet<String> onMarket = new HashSet<>();
|
||||||
|
|
||||||
|
long contractorQty;
|
||||||
|
double liabilitiesAmount = 0;
|
||||||
|
{
|
||||||
|
HashSet<String> collectedToSumm = new HashSet<>(); // чтобы дважды не посчитать 1 и тот же контракт
|
||||||
|
HashSet<Long> onMarketSecurity=new HashSet<>();
|
||||||
|
for (LiabilitiesClaimsAssets lContract : liabilitiesOfCompany) {
|
||||||
|
if (!onMarketSecurity.contains(lContract.getSecurityId())) {
|
||||||
|
Listing listing = findListing(Market.mkrs, lContract.getSecurityId());
|
||||||
|
if (listing!= null) {
|
||||||
|
onMarket.add(listing.getMarket());
|
||||||
|
}
|
||||||
|
onMarketSecurity.add(lContract.getSecurityId());
|
||||||
|
}
|
||||||
|
if (lContract.getPrice() != null && StringUtils.isNotEmpty(lContract.getContract())
|
||||||
|
&& !collectedToSumm.contains(lContract.getContract())) {
|
||||||
|
collectedToSumm.add(lContract.getContract());
|
||||||
|
liabilitiesAmount += lContract.getLiabilitiesQuantity().doubleValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
contractorQty = collectedToSumm.size();
|
||||||
|
}
|
||||||
|
String onMarketString = StringUtils.join(onMarket, ",");
|
||||||
|
if (onMarket.size() != 1) { // Сейчас по коду ожидается один listing.market="MKRS" но потом могут быть несколько
|
||||||
|
log.warn("Market for companyId[{}]: {}", companyId, onMarketString);
|
||||||
|
}
|
||||||
|
ReportBR_0420315_P1.Info_0420315_P1 info_0420315_p1 = new ReportBR_0420315_P1.Info_0420315_P1(company.getId().toString(),
|
||||||
|
company.getFullName(),
|
||||||
|
onMarketString,
|
||||||
|
String.valueOf(contractorQty),
|
||||||
|
String.valueOf(liabilitiesAmount));
|
||||||
|
reportBR_0420315_p1.getRows().add(info_0420315_p1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return reportBR_0420315_p1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) {
|
||||||
|
return String.format("REPBR.0420315.P1.%s-%s.%s", DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(dateTimeNow));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<ReportBR_0420315_P1> getReportClass() {
|
||||||
|
return ReportBR_0420315_P1.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
package ru.spcex.clearing.reports.services.collector;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.clearing.classes.transaction.data.execution.LiabilitiesClaimsAssets;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.reports.reports.bt_17_1.ReportBR_0420315_P2;
|
||||||
|
import ru.spcex.clearing.reports.services.ReportDataCollector;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class Bt17_1_P2_collector extends ReportDataCollector<ReportBR_0420315_P2> {
|
||||||
|
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public Bt17_1_P2_collector(ImdgProvider imdgProvider) {
|
||||||
|
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReportBR_0420315_P2 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
|
||||||
|
if (startDate.isAfter(endDate)) {
|
||||||
|
throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")");
|
||||||
|
}
|
||||||
|
String ql = String.format("'%s' <= refundDate and refundDate <= '%s'", startDate, endDate);
|
||||||
|
Collection<LiabilitiesClaimsAssets> liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql);
|
||||||
|
|
||||||
|
long contractorQty;
|
||||||
|
double liabilitiesAmount = 0;
|
||||||
|
{
|
||||||
|
HashSet<String> collectedToSumm = new HashSet<>();
|
||||||
|
for (LiabilitiesClaimsAssets lContract : liabilities) {
|
||||||
|
if (lContract.getPrice() != null && StringUtils.isNotEmpty(lContract.getContract())
|
||||||
|
&& !collectedToSumm.contains(lContract.getContract())) {
|
||||||
|
collectedToSumm.add(lContract.getContract());
|
||||||
|
liabilitiesAmount += lContract.getLiabilitiesQuantity().doubleValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
contractorQty = collectedToSumm.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
ReportBR_0420315_P2 reportBR_0420315_p2 = new ReportBR_0420315_P2(startDate, endDate,
|
||||||
|
"BR",
|
||||||
|
String.valueOf(contractorQty),
|
||||||
|
String.valueOf(liabilitiesAmount));
|
||||||
|
|
||||||
|
return reportBR_0420315_p2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) {
|
||||||
|
return String.format("REPBR.0420315.P2.%s-%s.%s", DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(dateTimeNow));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<ReportBR_0420315_P2> getReportClass() {
|
||||||
|
return ReportBR_0420315_P2.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,104 +0,0 @@
|
||||||
package ru.spcex.clearing.reports.services.collector;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
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.generated.ClearingMemberCategory;
|
|
||||||
import ru.clearing.classes.statics.data.misc.Listing;
|
|
||||||
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_17_1.ReportBR_0420315_P1;
|
|
||||||
import ru.spcex.clearing.reports.services.ReportDataCollector;
|
|
||||||
import ru.spcex.platform.enumeration.ClearingStatus;
|
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
@Component
|
|
||||||
public class Bt17_1_collector extends ReportDataCollector<ReportBR_0420315_P1> {
|
|
||||||
private Imdg<Company> companyImdg;
|
|
||||||
private Imdg<LiabilitiesClaimsAssets> liabilitiesClaimsAssetsImdg;
|
|
||||||
private Imdg<ClearingMemberCategory> clearingMemberCategoryImdg;
|
|
||||||
private Imdg<ClearingStatusDictionary> clearingStatusDictionaryImdg;
|
|
||||||
private Imdg<Listing> listingImdg;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
public Bt17_1_collector(ImdgProvider imdgProvider) {
|
|
||||||
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
|
||||||
liabilitiesClaimsAssetsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_LiabilitiesClaimsAssets, LiabilitiesClaimsAssets.class);
|
|
||||||
clearingMemberCategoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
|
|
||||||
clearingStatusDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingStatusDictionary, ClearingStatusDictionary.class);
|
|
||||||
listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ReportBR_0420315_P1> collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
|
|
||||||
if (startDate.isAfter(endDate)) {
|
|
||||||
throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")");
|
|
||||||
}
|
|
||||||
List<ReportBR_0420315_P1> result = new ArrayList<>();
|
|
||||||
|
|
||||||
String ql = String.format("'%s' <= refundDate and refundDate <= '%s'", startDate, endDate);
|
|
||||||
Collection<LiabilitiesClaimsAssets> liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsBySQL(ql);
|
|
||||||
for (LiabilitiesClaimsAssets liability : liabilities) {
|
|
||||||
final Long companyId = liability.getCompanyId();
|
|
||||||
Company company = companyImdg.getSingleObjectByID(companyId);
|
|
||||||
if (company != null) {
|
|
||||||
ClearingMemberCategory cmc = clearingMemberCategoryImdg.getSingleObjectByFieldValues(Map.of("companyId", companyId));
|
|
||||||
if (cmc == null || !Arrays.asList("I", "V", "I,V").contains(cmc.getClearingMemberCategory())) {
|
|
||||||
//todo уточнить фильтр need filter by I, V?
|
|
||||||
log.trace("Filtered ClearingMemberCategory[{}].ClearingMemberCategory={}",
|
|
||||||
cmc == null ? null : cmc.getId(), cmc == null ? null : cmc.getClearingMemberCategory());
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ClearingStatusDictionary clearingStatus = clearingStatusDictionaryImdg.getSingleObjectByID(liability.getClearingStatus());
|
|
||||||
if (clearingStatus == null || !ClearingStatus.OK.getKey().equals(clearingStatus.getCode())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ReportBR_0420315_P1 reportBR_0420315_p1 = new ReportBR_0420315_P1(startDate, endDate,
|
|
||||||
"BR",
|
|
||||||
cmc.getClearingMemberCategory(),
|
|
||||||
clearingStatus.getCode());
|
|
||||||
|
|
||||||
Listing listing;
|
|
||||||
{
|
|
||||||
Map qParam = new HashMap<>();
|
|
||||||
qParam.put("market", "MKRS"); // todo use const
|
|
||||||
qParam.put("securityId", liability.getSecurityId());
|
|
||||||
listing = listingImdg.getSingleObjectByFieldValues(qParam);
|
|
||||||
}
|
|
||||||
// liability.getPrice()// todo как там с учётом валют это делать?
|
|
||||||
Integer contractorQty = StringUtils.isEmpty(liability.getContract()) ? 0 : 1; // todo то суммировать надо. Связь похоже много к 1. // liability.getContract() В данное поле необходимо записать общее количество исполненных договоров, шт. элемент contract из бизнес-объекта liabilitiesClaimsAssets
|
|
||||||
BigDecimal liabilitiesAmount = liability.getPrice() == null ? BigDecimal.ZERO : liability.getPrice(); // todo как правильно считать?
|
|
||||||
ReportBR_0420315_P1.Info_0420315_P1 info_0420315_p1 = new ReportBR_0420315_P1.Info_0420315_P1("companyId",
|
|
||||||
company.getFullName(),
|
|
||||||
listing == null ? null : listing.getMarket(),
|
|
||||||
contractorQty.toString(),
|
|
||||||
liabilitiesAmount.toString());
|
|
||||||
reportBR_0420315_p1.getRows().add(info_0420315_p1);
|
|
||||||
|
|
||||||
result.add(reportBR_0420315_p1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ReportBR_0420315_P1> collectReportWithClearingStatus(LocalDate startDate, LocalDate endDate, String clearingStatus) {
|
|
||||||
throw new IllegalStateException("clearingStatus not supported by this class");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) {
|
|
||||||
return String.format("REPBR.0420315.P1.%s-%s.%s", DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate),
|
|
||||||
DATE_TIME_FORMATTER.format(dateTimeNow));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
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.company.relation.Relation;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.reports.reports.bt_17_2.ReportBR_0420317;
|
||||||
|
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 java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class Bt17_2_collector extends ReportDataCollector<ReportBR_0420317> {
|
||||||
|
private Imdg<Company> companyImdg;
|
||||||
|
private Imdg<Relation> relationImdg;
|
||||||
|
private Imdg<CompanySymbols> companySymbolsImdg;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public Bt17_2_collector(ImdgProvider imdgProvider) {
|
||||||
|
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
|
relationImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
|
||||||
|
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReportBR_0420317 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
|
||||||
|
if (startDate.isAfter(endDate)) {
|
||||||
|
throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
String ql = String.format("'%s' <= updated and updated <= '%s' and service='MKR'", startDate, endDate);
|
||||||
|
// todo обговорить про updatedAt updated, todo enum MKR
|
||||||
|
Collection<Relation> relations = relationImdg.getCollectionObjectsBySQL(ql);
|
||||||
|
|
||||||
|
ReportBR_0420317 reportBR_0420317 = new ReportBR_0420317(startDate, endDate, "BR");
|
||||||
|
for (Relation relation: relations) {
|
||||||
|
Company company = relation.getConsumerId() == null ? null : companyImdg.getSingleObjectByID(relation.getConsumerId());
|
||||||
|
if (company == null) {
|
||||||
|
log.warn("Company.id={} not found for relation.id={}", relation.getConsumerId(), relation.getId());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
CompanySymbols companySymbol = companySymbolsImdg.getSingleObjectByFieldValues(Map.of(
|
||||||
|
"companySymbol", DocumentTypes.inn.getKey(),// ИНН или TIN участника клиринга
|
||||||
|
"companyId", company.getId()
|
||||||
|
));
|
||||||
|
ReportBR_0420317.Info_0420317 info_0420317 = new ReportBR_0420317.Info_0420317(
|
||||||
|
company.getClearingCode(),
|
||||||
|
toString(relation.getSupplierId()),
|
||||||
|
relation.getService(),
|
||||||
|
relation.getServiceStatus(),
|
||||||
|
toString(relation.getUpdated()),
|
||||||
|
company.getFullName(),
|
||||||
|
companySymbol == null ? null : companySymbol.getCompanySymbolValue(),
|
||||||
|
company.getProfile().getCountryCode(),
|
||||||
|
relation.getComment()
|
||||||
|
);
|
||||||
|
reportBR_0420317.getRows().add(info_0420317);
|
||||||
|
}
|
||||||
|
|
||||||
|
return reportBR_0420317;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) {
|
||||||
|
return String.format("REPBR.0420317.%s-%s.%s", DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(dateTimeNow));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<ReportBR_0420317> getReportClass() {
|
||||||
|
return ReportBR_0420317.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
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.company.relation.Relation;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.reports.reports.bt_17_2.ReportBR_0420317;
|
||||||
|
import ru.spcex.clearing.reports.reports.bt_17_5.ReportBR_0420312_P1;
|
||||||
|
import ru.spcex.clearing.reports.services.ReportDataCollector;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class Bt17_5_P1_collector extends ReportDataCollector<ReportBR_0420312_P1> {
|
||||||
|
private Imdg<Company> companyImdg;
|
||||||
|
private Imdg<Relation> relationImdg;
|
||||||
|
private Imdg<CompanySymbols> companySymbolsImdg;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public Bt17_5_P1_collector(ImdgProvider imdgProvider) {
|
||||||
|
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
|
relationImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
|
||||||
|
companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReportBR_0420312_P1 collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
|
||||||
|
if (startDate.isAfter(endDate)) {
|
||||||
|
throw new IllegalArgumentException("startDate(" + startDate + ") > endDate(" + endDate + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO ВСЁ по CLS-29...
|
||||||
|
String ql = String.format("'%s' <= updated and updated <= '%s' and service='MKR'", startDate, endDate);
|
||||||
|
// todo обговорить про updatedAt updated, todo enum MKR
|
||||||
|
Collection<Relation> relations = relationImdg.getCollectionObjectsBySQL(ql);
|
||||||
|
|
||||||
|
ReportBR_0420312_P1 reportBR_0420312P1 = new ReportBR_0420312_P1(LocalDate.now(),
|
||||||
|
LocalDate.now(),
|
||||||
|
"companyClearingCode",
|
||||||
|
"BR",
|
||||||
|
"liabilitesClaimsAssetsCompanyId",
|
||||||
|
"liabilitesClaimsAssetsFullName",
|
||||||
|
"companySymbolCode",
|
||||||
|
"companySymbolValue",
|
||||||
|
"companyInfoCountryCode",
|
||||||
|
"clearingMemberCategory");
|
||||||
|
|
||||||
|
return reportBR_0420312P1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) {
|
||||||
|
return String.format("REPBR.0420312_р1-1.%s-%s.%s", DATE_FORMATTER.format(startDate), DATE_FORMATTER.format(endDate),
|
||||||
|
DATE_TIME_FORMATTER.format(dateTimeNow));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<ReportBR_0420312_P1> getReportClass() {
|
||||||
|
return ReportBR_0420312_P1.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
package ru.spcex.clearing.reports.services.collector;
|
||||||
|
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithId;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
public class MapUtil {
|
||||||
|
|
||||||
|
public static <K, V extends WithId> Map<K, V> index(Collection<V> from, Function<V, K> indexFieldExtractor) {
|
||||||
|
Map<K, V> index = new HashMap<>();
|
||||||
|
for (V obj : from) {
|
||||||
|
K key = indexFieldExtractor.apply(obj);
|
||||||
|
V exist = index.put(key, obj);
|
||||||
|
if (exist != null) {
|
||||||
|
throw new IllegalStateException(String.format("%s with id=%s,%s has duplicate key=\"{}\"",
|
||||||
|
exist.getClass().getSimpleName(), exist.getId(), obj.getId(), key
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <K, V extends WithId> Map<K, List<V>> indexList(Collection<V> from, Function<V, K> indexFieldExtractor) {
|
||||||
|
Map<K, List<V>> index = new HashMap<>();
|
||||||
|
for (V obj : from) {
|
||||||
|
K key = indexFieldExtractor.apply(obj);
|
||||||
|
List<V> lst = index.computeIfAbsent(key, (_key_) -> new ArrayList<>());
|
||||||
|
lst.add(obj);
|
||||||
|
}
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ server.port=8080
|
||||||
server.servlet.context-path=/reports_service
|
server.servlet.context-path=/reports_service
|
||||||
spring.main.web-application-type=servlet
|
spring.main.web-application-type=servlet
|
||||||
|
|
||||||
reports-service.hazelcast.cluster-members=127.0.0.1:5701
|
reports-service.hazelcast.cluster-members=127.0.0.1:5701,10.200.200.181:5701
|
||||||
reports-service.hazelcast.login=dev
|
reports-service.hazelcast.login=dev
|
||||||
reports-service.hazelcast.password=dev-pass
|
reports-service.hazelcast.password=dev-pass
|
||||||
|
reports-service.ReportModuleOut=./report_out
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
package ru.spcex.clearing.reports.services;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import ru.spcex.clearing.reports.reports.AbstractReport;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class ReportDataCollectorTest extends ReportDataCollector {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testToString() {
|
||||||
|
ReportDataCollectorTest instance = new ReportDataCollectorTest();
|
||||||
|
assertEquals(null, instance.toString((Long)null));
|
||||||
|
assertEquals("1", instance.toString((Long)1L));
|
||||||
|
assertEquals("1230", instance.toString((Long)1230L));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testToString1() {
|
||||||
|
ReportDataCollectorTest instance = new ReportDataCollectorTest();
|
||||||
|
assertEquals(null, instance.toString((Instant)null));
|
||||||
|
Instant val = Instant.ofEpochMilli(1672058774338L);
|
||||||
|
assertEquals("26.12.2022T15:46:14", instance.toString(val)); // msk timezone
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AbstractReport collectReportWithPeriod(LocalDate startDate, LocalDate endDate) {
|
||||||
|
throw new IllegalStateException("test");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileName(LocalDate startDate, LocalDate endDate, LocalDateTime dateTimeNow) {
|
||||||
|
throw new IllegalStateException("test");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<AbstractReport> getReportClass() {
|
||||||
|
return AbstractReport.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,7 +2,7 @@ package ru.spcex.clearing.reports.services.impl;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import ru.spcex.clearing.reports.services.collector.Bt17_1_collector;
|
import ru.spcex.clearing.reports.services.collector.Bt17_1_P1_collector;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
@ -13,7 +13,7 @@ class Bt17_1_collectorTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getFileName() {
|
void getFileName() {
|
||||||
Bt17_1_collector collector = Mockito.mock(Bt17_1_collector.class);
|
Bt17_1_P1_collector collector = Mockito.mock(Bt17_1_P1_collector.class);
|
||||||
Mockito.when(collector.getFileName(Mockito.any(),Mockito.any(),Mockito.any())).thenCallRealMethod();
|
Mockito.when(collector.getFileName(Mockito.any(),Mockito.any(),Mockito.any())).thenCallRealMethod();
|
||||||
|
|
||||||
String str = collector.getFileName(LocalDate.of(2020,1,1),
|
String str = collector.getFileName(LocalDate.of(2020,1,1),
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ClearingCalendarService extends QueueConsumer implements InitializingBean {
|
public class ClearingCalendarService extends QueueConsumer implements InitializingBean {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
@ -33,21 +35,23 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() {
|
public void afterPropertiesSet() {
|
||||||
callback(ClearingCalendarNewRequest.class)
|
callback(ClearingCalendarNewRequest.class)
|
||||||
.setConsumer(this::newTradingCalendar)
|
.setConsumer(this::newClearingCalendar)
|
||||||
.forDestination(Consts.DESTINATION_CLEARING_CALENDAR_NEW, callbacks::put);
|
.forDestination(Consts.DESTINATION_CLEARING_CALENDAR_NEW, callbacks::put);
|
||||||
callback(ClearingCalendarUpdateRequest.class)
|
callback(ClearingCalendarUpdateRequest.class)
|
||||||
.setConsumer(this::updateTradingCalendar)
|
.setConsumer(this::updateClearingCalendar)
|
||||||
.forDestination(Consts.DESTINATION_CLEARING_CALENDAR_UPDATE, callbacks::put);
|
.forDestination(Consts.DESTINATION_CLEARING_CALENDAR_UPDATE, callbacks::put);
|
||||||
callback(CommonDeleteRequest.class)
|
callback(CommonDeleteRequest.class)
|
||||||
.setConsumer(this::deleteTradingCalendar)
|
.setConsumer(this::deleteClearingCalendar)
|
||||||
.forDestination(Consts.DESTINATION_CLEARING_CALENDAR_DELETE, callbacks::put);
|
.forDestination(Consts.DESTINATION_CLEARING_CALENDAR_DELETE, callbacks::put);
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void newTradingCalendar(BaseRequest<ClearingCalendarNewRequest> userRequest) {
|
private void newClearingCalendar(BaseRequest<ClearingCalendarNewRequest> userRequest) {
|
||||||
ClearingCalendarNewRequest req = userRequest.getRequestPayload();
|
ClearingCalendarNewRequest req = userRequest.getRequestPayload();
|
||||||
log.debug("ClearingCalendarNewRequest received");
|
log.debug("ClearingCalendarNewRequest received");
|
||||||
ClearingCalendar clearingCalendar = new ClearingCalendar();
|
ClearingCalendar clearingCalendar = new ClearingCalendar();
|
||||||
|
Instant created = Instant.now();
|
||||||
|
clearingCalendar.setCreated(created);
|
||||||
clearingCalendar.setClearingDate(req.getClearingDate());
|
clearingCalendar.setClearingDate(req.getClearingDate());
|
||||||
clearingCalendar.setCompanyId(req.getCompanyId());
|
clearingCalendar.setCompanyId(req.getCompanyId());
|
||||||
clearingCalendar.setDayStatus(req.getDayStatus());
|
clearingCalendar.setDayStatus(req.getDayStatus());
|
||||||
|
|
@ -55,18 +59,20 @@ public class ClearingCalendarService extends QueueConsumer implements Initializi
|
||||||
log.debug("successfully processed, new id {}", clearingCalendar.getId());
|
log.debug("successfully processed, new id {}", clearingCalendar.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateTradingCalendar(BaseRequest<ClearingCalendarUpdateRequest> userRequest) {
|
private void updateClearingCalendar(BaseRequest<ClearingCalendarUpdateRequest> userRequest) {
|
||||||
ClearingCalendarUpdateRequest req = userRequest.getRequestPayload();
|
ClearingCalendarUpdateRequest req = userRequest.getRequestPayload();
|
||||||
log.debug("ClearingCalendarUpdateRequest received");
|
log.debug("ClearingCalendarUpdateRequest received");
|
||||||
|
Instant updated = Instant.now();
|
||||||
ClearingCalendar clearingCalendar = clearingCalendarMap.getSingleObjectByID(req.getId());
|
ClearingCalendar clearingCalendar = clearingCalendarMap.getSingleObjectByID(req.getId());
|
||||||
clearingCalendar.setClearingDate(req.getClearingDate());
|
clearingCalendar.setClearingDate(req.getClearingDate());
|
||||||
clearingCalendar.setCompanyId(req.getCompanyId());
|
clearingCalendar.setCompanyId(req.getCompanyId());
|
||||||
clearingCalendar.setDayStatus(req.getDayStatus());
|
clearingCalendar.setDayStatus(req.getDayStatus());
|
||||||
|
clearingCalendar.setUpdated(updated);
|
||||||
clearingCalendarMap.update(clearingCalendar);
|
clearingCalendarMap.update(clearingCalendar);
|
||||||
log.debug("successfully processed, new id {}", clearingCalendar.getId());
|
log.debug("successfully processed, new id {}", clearingCalendar.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteTradingCalendar(BaseRequest<CommonDeleteRequest> userRequest) {
|
private void deleteClearingCalendar(BaseRequest<CommonDeleteRequest> userRequest) {
|
||||||
CommonDeleteRequest req = userRequest.getRequestPayload();
|
CommonDeleteRequest req = userRequest.getRequestPayload();
|
||||||
log.debug("CommonDeleteRequest received id = {}", req.getId());
|
log.debug("CommonDeleteRequest received id = {}", req.getId());
|
||||||
ClearingCalendar clearingCalendar = clearingCalendarMap.getSingleObjectByID(req.getId());
|
ClearingCalendar clearingCalendar = clearingCalendarMap.getSingleObjectByID(req.getId());
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,8 @@ public class PlannerTemplateService extends QueueConsumer implements Initializin
|
||||||
PlannerTemplateNewRequest req = userRequest.getRequestPayload();
|
PlannerTemplateNewRequest req = userRequest.getRequestPayload();
|
||||||
log.debug("PlannerTemplateNewRequest received");
|
log.debug("PlannerTemplateNewRequest received");
|
||||||
PlannerTemplate plannerTemplate = new PlannerTemplate();
|
PlannerTemplate plannerTemplate = new PlannerTemplate();
|
||||||
plannerTemplate.setCreated(Instant.now());
|
Instant created = Instant.now();
|
||||||
|
plannerTemplate.setCreated(created);
|
||||||
plannerTemplate.setTask(req.getTask());
|
plannerTemplate.setTask(req.getTask());
|
||||||
plannerTemplate.setTaskTime(req.getTaskTime());
|
plannerTemplate.setTaskTime(req.getTaskTime());
|
||||||
plannerTemplate.setTaskStatus(req.getTaskStatus());
|
plannerTemplate.setTaskStatus(req.getTaskStatus());
|
||||||
|
|
@ -64,7 +65,8 @@ public class PlannerTemplateService extends QueueConsumer implements Initializin
|
||||||
PlannerTemplateUpdateRequest req = userRequest.getRequestPayload();
|
PlannerTemplateUpdateRequest req = userRequest.getRequestPayload();
|
||||||
log.debug("PlannerTemplateUpdateRequest received");
|
log.debug("PlannerTemplateUpdateRequest received");
|
||||||
PlannerTemplate plannerTemplate = plannerTemplateMap.getSingleObjectByID(req.getId());
|
PlannerTemplate plannerTemplate = plannerTemplateMap.getSingleObjectByID(req.getId());
|
||||||
plannerTemplate.setUpdated(Instant.now());
|
Instant updated = Instant.now();
|
||||||
|
plannerTemplate.setUpdated(updated);
|
||||||
plannerTemplate.setTask(req.getTask());
|
plannerTemplate.setTask(req.getTask());
|
||||||
plannerTemplate.setTaskTime(req.getTaskTime());
|
plannerTemplate.setTaskTime(req.getTaskTime());
|
||||||
plannerTemplate.setTaskStatus(req.getTaskStatus());
|
plannerTemplate.setTaskStatus(req.getTaskStatus());
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
package ru.specx.clearing.scheduler.config;
|
||||||
|
|
||||||
|
import com.hazelcast.config.*;
|
||||||
|
import com.hazelcast.core.Hazelcast;
|
||||||
|
import com.hazelcast.core.HazelcastInstance;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.util.HazelcastHelper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class HazelcastServiceTestConfiguration {
|
||||||
|
private HazelcastInstance hazelcastInstance;
|
||||||
|
|
||||||
|
private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) {
|
||||||
|
ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
|
||||||
|
if (maxPoolSz > 2) {
|
||||||
|
pool.setKeepAliveSeconds(60);
|
||||||
|
pool.setAllowCoreThreadTimeOut(true);
|
||||||
|
}
|
||||||
|
pool.setCorePoolSize(maxPoolSz);
|
||||||
|
pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion);
|
||||||
|
return pool;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "hazelcastServiceTest")
|
||||||
|
public HazelcastService hazelcastService(@Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer, @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter, HazelcastClientParams params) {
|
||||||
|
Config cfg = new Config();
|
||||||
|
cfg.setInstanceName("localhost");
|
||||||
|
|
||||||
|
NetworkConfig networkConfig = new NetworkConfig();
|
||||||
|
JoinConfig joinConfig = new JoinConfig();
|
||||||
|
joinConfig.setMulticastConfig(new MulticastConfig().setEnabled(false));
|
||||||
|
joinConfig.setTcpIpConfig(new TcpIpConfig().setEnabled(true).setMembers(List.of("127.0.0.1")));
|
||||||
|
networkConfig.setJoin(joinConfig);
|
||||||
|
cfg.setNetworkConfig(networkConfig);
|
||||||
|
hazelcastInstance = Hazelcast.newHazelcastInstance(cfg);
|
||||||
|
HazelcastHelper.otcSystem_setStorageState(true, hazelcastInstance);
|
||||||
|
return new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "taskExecutorHazelcastClientInitializer")
|
||||||
|
public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() {
|
||||||
|
return createThreadPoolTaskExecutor(1, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "taskExecutorIdGeneratorAwaiter")
|
||||||
|
public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() {
|
||||||
|
return createThreadPoolTaskExecutor(1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "hazelcastClientParams")
|
||||||
|
public HazelcastClientParams getHazelcastClientParams() {
|
||||||
|
HazelcastClientParams params = new HazelcastClientParams();
|
||||||
|
params.setLogin("dev");
|
||||||
|
params.setPassword("dev-pass");
|
||||||
|
params.setClusterMembers("127.0.0.1");
|
||||||
|
params.setInstanceName("hzTestClient" + new Random().nextInt());
|
||||||
|
params.setNearCacheConfig(new NearCacheConfig());
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,138 @@
|
||||||
|
package ru.specx.clearing.scheduler.service;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.hazelcast.core.IMap;
|
||||||
|
import com.hazelcast.map.listener.EntryRemovedListener;
|
||||||
|
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.consumer.OffsetResetStrategy;
|
||||||
|
import org.apache.kafka.clients.producer.MockProducer;
|
||||||
|
import org.apache.kafka.common.TopicPartition;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
|
import ru.clearing.classes.statics.data.profile.Contact;
|
||||||
|
import ru.clearing.classes.statics.data.scheduler.ClearingCalendar;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.ClearingCalendarNewRequest;
|
||||||
|
import ru.spcex.clearing.scheduler.service.ClearingCalendarService;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
||||||
|
import ru.specx.clearing.scheduler.config.HazelcastServiceTestConfiguration;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
@ExtendWith(SpringExtension.class)
|
||||||
|
@ContextConfiguration(classes = {
|
||||||
|
HazelcastServiceTestConfiguration.class})
|
||||||
|
class ClearingCalendarServiceTest {
|
||||||
|
|
||||||
|
private static final int PARTITION = 0;
|
||||||
|
private static final String TOPIC_CLEARING_CALENDAR_NEW = Consts.DESTINATION_CLEARING_CALENDAR_NEW;
|
||||||
|
private static final Long ID = 0L;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
@Qualifier("hazelcastServiceTest")
|
||||||
|
private HazelcastService hazelcastServiceTest;
|
||||||
|
private MockConsumer<String, Object> mockConsumer;
|
||||||
|
private MockProducer<String, Object> mockProducer;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
mockConsumer = new MockConsumer<>(OffsetResetStrategy.EARLIEST);
|
||||||
|
mockProducer = new MockProducer<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link ClearingCalendarService#newTradingCalendar(BaseRequest)}(BaseRequest)}<br>
|
||||||
|
* Тест проверяет создание сущности {@link ClearingCalendar} в Hazelcast при передаче из Apache Kafka.<br>
|
||||||
|
* Входной запрос {@link ClearingCalendarNewRequest}:<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void newClearingCalendarInQueue() throws InterruptedException {
|
||||||
|
//ARRANGE
|
||||||
|
|
||||||
|
ClearingCalendar clearingCalendar = new ClearingCalendar();
|
||||||
|
Instant created = Instant.now();
|
||||||
|
clearingCalendar.setCreated(created);
|
||||||
|
clearingCalendar.setClearingDate(LocalDate.now());
|
||||||
|
clearingCalendar.setCompanyId(0L);
|
||||||
|
clearingCalendar.setDayStatus("STATUS");
|
||||||
|
|
||||||
|
ClearingCalendarNewRequest clearingCalendarNewRequest = new ClearingCalendarNewRequest();
|
||||||
|
clearingCalendarNewRequest.setClearingDate(clearingCalendar.getClearingDate());
|
||||||
|
clearingCalendarNewRequest.setCompanyId(clearingCalendar.getCompanyId());
|
||||||
|
clearingCalendarNewRequest.setDayStatus(clearingCalendar.getDayStatus());
|
||||||
|
|
||||||
|
BaseRequest<ClearingCalendarNewRequest> baseNewRequest = new BaseRequest<>();
|
||||||
|
baseNewRequest.setRequestPayload(clearingCalendarNewRequest);
|
||||||
|
baseNewRequest.setId(ID);
|
||||||
|
baseNewRequest.setActionType(ActionType.NEW);
|
||||||
|
String jsonBaseForRequest;
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
try {
|
||||||
|
jsonBaseForRequest = objectMapper.writeValueAsString(baseNewRequest);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ACT
|
||||||
|
//service set up
|
||||||
|
ClearingCalendarService clearingCalendarService = new ClearingCalendarService(mockConsumer, mockProducer, hazelcastServiceTest);
|
||||||
|
|
||||||
|
//callbacks set up
|
||||||
|
clearingCalendarService.afterPropertiesSet();
|
||||||
|
IMap<Long, ClearingCalendar> iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_ClearingCalendar);
|
||||||
|
//KAFKA
|
||||||
|
HashMap<TopicPartition, Long> startOffsetsUpdating = new HashMap<>();
|
||||||
|
TopicPartition topic = new TopicPartition(TOPIC_CLEARING_CALENDAR_NEW, PARTITION);
|
||||||
|
startOffsetsUpdating.put(topic, 0L);
|
||||||
|
mockConsumer.updateBeginningOffsets(startOffsetsUpdating);
|
||||||
|
|
||||||
|
mockConsumer.schedulePollTask(() -> {
|
||||||
|
mockConsumer.rebalance(Collections.singletonList(new TopicPartition(TOPIC_CLEARING_CALENDAR_NEW, PARTITION)));
|
||||||
|
mockConsumer.addRecord(new ConsumerRecord<>(TOPIC_CLEARING_CALENDAR_NEW, PARTITION, 0, "key", jsonBaseForRequest));
|
||||||
|
});
|
||||||
|
|
||||||
|
//waiting for hazelcast map item removes
|
||||||
|
Object waiter = new Object();
|
||||||
|
String listenerID = iMap.addEntryListener((EntryRemovedListener<Long, Contact>) entryEvent -> {
|
||||||
|
System.out.println("Checking If pushed..");
|
||||||
|
|
||||||
|
try {
|
||||||
|
waiter.wait(100);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
synchronized (waiter) {
|
||||||
|
waiter.notify();
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
synchronized (waiter) {
|
||||||
|
waiter.wait(100);
|
||||||
|
}
|
||||||
|
ClearingCalendar clearingCalendarRes = iMap.get(iMap.keySet().stream().findFirst().get());
|
||||||
|
//ASSERT
|
||||||
|
Assertions.assertEquals(1, iMap.size());
|
||||||
|
|
||||||
|
Assertions.assertNotNull(clearingCalendarRes.getCreated());
|
||||||
|
Assertions.assertEquals(clearingCalendar.getClearingDate(), clearingCalendarRes.getClearingDate());
|
||||||
|
Assertions.assertEquals(clearingCalendar.getCompanyId(), clearingCalendarRes.getCompanyId());
|
||||||
|
Assertions.assertEquals(clearingCalendar.getDayStatus(), clearingCalendarRes.getDayStatus());
|
||||||
|
|
||||||
|
//preparing hazelcastImdgProvider for next test
|
||||||
|
iMap.removeEntryListener(listenerID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,141 @@
|
||||||
|
package ru.specx.clearing.scheduler.service;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.hazelcast.core.IMap;
|
||||||
|
import com.hazelcast.map.listener.EntryRemovedListener;
|
||||||
|
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
||||||
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
|
import org.apache.kafka.clients.consumer.OffsetResetStrategy;
|
||||||
|
import org.apache.kafka.clients.producer.MockProducer;
|
||||||
|
import org.apache.kafka.common.TopicPartition;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
|
import ru.clearing.classes.statics.data.profile.Contact;
|
||||||
|
import ru.clearing.classes.statics.data.scheduler.PlannerTemplate;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.PlannerTemplateNewRequest;
|
||||||
|
import ru.spcex.clearing.scheduler.service.PlannerTemplateService;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
|
||||||
|
import ru.specx.clearing.scheduler.config.HazelcastServiceTestConfiguration;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
@ExtendWith(SpringExtension.class)
|
||||||
|
@ContextConfiguration(classes = {
|
||||||
|
HazelcastServiceTestConfiguration.class})
|
||||||
|
class PlannerTemplateServiceTest {
|
||||||
|
|
||||||
|
private static final int PARTITION = 0;
|
||||||
|
private static final String TOPIC_PLANNER_TEMPLATE_NEW = Consts.DESTINATION_PLANNER_TEMPLATE_NEW;
|
||||||
|
private static final Long ID = 0L;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
@Qualifier("hazelcastServiceTest")
|
||||||
|
private HazelcastService hazelcastServiceTest;
|
||||||
|
private MockConsumer<String, Object> mockConsumer;
|
||||||
|
private MockProducer<String, Object> mockProducer;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
mockConsumer = new MockConsumer<>(OffsetResetStrategy.EARLIEST);
|
||||||
|
mockProducer = new MockProducer<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link PlannerTemplateService#newTimetable(BaseRequest)}(BaseRequest)}<br>
|
||||||
|
* Тест проверяет создание сущности {@link ru.clearing.classes.statics.data.scheduler.PlannerTemplate} в Hazelcast при передаче из Apache Kafka.<br>
|
||||||
|
* Входной запрос {@link PlannerTemplateNewRequest}:<br>
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void newPlannerTemplateInQueue() throws InterruptedException {
|
||||||
|
//ARRANGE
|
||||||
|
Instant created = Instant.now();
|
||||||
|
PlannerTemplate plannerTemplate = new PlannerTemplate();
|
||||||
|
plannerTemplate.setTask("TASK");
|
||||||
|
plannerTemplate.setTaskTime(LocalTime.MIDNIGHT);
|
||||||
|
plannerTemplate.setTaskStatus("TASK_STATUS");
|
||||||
|
plannerTemplate.setCompanyId(0L);
|
||||||
|
plannerTemplate.setSecurityId(10L);
|
||||||
|
|
||||||
|
PlannerTemplateNewRequest plannerTemplateNewRequest = new PlannerTemplateNewRequest();
|
||||||
|
plannerTemplateNewRequest.setTask(plannerTemplate.getTask());
|
||||||
|
plannerTemplateNewRequest.setTaskTime(plannerTemplate.getTaskTime());
|
||||||
|
plannerTemplateNewRequest.setTaskStatus(plannerTemplate.getTaskStatus());
|
||||||
|
plannerTemplateNewRequest.setCompanyId(plannerTemplate.getCompanyId());
|
||||||
|
plannerTemplateNewRequest.setSecurityId(plannerTemplate.getSecurityId());
|
||||||
|
|
||||||
|
BaseRequest<PlannerTemplateNewRequest> plannerTemplateRequest = new BaseRequest<>();
|
||||||
|
plannerTemplateRequest.setRequestPayload(plannerTemplateNewRequest);
|
||||||
|
plannerTemplateRequest.setId(ID);
|
||||||
|
plannerTemplateRequest.setActionType(ActionType.NEW);
|
||||||
|
String jsonBaseForDeleteRequest;
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
try {
|
||||||
|
jsonBaseForDeleteRequest = objectMapper.writeValueAsString(plannerTemplateRequest);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ACT
|
||||||
|
//service set up
|
||||||
|
PlannerTemplateService plannerTemplateService = new PlannerTemplateService(mockConsumer, mockProducer, hazelcastServiceTest);
|
||||||
|
|
||||||
|
//callbacks set up
|
||||||
|
plannerTemplateService.afterPropertiesSet();
|
||||||
|
IMap<Long, PlannerTemplate> iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_PlannerTemplate);
|
||||||
|
//KAFKA
|
||||||
|
HashMap<TopicPartition, Long> startOffsetsUpdating = new HashMap<>();
|
||||||
|
TopicPartition topic = new TopicPartition(TOPIC_PLANNER_TEMPLATE_NEW, PARTITION);
|
||||||
|
startOffsetsUpdating.put(topic, 0L);
|
||||||
|
mockConsumer.updateBeginningOffsets(startOffsetsUpdating);
|
||||||
|
|
||||||
|
mockConsumer.schedulePollTask(() -> {
|
||||||
|
mockConsumer.rebalance(Collections.singletonList(new TopicPartition(TOPIC_PLANNER_TEMPLATE_NEW, PARTITION)));
|
||||||
|
mockConsumer.addRecord(new ConsumerRecord<>(TOPIC_PLANNER_TEMPLATE_NEW, PARTITION, 0, "key", jsonBaseForDeleteRequest));
|
||||||
|
});
|
||||||
|
|
||||||
|
//waiting for hazelcast map item removes
|
||||||
|
Object waiter = new Object();
|
||||||
|
String listenerID = iMap.addEntryListener((EntryRemovedListener<Long, Contact>) entryEvent -> {
|
||||||
|
System.out.println("Checking If pushed..");
|
||||||
|
|
||||||
|
try {
|
||||||
|
waiter.wait(100);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
synchronized (waiter) {
|
||||||
|
waiter.notify();
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
synchronized (waiter) {
|
||||||
|
waiter.wait(100);
|
||||||
|
}
|
||||||
|
PlannerTemplate plannerTemplateRes = iMap.get(iMap.keySet().stream().findFirst().get());
|
||||||
|
//ASSERT
|
||||||
|
Assertions.assertEquals(1, iMap.size());
|
||||||
|
|
||||||
|
Assertions.assertNotNull(plannerTemplateRes.getCreated());
|
||||||
|
Assertions.assertEquals(plannerTemplate.getTask(), plannerTemplateRes.getTask());
|
||||||
|
Assertions.assertEquals(plannerTemplate.getTaskTime(), plannerTemplateRes.getTaskTime());
|
||||||
|
Assertions.assertEquals(plannerTemplate.getTaskStatus(), plannerTemplateRes.getTaskStatus());
|
||||||
|
Assertions.assertEquals(plannerTemplate.getCompanyId(), plannerTemplateRes.getCompanyId());
|
||||||
|
Assertions.assertEquals(plannerTemplate.getSecurityId(), plannerTemplateRes.getSecurityId());
|
||||||
|
//preparing hazelcastImdgProvider for next test
|
||||||
|
iMap.removeEntryListener(listenerID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
package ru.specx.clearing.scheduler.utils;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory for creating test matchers.
|
||||||
|
* <p>
|
||||||
|
* Comparing actual and expected objects via AssertJ
|
||||||
|
*/
|
||||||
|
public class MatcherFactory {
|
||||||
|
|
||||||
|
public static <T> Matcher<T> usingIgnoringFieldsComparator(String... fieldsToIgnore) {
|
||||||
|
return new Matcher<>(fieldsToIgnore);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Matcher<T> {
|
||||||
|
private final String[] fieldsToIgnore;
|
||||||
|
|
||||||
|
private Matcher(String... fieldsToIgnore) {
|
||||||
|
this.fieldsToIgnore = fieldsToIgnore;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void assertMatch(T actual, T expected) {
|
||||||
|
assertThat(actual).usingRecursiveComparison().ignoringFields(fieldsToIgnore).isEqualTo(expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SafeVarargs
|
||||||
|
public final void assertMatch(Iterable<T> actual, T... expected) {
|
||||||
|
assertMatch(actual, Arrays.asList(expected));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void assertMatch(Iterable<T> actual, Iterable<T> expected) {
|
||||||
|
assertThat(actual).usingRecursiveFieldByFieldElementComparatorIgnoringFields(fieldsToIgnore).isEqualTo(expected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
package ru.spcex.platform.enumeration;
|
||||||
|
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CLEARING_CATEGORY_DICTIONARY
|
||||||
|
*/
|
||||||
|
public enum ClearingCategory implements IEnumKey {
|
||||||
|
C("C"), // Категория «Ц» - Банк России
|
||||||
|
B("B"), // Категория «Б» - Кредитная организация ДР
|
||||||
|
F("F"), // Категория «Ф» - Участник рынка РЦБ
|
||||||
|
I("I"), // Категория «И» - Инициатор по ТБС
|
||||||
|
V("V"), // Категория «В» - Инициатор по ТКС
|
||||||
|
T("T"), // Категория «Т» - Участник товарного рынка
|
||||||
|
K("K"); // Категория «К» - Участник клиринга - Контроллер
|
||||||
|
|
||||||
|
private final String key;
|
||||||
|
|
||||||
|
ClearingCategory(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
package ru.spcex.platform.enumeration;
|
||||||
|
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOCUMENT_TYPE_DICTIONARY
|
||||||
|
*/
|
||||||
|
public enum DocumentTypes implements IEnumKey {
|
||||||
|
pasp("PASP"), // Паспорт
|
||||||
|
icrt("ICRT"), // Удостоверение личности
|
||||||
|
prxy("PRXY"), // Доверенность
|
||||||
|
cntr("CNTR"), // Договор клиринга
|
||||||
|
regs("REGS"), // Регистрация
|
||||||
|
form("FORM"), // Анкета участника
|
||||||
|
ogrn("OGRN"), // ОГРН
|
||||||
|
licb("LICB"), // Банковская лицензия
|
||||||
|
licp("LICP"), // Лицензия проф. участника
|
||||||
|
plac("PLAC"), // Регистрация по месту пребывания
|
||||||
|
inn("INN"), // ИНН
|
||||||
|
cio("CIO"), // КИО
|
||||||
|
licr("LICR"), // Брокерская лицензия
|
||||||
|
fin("FIN"), // Финансовая отчетность
|
||||||
|
trst("TRST"), // Полномочия должностных лиц
|
||||||
|
pmkr("PMKR"), // Распоряжение на списание МКР
|
||||||
|
taut("TAUT"), // Допуск к торгам
|
||||||
|
edoc("EDOC"), // Договор об электронном взаимодействии
|
||||||
|
xcnt("XCNT"); // Документ о расторжении Договора клиринга
|
||||||
|
|
||||||
|
private final String key;
|
||||||
|
|
||||||
|
DocumentTypes(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
package ru.spcex.platform.enumeration;
|
package ru.spcex.platform.enumeration;
|
||||||
|
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
public enum Market implements IEnumKey {
|
public enum Market implements IEnumKey {
|
||||||
mkrs("MKRS");
|
mkrs("MKRS");
|
||||||
|
|
||||||
private final String key;
|
private final String key;
|
||||||
|
|
||||||
Market(String key) {
|
Market(String key) {
|
||||||
this.key = key;
|
this.key = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getKey() {
|
public String getKey() {
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,15 @@ public class ImdgHazelcast<T extends SpcexObjectBase> implements Imdg<T> {
|
||||||
return searchResult;
|
return searchResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<T> getCollectionObjectsBySQL(String paramString) {
|
||||||
|
SqlPredicate sqlPredicate = new SqlPredicate(paramString);
|
||||||
|
Set<Map.Entry<Long, T>> found = map.entrySet(sqlPredicate);
|
||||||
|
List<T> result = new ArrayList<>(found.size());
|
||||||
|
for (Map.Entry<Long, T> entry : found) result.add(entry.getValue());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long nextIDSequenceFor() {
|
public Long nextIDSequenceFor() {
|
||||||
return idGenerator.newId();
|
return idGenerator.newId();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue