This commit is contained in:
parent
6b04b11e9f
commit
34a7a5ae53
4 changed files with 62 additions and 21 deletions
|
|
@ -0,0 +1,7 @@
|
|||
package ru.spcex.clearing.account.model;
|
||||
|
||||
import ru.clearing.classes.statics.data.account.ClientCode;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
|
||||
public record TrkCreationResult(ClientCode clientCode, TradingClearingRegistry tradingClearingRegistry) {
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
import ru.clearing.classes.statics.data.account.Account;
|
||||
import ru.clearing.classes.statics.data.account.AccountSymbols;
|
||||
import ru.clearing.classes.statics.data.account.ClientCode;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||
|
|
@ -19,7 +20,9 @@ import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount;
|
|||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsgRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsgResponse;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.Tkr;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
import ru.spcex.platform.enumeration.CompanySymbol;
|
||||
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||
import ru.spcex.platform.enumeration.Status;
|
||||
import ru.spcex.platform.enumeration.TradingClearingRegistryType;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
|
|
@ -29,9 +32,21 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
|
|||
public class GatewayRequestCreator {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
private final ImdgProvider imdgProvider;
|
||||
private final Imdg<Company> companyImdg;
|
||||
private final Imdg<CompanySymbols> companySymbolsImdg;
|
||||
private final Imdg<ClientCode> clientCodeImdg;
|
||||
private final Imdg<Account> accountImdg;
|
||||
private final Imdg<AccountSymbols> accountSymbolsImdg;
|
||||
private final Imdg<TradingClearingRegistryList> tradingClearingRegistryListImdg;
|
||||
|
||||
public GatewayRequestCreator(ImdgProvider imdgProvider) {
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
this.companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||
this.clientCodeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClientCode, ClientCode.class);
|
||||
this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||
this.accountSymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountSymbols, AccountSymbols.class);
|
||||
this.tradingClearingRegistryListImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class);
|
||||
}
|
||||
|
||||
public Tkr crateErrorTkrToGateway(TkrAccount tkrAccount, Optional<String> errorMsg) {
|
||||
|
|
@ -48,16 +63,9 @@ public class GatewayRequestCreator {
|
|||
return tkr;
|
||||
}
|
||||
|
||||
public Tkr createTkrGatewayReq(TradingClearingRegistry tradingClearingRegistry) {
|
||||
public Optional<Tkr> createTkrGatewayReq(TradingClearingRegistry tradingClearingRegistry) {
|
||||
Tkr tkr = new Tkr();
|
||||
log.debug("Found TKR with id: {} and code: {}", tradingClearingRegistry.getId(), tradingClearingRegistry.getCode());
|
||||
Imdg<Company> companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||
Imdg<CompanySymbols> companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||
Imdg<ClientCode> clientCodeImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClientCode, ClientCode.class);
|
||||
Imdg<Account> accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||
Imdg<TradingClearingRegistryList> tradingClearingRegistryListImdg = imdgProvider.
|
||||
getImdg(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class);
|
||||
|
||||
Company company = companyImdg.getSingleObjectByID(tradingClearingRegistry.getCompanyId());
|
||||
CompanySymbols companySymbols = companySymbolsImdg.getSingleObjectByFieldValues(
|
||||
Map.of(
|
||||
|
|
@ -65,7 +73,10 @@ public class GatewayRequestCreator {
|
|||
"companyId", company.getId()
|
||||
)
|
||||
);
|
||||
|
||||
if (companySymbols == null) {
|
||||
log.warn("CompanySymbols is null, searched by company.id: {}, skip this tkr", company.getId());
|
||||
return Optional.empty();
|
||||
}
|
||||
ClientCode clientCode = clientCodeImdg.getFirstObjectByFieldValues(
|
||||
Map.of("tradingClearingRegistryId", tradingClearingRegistry.getId())
|
||||
);
|
||||
|
|
@ -88,9 +99,11 @@ public class GatewayRequestCreator {
|
|||
}
|
||||
tkr.setAccountTypeName(accountType);
|
||||
if (tradingClearingRegistry.getDepoAccountId() != null) {
|
||||
Account depoAccount = accountImdg.getSingleObjectByID(tradingClearingRegistry.getDepoAccountId());
|
||||
if (depoAccount != null) {
|
||||
tkr.setDepoAccount(depoAccount.getAccount());
|
||||
AccountSymbols depoAccountSymbol = accountSymbolsImdg.getFirstObjectByFieldValues(
|
||||
Map.of("accountId", tradingClearingRegistry.getDepoAccountId())
|
||||
);
|
||||
if (depoAccountSymbol != null) {
|
||||
tkr.setDepoAccount(depoAccountSymbol.getAccountSymbolValue());
|
||||
}
|
||||
}
|
||||
{
|
||||
|
|
@ -99,6 +112,7 @@ public class GatewayRequestCreator {
|
|||
MoneyAccountMsgResponse moneyAccountMsg = new MoneyAccountMsgResponse();
|
||||
moneyAccountMsg.setAccount(moneyAccount.getAccount());
|
||||
moneyAccountMsg.setCurrCode(StringUtils.hasText(moneyAccount.getCurrency()) ? moneyAccount.getCurrency() : "RUB");
|
||||
getEksAccount(moneyAccount).ifPresent(moneyAccountMsg::setEksAccount);
|
||||
moneyAccountMsg.setActive(Status.Active.equalsByKey(moneyAccount.getStatus()));
|
||||
tkr.getMoneyAccounts().add(moneyAccountMsg);
|
||||
}
|
||||
|
|
@ -113,12 +127,29 @@ public class GatewayRequestCreator {
|
|||
Account additionalAcc = accountImdg.getSingleObjectByID(tkrList.getAccountId());
|
||||
MoneyAccountMsgResponse moneyAccountMsg = new MoneyAccountMsgResponse();
|
||||
moneyAccountMsg.setAccount(additionalAcc.getAccount());
|
||||
getEksAccount(additionalAcc).ifPresent(moneyAccountMsg::setEksAccount);
|
||||
moneyAccountMsg.setCurrCode(StringUtils.hasText(additionalAcc.getCurrency()) ? additionalAcc.getCurrency() : "RUB");
|
||||
moneyAccountMsg.setActive(Status.Active.equalsByKey(additionalAcc.getStatus()));
|
||||
tkr.getMoneyAccounts().add(moneyAccountMsg);
|
||||
}
|
||||
}
|
||||
return tkr;
|
||||
return Optional.of(tkr);
|
||||
}
|
||||
|
||||
private Optional<String> getEksAccount(Account account) {
|
||||
if (AccountType.Info.equalsByKey(account.getAccountType())) {
|
||||
String currency = StringUtils.hasText(account.getCurrency()) ? account.getCurrency() : CurrencyCode.RUB.getKey();
|
||||
Account anltAcc = accountImdg.getFirstObjectByFieldValues(
|
||||
Map.of(
|
||||
"currency", currency,
|
||||
"accountType", AccountType.Anlt.getKey()
|
||||
)
|
||||
);
|
||||
if (anltAcc != null) {
|
||||
return Optional.of(anltAcc.getAccount());
|
||||
}
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
private MoneyAccountMsgResponse convertAccountToResponse(MoneyAccountMsgRequest moneyAccountMsgRequest) {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory;
|
|||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.account.ClientCode;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.spcex.clearing.account.model.TrkCreationResult;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListNewRequest;
|
||||
|
|
@ -41,7 +42,7 @@ public class ClientCodeFacade implements IClearingFacade {
|
|||
/**
|
||||
* Создает clientCode, TCR и опционально TCRList, если указаны валюты.
|
||||
*/
|
||||
public void createClientCodeWithTkr(ClientCodeNewRequest request, IValidator validator, boolean isClearingAcc) {
|
||||
public TrkCreationResult createClientCodeWithTkr(ClientCodeNewRequest request, IValidator validator, boolean isClearingAcc) {
|
||||
log.trace("Start process creating new client code");
|
||||
TradingClearingRegistry tradingClearingRegistry;
|
||||
{
|
||||
|
|
@ -62,9 +63,10 @@ public class ClientCodeFacade implements IClearingFacade {
|
|||
}
|
||||
}
|
||||
|
||||
ClientCode clientCode;
|
||||
{
|
||||
ImdgPredicateBuilder predicateBuilder = clientCodeImdg.predicateBuilder();
|
||||
ClientCode clientCode = clientCodeImdg.getFirstObjectByPredicate(
|
||||
clientCode = clientCodeImdg.getFirstObjectByPredicate(
|
||||
predicateBuilder.and(
|
||||
predicateBuilder.equals("companyId", request.getCompanyId()),
|
||||
predicateBuilder.equals("code", request.getCode()),
|
||||
|
|
@ -85,6 +87,7 @@ public class ClientCodeFacade implements IClearingFacade {
|
|||
log.debug("successfully processed, new clientCode id {}", clientCode.getId());
|
||||
}
|
||||
}
|
||||
return new TrkCreationResult(clientCode, tradingClearingRegistry);
|
||||
}
|
||||
|
||||
public void createClientCode(ClientCodeNewRequest request) {
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import ru.clearing.classes.statics.data.account.Account;
|
|||
import ru.clearing.classes.statics.data.account.DepoAccount;
|
||||
import ru.clearing.classes.statics.data.company.Company;
|
||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||
import ru.spcex.clearing.account.model.TrkCreationResult;
|
||||
import ru.spcex.clearing.account.model.ValidationResult;
|
||||
import ru.spcex.clearing.account.service.TradingClearingRegistryService;
|
||||
import ru.spcex.clearing.account.service.v2.GatewayRequestCreator;
|
||||
|
|
@ -131,15 +132,12 @@ public class ClientCodeMessageListener extends QueueConsumer implements Initiali
|
|||
kafkaSender.sendRequestToQueue(Consts.ACCOUNTS_TO_GATEWAY, sendTkrRequest);
|
||||
return null;
|
||||
}
|
||||
processEksAccount(eksAccountsAfterValidation, gatewayRequest);
|
||||
processEksAccount(eksAccountsAfterValidation, sendTkrRequest);
|
||||
kafkaSender.sendRequestToQueue(Consts.ACCOUNTS_TO_GATEWAY, sendTkrRequest);
|
||||
return null;
|
||||
}
|
||||
|
||||
private void processEksAccount(Map<TkrAccount, ValidationResult> accountsAfterValidation, TkrAccountsGatewayRequest gatewayRequest) {
|
||||
SendTkrRequest sendTkrRequest = new SendTkrRequest();
|
||||
sendTkrRequest.setRequestId(gatewayRequest.getRequestId());
|
||||
|
||||
private void processEksAccount(Map<TkrAccount, ValidationResult> accountsAfterValidation, SendTkrRequest tkrRequest) {
|
||||
for (Map.Entry<TkrAccount, ValidationResult> entry : accountsAfterValidation.entrySet()) {
|
||||
TkrAccount tkrAccount = entry.getKey();
|
||||
ValidationResult validationResult = entry.getValue();
|
||||
|
|
@ -176,7 +174,9 @@ public class ClientCodeMessageListener extends QueueConsumer implements Initiali
|
|||
clientCodeNewRequest.setMoneyAccountId(rubMoneyAcc);
|
||||
clientCodeNewRequest.setDepoAccountId(depoAccountId);
|
||||
clientCodeNewRequest.setCurrencyAccountList(accIds);
|
||||
clientCodeFacade.createClientCodeWithTkr(clientCodeNewRequest, validator, false);
|
||||
TrkCreationResult result = clientCodeFacade.createClientCodeWithTkr(clientCodeNewRequest, validator, false);
|
||||
Optional<Tkr> tkrReq = gatewayRequestCreator.createTkrGatewayReq(result.tradingClearingRegistry());
|
||||
tkrReq.ifPresent(tkr -> tkrRequest.getTkrs().add(tkr));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue