akulikov 2023-12-08 12:10:29 +03:00
parent cd488b19d8
commit 0dd5cec12e
6 changed files with 150 additions and 11 deletions

View file

@ -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;
}
}

View file

@ -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<EmptyParam
private final Imdg<Company> companyImdg;
private final Imdg<ExecutionDeposit> executionDepositImdg;
private final Imdg<Account> accountImdg;
private final Imdg<Session> sessionImdg;
private List<KSCommissionTradesReport> rows = null;
@ -40,6 +43,7 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParam
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
}
@Override
@ -173,6 +177,34 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParam
account = accountFromImdg.getAccount();
}
Session session = sessionImdg.getSingleObjectByID(registry.getSessionId());
LocalDateTime sessionDate = null;
if (session != null) sessionDate = LocalDateTime.ofInstant(session.getCreated(), getReportZoneId());
String tkrInitiator = null;
String accountInitiator = null;
ImdgPredicate tmtPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.TM_T).buildPredicate(pb);
Registry tmtRegistry = registryImdg.getFirstObjectByPredicate(
pb.and(
pb.equals("counterPartyId", registry.getCompanyId()),
pb.equals("groupId", registry.getGroupId()),
tmtPredicate
)
);
if (tmtRegistry != null) {
tkrInitiator = tmtRegistry.getTradingClearingRegistry();
accountType = IEnumKey.getEnumByKey(AccountType.class, tmtRegistry.getAccountType());
if (accountType == AccountType.Clrn) {
accountInitiator = tmtRegistry.getAccount();
} else if (accountType == AccountType.Info) {
Account accountFromImdg = accountImdg.getFirstObjectByFieldValues(Map.of(
"accountType", AccountType.Anlt.getKey(),
"companyId", 1L
));
accountInitiator = accountFromImdg.getAccount();
}
}
KSCommissionTradesReport ksCommissionTradesReport = new KSCommissionTradesReport();
ksCommissionTradesReport.setFirmId(firmId);
ksCommissionTradesReport.setFirmIdInitiator(firmIdInitiator);
@ -192,6 +224,9 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder<EmptyParam
ksCommissionTradesReport.setTkr(registry.getTradingClearingRegistry());
ksCommissionTradesReport.setAccount(account);
ksCommissionTradesReport.setSessionId(registry.getSessionId());
ksCommissionTradesReport.setSessionDate(sessionDate);
ksCommissionTradesReport.setTkrInitiator(tkrInitiator);
ksCommissionTradesReport.setAccountInitiator(accountInitiator);
rows.add(ksCommissionTradesReport);
} catch (Throwable e) {

View file

@ -22,10 +22,7 @@ import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.*;
@Component
public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParams, KSRepCashRegistersReport> {
@ -153,9 +150,28 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
pb.equals("registryStatus", RegistryStatus.CLRD.getKey())
)
);
BigDecimal cmtBalanceSum = cmtRegistries.stream().map(Registry::getBalance).reduce(BigDecimal.ZERO, BigDecimal::add);
Set<String> 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<Registry> 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);

View file

@ -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);
}

View file

@ -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"

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
2 CLEARING_CODE TRADING_CODE CONT~RACT market CONT CONT~RACT 01.01.1991 14.11.2023 28.11.2023 -77.78 24.11.2023 08.12.2023 Исполнен 23071812300 TRADING_CLEARING_REGISTRY ACCOUNT 1 3 01.01.2000T03:00:00 TKR_TMT TMT_ACCOUNT

View file

@ -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,"",""

1 FIRMID ACCOUNT TKR DATE REGISTER_CODE REGISTER_NAME OPEN_BALANCE CHANGE_BALANCE ADD_WITHDRAW CLOSE_BALANCE REMARKS TRADE_NUM
2 TRADING_CODE ACCOUNT_FROM_ACCOUNT TRADING_CLEARING_REGISTRY 01.11.2023 AM_T AM_T_NAME 77.78 300.00 278.00 111.00 488.78 466.78
3 TRADING_CODE ACCOUNT TRADING_CLEARING_REGISTRY 01.11.2023 AM_T AM_T_NAME 77.78 300.00 278.00 111.00 488.78 466.78