From 0dd5cec12ee4bdeb128caed7326679b40963e833 Mon Sep 17 00:00:00 2001 From: akulikov Date: Fri, 8 Dec 2023 12:10:29 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-601 --- .../bean/KSCommissionTradesReport.java | 38 ++++++++++++++ .../ks/KSCommissionTradesReportBuilder.java | 35 +++++++++++++ .../ks/KSRepCashRegistersReportBuilder.java | 28 +++++++--- .../services/ReportServiceTest_KS.java | 52 ++++++++++++++++++- .../ks/KS_COMMISSION_TRADES_expected.csv | 4 +- .../ks/KS_REP_CASH_REGISTERS_expected.csv | 4 +- 6 files changed, 150 insertions(+), 11 deletions(-) diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/bean/KSCommissionTradesReport.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/bean/KSCommissionTradesReport.java index cb6699796..2f997b0a2 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/bean/KSCommissionTradesReport.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/bean/KSCommissionTradesReport.java @@ -7,6 +7,7 @@ import com.opencsv.bean.CsvNumber; import java.math.BigDecimal; import java.time.LocalDate; +import java.time.LocalDateTime; public class KSCommissionTradesReport { @CsvBindByName(column = "FIRM_ID") @@ -73,6 +74,19 @@ public class KSCommissionTradesReport { @CsvBindByPosition(position = 14) private Long sessionId; + @CsvBindByName(column = "SESSION_DATE") + @CsvBindByPosition(position = 15) + @CsvDate(value = "dd.MM.yyyy'T'HH:mm:ss") + private LocalDateTime sessionDate; + + @CsvBindByName(column = "TKR_INITIATOR") + @CsvBindByPosition(position = 16) + private String tkrInitiator; + + @CsvBindByName(column = "ACCOUNT_INITIATOR") + @CsvBindByPosition(position = 17) + private String accountInitiator; + public String getFirmId() { return firmId; @@ -193,4 +207,28 @@ public class KSCommissionTradesReport { public void setSessionId(Long sessionId) { this.sessionId = sessionId; } + + public LocalDateTime getSessionDate() { + return sessionDate; + } + + public void setSessionDate(LocalDateTime sessionDate) { + this.sessionDate = sessionDate; + } + + public String getTkrInitiator() { + return tkrInitiator; + } + + public void setTkrInitiator(String tkrInitiator) { + this.tkrInitiator = tkrInitiator; + } + + public String getAccountInitiator() { + return accountInitiator; + } + + public void setAccountInitiator(String accountInitiator) { + this.accountInitiator = accountInitiator; + } } diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java index 19f333b62..bd94ed996 100644 --- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java @@ -4,6 +4,7 @@ import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.execution.ExecutionDeposit; +import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.reports.builders.CSVReportBuilder; @@ -18,6 +19,7 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.utils.enumeration.IEnumKey; import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; @@ -32,6 +34,7 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder companyImdg; private final Imdg executionDepositImdg; private final Imdg accountImdg; + private final Imdg sessionImdg; private List rows = null; @@ -40,6 +43,7 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder { @@ -153,9 +150,28 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder contracts = new HashSet<>(); + BigDecimal cmtBalanceSum = BigDecimal.ZERO; + for (Registry cmtRegistry : cmtRegistries) { + BigDecimal balance = cmtRegistry.getBalance(); + cmtBalanceSum = cmtBalanceSum.add(balance); + contracts.add(cmtRegistry.getContract()); + } + ImdgPredicate dmxPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.DM_X).buildPredicate(pb); + Collection dmxRegistries = registryImdg.getCollectionObjectsByPredicate( + pb.and( + dmxPredicate, + pb.in("sessionId", sessionIds), + pb.in("contract", contracts.toArray(new String[0])), + pb.equals("tradingCode", registry.getTradingCode()), + pb.equals("companyId", registry.getCompanyId()), + pb.equals("account", registry.getAccount()), + pb.equals("registryStatus", RegistryStatus.OK.getKey()) + ) + ); + BigDecimal dmxBalanceSum = dmxRegistries.stream().map(Registry::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal lmtBalanceSum = lmtRegistries.stream().map(Registry::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add); - ksRepCashRegistersReport.setChangeBalance(cmtBalanceSum.subtract(lmtBalanceSum)); + ksRepCashRegistersReport.setChangeBalance(cmtBalanceSum.subtract(lmtBalanceSum).subtract(dmxBalanceSum)); registryPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.DM_I).buildPredicate(pb); 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 015e61f93..a6c4db1cc 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 @@ -192,6 +192,7 @@ public class ReportServiceTest_KS { cmtRegistry_1.setAccount("ACCOUNT"); cmtRegistry_1.setRegistryStatus(RegistryStatus.CLRD.getKey()); cmtRegistry_1.setBalance(BigDecimal.valueOf(111L)); + cmtRegistry_1.setContract("CONTRACT_1"); registryImdg.insert(cmtRegistry_1); Registry cmtRegistry_2 = new Registry(); @@ -205,6 +206,7 @@ public class ReportServiceTest_KS { cmtRegistry_2.setAccount("ACCOUNT"); cmtRegistry_2.setRegistryStatus(RegistryStatus.CLRD.getKey()); cmtRegistry_2.setBalance(BigDecimal.valueOf(111L)); + cmtRegistry_2.setContract("CONTRACT_2"); registryImdg.insert(cmtRegistry_2); Registry cmtRegistry_3 = new Registry(); @@ -259,6 +261,34 @@ public class ReportServiceTest_KS { lmtRegistry_3.setBalance(BigDecimal.valueOf(11L)); registryImdg.insert(lmtRegistry_3); + Registry dmxRegistry_1 = new Registry(); + dmxRegistry_1.setRegistryCode("DM_X"); + dmxRegistry_1.setRegistryDesignation(RegistryDesignation.D.getKey()); + dmxRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + dmxRegistry_1.setRegistryUnit(RegistryUnit.X.getKey()); + dmxRegistry_1.setSessionId(SESSION_ID_FOR_DAY); + dmxRegistry_1.setTradingCode("TRADING_CODE"); + dmxRegistry_1.setCompanyId(COMPANY_ID); + dmxRegistry_1.setAccount("ACCOUNT"); + dmxRegistry_1.setContract("CONTRACT_1"); + dmxRegistry_1.setRegistryStatus(RegistryStatus.OK.getKey()); + dmxRegistry_1.setBalance(BigDecimal.valueOf(11L)); + registryImdg.insert(dmxRegistry_1); + + Registry dmxRegistry_2 = new Registry(); + dmxRegistry_2.setRegistryCode("DM_X"); + dmxRegistry_2.setRegistryDesignation(RegistryDesignation.D.getKey()); + dmxRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + dmxRegistry_2.setRegistryUnit(RegistryUnit.X.getKey()); + dmxRegistry_2.setSessionId(SESSION_ID_FOR_DAY); + dmxRegistry_2.setTradingCode("TRADING_CODE"); + dmxRegistry_2.setCompanyId(COMPANY_ID); + dmxRegistry_2.setAccount("ACCOUNT"); + dmxRegistry_2.setContract("CONTRACT_2"); + dmxRegistry_2.setRegistryStatus(RegistryStatus.OK.getKey()); + dmxRegistry_2.setBalance(BigDecimal.valueOf(11L)); + registryImdg.insert(dmxRegistry_2); + Registry addWithdrawRegistry_1 = new Registry(); addWithdrawRegistry_1.setCompanyId(COMPANY_ID); @@ -325,6 +355,8 @@ public class ReportServiceTest_KS { registryImdg.delete(lmtRegistry_1); registryImdg.delete(lmtRegistry_2); registryImdg.delete(lmtRegistry_3); + registryImdg.delete(dmxRegistry_1); + registryImdg.delete(dmxRegistry_2); sessionImdg.delete(sessionForDay); accountImdg.delete(account); } @@ -1031,6 +1063,10 @@ public class ReportServiceTest_KS { companySymbols.setCompanySymbolValue("COMPANY_SYMBOL_VALUE"); companySymbolsImdg.insert(companySymbols); + Session session = new Session(); + session.setCreated(LocalDateTime.of(2000, 1, 1, 0, 0).toInstant(ZoneOffset.UTC)); + Long sessionId = sessionImdg.insert(session); + Registry registry = new Registry(); registry.setRegistryStatus(RegistryStatus.CLRD.getKey()); registry.setCompanyId(COMPANY_ID); @@ -1053,7 +1089,7 @@ public class ReportServiceTest_KS { registry.setTradingClearingRegistry("TRADING_CLEARING_REGISTRY"); registry.setAccountType(AccountType.Clrn.getKey()); registry.setAccount("ACCOUNT"); - registry.setSessionId(1L); + registry.setSessionId(sessionId); registryImdg.insert(registry); Registry omtRegistry = new Registry(); @@ -1065,6 +1101,18 @@ public class ReportServiceTest_KS { omtRegistry.setGroupId(23071812300L); registryImdg.insert(omtRegistry); + Registry tmtRegistry = new Registry(); + tmtRegistry.setRegistryCode("TM_T"); + tmtRegistry.setAccount("TMT_ACCOUNT"); + tmtRegistry.setAccountType(AccountType.Clrn.getKey()); + tmtRegistry.setRegistryDesignation(RegistryDesignation.T.getKey()); + tmtRegistry.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); + tmtRegistry.setRegistryUnit(RegistryUnit.T.getKey()); + tmtRegistry.setCounterPartyId(COMPANY_ID); + tmtRegistry.setTradingClearingRegistry("TKR_TMT"); + tmtRegistry.setGroupId(23071812300L); + registryImdg.insert(tmtRegistry); + ExecutionDeposit executionDeposit = new ExecutionDeposit(); executionDeposit.setExchangeExecutionId(registry.getGroupId()); executionDeposit.setMarket("market"); @@ -1086,6 +1134,8 @@ public class ReportServiceTest_KS { registryImdg.delete(registry); registryImdg.delete(omtRegistry); + registryImdg.delete(tmtRegistry); + sessionImdg.delete(session); companySymbolsImdg.delete(companySymbols); executionDepositImdg.delete(executionDeposit); } 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 index 3dc568939..3445e88a9 100644 --- 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 @@ -1,2 +1,2 @@ -"FIRM_ID","FIRM_ID_INITIATOR","SECCODE","CLASS_CODE","AGREEMENT_NUMBER","AGREEMENT_NUMBER_POSTFIX","AGREEMENT_DATE","AGREEMENT_SETTLEMENT_DATE","SUM","REPAYM_DATE","EXEC_STATUS","TR_ID","TKR","ACCOUNT","SESSION_ID" -"CLEARING_CODE","TRADING_CODE","CONT~RACT","market","CONT","CONT~RACT","01.01.1991","14.11.2023","-77.78","24.11.2023","Исполнен","23071812300","TRADING_CLEARING_REGISTRY","ACCOUNT","1" +"FIRM_ID","FIRM_ID_INITIATOR","SECCODE","CLASS_CODE","AGREEMENT_NUMBER","AGREEMENT_NUMBER_POSTFIX","AGREEMENT_DATE","AGREEMENT_SETTLEMENT_DATE","SUM","REPAYM_DATE","EXEC_STATUS","TR_ID","TKR","ACCOUNT","SESSION_ID","SESSION_DATE","TKR_INITIATOR","ACCOUNT_INITIATOR" +"CLEARING_CODE","TRADING_CODE","CONT~RACT","market","CONT","CONT~RACT","01.01.1991","28.11.2023","-77.78","08.12.2023","Исполнен","23071812300","TRADING_CLEARING_REGISTRY","ACCOUNT","3","01.01.2000T03:00:00","TKR_TMT","TMT_ACCOUNT" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv index 8c1197b76..fdce8854f 100644 --- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv @@ -1,3 +1,3 @@ "FIRMID","ACCOUNT","TKR","DATE","REGISTER_CODE","REGISTER_NAME","OPEN_BALANCE","CHANGE_BALANCE","ADD_WITHDRAW","CLOSE_BALANCE","REMARKS","TRADE_NUM" -"TRADING_CODE","ACCOUNT_FROM_ACCOUNT","TRADING_CLEARING_REGISTRY","01.11.2023","AM_T","AM_T_NAME","77.78","300.00","111.00","488.78","","" -"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.11.2023","AM_T","AM_T_NAME","77.78","300.00","111.00","488.78","","" +"TRADING_CODE","ACCOUNT_FROM_ACCOUNT","TRADING_CLEARING_REGISTRY","01.11.2023","AM_T","AM_T_NAME","77.78",278.00,"111.00","466.78","","" +"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.11.2023","AM_T","AM_T_NAME","77.78",278.00,"111.00",466.78,"",""