From 75e8a83aad086f3781e6c47dd4b016b9bbfd6380 Mon Sep 17 00:00:00 2001 From: akulikov Date: Mon, 15 May 2023 11:37:27 +0300 Subject: [PATCH] SummaryLiabilitiesClaimsReportBuilder SummaryMoneyChangeReportBuilder --- .../config/validation/ValidationConfig.java | 2 +- .../bp/LiabilitiesClaimsReportBuilder.java | 253 ++++++++++++++++++ ...ort.java => MoneyChangeReportBuilder.java} | 27 +- ...ationalLiabilitiesClaimsReportBuilder.java | 246 +---------------- .../OperationalMoneyChangeReportBuilder.java | 27 ++ .../bp/SummaryLiabilitiesClaimsReport.java | 52 ---- ...SummaryLiabilitiesClaimsReportBuilder.java | 23 ++ .../bp/SummaryMoneyChangeReportBuilder.java | 27 ++ .../reports/bp/SummarylMoneyChange.java | 46 ---- ...java => UnfulfilledDealReportBuilder.java} | 8 +- .../platform/enumeration/ReportType.java | 2 +- 11 files changed, 344 insertions(+), 369 deletions(-) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/{OperationalMoneyChangeReport.java => MoneyChangeReportBuilder.java} (88%) create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java create mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java delete mode 100644 clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java rename clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/{UnfulfilledDealReport.java => UnfulfilledDealReportBuilder.java} (93%) 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 26513b3e3..c38638049 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 @@ -90,7 +90,7 @@ public class ValidationConfig { ReportRequestFromRegistry::getReportId, new ReportType[]{ ReportType.OPERATIONAL_MONEY_CHANGE, - ReportType.SUMMARY_L_MONEY_CHANGE, + ReportType.SUMMARY_MONEY_CHANGE, ReportType.PERIOD_MONEY_CHANGE }, ReportError.WrongFieldValue, diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java new file mode 100644 index 000000000..35bc8635e --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/LiabilitiesClaimsReportBuilder.java @@ -0,0 +1,253 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.execution.ExecutionCommon; +import ru.clearing.classes.statics.data.execution.ExecutionDeposit; +import ru.clearing.classes.statics.data.execution.ExecutionFond; +import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; +import ru.clearing.classes.statics.data.misc.Listing; +import ru.clearing.classes.statics.data.registry.Registry; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.reports.reports.CSVReportBuilder; +import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.platform.enumeration.Market; +import ru.spcex.platform.enumeration.Side; +import ru.spcex.platform.enumeration.WorkflowStatus; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; + +import java.math.RoundingMode; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +// todo check typo +public abstract class LiabilitiesClaimsReportBuilder extends CSVReportBuilder { + private final Imdg executionFondImdg; + private final Imdg executionDepositImdg; + private final Imdg companyImdg; + private final Imdg registryImdg; + private final Imdg listingImdg; + private final Imdg fixedIncomeSecurityImdg; + private final Imdg tradingClearingRegistryImdg; + + private final String[] headers = { + "id", "doc_date", "doc_time", "doc_type", "clearingHouse", "firmId", "firName", "session_id", + "clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId", + "tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value", + "tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", "cash_liability", + "depo_liability", "cash_netto", "depo_netto" + }; + private List lines = null; + + public LiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { + this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); + this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); + this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); + this.fixedIncomeSecurityImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class + ); + this.tradingClearingRegistryImdg = imdgProvider.getImdg( + IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class + ); + } + + @Override + public String[] getHeaders() { + return headers; + } + + @Override + protected List getLines() { + return lines; + } + + @Override + protected void collect(SessionIdParam params) { + ImdgPredicate executionFondPredicate = executionFondImdg + .predicateBuilder() + .equals("sessionId", params.getSessionId()); + Collection executionFonds = executionFondImdg.getCollectionObjectsByPredicate(executionFondPredicate); + + ImdgPredicate executionDepositPredicate = executionDepositImdg + .predicateBuilder() + .equals("sessionId", params.getSessionId()); + Collection executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(executionDepositPredicate); + + List executions = new ArrayList<>(executionFonds.size() + executionDeposits.size()); + executions.addAll(executionFonds); + executions.addAll(executionDeposits); + + Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); + String clearingHouse = clearingHouseCompany.getFullName(); + + Instant now = Instant.now(); + lines = new ArrayList<>(executions.size()); + for (ExecutionCommon execution : executions) { + Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); + if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; + + Registry registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId())); + Collection registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues( + Map.of("sessionId", execution.getSessionId()) + ); + Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId())); + FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues( + Map.of("securityId", execution.getSecurityId()) + ); + TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID( + execution.getTradingClearingRegistryId() + ); + + String id = String.valueOf(execution.getId()); + String docDate = dateFormatter.format(now); + String docTime = timeFormatter.format(now); + String docName = "Отчет об обязательствах/требованиях Участника клиринга"; + String docType = "KS_FIRMID_LIABILITIES"; + String firmId = String.valueOf(execution.getCompanyId()); + String firName = company.getFullName(); + String sessionId = String.valueOf(execution.getSessionId()); + String clearingDate = dateFormatter.format(execution.getClearingDate()); + String clearingTime = dateFormatter.format(execution.getClearingDate()); // todo check it + String trdAccId = registry.getTradingClearingRegistry(); + String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId()); + String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAaccountId()); + String currency = execution.getSettlementCurrency(); + String trId = String.valueOf(execution.getExchangeExecutionId()); + String securityId = String.valueOf(execution.getSecurityId()); + + String trBuySell = ""; + if (Side.BUY.equalsByKey(execution.getSide())) + trBuySell = "B"; + else if (Side.SELL.equalsByKey(execution.getSide())) + trBuySell = "S"; + String trDate = dateFormatter.format(execution.getTradingDate()); + + String trExecDate = ""; + String execStatus = ""; + String repaymDate = ""; + String trPrice = ""; + String nominal = ""; + String trQuantity = ""; + String trValue = ""; + String trAccruedInt = ""; + String accruedInt = ""; + String cashLiability = ""; + String depoLiability = ""; + if (execution instanceof ExecutionDeposit executionDeposit) { + trExecDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate()); + if (Market.mkrs.equalsByKey(execution.getMarket())) { + execStatus = "Y"; + repaymDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate()); + trPrice = String.valueOf(executionDeposit.getPrice()); + trValue = String.valueOf(executionDeposit.getFirstLegAmount()); + cashLiability = String.valueOf(executionDeposit.getFirstLegAmount()); + } + } else if (execution instanceof ExecutionFond executionFond) { + trExecDate = dateFormatter.format(executionFond.getSettlementDate()); + if (Market.fond.equalsByKey(execution.getMarket())) { + trPrice = String.valueOf( + executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) + ); + trQuantity = String.valueOf(executionFond.getQuantity()); + nominal = String.valueOf(fixedIncomeSecurity.getNominalValue()); + trValue = String.valueOf(executionFond.getSettlementAmount()); + trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon()); + accruedInt = String.valueOf( + fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) + ); + cashLiability = String.valueOf(executionFond.getSettlementAmount()); + depoLiability = String.valueOf(executionFond.getQuantity()); + } + } + + String lotValue = String.valueOf(listing.getLotSize()); + String trLot = String.valueOf(execution.getLots()); + String trClrComm = ""; + String trExhComm = ""; + + Registry tm_tRegistry = null; + Registry om_tRegistry = null; + Registry ts_tRegistry = null; + Registry os_tRegistry = null; + for (Registry currRegistry : registriesForSessionId) { + String registryCode = currRegistry.getRegistryCode(); + if (registryCode.endsWith("T")) { + if (registryCode.startsWith("TM")) { + if (tm_tRegistry != null && tm_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + tm_tRegistry = currRegistry; + } + if (registryCode.startsWith("OM")) { + if (om_tRegistry != null && om_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + om_tRegistry = currRegistry; + } + if (registryCode.startsWith("TS")) { + if (ts_tRegistry != null && ts_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + ts_tRegistry = currRegistry; + } + if (registryCode.startsWith("OS")) { + if (os_tRegistry != null && os_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; + os_tRegistry = currRegistry; + } + } + } + String cashNetto = ""; + if (tm_tRegistry != null && om_tRegistry != null) { + cashNetto = String.valueOf(tm_tRegistry.getBalance().subtract(om_tRegistry.getBalance())); + } + + String depoNetto = ""; + if (ts_tRegistry != null && os_tRegistry != null) { + depoNetto = String.valueOf(ts_tRegistry.getBalance().subtract(os_tRegistry.getBalance())); + } + + + int valueIdx = 0; + String[] line = new String[getHeaders().length]; + line[valueIdx++] = id; + line[valueIdx++] = docDate; + line[valueIdx++] = docTime; + line[valueIdx++] = docName; + line[valueIdx++] = docType; + line[valueIdx++] = clearingHouse; + line[valueIdx++] = firmId; + line[valueIdx++] = firName; + line[valueIdx++] = sessionId; + line[valueIdx++] = clearingDate; + line[valueIdx++] = clearingTime; + line[valueIdx++] = trdAccId; + line[valueIdx++] = account; + line[valueIdx++] = depoAccount; + line[valueIdx++] = currency; + line[valueIdx++] = trId; + line[valueIdx++] = securityId; + line[valueIdx++] = trBuySell; + line[valueIdx++] = trDate; + line[valueIdx++] = trExecDate; + line[valueIdx++] = execStatus; + line[valueIdx++] = repaymDate; + line[valueIdx++] = trPrice; + line[valueIdx++] = nominal; + line[valueIdx++] = lotValue; + line[valueIdx++] = trLot; + line[valueIdx++] = trQuantity; + line[valueIdx++] = trValue; + line[valueIdx++] = trAccruedInt; + line[valueIdx++] = accruedInt; + line[valueIdx++] = trClrComm; + line[valueIdx++] = trExhComm; + line[valueIdx++] = cashLiability; + line[valueIdx++] = depoLiability; + line[valueIdx++] = cashNetto; + line[valueIdx] = depoNetto; + lines.add(line); + } + } + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java similarity index 88% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java index cc99998bf..d56acd43f 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/MoneyChangeReportBuilder.java @@ -9,20 +9,18 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.PeriodParams; import ru.spcex.platform.enumeration.InOutDirection; -import ru.spcex.platform.enumeration.ReportType; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; import java.time.Instant; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; -public class OperationalMoneyChangeReport extends CSVReportBuilder { +public abstract class MoneyChangeReportBuilder extends CSVReportBuilder { private final Imdg registryImdg; private final Imdg companyImdg; private final Imdg listingImdg; @@ -35,7 +33,7 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder }; private List lines = null; - public OperationalMoneyChangeReport(ImdgProvider imdgProvider) { + public MoneyChangeReportBuilder(ImdgProvider imdgProvider) { this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); @@ -53,20 +51,6 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder return lines; } - @Override - protected String getReportFilename(PeriodParams params) { - return "operational_money_change.%s-%s.%s".formatted( - dateFormatter.format(params.getStartDate()), - dateFormatter.format(params.getEndDate()), - dateTimeFormatter.format(LocalDateTime.now()) - ); - } - - @Override - protected ReportType getReportType() { - return ReportType.OPERATIONAL_MONEY_CHANGE; - } - @Override protected void collect(PeriodParams params) { ImdgPredicateBuilder pb = registryImdg.predicateBuilder(); @@ -103,10 +87,10 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder String firmId = String.valueOf(registry.getCompanyId()); String firName = company.getFullName(); String trdAccId = registry.getTradingClearingRegistry(); - String account = String.valueOf(registry.getAccountId()); // todo * - String currency = listing.getTradingCurrency(); // todo * + String account = String.valueOf(registry.getAccountId()); + String currency = listing.getTradingCurrency(); String registryCode = String.valueOf(registry.getId()); - String registryName = registry.getFullName(); // todo * + String registryName = registry.getRegistryCode(); String openBalance = String.valueOf(registry.getOpenBalance()); String changeBalance = String.valueOf(registry.getCloseBalance().subtract(registry.getOpenBalance())); String addWithdraw = String.valueOf(registry.getCredit().subtract(registry.getDebit())); @@ -124,6 +108,7 @@ public class OperationalMoneyChangeReport extends CSVReportBuilder line[valueIdx++] = docTime; line[valueIdx++] = docName; line[valueIdx++] = docTime; + line[valueIdx++] = docType; line[valueIdx++] = clearingHouse; line[valueIdx++] = firmId; line[valueIdx++] = firName; diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java index 766f436a8..ecaaadbf9 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalLiabilitiesClaimsReportBuilder.java @@ -1,263 +1,23 @@ package ru.spcex.clearing.reports.reports.bp; -import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.execution.ExecutionCommon; -import ru.clearing.classes.statics.data.execution.ExecutionDeposit; -import ru.clearing.classes.statics.data.execution.ExecutionFond; -import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; -import ru.clearing.classes.statics.data.misc.Listing; -import ru.clearing.classes.statics.data.registry.Registry; -import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; -import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.reports.reports.CSVReportBuilder; import ru.spcex.clearing.reports.reports.SessionIdParam; -import ru.spcex.platform.enumeration.Market; import ru.spcex.platform.enumeration.ReportType; -import ru.spcex.platform.enumeration.Side; -import ru.spcex.platform.enumeration.WorkflowStatus; -import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; -import java.math.RoundingMode; import java.time.Instant; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -// todo check typo -public class OperationalLiabilitiesClaimsReportBuilder extends CSVReportBuilder { - private final Imdg executionFondImdg; - private final Imdg executionDepositImdg; - private final Imdg companyImdg; - private final Imdg registryImdg; - private final Imdg listingImdg; - private final Imdg fixedIncomeSecurityImdg; - private final Imdg tradingClearingRegistryImdg; - - private final String[] headers = { - "id", "doc_date", "doc_time", "doc_type", "clearingHouse", "firmId", "firName", "session_id", - "clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId", - "tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value", - "tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", "cash_liability", - "depo_liability", "cash_netto", "depo_netto" - }; - private List lines = null; +public class OperationalLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { public OperationalLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { - this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); - this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class); - this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); - this.listingImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Listing, Listing.class); - this.fixedIncomeSecurityImdg = imdgProvider.getImdg( - IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class - ); - this.tradingClearingRegistryImdg = imdgProvider.getImdg( - IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class - ); - } - - @Override - public String[] getHeaders() { - return headers; - } - - @Override - protected List getLines() { - return lines; + super(imdgProvider); } @Override protected String getReportFilename(SessionIdParam params) { - return "operational_liabilities_claims.%s".formatted(LocalDateTime.now()); + return "operational_liabilities_claims.%s".formatted(Instant.now()); } @Override protected ReportType getReportType() { return ReportType.OPERATIONAL_LIABILITIES_CLAIMS; } - - @Override - protected void collect(SessionIdParam params) { - ImdgPredicate executionFondPredicate = executionFondImdg - .predicateBuilder() - .equals("sessionId", params.getSessionId()); - Collection executionFonds = executionFondImdg.getCollectionObjectsByPredicate(executionFondPredicate); - - ImdgPredicate executionDepositPredicate = executionDepositImdg - .predicateBuilder() - .equals("sessionId", params.getSessionId()); - Collection executionDeposits = executionDepositImdg.getCollectionObjectsByPredicate(executionDepositPredicate); - - List executions = new ArrayList<>(executionFonds.size() + executionDeposits.size()); - executions.addAll(executionFonds); - executions.addAll(executionDeposits); - - Company clearingHouseCompany = companyImdg.getSingleObjectByID(1L); - String clearingHouse = clearingHouseCompany.getFullName(); - - Instant now = Instant.now(); - lines = new ArrayList<>(executions.size()); - for (ExecutionCommon execution : executions) { - Company company = companyImdg.getSingleObjectByID(execution.getCompanyId()); - if (!WorkflowStatus.Active.equalsByKey(company.getWorkflowStatus())) continue; - - Registry registry = registryImdg.getSingleObjectByFieldValues(Map.of("companyId", execution.getCompanyId())); - Collection registriesForSessionId = registryImdg.getCollectionObjectsByFieldValues( - Map.of("sessionId", execution.getSessionId()) - ); - Listing listing = listingImdg.getSingleObjectByFieldValues(Map.of("securityId", execution.getSecurityId())); - FixedIncomeSecurity fixedIncomeSecurity = fixedIncomeSecurityImdg.getSingleObjectByFieldValues( - Map.of("securityId", execution.getSecurityId()) - ); - TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryImdg.getSingleObjectByID( - execution.getTradingClearingRegistryId() - ); - - String id = String.valueOf(execution.getId()); - String docDate = dateFormatter.format(now); - String docTime = timeFormatter.format(now); - String docName = "Отчет об обязательствах/требованиях Участника клиринга"; - String docType = "KS_FIRMID_LIABILITIES"; - String firmId = String.valueOf(execution.getCompanyId()); - String firName = company.getFullName(); - String sessionId = String.valueOf(execution.getSessionId()); - String clearingDate = dateFormatter.format(execution.getClearingDate()); - String trdAccId = registry.getTradingClearingRegistry(); - String account = String.valueOf(tradingClearingRegistry.getMoneyAccountId()); - String depoAccount = String.valueOf(tradingClearingRegistry.getDepoAaccountId()); - String currency = execution.getSettlementCurrency(); - String trId = String.valueOf(execution.getExchangeExecutionId()); - String securityId = String.valueOf(execution.getSecurityId()); - - String trBuySell = ""; - if (Side.BUY.equalsByKey(execution.getSide())) - trBuySell = "B"; - else if (Side.SELL.equalsByKey(execution.getSide())) - trBuySell = "S"; - String trDate = dateFormatter.format(execution.getTradingDate()); - - String trExecDate = ""; - String execStatus = ""; - String repaymDate = ""; - String trPrice = ""; - String nominal = ""; - String trQuantity = ""; - String trValue = ""; - String trAccruedInt = ""; - String accruedInt = ""; - String cashLiability = ""; - String depoLiability = ""; - if (execution instanceof ExecutionDeposit executionDeposit) { - trExecDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate()); - if (Market.mkrs.equalsByKey(execution.getMarket())) { - execStatus = "Y"; - repaymDate = dateFormatter.format(executionDeposit.getSecondLegSettlementDate()); - trPrice = String.valueOf(executionDeposit.getPrice()); - trValue = String.valueOf(executionDeposit.getFirstLegAmount()); - cashLiability = String.valueOf(executionDeposit.getFirstLegAmount()); - } - } else if (execution instanceof ExecutionFond executionFond) { - trExecDate = dateFormatter.format(executionFond.getSettlementDate()); - if (Market.fond.equalsByKey(execution.getMarket())) { - trPrice = String.valueOf( - executionFond.getSettlementAmount().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) - ); - trQuantity = String.valueOf(executionFond.getQuantity()); - nominal = String.valueOf(fixedIncomeSecurity.getNominalValue()); - trValue = String.valueOf(executionFond.getSettlementAmount()); - trAccruedInt = String.valueOf(fixedIncomeSecurity.getCoupon()); - accruedInt = String.valueOf( - fixedIncomeSecurity.getCoupon().divide(executionFond.getQuantity(), RoundingMode.HALF_UP) - ); - cashLiability = String.valueOf(executionFond.getSettlementAmount()); - depoLiability = String.valueOf(executionFond.getQuantity()); - } - } - - String lotValue = String.valueOf(listing.getLotSize()); - String trLot = String.valueOf(execution.getLots()); - String trClrComm = ""; - String trExhComm = ""; - - Registry tm_tRegistry = null; - Registry om_tRegistry = null; - Registry ts_tRegistry = null; - Registry os_tRegistry = null; - for (Registry currRegistry : registriesForSessionId) { - String registryCode = currRegistry.getRegistryCode(); - if (registryCode.endsWith("T")) { - if (registryCode.startsWith("TM")) { - if (tm_tRegistry != null && tm_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; - tm_tRegistry = currRegistry; - } - if (registryCode.startsWith("OM")) { - if (om_tRegistry != null && om_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; - om_tRegistry = currRegistry; - } - if (registryCode.startsWith("TS")) { - if (ts_tRegistry != null && ts_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; - ts_tRegistry = currRegistry; - } - if (registryCode.startsWith("OS")) { - if (os_tRegistry != null && os_tRegistry.getUpdatedAt().isAfter(currRegistry.getUpdatedAt())) continue; - os_tRegistry = currRegistry; - } - } - } - String cashNetto = ""; - if (tm_tRegistry != null && om_tRegistry != null) { - cashNetto = String.valueOf(tm_tRegistry.getBalance().subtract(om_tRegistry.getBalance())); - } - - String depoNetto = ""; - if (ts_tRegistry != null && os_tRegistry != null) { - depoNetto = String.valueOf(ts_tRegistry.getBalance().subtract(os_tRegistry.getBalance())); - } - - - int valueIdx = 0; - String[] line = new String[getHeaders().length]; - line[valueIdx++] = id; - line[valueIdx++] = docDate; - line[valueIdx++] = docTime; - line[valueIdx++] = docName; - line[valueIdx++] = docType; - line[valueIdx++] = clearingHouse; - line[valueIdx++] = firmId; - line[valueIdx++] = firName; - line[valueIdx++] = sessionId; - line[valueIdx++] = clearingDate; - line[valueIdx++] = trdAccId; - line[valueIdx++] = account; - line[valueIdx++] = depoAccount; - line[valueIdx++] = currency; - line[valueIdx++] = trId; - line[valueIdx++] = securityId; - line[valueIdx++] = trBuySell; - line[valueIdx++] = trDate; - line[valueIdx++] = trExecDate; - line[valueIdx++] = execStatus; - line[valueIdx++] = repaymDate; - line[valueIdx++] = trPrice; - line[valueIdx++] = nominal; - line[valueIdx++] = lotValue; - line[valueIdx++] = trLot; - line[valueIdx++] = trQuantity; - line[valueIdx++] = trValue; - line[valueIdx++] = trAccruedInt; - line[valueIdx++] = accruedInt; - line[valueIdx++] = trClrComm; - line[valueIdx++] = trExhComm; - line[valueIdx++] = cashLiability; - line[valueIdx++] = depoLiability; - line[valueIdx++] = cashNetto; - line[valueIdx] = depoNetto; - lines.add(line); - } - } - } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java new file mode 100644 index 000000000..c0c85f5b6 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/OperationalMoneyChangeReportBuilder.java @@ -0,0 +1,27 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.Instant; + +public class OperationalMoneyChangeReportBuilder extends MoneyChangeReportBuilder { + public OperationalMoneyChangeReportBuilder(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(PeriodParams params) { + return "operational_money_change.%s-%s.%s".formatted( + dateFormatter.format(params.getStartDate()), + dateFormatter.format(params.getEndDate()), + dateTimeFormatter.format(Instant.now()) + ); + } + + @Override + protected ReportType getReportType() { + return ReportType.OPERATIONAL_MONEY_CHANGE; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java deleted file mode 100644 index bcc9611c8..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReport.java +++ /dev/null @@ -1,52 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -// todo check typo -public class SummaryLiabilitiesClaimsReport extends ReportWithPeriod { - - private final String[] headers = { - "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "session_id", - "clearing_date", "clearing_time", "trdAccId", "account", "depo_account", "currency", "tr_id", "securityId", - "tr_buySell", "tr_date", "tr_execDate", "exec_status", "repaym_date", "tr_price", "nominal", "lot_value", - "tr_lot", "tr_quantity", "tr_value", "tr_accruedint", "accruedint", "tr_clrComm", "tr_exhComm", - "cash_liability", "depo_liability", "cash_netto", "depo_netto" - }; - - public SummaryLiabilitiesClaimsReport(LocalDate startDate, LocalDate endDate) { - super(ReportId.SUMMARY_LIABILITIES_CLAIMS, - "0.0.1", - "BP4", - "Сводный отчет. Отчет об обязательствах", - startDate, - endDate); - } - - @Override - public String getReportName(LocalDateTime reportDateTime) { - return "summary_liabilities_claims.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - - public String[] getHeaders() { - return headers; - } - - public record InfoSummaryLiabilitiesClaims(String id, String docDate, String docTime, String docName, - String docType, String clearingHouse, String firmId, String firName, - String sessionId, String clearingDate, String clearingTime, String trdAccId, - String account, String depoAccount, String currency, String trId, - String securityId, String trBuySell, String trDate, String trExecDate, - String execStatus, String repaymDate, String trPrice, String nominal, - String lotValue, String trLot, String trQuantity, String trValue, - String trAccruedInt, String accruedInt, String trClrComm, String trExhComm, - String cashLiability, String depoLiability, String cashNetto, String depoNetto) { - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java new file mode 100644 index 000000000..17f406a65 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryLiabilitiesClaimsReportBuilder.java @@ -0,0 +1,23 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.SessionIdParam; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.Instant; + +public class SummaryLiabilitiesClaimsReportBuilder extends LiabilitiesClaimsReportBuilder { + public SummaryLiabilitiesClaimsReportBuilder(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(SessionIdParam params) { + return "summary_money_change.%s".formatted(dateTimeFormatter.format(Instant.now())); + } + + @Override + protected ReportType getReportType() { + return ReportType.SUMMARY_LIABILITIES_CLAIMS; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java new file mode 100644 index 000000000..802ea25e1 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummaryMoneyChangeReportBuilder.java @@ -0,0 +1,27 @@ +package ru.spcex.clearing.reports.reports.bp; + +import ru.spcex.clearing.reports.reports.PeriodParams; +import ru.spcex.platform.enumeration.ReportType; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.time.Instant; + +public class SummaryMoneyChangeReportBuilder extends MoneyChangeReportBuilder { + public SummaryMoneyChangeReportBuilder(ImdgProvider imdgProvider) { + super(imdgProvider); + } + + @Override + protected String getReportFilename(PeriodParams params) { + return "summary_money_change.%s-%s.%s".formatted( + dateFormatter.format(params.getStartDate()), + dateFormatter.format(params.getEndDate()), + dateTimeFormatter.format(Instant.now()) + ); + } + + @Override + protected ReportType getReportType() { + return ReportType.SUMMARY_MONEY_CHANGE; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java deleted file mode 100644 index d76496894..000000000 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/SummarylMoneyChange.java +++ /dev/null @@ -1,46 +0,0 @@ -package ru.spcex.clearing.reports.reports.bp; - -import ru.spcex.clearing.reports.reports.ReportId; -import ru.spcex.clearing.reports.reports.ReportWithPeriod; - -import java.time.LocalDate; -import java.time.LocalDateTime; - -// todo check typo -public class SummarylMoneyChange extends ReportWithPeriod { - - private final String[] headers = { - "id", "doc_date", "doc_time", "doc_name", "doc_type", "clearingHouse", "firmId", "firName", "trdAccId", - "account", "currency", "registry_code", "registry_name", "open_balance", "change_balance", "add_withdraw", - "close_balance", "remarks", "add_sum", "add_time", "withdraw_sum", "withdraw_time", - }; - - public SummarylMoneyChange(LocalDate startDate, LocalDate endDate) { - super(ReportId.SUMMARY_L_MONEY_CHANGE, - "0.0.1", - "BP5", - "Сводный отчет. Отчет о денежных средствах", - startDate, - endDate); - } - - @Override - public String getReportName(LocalDateTime reportDateTime) { - return "summary_lmoney_change.%s-%s.%s".formatted( - DATE_FORMATTER.format(startDate), - DATE_FORMATTER.format(endDate), - DATE_TIME_FORMATTER.format(reportDateTime) - ); - } - - public String[] getHeaders() { - return headers; - } - - public record InfoSummarylMoneyChange(String id, String docDate, String docTime, String docName, String docType, - String clearingHouse, String firmId, String firName, String trdAccId, String account, - String currency, String registryCode, String registryName, String openBalance, - String changeBalance, String addWithdraw, String closeBalance, String remarks, - String addSum, String addTime, String withdrawSum, String withdrawTime) { - } -} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java similarity index 93% rename from clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java rename to clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java index 4f5d8d585..e99b3fda5 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/reports/bp/UnfulfilledDealReportBuilder.java @@ -19,7 +19,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; -public class UnfulfilledDealReport extends CSVReportBuilder { +public class UnfulfilledDealReportBuilder extends CSVReportBuilder { private final Imdg executionFondImdg; private final Imdg companyImdg; private final Imdg sTradesImdg; @@ -28,7 +28,7 @@ public class UnfulfilledDealReport extends CSVReportBuilder { }; private final List lines = null; - public UnfulfilledDealReport(ImdgProvider imdgProvider) { + public UnfulfilledDealReportBuilder(ImdgProvider imdgProvider) { executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class); companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); @@ -46,9 +46,7 @@ public class UnfulfilledDealReport extends CSVReportBuilder { @Override protected String getReportFilename(SessionIdParam params) { - return "unfulfilled_deal_report.%s".formatted( - dateTimeFormatter.format(Instant.now()) - ); + return "unfulfilled_deal_report.%s".formatted(dateTimeFormatter.format(Instant.now())); } @Override diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java index d35875401..2b1222a08 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/ReportType.java @@ -10,7 +10,7 @@ public enum ReportType implements IEnumKey { OPERATIONAL_LIABILITIES_CLAIMS("operational_liabilities_claims"), OPERATIONAL_MONEY_CHANGE("operational_money_change"), SUMMARY_LIABILITIES_CLAIMS("summary_liabilities_claims"), - SUMMARY_L_MONEY_CHANGE("summary_lmoney_change"), // todo check typo + SUMMARY_MONEY_CHANGE("summary_money_change"), PERIOD_LIABILITIES_CLAIMS("period_liabilities_claims"), PERIOD_MONEY_CHANGE("period_money_change"), EXECUTED_DEAL_REPORT("executed_deal_report"),