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.misc.STrades;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity; 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.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.security.Security; import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.error.ClearingError;
@ -73,6 +74,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
private final Imdg<CurrencyPairSecurity> currencyPairSecurityImdg; private final Imdg<CurrencyPairSecurity> currencyPairSecurityImdg;
private final Imdg<MoneyMarketSecurity> imdgMoneyMarketSecurity; private final Imdg<MoneyMarketSecurity> imdgMoneyMarketSecurity;
private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg; private final Imdg<FixedIncomeSecurity> fixedIncomeSecurityImdg;
private final Imdg<DigitalCertificateSecurity> imdgDigitCertSecurity;
private final Imdg<EquitySecurity> equitySecurityImdg; private final Imdg<EquitySecurity> equitySecurityImdg;
private final Imdg<Company> cmpImdg; private final Imdg<Company> cmpImdg;
private final Imdg<TradingClearingRegistry> tcrImdg; 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.imdgMoneyMarketSecurity = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class, null);
this.fixedIncomeSecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, null); this.fixedIncomeSecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, null);
this.equitySecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.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.cmpImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Company, Company.class, null);
this.tcrImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.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_EquitySecurity, equitySecurityImdg);
context.addImdg(IMDGDistributedNames.Map_Company, cmpImdg); context.addImdg(IMDGDistributedNames.Map_Company, cmpImdg);
context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg); context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, tcrImdg);
context.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, imdgDigitCertSecurity);
context.setLogPrefix(LogPrefixId.INSTANCE); context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
new STradesSecurityPresentValidationRule(valCash.fixIncSecCash, new STradesSecurityPresentValidationRule(valCash.fixIncSecCash,
valCash.mmsCash, valCash.mmsCash,
valCash.eqtySecCash, valCash.eqtySecCash,
valCash.currPairSecCash), valCash.currPairSecCash,
valCash.digitCertSecCash),
new CompanyByTradingCodeCashingValidationRule<>( new CompanyByTradingCodeCashingValidationRule<>(
STrades::getFirmId, valCash.cmpCash, ValidationStored.STradesCompany STrades::getFirmId, valCash.cmpCash, ValidationStored.STradesCompany
), ),
@ -389,6 +394,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
private final CashV2ByString<Security> mmsCash; private final CashV2ByString<Security> mmsCash;
private final CashV2ByString<Security> eqtySecCash; private final CashV2ByString<Security> eqtySecCash;
private final CashV2ByString<Security> currPairSecCash; private final CashV2ByString<Security> currPairSecCash;
private final CashV2ByString<Security> digitCertSecCash;
private final CashV2ByString<Company> cmpCash; private final CashV2ByString<Company> cmpCash;
private final CashV2ByIdAndString<TradingClearingRegistry> tcrCash; private final CashV2ByIdAndString<TradingClearingRegistry> tcrCash;
@ -400,6 +406,7 @@ public class ExecutionCurrencyComponent implements IExecutionUploadComponent {
this.currPairSecCash = add(new CashV2ByString<>("currPairSecCash", Security::getSecuritySymbol)); this.currPairSecCash = add(new CashV2ByString<>("currPairSecCash", Security::getSecuritySymbol));
this.cmpCash = add(new CashV2ByString<>("cmpCash", Company::getTradingCode)); this.cmpCash = add(new CashV2ByString<>("cmpCash", Company::getTradingCode));
this.tcrCash = add(new CashV2ByIdAndString<>("tcrCash", tcr -> new CashV2ByIdAndString.CustomKey(tcr.getCompanyId(), tcr.getCode()))); 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.misc.STrades;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity; 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.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.security.Security; import ru.clearing.classes.statics.data.security.Security;
import ru.spcex.clearing.config.element.ClearingServiceSettings; import ru.spcex.clearing.config.element.ClearingServiceSettings;
@ -89,6 +90,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
private final Imdg<EquitySecurity> equitySecurityImdg; private final Imdg<EquitySecurity> equitySecurityImdg;
private final Imdg<Company> imdgCompany; private final Imdg<Company> imdgCompany;
private final Imdg<TradingClearingRegistry> imdgTradingClearingRegistry; private final Imdg<TradingClearingRegistry> imdgTradingClearingRegistry;
private final Imdg<DigitalCertificateSecurity> imdgDigitCertSecurity;
private final ImdgId idGen; private final ImdgId idGen;
//fixme ждать ТЗ //fixme ждать ТЗ
@ -115,6 +117,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
this.crossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class); this.crossRateImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SCrossRate, SCrossRate.class);
this.currencyPairSecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class, null); 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.imdgMoneyMarketSecurity = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class, null);
this.fixedIncomeSecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, null); this.fixedIncomeSecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, null);
this.equitySecurityImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.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) .divide(new BigDecimal(100), RoundingMode.HALF_UP)
.setScale(2, 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()); BigDecimal lotsEqty = safeBD(eFond.getQuantity());
settlementAmount = lotsEqty.multiply(price).setScale(2, RoundingMode.HALF_UP); 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_EquitySecurity, equitySecurityImdg);
context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany); context.addImdg(IMDGDistributedNames.Map_Company, imdgCompany);
context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry); context.addImdg(IMDGDistributedNames.Map_TradingClearingRegistry, imdgTradingClearingRegistry);
context.addImdg(IMDGDistributedNames.Map_DigitalCertificateSecurity, imdgDigitCertSecurity);
context.setLogPrefix(LogPrefixId.INSTANCE); context.setLogPrefix(LogPrefixId.INSTANCE);
return new ValidatorImpl<>(context, return new ValidatorImpl<>(context,
new STradesSecurityPresentValidationRule(valCash.fixIncSecCash, new STradesSecurityPresentValidationRule(valCash.fixIncSecCash,
valCash.mmsCash, valCash.mmsCash,
valCash.eqtySecCash, valCash.eqtySecCash,
valCash.currPairSecCash), valCash.currPairSecCash,
valCash.digitCertSecCash),
new CompanyByTradingCodeCashingValidationRule<>( new CompanyByTradingCodeCashingValidationRule<>(
STrades::getFirmId, valCash.cmpCash, ValidationStored.STradesCompany STrades::getFirmId, valCash.cmpCash, ValidationStored.STradesCompany
), ),
@ -429,6 +434,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
private final CashV2ByString<Security> mmsCash; private final CashV2ByString<Security> mmsCash;
private final CashV2ByString<Security> eqtySecCash; private final CashV2ByString<Security> eqtySecCash;
private final CashV2ByString<Security> currPairSecCash; private final CashV2ByString<Security> currPairSecCash;
private final CashV2ByString<Security> digitCertSecCash;
private final CashV2ByString<Company> cmpCash; private final CashV2ByString<Company> cmpCash;
private final CashV2ByIdAndString<TradingClearingRegistry> tcrCash; private final CashV2ByIdAndString<TradingClearingRegistry> tcrCash;
@ -440,6 +446,7 @@ public class ExecutionFondComponent implements IExecutionUploadComponent {
this.currPairSecCash = add(new CashV2ByString<>("currPairSecCash", Security::getSecuritySymbol)); this.currPairSecCash = add(new CashV2ByString<>("currPairSecCash", Security::getSecuritySymbol));
this.cmpCash = add(new CashV2ByString<>("cmpCash", Company::getTradingCode)); this.cmpCash = add(new CashV2ByString<>("cmpCash", Company::getTradingCode));
this.tcrCash = add(new CashV2ByIdAndString<>("tcrCash", tcr -> new CashV2ByIdAndString.CustomKey(tcr.getCompanyId(), tcr.getCode()))); 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> moneyMarketSecurityCash;
private final CashV2ByString<Security> equitySecurityCash; private final CashV2ByString<Security> equitySecurityCash;
private final CashV2ByString<Security> currencyPairSecurityCash; 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.fixedIncomeSecurityCash = fixedIncomeSecurityCash;
this.moneyMarketSecurityCash = moneyMarketSecurityCash; this.moneyMarketSecurityCash = moneyMarketSecurityCash;
this.equitySecurityCash = equitySecurityCash; this.equitySecurityCash = equitySecurityCash;
this.currencyPairSecurityCash = currencyPairSecurityCash; this.currencyPairSecurityCash = currencyPairSecurityCash;
this.digitCertSecCash = digitCertSecCash;
} }
@Override @Override
@ -43,9 +49,14 @@ public class STradesSecurityPresentValidationRule implements IValidationRule<Imd
context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class), context.obtainMap(IMDGDistributedNames.Map_FixedIncomeSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class), context.obtainMap(IMDGDistributedNames.Map_MoneyMarketSecurity, Security.class),
context.obtainMap(IMDGDistributedNames.Map_EquitySecurity, 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(); String secCode = validatedObject.getSecCode().trim();
Security security = slctr.selectSecurityBySymbolCashed(secCode); Security security = slctr.selectSecurityBySymbolCashed(secCode);
if (security == null) { if (security == null) {

View file

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