From a8fb21f599481176d3a72baa6a153e3c1252466f Mon Sep 17 00:00:00 2001 From: akulikov Date: Tue, 18 Jul 2023 15:37:48 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-358 KSCommissionTrades --- .../reports/config/ReportBuildersConfig.java | 12 +- .../config/validation/ValidationConfig.java | 3 +- .../reports/reports/CSVReportBuilder.java | 10 ++ .../clearing/reports/reports/ReportInfo.java | 11 ++ .../bean/KSCommissionTradesReport.java | 111 ++++++++++++ .../ks/KSCommissionTradesReportBuilder.java | 159 ++++++++++++++++++ .../reports/services/ReportService.java | 31 ++-- .../services/ReportServiceTest_KS.java | 57 +++++++ .../ks/KS_COMMISSION_TRADES_expected.csv | 2 + .../enumeration/ReportBuilderType.java | 1 + .../platform/enumeration/ReportKeys.java | 1 + .../domain/cud/gateway/ReportPart.java | 11 ++ 12 files changed, 392 insertions(+), 17 deletions(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportInfo.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSCommissionTradesReport.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSCommissionTradesReportBuilder.java create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_COMMISSION_TRADES_expected.csv diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java index d768be5a7..762841d41 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ReportBuildersConfig.java @@ -25,7 +25,8 @@ public class ReportBuildersConfig { KSRepDepoRegisterQuantitiesReportBuilder ksRepDepoRegisterQuantitiesReportBuilder, KSRepTradesReportBuilder ksRepTradesReportBuilder, KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, - KSSessionListReportBuilder ksSessionListReportBuilder + KSSessionListReportBuilder ksSessionListReportBuilder, + KSCommissionTradesReportBuilder ksCommissionTradesReportBuilder ) { Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); @@ -35,6 +36,7 @@ public class ReportBuildersConfig { resultMap.put(ReportBuilderType.KS_REP_TRADES, List.of(ksRepTradesReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_FIRM_DETAILS, List.of(ksRepFirmDetailsReportBuilder)); resultMap.put(ReportBuilderType.KS_SESSION_LIST, List.of(ksSessionListReportBuilder)); + resultMap.put(ReportBuilderType.KS_COMMISSION_TRADES, List.of(ksCommissionTradesReportBuilder)); return resultMap; } @@ -73,7 +75,8 @@ public class ReportBuildersConfig { KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder, - KSSessionListReportBuilder ksSessionListReportBuilder + KSSessionListReportBuilder ksSessionListReportBuilder, + KSCommissionTradesReportBuilder ksCommissionTradesReportBuilder ) { Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); @@ -85,6 +88,7 @@ public class ReportBuildersConfig { resultMap.put(ReportBuilderType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder)); resultMap.put(ReportBuilderType.KS_SESSION_LIST, List.of(ksSessionListReportBuilder)); + resultMap.put(ReportBuilderType.KS_COMMISSION_TRADES, List.of(ksCommissionTradesReportBuilder)); return resultMap; } @@ -98,7 +102,8 @@ public class ReportBuildersConfig { KSRepFirmDetailsReportBuilder ksRepFirmDetailsReportBuilder, KSRepCashNettoReportBuilder ksRepCashNettoReportBuilder, KSRepDepoNettoReportBuilder ksRepDepoNettoReportBuilder, - KSSessionListReportBuilder ksSessionListReportBuilder + KSSessionListReportBuilder ksSessionListReportBuilder, + KSCommissionTradesReportBuilder ksCommissionTradesReportBuilder ) { Map>> resultMap = new HashMap<>(); resultMap.put(ReportBuilderType.KS_REP_CASH_REGISTERS, List.of(ksRepCashRegistersReportBuilder)); @@ -110,6 +115,7 @@ public class ReportBuildersConfig { resultMap.put(ReportBuilderType.KS_REP_CASH_NETTO, List.of(ksRepCashNettoReportBuilder)); resultMap.put(ReportBuilderType.KS_REP_DEPO_NETTO, List.of(ksRepDepoNettoReportBuilder)); resultMap.put(ReportBuilderType.KS_SESSION_LIST, List.of(ksSessionListReportBuilder)); + resultMap.put(ReportBuilderType.KS_COMMISSION_TRADES, List.of(ksCommissionTradesReportBuilder)); return resultMap; } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java index d505ac135..3e0ca4b97 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/validation/ValidationConfig.java @@ -62,7 +62,8 @@ public class ValidationConfig { ReportBuilderType.KS_REP_DEPO_REGISTER_QUANTITIES, ReportBuilderType.KS_REP_TRADES, ReportBuilderType.KS_REP_FIRM_DETAILS, - ReportBuilderType.KS_SESSION_LIST + ReportBuilderType.KS_SESSION_LIST, + ReportBuilderType.KS_COMMISSION_TRADES }, ReportError.WrongFieldValue, ReportError.RequiredFieldEmpty) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java index e35889902..34b6b3c30 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/CSVReportBuilder.java @@ -61,8 +61,18 @@ public abstract class CSVReportBuilder { */ public abstract Class

getParamsClass(); + /** + * Класс отчета + */ public abstract Class getReportClass(); + /** + * Секция отчета (для конкретного отчета может быть перегружена) + */ + public String getSection() { + return null; + } + /** * Формирование отчета на основе параметров * diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportInfo.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportInfo.java new file mode 100644 index 000000000..7ed5d6b5f --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ReportInfo.java @@ -0,0 +1,11 @@ +package ru.spcex.clearing.reports.reports; + +public record ReportInfo(String reportKey, String section) { + @Override + public String toString() { + return "ReportInfo{" + + "reportKey='" + reportKey + '\'' + + ", section='" + section + '\'' + + '}'; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSCommissionTradesReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSCommissionTradesReport.java new file mode 100644 index 000000000..d0930c81c --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bean/KSCommissionTradesReport.java @@ -0,0 +1,111 @@ +package ru.spcex.clearing.reports.reports.bean; + +import com.opencsv.bean.CsvBindByName; +import com.opencsv.bean.CsvBindByPosition; +import com.opencsv.bean.CsvDate; +import com.opencsv.bean.CsvNumber; + +import java.math.BigDecimal; +import java.time.LocalDate; + +public class KSCommissionTradesReport { + @CsvBindByName(column = "FIRMID") + @CsvBindByPosition(position = 0) + private String firmId; + + @CsvBindByName(column = "FIRM_INITIATOR") + @CsvBindByPosition(position = 1) + private String firmInitiator; + + @CsvBindByName(column = "SECCODE") + @CsvBindByPosition(position = 2) + private String secCode; + + @CsvBindByName(column = "AGREEMENT_NUMBER") + @CsvBindByPosition(position = 3) + private String agreementNumber; + + @CsvBindByName(column = "AGREEMENT_NUMBER_PREFIX") + @CsvBindByPosition(position = 4) + private String agreementNumberPrefix; + + @CsvBindByName(column = "AGREEMENT_DATE") + @CsvBindByPosition(position = 5) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate agreementDate; + + @CsvBindByName(column = "SUM") + @CsvBindByPosition(position = 6) + @CsvNumber(value = "#0.00", writeFormat = "#0.00") + private BigDecimal sum; + + @CsvBindByName(column = "SUM_DATE") + @CsvBindByPosition(position = 7) + @CsvDate(value = "dd.MM.yyyy") + private LocalDate sumDate; + + + public String getFirmId() { + return firmId; + } + + public void setFirmId(String firmId) { + this.firmId = firmId; + } + + public String getFirmInitiator() { + return firmInitiator; + } + + public void setFirmInitiator(String firmInitiator) { + this.firmInitiator = firmInitiator; + } + + public String getSecCode() { + return secCode; + } + + public void setSecCode(String secCode) { + this.secCode = secCode; + } + + public String getAgreementNumber() { + return agreementNumber; + } + + public void setAgreementNumber(String agreementNumber) { + this.agreementNumber = agreementNumber; + } + + public String getAgreementNumberPrefix() { + return agreementNumberPrefix; + } + + public void setAgreementNumberPrefix(String agreementNumberPrefix) { + this.agreementNumberPrefix = agreementNumberPrefix; + } + + public LocalDate getAgreementDate() { + return agreementDate; + } + + public void setAgreementDate(LocalDate agreementDate) { + this.agreementDate = agreementDate; + } + + public BigDecimal getSum() { + return sum; + } + + public void setSum(BigDecimal sum) { + this.sum = sum; + } + + public LocalDate getSumDate() { + return sumDate; + } + + public void setSumDate(LocalDate sumDate) { + this.sumDate = sumDate; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSCommissionTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSCommissionTradesReportBuilder.java new file mode 100644 index 000000000..51a3f60e9 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/ks/KSCommissionTradesReportBuilder.java @@ -0,0 +1,159 @@ +package ru.spcex.clearing.reports.reports.ks; + +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.registry.Registry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.CSVReportBuilder; +import ru.spcex.clearing.reports.reports.EmptyParams; +import ru.spcex.clearing.reports.reports.bean.KSCommissionTradesReport; +import ru.spcex.platform.enumeration.*; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +@Component +public class KSCommissionTradesReportBuilder extends CSVReportBuilder { + protected DateTimeFormatter dateFormatter_ddMMyy = DateTimeFormatter.ofPattern("ddMMyy"); + + private final Imdg registryImdg; + private final Imdg companyImdg; + private final Imdg companySymbolsImdg; + + private List rows = null; + + public KSCommissionTradesReportBuilder(ImdgProvider imdgProvider) { + registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + } + + @Override + protected List getRows() { + return rows; + } + + @Override + public ReportBuilderType getReportType() { + return ReportBuilderType.KS_COMMISSION_TRADES; + } + + @Override + public ReportKeys getReportKey() { + return ReportKeys.KS_COMMISSION_TRADES; + } + + @Override + public Class getParamsClass() { + return EmptyParams.class; + } + + @Override + public Class getReportClass() { + return KSCommissionTradesReport.class; + } + + @Override + public String getSection() { + return Section.MKR.getKey(); + } + + @Override + protected void collect(EmptyParams params) { + LocalDate nowDate = LocalDate.now(); + + ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); + String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.DM_T, RegistryTradingParams.DM_X).build(); + ImdgPredicate finalPredicate = pb.and( + pb.sql(sql), + pb.equals("refundDate", nowDate), + pb.equals("registryStatus", RegistryStatus.OK.getKey()), + pb.notNull("clearingDate") + ); + Collection registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate); + rows = new ArrayList<>(registries.size()); + for (Registry registry : registries) { + try { + Company company = companyImdg.getSingleObjectByID(registry.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; + + CompanySymbols companySymbols = companySymbolsImdg.getFirstObjectByFieldValues( + Map.of( + "companyId", registry.getCompanyId(), + "companySymbol", CompanySymbol.INTC.getKey() + ) + ); + if (companySymbols == null) { + log.warn("Can't find CompanySymbols {} for companyId = {}. Registry id = {} skipped", + CompanySymbol.INTC.getKey(), + registry.getCompanyId(), + registry.getId()); + continue; + } + + sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.OM_T).build(); + Registry omtRegistry = registryImdg.getFirstObjectByPredicate( + pb.and( + pb.sql(sql), + pb.equals("contract", registry.getContract()), + pb.notNull("groupId") + ) + ); + if (omtRegistry == null) { + log.warn("Can't find pair OM_T registry for contract = {}. Registry id = {} skipped", + registry.getContract(), + registry.getId()); + continue; + } + + String extracted = extractPartAgreementNumber(String.valueOf(omtRegistry.getGroupId())); + if (extracted == null) { + log.warn("Can't extract ExchangeExecutionId from GroupId (groupId = {} for OM_T registry id = {}). " + + "Registry id = {} skipped", + omtRegistry.getGroupId(), + omtRegistry.getId(), + registry.getId()); + continue; + } + String agreementNumber = "%s/%s/%s%s".formatted( + registry.getSecuritySymbol(), + dateFormatter_ddMMyy.format(registry.getClearingDate()), + registry.getClearingCode(), + extracted + ); + + KSCommissionTradesReport ksCommissionTradesReport = new KSCommissionTradesReport(); + ksCommissionTradesReport.setFirmId(registry.getClearingCode()); + ksCommissionTradesReport.setFirmInitiator(companySymbols.getCompanySymbolValue()); + ksCommissionTradesReport.setSecCode(registry.getSecuritySymbol()); + ksCommissionTradesReport.setAgreementNumber(agreementNumber); + ksCommissionTradesReport.setAgreementNumberPrefix(""); + ksCommissionTradesReport.setAgreementDate(registry.getClearingDate()); + ksCommissionTradesReport.setSum(registry.getBalance()); + ksCommissionTradesReport.setSumDate(registry.getRefundDate()); + + rows.add(ksCommissionTradesReport); + } catch (Throwable e) { + log.error("Can't create report row for registry (id = %d), skipped".formatted(registry.getId()), e); + } + } + } + + private String extractPartAgreementNumber(String groupId) { + if (groupId.length() < 8) return null; + int datePartLength = 6; + int marketIdPartLength = 2; + return groupId.substring(datePartLength, groupId.length() - marketIdPartLength); + } + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java index 01373dc96..482fbf73b 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java @@ -22,11 +22,11 @@ import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.reports.config.element.ReportsServiceSettings; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.EmptyParams; +import ru.spcex.clearing.reports.reports.ReportInfo; import ru.spcex.clearing.reports.reports.SessionIdParam; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.platform.enumeration.ReportBuilderType; -import ru.spcex.platform.enumeration.ReportKeys; import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.enumeration.Task; import ru.spcex.platform.imdg.api.Imdg; @@ -223,7 +223,7 @@ public class ReportService extends QueueConsumer implements InitializingBean { } else { sessionIds = getSessionIdsForDate(LocalDate.now()); } - Map outFilenames = createReportsForTask(sessionIds, reportBuildersForGREP.values()); + Map outFilenames = createReportsForTask(sessionIds, reportBuildersForGREP.values()); sendReportsToGateway(sessionIds, outFilenames, ReportType.REPORT_KS_TMP.getKey()); return null; @@ -244,7 +244,7 @@ public class ReportService extends QueueConsumer implements InitializingBean { } else { sessionIds = getSessionIdsForDate(LocalDate.now()); } - Map outFilenames = createReportsForTask(sessionIds, reportBuildersForGRET.values()); + Map outFilenames = createReportsForTask(sessionIds, reportBuildersForGRET.values()); sendReportsToGateway(sessionIds, outFilenames, null); return null; @@ -265,35 +265,36 @@ public class ReportService extends QueueConsumer implements InitializingBean { } else { sessionIds = getSessionIdsForDate(LocalDate.now()); } - Map outFilenames = createReportsForTask(sessionIds, reportBuildersForGREF.values()); + Map outFilenames = createReportsForTask(sessionIds, reportBuildersForGREF.values()); sendReportsToGateway(sessionIds, outFilenames, ReportType.REPORT_KS_FINAL.getKey()); return null; } - private Map createReportsForTask(List sessionIds, Collection>> buildersForTask) { - Map outFilenames = new HashMap<>(); + private Map createReportsForTask(List sessionIds, Collection>> buildersForTask) { + Map outFilenames = new HashMap<>(); int cntErrors = 0; for (List> builders : buildersForTask) { for (CSVReportBuilder builder : builders) { + ReportInfo reportInfo = new ReportInfo(builder.getReportKey().getKey(), builder.getSection()); if (builder.getParamsClass() == EmptyParams.class) { File outFile = ((CSVReportBuilder) builder).createReport(new EmptyParams(), outFolder); if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); + log.warn("Something wrong for {}", reportInfo); cntErrors++; continue; } - outFilenames.put(outFile.getName(), builder.getReportKey()); + outFilenames.put(outFile.getName(), new ReportInfo(builder.getReportKey().getKey(), builder.getSection())); } else if (builder.getParamsClass() == SessionIdParam.class) { SessionIdParam sessionIdParam = new SessionIdParam(); sessionIdParam.setSessionId(sessionIds); File outFile = ((CSVReportBuilder) builder).createReport(sessionIdParam, outFolder); if (outFile == null) { - log.warn("Something wrong, report type: {}", builder.getReportType().getKey()); + log.warn("Something wrong for {}", reportInfo); cntErrors++; continue; } - outFilenames.put(outFile.getName(), builder.getReportKey()); + outFilenames.put(outFile.getName(), reportInfo); } } } @@ -303,15 +304,19 @@ public class ReportService extends QueueConsumer implements InitializingBean { return outFilenames; } - private void sendReportsToGateway(List sessionIds, Map reportsWithReportType, String type) { + private void sendReportsToGateway(List sessionIds, Map reportsWithReportType, String type) { SendReportRequest sendReportRequest = new SendReportRequest(); sendReportRequest.setSessionId(sessionIds); sendReportRequest.setType(type); List reports = new ArrayList<>(reportsWithReportType.size()); - for (Map.Entry entry : reportsWithReportType.entrySet()) { + for (Map.Entry entry : reportsWithReportType.entrySet()) { + ReportInfo reportInfo = entry.getValue(); + ReportPart reportPart = new ReportPart(); - reportPart.setReportType(entry.getValue().getKey()); + reportPart.setReportType(reportInfo.reportKey()); + reportPart.setSection(reportInfo.section()); reportPart.setFileName(entry.getKey()); + reports.add(reportPart); } sendReportRequest.setReports(reports); diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java index 0a90905a4..710614482 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java @@ -601,6 +601,63 @@ public class ReportServiceTest_KS { } + @Test + @Order(10) + public void createReportTest_KSCommissionReport() throws IOException, CsvValidationException { + clearTestDir(); + + ReportRequest reportRequest = new ReportRequest(); + reportRequest.setReportId(ReportBuilderType.KS_COMMISSION_TRADES.getKey()); + + CompanySymbols companySymbols = new CompanySymbols(); + companySymbols.setCompanyId(COMPANY_ID); + companySymbols.setCompanySymbol(CompanySymbol.INTC.getKey()); + companySymbols.setCompanySymbolValue("COMPANY_SYMBOL_VALUE"); + companySymbolsImdg.insert(companySymbols); + + Registry registry = new Registry(); + registry.setRegistryStatus(RegistryStatus.OK.getKey()); + registry.setCompanyId(COMPANY_ID); + registry.setRegistryCode("DM_T"); + registry.setRegistryDesignation(RegistryDesignation.D.getKey()); + registry.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + registry.setRegistryUnit(RegistryUnit.T.getKey()); + registry.setBalance(BigDecimal.valueOf(77.777777777)); + registry.setSecuritySymbol("SECURITY_SYMBOL"); + registry.setClearingDate(LocalDate.of(1991, 1, 1)); + registry.setRefundDate(LocalDate.now()); + registry.setContract("CONTRACT"); + registry.setClearingCode("CLEARING_CODE"); + registryImdg.insert(registry); + + Registry omtRegistry = new Registry(); + omtRegistry.setRegistryCode("OM_T"); + omtRegistry.setRegistryDesignation(RegistryDesignation.O.getKey()); + omtRegistry.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + omtRegistry.setRegistryUnit(RegistryUnit.T.getKey()); + omtRegistry.setContract("CONTRACT"); + omtRegistry.setGroupId(23071877700L); + registryImdg.insert(omtRegistry); + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.CREATE_REPORT, + reportRequestCnt++, + 0, + jsonString); + + TestUtils.waitingSendAndCheckRecord(0L, producer); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/ks/KS_COMMISSION_TRADES_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("SUM_DATE")); + + registryImdg.delete(registry); + registryImdg.delete(omtRegistry); + companySymbolsImdg.insert(companySymbols); + } + private void compareCSVFiles(File expectedFile, File actualFile, List columnsForSkip) throws IOException, CsvValidationException { if (columnsForSkip == null) columnsForSkip = Collections.emptyList(); diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_COMMISSION_TRADES_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_COMMISSION_TRADES_expected.csv new file mode 100644 index 000000000..282c608e3 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_COMMISSION_TRADES_expected.csv @@ -0,0 +1,2 @@ +"FIRMID","FIRM_INITIATOR","SECCODE","AGREEMENT_NUMBER","AGREEMENT_NUMBER_PREFIX","AGREEMENT_DATE","SUM","SUM_DATE" +"CLEARING_CODE","COMPANY_SYMBOL_VALUE","SECURITY_SYMBOL","SECURITY_SYMBOL/010191/CLEARING_CODE777","","01.01.1991","77.78","18.07.2023" diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java index b3ec76fa4..214e173b9 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportBuilderType.java @@ -18,6 +18,7 @@ public enum ReportBuilderType implements IEnumKey { KS_REP_DEPO_NETTO("ks_rep_depo_netto"), KS_REP_FIRM_DETAILS("ks_rep_firm_details"), KS_SESSION_LIST("ks_session_list"), + KS_COMMISSION_TRADES("KS_COMMISSION_TRADES_"), ; private final String key; diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportKeys.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportKeys.java index 9d94028a4..cf82ced35 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportKeys.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportKeys.java @@ -18,6 +18,7 @@ public enum ReportKeys implements IEnumKey { KS_REP_DEPO_NETTO("KS_REP_DEPO_NETTO"), KS_REP_FIRM_DETAILS("KS_REP_FIRM_DETAILS"), KS_SESSION_LIST("KS_SESSION_LIST"), + KS_COMMISSION_TRADES("KS_COMMISSION_TRADES"), ; private final String key; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/ReportPart.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/ReportPart.java index ffea38146..0069cbfa1 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/ReportPart.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/gateway/ReportPart.java @@ -9,6 +9,9 @@ public class ReportPart { @JsonProperty public String fileName; + @JsonProperty + public String section; + public String getReportType() { return reportType; } @@ -24,4 +27,12 @@ public class ReportPart { public void setFileName(String fileName) { this.fileName = fileName; } + + public String getSection() { + return section; + } + + public void setSection(String section) { + this.section = section; + } }