etreschenkov 2026-05-29 13:35:33 +03:00
parent 6b04b11e9f
commit 34a7a5ae53
4 changed files with 62 additions and 21 deletions

View file

@ -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) {
}

View file

@ -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) {

View file

@ -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) {

View file

@ -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));
}
}