diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionCurrencyComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionCurrencyComponent.java index de4fcd72f..9d647d224 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionCurrencyComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionCurrencyComponent.java @@ -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 currencyPairSecurityImdg; private final Imdg imdgMoneyMarketSecurity; private final Imdg fixedIncomeSecurityImdg; + private final Imdg imdgDigitCertSecurity; private final Imdg equitySecurityImdg; private final Imdg cmpImdg; private final Imdg 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 mmsCash; private final CashV2ByString eqtySecCash; private final CashV2ByString currPairSecCash; + private final CashV2ByString digitCertSecCash; private final CashV2ByString cmpCash; private final CashV2ByIdAndString 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)); } } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java index 36dc8dc02..a499a2032 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/execution/ExecutionFondComponent.java @@ -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 equitySecurityImdg; private final Imdg imdgCompany; private final Imdg imdgTradingClearingRegistry; + private final Imdg 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 mmsCash; private final CashV2ByString eqtySecCash; private final CashV2ByString currPairSecCash; + private final CashV2ByString digitCertSecCash; private final CashV2ByString cmpCash; private final CashV2ByIdAndString 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)); } } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/strades/STradesSecurityPresentValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/strades/STradesSecurityPresentValidationRule.java index da808f255..03950b911 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/strades/STradesSecurityPresentValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/strades/STradesSecurityPresentValidationRule.java @@ -19,12 +19,18 @@ public class STradesSecurityPresentValidationRule implements IValidationRule moneyMarketSecurityCash; private final CashV2ByString equitySecurityCash; private final CashV2ByString currencyPairSecurityCash; + private final CashV2ByString digitCertSecCash; - public STradesSecurityPresentValidationRule(CashV2ByString fixedIncomeSecurityCash, CashV2ByString moneyMarketSecurityCash, CashV2ByString equitySecurityCash, CashV2ByString currencyPairSecurityCash) { + public STradesSecurityPresentValidationRule(CashV2ByString fixedIncomeSecurityCash, + CashV2ByString moneyMarketSecurityCash, + CashV2ByString equitySecurityCash, + CashV2ByString currencyPairSecurityCash, + CashV2ByString 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 { private CashV2ByString equitySecurityCash = null; private final Imdg currencyPairSecurity; private CashV2ByString currencyPairSecurityCash = null; + private Imdg digitCertSecurity; + private CashV2ByString digitCertSecCash = null; public SecuritySelector(ImdgProvider imdgProvider, Class 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 fixedIncomeSecurityImdg, @@ -37,16 +40,28 @@ public class SecuritySelector { this.moneyMarketSecurityImdg = moneyMarketSecurityImdg; this.equitySecurity = equitySecurity; this.currencyPairSecurity = currencyPairSecurity; + this.digitCertSecurity = null; + } + + public SecuritySelector(Imdg fixedIncomeSecurityImdg, + Imdg moneyMarketSecurityImdg, + Imdg equitySecurity, + Imdg currencyPairSecurity, + Imdg digitCertSecurity) { + this(fixedIncomeSecurityImdg, moneyMarketSecurityImdg, equitySecurity, currencyPairSecurity); + this.digitCertSecurity = digitCertSecurity; } public void setCash(CashV2ByString fixedIncomeSecurityCash, CashV2ByString moneyMarketSecurityCash, CashV2ByString equitySecuCash, - CashV2ByString currencyPairSecuCash) { + CashV2ByString currencyPairSecuCash, + CashV2ByString 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 { 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; } }