From a8ad3eb474498e2c839a90f741fddc4f12375066 Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 1 Aug 2024 16:38:17 +0300 Subject: [PATCH] session RequirementsAndObligationCreation (2 step) optimization --- .../session/stage/impl/IRegistryBuilder.java | 28 +++-- .../stage/impl/RegistryCurrBuilder.java | 105 ++++++---------- .../stage/impl/RegistryFondBuilder.java | 114 +++++++++--------- .../RequirementsAndObligationCreation.java | 76 ++++++++++-- 4 files changed, 174 insertions(+), 149 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/IRegistryBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/IRegistryBuilder.java index 6ba960df5..551788bd8 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/IRegistryBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/IRegistryBuilder.java @@ -9,32 +9,36 @@ import ru.clearing.classes.statics.data.misc.Currency; 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.registry.TradingClearingRegistryList; import ru.clearing.classes.statics.data.security.CurrencyPairSecurity; import ru.clearing.classes.statics.data.security.Security; import ru.clearing.platform.dictionary.CurrencyPairDictionary; +import ru.spcex.clearing.service.TcrSearcher; import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector; import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2; -import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ById; -import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByIdAndString; public interface IRegistryBuilder { - IRegistryBuilder imdg(ImdgProvider imdgProvider); + @Deprecated + default IRegistryBuilder imdg(ImdgProvider imdgProvider) {return this;} + default IRegistryBuilder cmpImdg(Imdg cmpImdg) {return this;} + default IRegistryBuilder tcrImdg(Imdg tcrImdg) {return this;} + default IRegistryBuilder accImdg(Imdg accImdg) {return this;} + default IRegistryBuilder ssnImdg(Imdg ssnImdg) {return this;} + default IRegistryBuilder clAccImdg(Imdg clAccImdg) {return this;} + default IRegistryBuilder dpAccImdg(Imdg dpAccImdg) {return this;} + default IRegistryBuilder currPairSecImdg(Imdg currPairSecImdg) {return this;} + default IRegistryBuilder currPairDictImdg(Imdg currPairDictImdg) {return this;} + default IRegistryBuilder currImdg(Imdg currImdg) {return this;} + default IRegistryBuilder tcrSearcher(TcrSearcher tcrSearcher) {return this;} + default IRegistryBuilder secSelector(SecuritySelector secSelector) {return this;} IRegistryBuilder exec(ExecutionCommon exec); IRegistryBuilder registryDesignation(RegistryDesignation registryDesignation); IRegistryBuilder returnDeposit(boolean returnDeposit); Registry build(); - default IRegistryBuilder cmpCash(CashV2 cmpCash) {return this;} - default IRegistryBuilder tcrCash(CashV2 tcrCash) {return this;}//CashV2 tcrCash; - default IRegistryBuilder accCash(CashV2 accCash) {return this;}//CashV2 accCash; default IRegistryBuilder dpAccCash(CashV2 dpAccCash) {return this;}//CashV2 dpAccCash; - default IRegistryBuilder scrtCash(CashV2ById scrtCash) {return this;}//CashV2 scrtCash; default IRegistryBuilder currCash(CashV2 currCash) {return this;}//CashV2 currCash; default IRegistryBuilder clrAccCash(CashV2 clrAccCash) {return this;}//CashV2 clrAccCash; - default IRegistryBuilder ssnCash(CashV2 ssnCash) {return this;}//CashV2 clrAccCash; - default IRegistryBuilder tcrListCash(CashV2ByIdAndString tcrListCash) {return this;} - default IRegistryBuilder currPairCash(CashV2 currPairCash) {return this;} - default IRegistryBuilder currPairDictCash(CashV2 currPairDictCash) {return this;} } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCurrBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCurrBuilder.java index eb2717f6d..b9b8757f9 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCurrBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryCurrBuilder.java @@ -12,12 +12,10 @@ import ru.clearing.classes.statics.data.misc.Currency; 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.registry.TradingClearingRegistryList; import ru.clearing.classes.statics.data.security.CurrencyPairSecurity; import ru.clearing.platform.dictionary.CurrencyPairDictionary; import ru.spcex.clearing.component.predicate.cash.account.AccountIdCashingPredicate; import ru.spcex.clearing.component.predicate.cash.currency.CurrencyCodePredicate; -import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.service.TcrSearcher; import ru.spcex.clearing.session.stage.util.RegistryUtil; import ru.spcex.platform.classes.base.interfaces.ExecutionType; @@ -34,20 +32,11 @@ import ru.spcex.platform.enumeration.RegistryUnit; import ru.spcex.platform.enumeration.Section; 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.ImdgPredicate; import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2; -import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByIdAndString; public class RegistryCurrBuilder implements IRegistryBuilder { - private CashV2 cmpCash; - private CashV2 ssnCash; - private CashV2 tcrCash; - private CashV2ByIdAndString tcrListCash; - private CashV2 accCash; private CashV2 currCash; - private CashV2 currPairCash; - private CashV2 currPairDictCash; private CashV2 clrAccCash; private Imdg companyImdg; @@ -69,21 +58,43 @@ public class RegistryCurrBuilder implements IRegistryBuilder { return new RegistryCurrBuilder(); } - @Override - public RegistryCurrBuilder imdg(ImdgProvider imdgProvider) { - this.companyImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Company, Company.class, cmpCash); - this.tradingClearingRegistryImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class, tcrCash); - Imdg tcrListImdg = imdgProvider.getCashingImdg( - IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class, null - ); - Imdg accountImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Account, Account.class, accCash); - this.sessionImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Session, Session.class, ssnCash); - this.clearingAccountImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class, null); - this.currPairSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class, currPairCash); - this.currPairDictImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class, currPairDictCash); - this.currencyImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Currency, Currency.class, null); - this.tcrSearcher = new TcrSearcher(tradingClearingRegistryImdg, tcrListImdg, companyImdg, accountImdg); - this.tcrSearcher.setTcrListCash(tcrListCash); + public IRegistryBuilder cmpImdg(Imdg cmpImdg) { + this.companyImdg = cmpImdg; + return this; + } + + public IRegistryBuilder tcrImdg(Imdg tcrImdg) { + this.tradingClearingRegistryImdg = tcrImdg; + return this; + } + + public IRegistryBuilder ssnImdg(Imdg ssnImdg) { + this.sessionImdg = ssnImdg; + return this; + } + + public IRegistryBuilder clAccImdg(Imdg clAccImdg) { + this.clearingAccountImdg = clAccImdg; + return this; + } + + public IRegistryBuilder currPairSecImdg(Imdg currPairSecImdg) { + this.currPairSecImdg = currPairSecImdg; + return this; + } + + public IRegistryBuilder currPairDictImdg(Imdg currPairDictImdg) { + this.currPairDictImdg = currPairDictImdg; + return this; + } + + public IRegistryBuilder currImdg(Imdg currImdg) { + this.currencyImdg = currImdg; + return this; + } + + public IRegistryBuilder tcrSearcher(TcrSearcher tcrSearcher) { + this.tcrSearcher = tcrSearcher; return this; } @@ -252,24 +263,6 @@ public class RegistryCurrBuilder implements IRegistryBuilder { return capacityByAccount; } - @Override - public IRegistryBuilder cmpCash(CashV2 cmpCash) { - this.cmpCash = cmpCash; - return this; - } - - @Override - public IRegistryBuilder tcrCash(CashV2 tcrCash) { - this.tcrCash = tcrCash; - return this; - } - - @Override - public IRegistryBuilder accCash(CashV2 accCash) { - this.accCash = accCash; - return this; - } - @Override public IRegistryBuilder currCash(CashV2 currCash) { this.currCash = currCash; @@ -281,28 +274,4 @@ public class RegistryCurrBuilder implements IRegistryBuilder { this.clrAccCash = clrAccCash; return this; } - - @Override - public IRegistryBuilder ssnCash(CashV2 ssnCash) { - this.ssnCash = ssnCash; - return this; - } - - @Override - public IRegistryBuilder tcrListCash(CashV2ByIdAndString tcrListCash) { - this.tcrListCash = tcrListCash; - return this; - } - - @Override - public IRegistryBuilder currPairCash(CashV2 currPairCash) { - this.currPairCash = currPairCash; - return this; - } - - @Override - public IRegistryBuilder currPairDictCash(CashV2 currPairDictCash) { - this.currPairDictCash = currPairDictCash; - return this; - } } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java index 3fc948348..67e50fea8 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RegistryFondBuilder.java @@ -7,19 +7,16 @@ import java.time.LocalDate; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.account.ClearingAccount; import ru.clearing.classes.statics.data.account.DepoAccount; -import ru.clearing.classes.statics.data.account.InformationAccount; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.execution.ExecutionCommon; import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.misc.Currency; -import ru.clearing.classes.statics.data.misc.Market; 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.Security; import ru.spcex.clearing.component.predicate.cash.account.AccountIdCashingPredicate; import ru.spcex.clearing.component.predicate.cash.currency.CurrencyCodePredicate; -import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.session.stage.util.RegistryUtil; import ru.spcex.platform.classes.base.interfaces.ExecutionType; import ru.spcex.platform.enumeration.AccountType; @@ -35,32 +32,22 @@ import ru.spcex.platform.enumeration.RegistryUnit; import ru.spcex.platform.enumeration.Section; 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.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.specific.SecuritySelector; import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2; -import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ById; import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; public class RegistryFondBuilder implements IRegistryBuilder { - CashV2 cmpCash; - CashV2 ssnCash; - CashV2 tcrCash; - CashV2 accCash; CashV2 dpAccCash; - CashV2ById scrtCash; CashV2 currCash; CashV2 clrAccCash; - - private Imdg companyImdg; - private Imdg tradingClearingRegistryImdg; - private Imdg accountImdg; - private Imdg marketImdg; - private Imdg sessionImdg; - private Imdg clearingAccountImdg; - private Imdg informationAccountImdg; - private Imdg depoAccountImdg; - private Imdg currencyImdg; + private Imdg cmpImdg; + private Imdg tcrImdg; + private Imdg accImdg; + private Imdg ssnImdg; + private Imdg clAccImdg; + private Imdg dpAccImdg; + private Imdg currImdg; private SecuritySelector scrSlctr; private ExecutionCommon exec; private RegistryDesignation regDsgn; @@ -73,47 +60,63 @@ public class RegistryFondBuilder implements IRegistryBuilder { } @Override - public RegistryFondBuilder imdg(ImdgProvider imdgProvider) { - this.companyImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Company, Company.class, cmpCash); - this.tradingClearingRegistryImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class, tcrCash); - this.accountImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Account, Account.class, accCash); - this.sessionImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Session, Session.class, ssnCash); - this.clearingAccountImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class, null); - this.depoAccountImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class, null); - this.currencyImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Currency, Currency.class, null); - this.scrSlctr = new SecuritySelector<>(imdgProvider, Security.class); + public IRegistryBuilder cmpImdg(Imdg cmpImdg) { + this.cmpImdg = cmpImdg; return this; } @Override - public IRegistryBuilder cmpCash(CashV2 cmpCash) { - this.cmpCash = cmpCash; + public IRegistryBuilder tcrImdg(Imdg tcrImdg) { + this.tcrImdg = tcrImdg; return this; } @Override - public IRegistryBuilder tcrCash(CashV2 tcrCash) { - this.tcrCash = tcrCash; + public IRegistryBuilder accImdg(Imdg accImdg) { + this.accImdg = accImdg; return this; } @Override - public IRegistryBuilder accCash(CashV2 accCash) { - this.accCash = accCash; + public IRegistryBuilder ssnImdg(Imdg ssnImdg) { + this.ssnImdg = ssnImdg; return this; } + @Override + public IRegistryBuilder clAccImdg(Imdg clAccImdg) { + this.clAccImdg = clAccImdg; + return this; + } + + @Override + public IRegistryBuilder dpAccImdg(Imdg dpAccImdg) { + this.dpAccImdg = dpAccImdg; + return this; + } + + @Override + public IRegistryBuilder currImdg(Imdg currImdg) { + this.currImdg = currImdg; + return this; + } + + @Override + public IRegistryBuilder secSelector(SecuritySelector secSelector) { + this.scrSlctr = secSelector; + return this; + } + + + + @Override public IRegistryBuilder dpAccCash(CashV2 dpAccCash) { this.dpAccCash = dpAccCash; return this; } - @Override - public IRegistryBuilder scrtCash(CashV2ById scrtCash) { - this.scrtCash = scrtCash; - return this; - } + @Override public IRegistryBuilder currCash(CashV2 currCash) { @@ -127,11 +130,6 @@ public class RegistryFondBuilder implements IRegistryBuilder { return this; } - @Override - public IRegistryBuilder ssnCash(CashV2 ssnCash) { - this.ssnCash = ssnCash; - return this; - } @Override public RegistryFondBuilder exec(ExecutionCommon exec) { @@ -172,15 +170,15 @@ public class RegistryFondBuilder implements IRegistryBuilder { isMoney = true; reg.setAccountId(tcr.getMoneyAccountId()); if (tcr.getMoneyAccountId() != null) { - account = accountImdg.getSingleObjectByID(tcr.getMoneyAccountId()); + account = accImdg.getSingleObjectByID(tcr.getMoneyAccountId()); capacityByAccount = defineCapacityByAccountType(account.getAccountType(), tcr.getMoneyAccountId()); } reg.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); reg.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme add second leg code branch ImdgPredicate currPrdct = CurrencyCodePredicate .getPredicate(exec.getSettlementCurrency()) - .cashed(currencyImdg.predicateBuilder(), currCash); - Currency currency = currencyImdg.getFirstObjectByPredicate(currPrdct); + .cashed(currImdg.predicateBuilder(), currCash); + Currency currency = currImdg.getFirstObjectByPredicate(currPrdct); reg.setSecurityId(currency.getId()); reg.setSecuritySymbol(currency.getCurrencyCode()); } else if ((regDsgn.equals(RegistryDesignation.T) && side.isBuy()) || (regDsgn.equals(RegistryDesignation.O) && side.isSell())) { @@ -188,11 +186,11 @@ public class RegistryFondBuilder implements IRegistryBuilder { reg.setAccountId(tcr.getDepoAccountId()); DepoAccount depoAccount = null; if (tcr.getDepoAccountId() != null) { - account = accountImdg.getSingleObjectByID(tcr.getDepoAccountId()); + account = accImdg.getSingleObjectByID(tcr.getDepoAccountId()); ImdgPredicate depAccPrdct = AccountIdCashingPredicate .getPredicate(tcr.getDepoAccountId()) - .cashed(depoAccountImdg.predicateBuilder(), dpAccCash); - depoAccount = depoAccountImdg.getFirstObjectByPredicate(depAccPrdct); + .cashed(dpAccImdg.predicateBuilder(), dpAccCash); + depoAccount = dpAccImdg.getFirstObjectByPredicate(depAccPrdct); } if (depoAccount != null) { capacityByAccount = depoAccount.getDepoAccountType(); @@ -218,9 +216,7 @@ public class RegistryFondBuilder implements IRegistryBuilder { reg.setRegistryStatus(RegistryStatus.PROC.getKey()); ExecutionFond execFond = (ExecutionFond) this.exec; if (isMoney) { - Security security = scrtCash.getOrFind( - execFond.getSecurityId(), () -> scrSlctr.selectSecurityById(execFond.getSecurityId()) - ).orElse(null); + Security security = scrSlctr.selectSecurityById(execFond.getSecurityId()); if (InstrumentType.BOND.equalsByKey(security.getInstrumentType())) { BigDecimal stlAmt = safeBD(execFond.getSettlementAmount()); BigDecimal intAmt = safeBD(execFond.getInterestAmount()); @@ -253,16 +249,16 @@ public class RegistryFondBuilder implements IRegistryBuilder { //можно передать из стейджа private String sessionType() { - Session session = sessionImdg.getSingleObjectByID(exec.getSessionId()); + Session session = ssnImdg.getSingleObjectByID(exec.getSessionId()); return session.getSessionType(); } private Company searchCompany() { - return companyImdg.getSingleObjectByID(exec.getCompanyId()); + return cmpImdg.getSingleObjectByID(exec.getCompanyId()); } private TradingClearingRegistry searchTradingClearingRegistry() { - return tradingClearingRegistryImdg.getSingleObjectByID(exec.getTradingClearingRegistryId()); + return tcrImdg.getSingleObjectByID(exec.getTradingClearingRegistryId()); } private static ISide getSide(ExecutionCommon exec) { @@ -280,8 +276,8 @@ public class RegistryFondBuilder implements IRegistryBuilder { if (AccountType.Clrn.equalsByKey(accountType)) { ImdgPredicate prdct = AccountIdCashingPredicate .getPredicate(moneyAccountId) - .cashed(clearingAccountImdg.predicateBuilder(), clrAccCash); - ClearingAccount clearingAccount = clearingAccountImdg.getFirstObjectByPredicate(prdct); + .cashed(clAccImdg.predicateBuilder(), clrAccCash); + ClearingAccount clearingAccount = clAccImdg.getFirstObjectByPredicate(prdct); if (clearingAccount != null) { capacityByAccount = clearingAccount.getClearingAccountType(); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java index a6829c72f..e59eff5f5 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/RequirementsAndObligationCreation.java @@ -23,15 +23,19 @@ 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.instrument.issue.EquitySecurity; +import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.misc.Currency; 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.registry.TradingClearingRegistryList; import ru.clearing.classes.statics.data.security.CurrencyPairSecurity; +import ru.clearing.classes.statics.data.security.MoneyMarketSecurity; import ru.clearing.classes.statics.data.security.Security; import ru.clearing.platform.dictionary.CurrencyPairDictionary; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.service.TcrSearcher; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; @@ -54,6 +58,7 @@ 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.imdg.api.predicate.specific.SecuritySelector; import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashCloser; import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2; import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ById; @@ -73,6 +78,21 @@ public class RequirementsAndObligationCreation implements ISessionStage { private final ImdgProvider imdgProvider; protected final RequirementsAndObligationCreationCash cash; + private final Imdg cmpImdg; + private final Imdg tcrImdg; + private final Imdg accImdg; + private final Imdg ssnImdg; + private final Imdg clAccImdg; + private final Imdg dpAccImdg; + private final Imdg currPairSecImdg; + private final Imdg fixIncSecImdg; + private final Imdg monMrktSecImdg; + private final Imdg eqtySecImdg; + private final Imdg currPairDictImdg; + private final Imdg currImdg; + private final TcrSearcher tcrSearcher; + private final SecuritySelector secSelector; + @Autowired public RequirementsAndObligationCreation(ImdgProvider imdgProvider) { @@ -80,6 +100,33 @@ public class RequirementsAndObligationCreation implements ISessionStage { this.idGen = imdgProvider.getImdgIdGenerator(); this.imdgProvider = imdgProvider; this.cash = new RequirementsAndObligationCreationCash(); + this.cmpImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Company, Company.class, cash.cmpCash); + this.tcrImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class, cash.tcrCash); + Imdg tcrListImdg = imdgProvider.getCashingImdg( + IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class, null + ); + this.accImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Account, Account.class, cash.accCash); + this.ssnImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Session, Session.class, cash.ssnCash); + this.clAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class, null); + this.dpAccImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class, null); + this.currPairSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class, cash.currPairCash); + this.fixIncSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class, cash.fixIncSecCash); + this.monMrktSecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class, cash.monMrktSecCash); + this.eqtySecImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class, cash.eqtySecCash); + this.currPairDictImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class, cash.currPairDictCash); + this.currImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Currency, Currency.class, null); + + + this.tcrSearcher = new TcrSearcher(tcrImdg, tcrListImdg, cmpImdg, accImdg); + this.tcrSearcher.setTcrListCash(cash.tcrListCash); + this.secSelector = new SecuritySelector<>(castSecImdg(fixIncSecImdg), + castSecImdg(monMrktSecImdg), + castSecImdg(eqtySecImdg), + castSecImdg(currPairSecImdg)); + } + + private static Imdg castSecImdg(Imdg m) { + return (Imdg) m; } @SuppressWarnings("unchecked") @@ -181,16 +228,21 @@ public class RequirementsAndObligationCreation implements ISessionStage { IRegistryBuilder registryBuilder = defineBuilderByExecType(partyExec.type()); Registry newRegister = registryBuilder //cashes - .cmpCash(cash.cmpCash) - .tcrCash(cash.tcrCash) - .accCash(cash.accCash) .dpAccCash(cash.dpAccCash) - .scrtCash(cash.scrtCash) - .currCash(cash.currCash).currPairCash(cash.currPairCash).currPairDictCash(cash.currPairDictCash) - .tcrListCash(cash.tcrListCash) + .currCash(cash.currCash) .clrAccCash(cash.clrAccCash) - .ssnCash(cash.ssnCash) - //------ + //imdg + .cmpImdg(cmpImdg) + .tcrImdg(tcrImdg) + .accImdg(accImdg) + .ssnImdg(ssnImdg) + .clAccImdg(clAccImdg) + .dpAccImdg(dpAccImdg) + .currPairSecImdg(currPairSecImdg) + .currPairDictImdg(currPairDictImdg) + .currImdg(currImdg) + .tcrSearcher(tcrSearcher) + .secSelector(secSelector) .imdg(imdgProvider) .exec(exec) .registryDesignation(regDsgn) @@ -377,11 +429,13 @@ public class RequirementsAndObligationCreation implements ISessionStage { protected final CashV2 tcrCash; protected final CashV2 accCash; protected final CashV2 dpAccCash; - protected final CashV2ById scrtCash; protected final CashV2 currCash; protected final CashV2 clrAccCash; protected final CashV2 ssnCash; protected final CashV2 currPairCash; + protected final CashV2 fixIncSecCash; + protected final CashV2 monMrktSecCash; + protected final CashV2 eqtySecCash; protected final CashV2 currPairDictCash; protected final CashV2ByIdAndString tcrListCash; @@ -391,11 +445,13 @@ public class RequirementsAndObligationCreation implements ISessionStage { tcrCash = add(new CashV2ById<>("tcrCash")); accCash = add(new CashV2ById<>("accCash")); dpAccCash = add(new CashV2ById<>("dpAccCash")); - scrtCash = add(new CashV2ById<>("scrtCash")); currCash = add(new CashV2ByString<>("currCash", Currency::getCurrencyCode)); clrAccCash = add(new CashV2ById<>("clrAccCash")); ssnCash = add(new CashV2ById<>("ssnCash")); currPairCash = add(new CashV2ById<>("currPairCash")); + fixIncSecCash = add(new CashV2ById<>("fixIncSecCash")); + monMrktSecCash = add(new CashV2ById<>("monMrktSecCash")); + eqtySecCash = add(new CashV2ById<>("eqtySecCash")); currPairDictCash = add(new CashV2ById<>("currPairDictCash")); tcrListCash = add(new CashV2ByIdAndString<>("tcrListCash", tcrList -> new CashV2ByIdAndString.CustomKey(tcrList.getTradingClearingRegistryId(), tcrList.getCurrency()))); }