currency session cashing
This commit is contained in:
parent
09f874204b
commit
a1ebfe5f1f
8 changed files with 229 additions and 56 deletions
|
|
@ -0,0 +1,33 @@
|
|||
package ru.spcex.clearing.component.predicate.cash.tcr;
|
||||
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
|
||||
import ru.spcex.platform.enumeration.Status;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByIdAndString;
|
||||
|
||||
public class TcrListByTcrIdAndCurrencyPredicate {
|
||||
public static TcrListByTcrIdAndCurrencyPredicate getPredicate(Long tcrId, String curCde) {
|
||||
return new TcrListByTcrIdAndCurrencyPredicate(tcrId, curCde);
|
||||
}
|
||||
|
||||
private final Long tcrId;
|
||||
private final String cur;
|
||||
|
||||
private TcrListByTcrIdAndCurrencyPredicate(Long tcrId, String cur) {
|
||||
this.tcrId = tcrId;
|
||||
this.cur = cur;
|
||||
}
|
||||
|
||||
public ImdgPredicate cashed(ImdgPredicateBuilder pb, CashV2ByIdAndString<TradingClearingRegistryList> cash) {
|
||||
ImdgPredicate prdct = pb.and(
|
||||
pb.equals("tradingClearingRegistryId", tcrId),
|
||||
pb.equals("currency", cur),
|
||||
pb.equals("status", Status.Active.getKey())
|
||||
);
|
||||
if (cash != null) {
|
||||
CashV2ByIdAndString.CustomKey key = new CashV2ByIdAndString.CustomKey(tcrId, cur);
|
||||
return pb.cashed(prdct, cash, key);
|
||||
} else return prdct;
|
||||
}
|
||||
}
|
||||
|
|
@ -9,15 +9,16 @@ import ru.clearing.classes.statics.data.account.Account;
|
|||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
|
||||
import ru.spcex.clearing.component.predicate.cash.tcr.TcrListByTcrIdAndCurrencyPredicate;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||
import ru.spcex.platform.enumeration.Status;
|
||||
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.iml.hazelcast.adapter.CashV2ByIdAndString;
|
||||
|
||||
@Component
|
||||
public class TcrSearcher {
|
||||
|
|
@ -26,7 +27,11 @@ public class TcrSearcher {
|
|||
private final Imdg<TradingClearingRegistryList> tcrListImdg;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<Account> accountImdg;
|
||||
private CashV2ByIdAndString<TradingClearingRegistryList> tcrListCash;
|
||||
|
||||
public void setTcrListCash(CashV2ByIdAndString<TradingClearingRegistryList> tcrListCash) {
|
||||
this.tcrListCash = tcrListCash;
|
||||
}
|
||||
|
||||
@Autowired
|
||||
public TcrSearcher(ImdgProvider imdgProvider) {
|
||||
|
|
@ -77,13 +82,10 @@ public class TcrSearcher {
|
|||
return acc;
|
||||
}
|
||||
ImdgPredicateBuilder pb = tcrListImdg.predicateBuilder();
|
||||
TradingClearingRegistryList tcrList = tcrListImdg.getFirstObjectByPredicate(
|
||||
pb.and(
|
||||
pb.equals("tradingClearingRegistryId", tcr.getId()),
|
||||
pb.equals("currency", currency),
|
||||
pb.equals("status", Status.Active.getKey())
|
||||
)
|
||||
);
|
||||
ImdgPredicate tcrListPrdct = TcrListByTcrIdAndCurrencyPredicate
|
||||
.getPredicate(tcr.getId(), currency)
|
||||
.cashed(pb, tcrListCash);
|
||||
TradingClearingRegistryList tcrList = tcrListImdg.getFirstObjectByPredicate(tcrListPrdct);
|
||||
if (tcrList == null || tcrList.getAccountId() == null) {
|
||||
log.warn("couldn't find account by tcr#id={}; currency {}. tcrList {}.",
|
||||
tcrId, currency, tcrList != null ? (tcrList.getId() + " present though.") : "not found");
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import ru.spcex.clearing.session.stage.impl.FinishingSession;
|
|||
import ru.spcex.clearing.session.stage.impl.FormingPaymentInstructionAssets;
|
||||
import ru.spcex.clearing.session.stage.impl.FormingRegistersOnOS;
|
||||
import ru.spcex.clearing.session.stage.impl.InclusionObligations;
|
||||
import ru.spcex.clearing.session.stage.impl.InspectionObligations;
|
||||
import ru.spcex.clearing.session.stage.impl.InspectionObligationsV2;
|
||||
import ru.spcex.clearing.session.stage.impl.ObligationAdmission;
|
||||
import ru.spcex.clearing.session.stage.impl.PaymentInfo;
|
||||
import ru.spcex.clearing.session.stage.impl.RequirementsAndObligationCreation;
|
||||
|
|
@ -55,7 +55,7 @@ public class CurrencySession extends AbstractSession implements InitializingBean
|
|||
private final ObligationAdmission obligationsAdmission;
|
||||
|
||||
private final InclusionObligations inclusionObligations;
|
||||
private final InspectionObligations inspectionObligations;
|
||||
private final InspectionObligationsV2 inspectionObligations;
|
||||
private final FormingRegistersOnOS formingRegistersOnOS;
|
||||
private final FormingPaymentInstructionAssets formingPaymentInstructionAssets;
|
||||
private final UnlockResources unlockResources;
|
||||
|
|
@ -84,7 +84,7 @@ public class CurrencySession extends AbstractSession implements InitializingBean
|
|||
FinishingSession finishingSession,
|
||||
EndStageNotification endStageNotification,
|
||||
IMessageResolver messageResolver,
|
||||
InspectionObligations inspectionObligations,
|
||||
InspectionObligationsV2 inspectionObligations,
|
||||
@Qualifier("marketCodesForCurr") Supplier<List<String>> marketCodes) {
|
||||
super(imdgProvider, messageResolver);
|
||||
this.balanceRevise = balanceRevise;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,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.classes.statics.data.security.Security;
|
||||
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2;
|
||||
|
|
@ -30,4 +33,7 @@ public interface IRegistryBuilder {
|
|||
default IRegistryBuilder currCash(CashV2<String, Currency> currCash) {return this;}//CashV2<String, Currency> currCash;
|
||||
default IRegistryBuilder clrAccCash(CashV2<Long, ClearingAccount> clrAccCash) {return this;}//CashV2<Long, ClearingAccount> clrAccCash;
|
||||
default IRegistryBuilder ssnCash(CashV2<Long, Session> ssnCash) {return this;}//CashV2<Long, ClearingAccount> clrAccCash;
|
||||
default IRegistryBuilder tcrListCash(CashV2<Long, TradingClearingRegistryList> tcrListCash) {return this;}
|
||||
default IRegistryBuilder currPairCash(CashV2<Long, CurrencyPairSecurity> currPairCash) {return this;}
|
||||
default IRegistryBuilder currPairDictCash(CashV2<Long, CurrencyPairDictionary> currPairDictCash) {return this;}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,23 +2,21 @@ package ru.spcex.clearing.session.stage.impl;
|
|||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
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.ExecutionCurrency;
|
||||
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.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.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;
|
||||
|
|
@ -37,21 +35,27 @@ 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.specific.SecuritySelector;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2;
|
||||
|
||||
public class RegistryCurrBuilder implements IRegistryBuilder {
|
||||
private CashV2<Long, Company> cmpCash;
|
||||
private CashV2<Long, Session> ssnCash;
|
||||
private CashV2<Long, TradingClearingRegistry> tcrCash;
|
||||
private CashV2<Long, TradingClearingRegistryList> tcrListCash;
|
||||
private CashV2<Long, Account> accCash;
|
||||
private CashV2<String, Currency> currCash;
|
||||
private CashV2<Long, CurrencyPairSecurity> currPairCash;
|
||||
private CashV2<Long, CurrencyPairDictionary> currPairDictCash;
|
||||
private CashV2<Long, ClearingAccount> clrAccCash;
|
||||
|
||||
private Imdg<Company> companyImdg;
|
||||
private Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
||||
private Imdg<Account> accountImdg;
|
||||
private Imdg<Market> marketImdg;
|
||||
private Imdg<Session> sessionImdg;
|
||||
private Imdg<ClearingAccount> clearingAccountImdg;
|
||||
private Imdg<InformationAccount> informationAccountImdg;
|
||||
private Imdg<DepoAccount> depoAccountImdg;
|
||||
private Imdg<Currency> currencyImdg;
|
||||
private Imdg<CurrencyPairSecurity> currPairSecImdg;
|
||||
private Imdg<CurrencyPairDictionary> currPairDictImdg;
|
||||
private SecuritySelector<Security> scrSlctr;
|
||||
private TcrSearcher tcrSearcher;
|
||||
private ExecutionCommon exec;
|
||||
private RegistryDesignation regDsgn;
|
||||
|
|
@ -66,19 +70,18 @@ public class RegistryCurrBuilder implements IRegistryBuilder {
|
|||
|
||||
@Override
|
||||
public RegistryCurrBuilder imdg(ImdgProvider imdgProvider) {
|
||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||
this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||
this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class);
|
||||
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||
this.clearingAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class);
|
||||
this.depoAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class);
|
||||
this.informationAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_InformationAccount, InformationAccount.class);
|
||||
this.currPairSecImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class);
|
||||
this.currPairDictImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CurrencyPairDictionary, CurrencyPairDictionary.class);
|
||||
this.currencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
|
||||
this.scrSlctr = new SecuritySelector<>(imdgProvider, Security.class);
|
||||
this.tcrSearcher = new TcrSearcher(imdgProvider);
|
||||
this.companyImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Company, Company.class, cmpCash);
|
||||
this.tradingClearingRegistryImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class, tcrCash);
|
||||
Imdg<TradingClearingRegistryList> tcrListImdg = imdgProvider.getCashingImdg(
|
||||
IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class, tcrListCash
|
||||
);
|
||||
Imdg<Account> 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);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -126,12 +129,10 @@ public class RegistryCurrBuilder implements IRegistryBuilder {
|
|||
//OM_T = CNY [base_currency_id] balance=quantity
|
||||
//TM_T = RUB [quote_currency_id] balance=settlement_ammount
|
||||
reg.setContract(String.valueOf(exec.getSecurityId()));
|
||||
CurrencyPairSecurity curPairSec = currPairSecImdg.getFirstObjectBySQL(
|
||||
"id = %d".formatted(exec.getSecurityId())
|
||||
);
|
||||
CurrencyPairSecurity curPairSec = currPairSecImdg.getSingleObjectByID(exec.getSecurityId());
|
||||
CurrencyPairDictionary curPairDict = null;
|
||||
if (curPairSec != null) {
|
||||
curPairDict = currPairDictImdg.getFirstObjectBySQL("id = %d".formatted(curPairSec.getCurrencyPairId()));
|
||||
curPairDict = currPairDictImdg.getSingleObjectByID(curPairSec.getCurrencyPairId());
|
||||
}
|
||||
assert curPairSec != null && curPairDict != null;
|
||||
ExecutionCurrency execCurr = (ExecutionCurrency) this.exec;
|
||||
|
|
@ -151,9 +152,11 @@ public class RegistryCurrBuilder implements IRegistryBuilder {
|
|||
curr = baseCurrency;
|
||||
reg.setBalance(execCurr.getQuantity());
|
||||
} else curr = CurrencyCode.RUB.getKey();
|
||||
currency = currencyImdg.getFirstObjectByFieldValues(
|
||||
Map.of("currencyCode", curr)
|
||||
);
|
||||
ImdgPredicate currPrdct = CurrencyCodePredicate
|
||||
.getPredicate(curr)
|
||||
.cashed(currencyImdg.predicateBuilder(), currCash);
|
||||
|
||||
currency = currencyImdg.getFirstObjectByPredicate(currPrdct);
|
||||
reg.setSecurityId(currency.getId());
|
||||
reg.setSecuritySymbol(currency.getCurrencyCode());
|
||||
Optional<Account> acc = tcrSearcher.searchByTcr(exec.getTradingClearingRegistryId(), curr);
|
||||
|
|
@ -212,7 +215,7 @@ public class RegistryCurrBuilder implements IRegistryBuilder {
|
|||
}
|
||||
|
||||
private Company searchCompany() {
|
||||
return companyImdg.getFirstObjectBySQL("id = " + exec.getCompanyId());
|
||||
return companyImdg.getSingleObjectByID(exec.getCompanyId());
|
||||
}
|
||||
|
||||
private TradingClearingRegistry searchTradingClearingRegistry() {
|
||||
|
|
@ -234,7 +237,10 @@ public class RegistryCurrBuilder implements IRegistryBuilder {
|
|||
private String defineCapacityByAccountType(String accountType, Long moneyAccountId) {
|
||||
String capacityByAccount = null;
|
||||
if (AccountType.Clrn.equalsByKey(accountType)) {
|
||||
ClearingAccount clearingAccount = clearingAccountImdg.getFirstObjectByFieldValues(Map.of("accountId", moneyAccountId));
|
||||
ImdgPredicate prdct = AccountIdCashingPredicate
|
||||
.getPredicate(moneyAccountId)
|
||||
.cashed(clearingAccountImdg.predicateBuilder(), clrAccCash);
|
||||
ClearingAccount clearingAccount = clearingAccountImdg.getFirstObjectByPredicate(prdct);
|
||||
if (clearingAccount != null) {
|
||||
capacityByAccount = clearingAccount.getClearingAccountType();
|
||||
}
|
||||
|
|
@ -243,4 +249,58 @@ public class RegistryCurrBuilder implements IRegistryBuilder {
|
|||
}
|
||||
return capacityByAccount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegistryBuilder cmpCash(CashV2<Long, Company> cmpCash) {
|
||||
this.cmpCash = cmpCash;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegistryBuilder tcrCash(CashV2<Long, TradingClearingRegistry> tcrCash) {
|
||||
this.tcrCash = tcrCash;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegistryBuilder accCash(CashV2<Long, Account> accCash) {
|
||||
this.accCash = accCash;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegistryBuilder currCash(CashV2<String, Currency> currCash) {
|
||||
this.currCash = currCash;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegistryBuilder clrAccCash(CashV2<Long, ClearingAccount> clrAccCash) {
|
||||
this.clrAccCash = clrAccCash;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegistryBuilder ssnCash(CashV2<Long, Session> ssnCash) {
|
||||
this.ssnCash = ssnCash;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegistryBuilder tcrListCash(CashV2<Long, TradingClearingRegistryList> tcrListCash) {
|
||||
this.tcrListCash = tcrListCash;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegistryBuilder currPairCash(CashV2<Long, CurrencyPairSecurity> currPairCash) {
|
||||
this.currPairCash = currPairCash;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRegistryBuilder currPairDictCash(CashV2<Long, CurrencyPairDictionary> currPairDictCash) {
|
||||
this.currPairDictCash = currPairDictCash;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package ru.spcex.clearing.session.stage.impl;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
|
@ -24,7 +25,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.classes.statics.data.security.Security;
|
||||
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.session.stage.ISessionStage;
|
||||
import ru.spcex.clearing.session.stage.StageResult;
|
||||
|
|
@ -156,7 +160,8 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
|||
.accCash(cash.accCash)
|
||||
.dpAccCash(cash.dpAccCash)
|
||||
.scrtCash(cash.scrtCash)
|
||||
.currCash(cash.currCash)
|
||||
.currCash(cash.currCash).currPairCash(cash.currPairCash).currPairDictCash(cash.currPairDictCash)
|
||||
.tcrListCash(cash.tcrListCash)
|
||||
.clrAccCash(cash.clrAccCash)
|
||||
.ssnCash(cash.ssnCash)
|
||||
//------
|
||||
|
|
@ -345,17 +350,23 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
|||
private final CashV2<String, Currency> currCash;
|
||||
private final CashV2<Long, ClearingAccount> clrAccCash;
|
||||
private final CashV2<Long, Session> ssnCash;
|
||||
private final CashV2<Long, CurrencyPairSecurity> currPairCash;
|
||||
private final CashV2<Long, CurrencyPairDictionary> currPairDictCash;
|
||||
private final CashV2<Long, TradingClearingRegistryList> tcrListCash;
|
||||
|
||||
public RequirementsAndObligationCreationCash() {
|
||||
cmpCash = new CashV2ById<>("cmpCash");
|
||||
tcrCash = new CashV2ById<>("tcrCash");
|
||||
accCash = new CashV2ById<>("accCash");
|
||||
dpAccCash = new CashV2ById<>("dpAccCash");
|
||||
scrtCash = new CashV2ById<>("scrtCash");
|
||||
currCash = new CashV2ByString<>("currCash", Currency::getCurrencyCode);
|
||||
clrAccCash = new CashV2ById<>("clrAccCash");
|
||||
ssnCash = new CashV2ById<>("ssnCash");
|
||||
cashes = List.of(cmpCash, tcrCash, accCash, dpAccCash, scrtCash, currCash, clrAccCash, ssnCash);
|
||||
cashes = new ArrayList<>();
|
||||
cmpCash = add(new CashV2ById<>("cmpCash"));
|
||||
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"));
|
||||
currPairDictCash = add(new CashV2ById<>("currPairDictCash"));
|
||||
tcrListCash = add(new CashV2ById<>("tcrListCash"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,11 +12,16 @@ public class CashCloser implements AutoCloseable {
|
|||
|
||||
public CashCloser() {}
|
||||
|
||||
public CashCloser add(CashV2<?, ?> cash) {
|
||||
protected <C extends CashV2<K, T>, K, T> C add(C cash) {
|
||||
this.cashes.add(cash);
|
||||
return this;
|
||||
return cash;
|
||||
}
|
||||
|
||||
// public CashCloser add(CashV2<?, ?> cash) {
|
||||
// this.cashes.add(cash);
|
||||
// return this;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
cashes.forEach(CashV2::clear);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
package ru.spcex.platform.imdg.iml.hazelcast.adapter;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class CashV2ByIdAndString<T> extends CashV2<CashV2ByIdAndString.CustomKey, T> {
|
||||
|
||||
private final Function<T, CustomKey> codeExtractor;
|
||||
|
||||
public CashV2ByIdAndString(Function<T, CustomKey> codeExtractor) {
|
||||
this.codeExtractor = codeExtractor;
|
||||
}
|
||||
|
||||
public CashV2ByIdAndString(String name, Function<T, CustomKey> codeExtractor) {
|
||||
super(name);
|
||||
this.codeExtractor = codeExtractor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<T> getOrFind(CustomKey key, Supplier<T> supplier) {
|
||||
return super.getOrFind(key, supplier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<T> get(CustomKey key) {
|
||||
return super.get(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CustomKey extractKey(T obj) {
|
||||
|
||||
return codeExtractor.apply(obj);
|
||||
}
|
||||
|
||||
public static record CustomKey(Long id, String code) {
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
CustomKey customKey = (CustomKey) o;
|
||||
|
||||
if (!Objects.equals(id, customKey.id)) return false;
|
||||
return Objects.equals(code, customKey.code);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = id != null ? id.hashCode() : 0;
|
||||
result = 31 * result + (code != null ? code.hashCode() : 0);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue