ialbert 2025-05-27 13:43:26 +03:00
parent 01aaf031b0
commit edd9c7c08d
4 changed files with 49 additions and 7 deletions

View file

@ -25,6 +25,7 @@ import ru.clearing.classes.statics.data.misc.Listing;
import ru.clearing.classes.statics.data.misc.STrades;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.classes.statics.data.security.DigitalCertificateSecurity;
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.error.ClearingError;
@ -73,6 +74,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
private final Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
private final Imdg<MoneyMarketSecurity> imdgMoneyMarketSecurity;
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
private final Imdg<DigitalCertificateSecurity> imdgDigitCertSecurity;
private final Imdg<EquitySecurity> equitySecurityImdg;
private final Imdg<Company> cmpImdg;
private final Imdg<TradingClearingRegistry> tcrImdg;
@ -102,6 +104,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
this.imdgMoneyMarketSecurity = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class, null);
this.fixedIncomeSecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, null);
this.equitySecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class, null);
this.imdgDigitCertSecurity = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, DigitalCertificateSecurity.class, null);
this.cmpImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Company, Company.class, null);
this.tcrImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class, null);
@ -367,12 +370,14 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
context.addImdg(IMDGDistributedNames.Map_EquitySecurity, equitySecurityImdg);
context.addImdg(IMDGDistributedNames.Map_Company, cmpImdg);
context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg);
context.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, imdgDigitCertSecurity);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context,
new STradesSecurityPresentValidationRule(valCash.fixIncSecCash,
valCash.mmsCash,
valCash.eqtySecCash,
valCash.currPairSecCash),
valCash.currPairSecCash,
valCash.digitCertSecCash),
new CompanyByTradingCodeCashingValidationRule<>(
STrades::getFirmId, valCash.cmpCash, ValidationStored.STradesCompany
),
@ -389,6 +394,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
private final CashV2ByString<Security> mmsCash;
private final CashV2ByString<Security> eqtySecCash;
private final CashV2ByString<Security> currPairSecCash;
private final CashV2ByString<Security> digitCertSecCash;
private final CashV2ByString<Company> cmpCash;
private final CashV2ByIdAndString<TradingClearingRegistry> tcrCash;
@ -400,6 +406,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
this.currPairSecCash = add(new CashV2ByString<>("currPairSecCash", Security::getSecuritySymbol));
this.cmpCash = add(new CashV2ByString<>("cmpCash", Company::getTradingCode));
this.tcrCash = add(new CashV2ByIdAndString<>("tcrCash", tcr -> new CashV2ByIdAndString.CustomKey(tcr.getCompanyId(), tcr.getCode())));
this.digitCertSecCash = add(new CashV2ByString<>("digitCertSecCash", Security::getSecuritySymbol));
}
}
}

View file

@ -28,6 +28,7 @@ import ru.clearing.classes.statics.data.misc.SCrossRate;
import ru.clearing.classes.statics.data.misc.STrades;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
import ru.clearing.classes.statics.data.security.DigitalCertificateSecurity;
import ru.clearing.classes.statics.data.security.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.config.element.ClearingServiceSettings;
@ -89,6 +90,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
private final Imdg<EquitySecurity> equitySecurityImdg;
private final Imdg<Company> imdgCompany;
private final Imdg<TradingClearingRegistry> imdgTradingClearingRegistry;
private final Imdg<DigitalCertificateSecurity> imdgDigitCertSecurity;
private final ImdgId idGen;
//fixme ждать ТЗ
@ -115,6 +117,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
this.crossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class);
this.currencyPairSecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class, null);
this.imdgDigitCertSecurity = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, DigitalCertificateSecurity.class, null);
this.imdgMoneyMarketSecurity = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class, null);
this.fixedIncomeSecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, null);
this.equitySecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class, null);
@ -349,7 +352,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
.divide(new BigDecimal(100), RoundingMode.HALF_UP)
.setScale(2, RoundingMode.HALF_UP);
}
} else if (InstrumentType.EQTY.equalsByKey(security.getInstrumentType())) {
} else if (InstrumentType.EQTY.equalsByKey(security.getInstrumentType()) || InstrumentType.DGCT.equalsByKey(security.getInstrumentType())) {
BigDecimal lotsEqty = safeBD(eFond.getQuantity());
settlementAmount = lotsEqty.multiply(price).setScale(2, RoundingMode.HALF_UP);
}
@ -408,12 +411,14 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
context.addImdg(IMDGDistributedNames.Map_EquitySecurity, equitySecurityImdg);
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry);
context.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, imdgDigitCertSecurity);
context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context,
new STradesSecurityPresentValidationRule(valCash.fixIncSecCash,
valCash.mmsCash,
valCash.eqtySecCash,
valCash.currPairSecCash),
valCash.currPairSecCash,
valCash.digitCertSecCash),
new CompanyByTradingCodeCashingValidationRule<>(
STrades::getFirmId, valCash.cmpCash, ValidationStored.STradesCompany
),
@ -429,6 +434,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
private final CashV2ByString<Security> mmsCash;
private final CashV2ByString<Security> eqtySecCash;
private final CashV2ByString<Security> currPairSecCash;
private final CashV2ByString<Security> digitCertSecCash;
private final CashV2ByString<Company> cmpCash;
private final CashV2ByIdAndString<TradingClearingRegistry> tcrCash;
@ -440,6 +446,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
this.currPairSecCash = add(new CashV2ByString<>("currPairSecCash", Security::getSecuritySymbol));
this.cmpCash = add(new CashV2ByString<>("cmpCash", Company::getTradingCode));
this.tcrCash = add(new CashV2ByIdAndString<>("tcrCash", tcr -> new CashV2ByIdAndString.CustomKey(tcr.getCompanyId(), tcr.getCode())));
this.digitCertSecCash = add(new CashV2ByString<>("digitCertSecCash", Security::getSecuritySymbol));
}
}
}

View file

@ -19,12 +19,18 @@ public class STradesSecurityPresentValidationRule implements IValidationRule<Imd
private final CashV2ByString<Security> moneyMarketSecurityCash;
private final CashV2ByString<Security> equitySecurityCash;
private final CashV2ByString<Security> currencyPairSecurityCash;
private final CashV2ByString<Security> digitCertSecCash;
public STradesSecurityPresentValidationRule(CashV2ByString<Security> fixedIncomeSecurityCash, CashV2ByString<Security> moneyMarketSecurityCash, CashV2ByString<Security> equitySecurityCash, CashV2ByString<Security> currencyPairSecurityCash) {
public STradesSecurityPresentValidationRule(CashV2ByString<Security> fixedIncomeSecurityCash,
CashV2ByString<Security> moneyMarketSecurityCash,
CashV2ByString<Security> equitySecurityCash,
CashV2ByString<Security> currencyPairSecurityCash,
CashV2ByString<Security> digitCertSecCash) {
this.fixedIncomeSecurityCash = fixedIncomeSecurityCash;
this.moneyMarketSecurityCash = moneyMarketSecurityCash;
this.equitySecurityCash = equitySecurityCash;
this.currencyPairSecurityCash = currencyPairSecurityCash;
this.digitCertSecCash = digitCertSecCash;
}
@Override
@ -43,9 +49,14 @@ public class STradesSecurityPresentValidationRule implements IValidationRule<Imd
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class)
context.obtainMap(IMDGDistributedNames.Map_CurrencyPairSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_DigitalCertificateSecurity, Security.class)
);
slctr.setCash(fixedIncomeSecurityCash, moneyMarketSecurityCash, equitySecurityCash, currencyPairSecurityCash);
slctr.setCash(fixedIncomeSecurityCash,
moneyMarketSecurityCash,
equitySecurityCash,
currencyPairSecurityCash,
digitCertSecCash);
String secCode = validatedObject.getSecCode().trim();
Security security = slctr.selectSecurityBySymbolCashed(secCode);
if (security == null) {

View file

@ -21,12 +21,15 @@ public class SecuritySelector<T extends SpcexObjectBase> {
private CashV2ByString<T> equitySecurityCash = null;
private final Imdg<T> currencyPairSecurity;
private CashV2ByString<T> currencyPairSecurityCash = null;
private Imdg<T> digitCertSecurity;
private CashV2ByString<T> digitCertSecCash = null;
public SecuritySelector(ImdgProvider imdgProvider, Class<T> clazz) {
this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, clazz);
this.moneyMarketSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, clazz);
this.equitySecurity = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, clazz);
this.currencyPairSecurity = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, clazz);
this.digitCertSecurity = imdgProvider.getImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, clazz);
}
public SecuritySelector(Imdg<T> fixedIncomeSecurityImdg,
@ -37,16 +40,28 @@ public class SecuritySelector<T extends SpcexObjectBase> {
this.moneyMarketSecurityImdg = moneyMarketSecurityImdg;
this.equitySecurity = equitySecurity;
this.currencyPairSecurity = currencyPairSecurity;
this.digitCertSecurity = null;
}
public SecuritySelector(Imdg<T> fixedIncomeSecurityImdg,
Imdg<T> moneyMarketSecurityImdg,
Imdg<T> equitySecurity,
Imdg<T> currencyPairSecurity,
Imdg<T> digitCertSecurity) {
this(fixedIncomeSecurityImdg, moneyMarketSecurityImdg, equitySecurity, currencyPairSecurity);
this.digitCertSecurity = digitCertSecurity;
}
public void setCash(CashV2ByString<T> fixedIncomeSecurityCash,
CashV2ByString<T> moneyMarketSecurityCash,
CashV2ByString<T> equitySecuCash,
CashV2ByString<T> currencyPairSecuCash) {
CashV2ByString<T> currencyPairSecuCash,
CashV2ByString<T> digitCertSecCash) {
this.fixedIncomeSecurityCash = fixedIncomeSecurityCash;
this.moneyMarketSecurityCash = moneyMarketSecurityCash;
this.equitySecurityCash = equitySecuCash;
this.currencyPairSecurityCash = currencyPairSecuCash;
this.digitCertSecCash = digitCertSecCash;
}
public T selectSecurityById(Long securityId) {
@ -85,6 +100,8 @@ public class SecuritySelector<T extends SpcexObjectBase> {
security = retriever.apply(equitySecurity, equitySecurityCash);
if (security != null) return security;
security = retriever.apply(currencyPairSecurity, currencyPairSecurityCash);
if (security != null) return security;
security = retriever.apply(digitCertSecurity, digitCertSecCash);
return security;
}
}