akulikov 2024-05-07 03:17:59 +03:00
parent f2f94ca3e2
commit d46bd1fc5e
11 changed files with 364 additions and 134 deletions

View file

@ -1,13 +1,12 @@
package ru.spcex.clearing.reports.builders.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;
import java.time.LocalDateTime;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
public class KSRepCashNettoReport {
@CsvBindByName(column = "FIRMID")
@ -51,6 +50,10 @@ public class KSRepCashNettoReport {
@CsvNumber(value = "#0.00", writeFormat = "#0.00")
private BigDecimal reqValue;
@CsvBindByName(column = "LOT_CURRENCY")
@CsvBindByPosition(position = 9)
private String lotCurrency;
public String getFirmId() {
return firmId;
@ -123,4 +126,12 @@ public class KSRepCashNettoReport {
public void setReqValue(BigDecimal reqValue) {
this.reqValue = reqValue;
}
public String getLotCurrency() {
return lotCurrency;
}
public void setLotCurrency(String lotCurrency) {
this.lotCurrency = lotCurrency;
}
}

View file

@ -1,13 +1,12 @@
package ru.spcex.clearing.reports.builders.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;
import java.time.LocalTime;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
public class KSRepCashRegisterSumsReport {
@CsvBindByName(column = "FIRMID")
@ -45,6 +44,10 @@ public class KSRepCashRegisterSumsReport {
@CsvBindByPosition(position = 7)
private String tradeNum;
@CsvBindByName(column = "OPER_TYPE")
@CsvBindByPosition(position = 8)
private String operType;
public String getFirmId() {
return firmId;
@ -109,4 +112,12 @@ public class KSRepCashRegisterSumsReport {
public void setTradeNum(String tradeNum) {
this.tradeNum = tradeNum;
}
public String getOperType() {
return operType;
}
public void setOperType(String operType) {
this.operType = operType;
}
}

View file

@ -1,13 +1,12 @@
package ru.spcex.clearing.reports.builders.bean;
import java.math.BigDecimal;
import java.time.LocalDate;
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 KSRepCashRegistersReport {
@CsvBindByName(column = "FIRMID")
@CsvBindByPosition(position = 0)
@ -62,6 +61,9 @@ public class KSRepCashRegistersReport {
@CsvBindByPosition(position = 11)
private String tradeNum;
@CsvBindByName(column = "CURRENCY")
@CsvBindByPosition(position = 12)
private String currency;
public String getFirmId() {
return firmId;
@ -158,4 +160,12 @@ public class KSRepCashRegistersReport {
public void setTradeNum(String tradeNum) {
this.tradeNum = tradeNum;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
}

View file

@ -1,13 +1,12 @@
package ru.spcex.clearing.reports.builders.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;
import java.time.LocalTime;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
public class KSRepDepoRegisterQuantitiesReport {
@CsvBindByName(column = "FIRMID")
@ -49,6 +48,10 @@ public class KSRepDepoRegisterQuantitiesReport {
@CsvBindByPosition(position = 8)
private String tradeNum;
@CsvBindByName(column = "LOT_CURRENCY")
@CsvBindByPosition(position = 8)
private String lotCurrency;
public String getFirmId() {
return firmId;
@ -121,4 +124,13 @@ public class KSRepDepoRegisterQuantitiesReport {
public void setTradeNum(String tradeNum) {
this.tradeNum = tradeNum;
}
public String getLotCurrency() {
return lotCurrency;
}
public void setLotCurrency(String lotCurrency) {
this.lotCurrency = lotCurrency;
}
}

View file

@ -1,14 +1,13 @@
package ru.spcex.clearing.reports.builders.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;
import java.time.LocalDateTime;
import com.opencsv.bean.CsvBindByName;
import com.opencsv.bean.CsvBindByPosition;
import com.opencsv.bean.CsvDate;
import com.opencsv.bean.CsvNumber;
public class KSRepTradesReport {
@CsvBindByName(column = "SESSION_ID")
@ -76,6 +75,10 @@ public class KSRepTradesReport {
@CsvDate(value = "dd.MM.yyyy")
private LocalDate repaymDate;
@CsvBindByName(column = "LOT_CURRENCY")
@CsvBindByPosition(position = 15)
private String lotCurrency;
public Long getSessionId() {
return sessionId;
@ -196,4 +199,12 @@ public class KSRepTradesReport {
public void setRepaymDate(LocalDate repaymDate) {
this.repaymDate = repaymDate;
}
public String getLotCurrency() {
return lotCurrency;
}
public void setLotCurrency(String lotCurrency) {
this.lotCurrency = lotCurrency;
}
}

View file

@ -1,15 +1,32 @@
package ru.spcex.clearing.reports.builders.ks;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.misc.Session;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.PairRegistryId;
import ru.spcex.clearing.reports.builders.SessionIdParam;
import ru.spcex.clearing.reports.builders.bean.KSRepCashNettoReport;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.RegistryDesignation;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.ReportBuilderType;
import ru.spcex.platform.enumeration.ReportKeys;
import ru.spcex.platform.enumeration.SessionType;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
@ -17,17 +34,13 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@Component
public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam, KSRepCashNettoReport> {
private final Imdg<Registry> registryImdg;
private final Imdg<Session> sessionImdg;
private final Imdg<Account> accountImdg;
private final Imdg<CurrencyPairDictionary> currencyPairDictionaryImdg;
private final Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
private List<KSRepCashNettoReport> rows = null;
@ -35,6 +48,8 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
currencyPairDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
}
@Override
@ -227,6 +242,20 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder<SessionIdParam
ksRepCashNettoReport.setOblValue(withOblReqValue ? oblValue : null);
ksRepCashNettoReport.setReqValue(withOblReqValue ? reqValue : null);
CurrencyPairSecurity currencyPairSecurity = currencyPairSecurityImdg.getFirstObjectByFieldValues(Map.of(
"securityId", registry.getSecurityId()
));
if (currencyPairSecurity != null) {
CurrencyPairDictionary currencyPairDictionary = currencyPairDictionaryImdg.getSingleObjectByFieldValues(
Map.of(
"baseCurrency", currencyPairSecurity.getCurrencyPairId()
)
);
if (currencyPairDictionary != null) {
ksRepCashNettoReport.setLotCurrency(currencyPairDictionary.getBaseCurrency());
}
}
rows.add(ksRepCashNettoReport);
} catch (Throwable e) {
log.error(

View file

@ -1,21 +1,5 @@
package ru.spcex.clearing.reports.builders.ks;
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.registry.Registry;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.EmptyParams;
import ru.spcex.clearing.reports.builders.bean.KSRepCashRegisterSumsReport;
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 ru.spcex.platform.utils.enumeration.IEnumKey;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
@ -25,6 +9,27 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
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.registry.Registry;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.EmptyParams;
import ru.spcex.clearing.reports.builders.bean.KSRepCashRegisterSumsReport;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.OperationType;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.ReportBuilderType;
import ru.spcex.platform.enumeration.ReportKeys;
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 ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
@Component
public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyParams, KSRepCashRegisterSumsReport> {
@ -129,6 +134,7 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
BigDecimal addSum = registry.getBalance() != null ? registry.getBalance() :BigDecimal.ZERO;
Instant addTime = registry.getUpdated();
LocalDate addDate = LocalDate.now();
OperationType operType = OperationType.forBigDecimal(registry.getBalance());
KSRepCashRegisterSumsReport ksRepCashRegisterSumsReport = new KSRepCashRegisterSumsReport();
ksRepCashRegisterSumsReport.setFirmId(firmId);
@ -139,6 +145,7 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder<EmptyPa
ksRepCashRegisterSumsReport.setAddSum(addSum);
ksRepCashRegisterSumsReport.setAddTime(LocalTime.ofInstant(addTime, getReportZoneId()));
ksRepCashRegisterSumsReport.setAddDate(addDate);
ksRepCashRegisterSumsReport.setOperType(operType.getCode());
rows.add(ksRepCashRegisterSumsReport);
}
}

View file

@ -1,5 +1,15 @@
package ru.spcex.clearing.reports.builders.ks;
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.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
@ -11,7 +21,14 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.EmptyParams;
import ru.spcex.clearing.reports.builders.bean.KSRepCashRegistersReport;
import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.ClearingCategory;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.ReportBuilderType;
import ru.spcex.platform.enumeration.ReportKeys;
import ru.spcex.platform.enumeration.SessionType;
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;
@ -19,12 +36,6 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
@Component
public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParams, KSRepCashRegistersReport> {
private final Imdg<Registry> registryImdg;
@ -230,6 +241,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder<EmptyParam
.add(ksRepCashRegistersReport.getChangeBalance())
.add(ksRepCashRegistersReport.getAddWithdraw());
ksRepCashRegistersReport.setCloseBalance(closeBalance);
ksRepCashRegistersReport.setCurrency(registry.getSecuritySymbol());
rows.add(ksRepCashRegistersReport);
} catch (Throwable e) {

View file

@ -1,22 +1,5 @@
package ru.spcex.clearing.reports.builders.ks;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.AccountSymbols;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.EmptyParams;
import ru.spcex.clearing.reports.builders.bean.KSRepDepoRegisterQuantitiesReport;
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 ru.spcex.platform.utils.enumeration.IEnumKey;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
@ -26,12 +9,37 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.AccountSymbols;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.EmptyParams;
import ru.spcex.clearing.reports.builders.bean.KSRepDepoRegisterQuantitiesReport;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.ReportBuilderType;
import ru.spcex.platform.enumeration.ReportKeys;
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 ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
@Component
public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<EmptyParams, KSRepDepoRegisterQuantitiesReport> {
private final Imdg<Registry> registryImdg;
private final Imdg<Company> companyImdg;
private final Imdg<AccountSymbols> accountSymbolsImdg;
private final Imdg<CurrencyPairDictionary> currencyPairDictionaryImdg;
private final Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
private List<KSRepDepoRegisterQuantitiesReport> rows = null;
@ -39,6 +47,8 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
accountSymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountSymbols, AccountSymbols.class);
currencyPairDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
}
@Override
@ -126,6 +136,20 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
BigDecimal addQuantity = registry.getBalance();
Instant addTime = registry.getUpdated();
LocalDate addDate = LocalDate.now();
String lotCurrency = null;
CurrencyPairSecurity currencyPairSecurity = currencyPairSecurityImdg.getFirstObjectByFieldValues(Map.of(
"securityId", registry.getSecurityId()
));
if (currencyPairSecurity != null) {
CurrencyPairDictionary currencyPairDictionary = currencyPairDictionaryImdg.getSingleObjectByFieldValues(
Map.of(
"baseCurrency", currencyPairSecurity.getCurrencyPairId()
)
);
if (currencyPairDictionary != null) {
lotCurrency = currencyPairDictionary.getBaseCurrency();
}
}
KSRepDepoRegisterQuantitiesReport ksRepDepoRegisterQuantitiesReport = new KSRepDepoRegisterQuantitiesReport();
ksRepDepoRegisterQuantitiesReport.setFirmId(firmId);
@ -137,6 +161,7 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder<E
ksRepDepoRegisterQuantitiesReport.setAddQuantity(addQuantity);
ksRepDepoRegisterQuantitiesReport.setAddTime(LocalTime.ofInstant(addTime, getReportZoneId()));
ksRepDepoRegisterQuantitiesReport.setAddDate(addDate);
ksRepDepoRegisterQuantitiesReport.setLotCurrency(lotCurrency);
rows.add(ksRepDepoRegisterQuantitiesReport);
}

View file

@ -1,31 +1,46 @@
package ru.spcex.clearing.reports.builders.ks;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.account.AccountSymbols;
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.misc.Session;
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.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.EmptyParams;
import ru.spcex.clearing.reports.builders.bean.KSRepTradesReport;
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.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.account.AccountSymbols;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
import ru.clearing.classes.statics.data.execution.ExecutionFond;
import ru.clearing.classes.statics.data.misc.Session;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.EmptyParams;
import ru.spcex.clearing.reports.builders.bean.KSRepTradesReport;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.CoverageStatus;
import ru.spcex.platform.enumeration.MoneyFlowSide;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.ReportBuilderType;
import ru.spcex.platform.enumeration.ReportKeys;
import ru.spcex.platform.enumeration.Side;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
@Component
public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRepTradesReport> {
@ -33,24 +48,30 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
private final Imdg<ExecutionDeposit> executionDepositImdg;
private final Imdg<ExecutionFond> executionFondImdg;
private final Imdg<ExecutionCurrency> executionCurrencyImdg;
private final Imdg<Session> sessionImdg;
private final Imdg<Registry> registryImdg;
private final Imdg<Company> companyImdg;
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
private final Imdg<Account> accountImdg;
private final Imdg<AccountSymbols> accountSymbolsImdg;
private final Imdg<CurrencyPairDictionary> currencyPairDictionaryImdg;
private final Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
private List<KSRepTradesReport> rows = null;
public KSRepTradesReportBuilder(ImdgProvider imdgProvider) {
executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class);
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
accountSymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountSymbols, AccountSymbols.class);
currencyPairDictionaryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
currencyPairSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
}
@Override
@ -98,9 +119,18 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
)
);
log.debug("Found {} ExecutionFond by tradingDate={}", executionFonds.size(), nowDate);
ImdgPredicateBuilder pbExecutionCurrency = executionCurrencyImdg.predicateBuilder();
Collection<ExecutionCurrency> executionCurrencies = executionCurrencyImdg.getCollectionObjectsByPredicate(
pbExecutionCurrency.or(
pbExecutionCurrency.equals("tradingDate", nowDate),
pbExecutionCurrency.greatEqual("settlementDate", nowDate)
)
);
log.debug("Found {} ExecutionFond by tradingDate={}", executionFonds.size(), nowDate);
List<ExecutionCommon> executions = new ArrayList<>();
executions.addAll(executionDeposits);
executions.addAll(executionFonds);
executions.addAll(executionCurrencies);
Map<ExecutionKey, String> statusForExecution = new HashMap<>();
executions.forEach(execution -> {
@ -178,7 +208,6 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
ksRepTradesReport.setAccount(account);
if (execution.getCompanyId() != null) {
Company company = companyImdg.getSingleObjectByID(execution.getCompanyId());
ksRepTradesReport.setFirmId(company != null ? company.getTradingCode() : null);
@ -232,12 +261,12 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
Company company = null;
BigDecimal settlementAmount = executionFond.getSettlementAmount() != null ? executionFond.getSettlementAmount() : BigDecimal.ZERO;
if (Arrays.asList(Side.BUY.getKey(), "B","BUY").contains(executionFond.getSide())) {
if (Arrays.asList(Side.BUY.getKey(), "B", "BUY").contains(executionFond.getSide())) {
settlementAmount = settlementAmount.negate();
ksRepTradesReport.setCashLiability(settlementAmount);
if (executionFond.getCompanyId() != null)
company = companyImdg.getSingleObjectByID(executionFond.getCompanyId());
} else if (Arrays.asList(Side.SELL.getKey(), "S","SELL").contains(executionFond.getSide())) {
} else if (Arrays.asList(Side.SELL.getKey(), "S", "SELL").contains(executionFond.getSide())) {
ksRepTradesReport.setCashLiability(settlementAmount);
if (executionFond.getCounterPartyId() != null)
company = companyImdg.getSingleObjectByID(executionFond.getCounterPartyId());
@ -265,6 +294,52 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
if (Arrays.asList(Side.SELL.getKey(), "S", "SELL").contains((executionFond.getSide())))
quantity = quantity.negate();
ksRepTradesReport.setDepoLiability(quantity);
} else if (execution instanceof ExecutionCurrency executionCurrency) {
Company company = null;
BigDecimal settlementAmount = executionCurrency.getSettlementAmount() != null ? executionCurrency.getSettlementAmount() : BigDecimal.ZERO;
if (Arrays.asList(Side.BUY.getKey(), "B", "BUY").contains(executionCurrency.getSide())) {
settlementAmount = settlementAmount.negate();
ksRepTradesReport.setCashLiability(settlementAmount);
if (executionCurrency.getCompanyId() != null)
company = companyImdg.getSingleObjectByID(executionCurrency.getCompanyId());
} else if (Arrays.asList(Side.SELL.getKey(), "S", "SELL").contains(executionCurrency.getSide())) {
ksRepTradesReport.setCashLiability(settlementAmount);
if (executionCurrency.getCounterPartyId() != null)
company = companyImdg.getSingleObjectByID(executionCurrency.getCounterPartyId());
} else {
log.warn("Execution id={} has unknown side={}", executionCurrency.getId(), executionCurrency.getSide());
continue;
}
if (
executionCurrency.getSecuritySymbol() == null || company == null ||
company.getTradingCode() == null || executionCurrency.getExchangeExecutionId() == null
) {
log.warn("Can't format agreement number for execution id={}, security_symbol={}, " +
"executionFond.trading_date={}, company.trading_code={}, " +
"executionFond.exchange_execution_id={}",
execution.getId(),
executionCurrency.getSecuritySymbol(),
ddMMyyyyFormatter.format(executionCurrency.getTradingDate()),
company != null ? company.getTradingCode() : null,
executionCurrency.getExchangeExecutionId());
continue;
}
CurrencyPairSecurity currencyPairSecurity = currencyPairSecurityImdg.getFirstObjectByFieldValues(Map.of(
"securityId", executionCurrency.getSecurityId()
));
if (currencyPairSecurity != null) {
CurrencyPairDictionary currencyPairDictionary = currencyPairDictionaryImdg.getSingleObjectByFieldValues(
Map.of(
"baseCurrency", currencyPairSecurity.getCurrencyPairId()
)
);
if (currencyPairDictionary != null) {
ksRepTradesReport.setLotCurrency(currencyPairDictionary.getBaseCurrency());
}
}
ksRepTradesReport.setDepoLiability(BigDecimal.ZERO);
}
ksRepTradesReport.setDepoAccount(depoAccount);
@ -284,9 +359,9 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
} else if (coverage == CoverageStatus.ALWD) {
status = "1";
} else if (coverage == CoverageStatus.DEND) {
if (execution instanceof ExecutionDeposit) {
if (execution instanceof ExecutionDeposit || execution instanceof ExecutionCurrency) {
status = "2";
} else {
} else if (execution instanceof ExecutionFond) {
Long groupId = execution.getExchangeExecutionId();
status = statusForExecution.get(new ExecutionKey(groupId, execution.getSessionId()));
if (status == null) {

View file

@ -0,0 +1,27 @@
package ru.spcex.platform.enumeration;
import java.math.BigDecimal;
public enum OperationType {
ENR("ENR"),
WD("WD"),
UNKNOWN("?");
private final String code;
OperationType(String code) {
this.code = code;
}
public static OperationType forBigDecimal(BigDecimal input) {
if (input == null) return UNKNOWN;
int compareResult = input.compareTo(BigDecimal.ZERO);
if (compareResult > 0) return ENR;
else if (compareResult < 0) return WD;
else return UNKNOWN;
}
public String getCode() {
return code;
}
}