etreschenkov 2024-05-29 12:46:39 +03:00
parent 16c0693b88
commit 6596046513
6 changed files with 124 additions and 50 deletions

View file

@ -1,5 +1,13 @@
package ru.spcex.clearing.account.service; package ru.spcex.clearing.account.service;
import java.time.Instant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.function.Function;
import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.clients.producer.ProducerRecord;
@ -11,7 +19,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Service; 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.ClientCode; import ru.clearing.classes.statics.data.account.ClientCode;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.spcex.clearing.account.errors.AccountError; import ru.spcex.clearing.account.errors.AccountError;
import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.IMDGDistributedNames;
@ -20,7 +31,10 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeUpdateRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeUpdateRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount;
import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccountsGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsg;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListUpdateRequest; import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListUpdateRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryNewRequest;
@ -32,6 +46,9 @@ import ru.spcex.clearing.platform.messaging.service.Status;
import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.security.UserRoleVerification;
import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.util.services.RequestHelper;
import ru.spcex.clearing.validation.common.ValidationHelper; import ru.spcex.clearing.validation.common.ValidationHelper;
import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.enumeration.CurrencyCode;
import ru.spcex.platform.enumeration.TradingClearingRegistryType; import ru.spcex.platform.enumeration.TradingClearingRegistryType;
import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.Imdg;
@ -42,15 +59,6 @@ import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.log.ExceptionUtils; import ru.spcex.platform.utils.log.ExceptionUtils;
import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.IValidator;
import java.time.Instant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.function.Function;
@Service @Service
public class ClientCodeService extends QueueConsumer implements InitializingBean { public class ClientCodeService extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass()); private final Logger log = LoggerFactory.getLogger(getClass());
@ -59,8 +67,8 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean
private final ImdgProvider imdgProvider; private final ImdgProvider imdgProvider;
private final Imdg<ClientCode> clientCodeMap; private final Imdg<ClientCode> clientCodeMap;
private final Imdg<TradingClearingRegistry> tradingClearingRegistryMap; private final Imdg<TradingClearingRegistry> tradingClearingRegistryMap;
private final Imdg<CompanySymbols> companySymbolsImdg;
private final Imdg<Account> accountImdg;
private final Function<ClientCodeNewRequest, IValidator> clientCodeNewRequestValidator; private final Function<ClientCodeNewRequest, IValidator> clientCodeNewRequestValidator;
private final Function<ClientCodeUpdateRequest, IValidator> clientCodeUpdateRequestValidator; private final Function<ClientCodeUpdateRequest, IValidator> clientCodeUpdateRequestValidator;
private final Function<CommonDeleteRequest, IValidator> clientCodeDeleteRequestValidator; private final Function<CommonDeleteRequest, IValidator> clientCodeDeleteRequestValidator;
@ -92,6 +100,8 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean
this.idGenerator = imdgProvider.getImdgIdGenerator(); this.idGenerator = imdgProvider.getImdgIdGenerator();
this.clientCodeMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ClientCode, ClientCode.class); this.clientCodeMap = imdgProvider.getImdg(IMDGDistributedNames.Map_ClientCode, ClientCode.class);
this.tradingClearingRegistryMap = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); this.tradingClearingRegistryMap = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
this.companySymbolsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
this.clientCodeNewRequestValidator = clientCodeNewRequestValidator; this.clientCodeNewRequestValidator = clientCodeNewRequestValidator;
this.clientCodeUpdateRequestValidator = clientCodeUpdateRequestValidator; this.clientCodeUpdateRequestValidator = clientCodeUpdateRequestValidator;
this.clientCodeDeleteRequestValidator = clientCodeDeleteRequestValidator; this.clientCodeDeleteRequestValidator = clientCodeDeleteRequestValidator;
@ -110,6 +120,9 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean
callback(ClientCodeNewRequest.class) callback(ClientCodeNewRequest.class)
.setFunction(this::clientCodeNew) .setFunction(this::clientCodeNew)
.forDestination(Consts.DESTINATION_CLIENT_CODE_NEW, callbacks::put); .forDestination(Consts.DESTINATION_CLIENT_CODE_NEW, callbacks::put);
callback(TkrAccountsGatewayRequest.class)
.setFunction(this::clientCodeNewFromGateway)
.forDestination(Consts.DESTINATION_CLIENT_CODE_NEW_FROM_GATEWAY, callbacks::put);
callback(ClientCodeNewRequest.class) callback(ClientCodeNewRequest.class)
.setFunction(this::clientCodeNewFromApiUmCompany) .setFunction(this::clientCodeNewFromApiUmCompany)
.forDestination(Consts.DESTINATION_CLIENT_CODE_NEW_UM_COMPANY, callbacks::put); .forDestination(Consts.DESTINATION_CLIENT_CODE_NEW_UM_COMPANY, callbacks::put);
@ -157,6 +170,55 @@ public class ClientCodeService extends QueueConsumer implements InitializingBean
return clientCodeNew0(userRequest, false); return clientCodeNew0(userRequest, false);
} }
protected RequestInfoUpdate clientCodeNewFromGateway(BaseRequest<TkrAccountsGatewayRequest> tkrRequest) {
TkrAccountsGatewayRequest tkr = tkrRequest.getRequestPayload();
for (TkrAccount tkrAccount : tkr.getAccounts()) {
ClientCodeNewRequest clientCodeNewRequest = new ClientCodeNewRequest();
clientCodeNewRequest.setCode(tkrAccount.getClientCode());
if (tkrAccount.getCompanyId() != null) {
CompanySymbols companySymbols = companySymbolsImdg.getFirstObjectByFieldValues(
Map.of(
"companySymbol", CompanySymbol.UUID.getKey(),
"companySymbolValue", tkrAccount.getCompanyId()
)
);
if (companySymbols != null) {
clientCodeNewRequest.setCompanyId(companySymbols.getCompanyId());
}
}
if (StringUtils.hasText(tkrAccount.getDepoAccount())) {
Account account = accountImdg.getFirstObjectByFieldValues(
Map.of(
"account", tkrAccount.getDepoAccount(),
"accountType", AccountType.Depo.getKey()
)
);
if (account != null) {
clientCodeNewRequest.setDepoAccountId(account.getId());
}
}
for (MoneyAccountMsg moneyAccountMsg : tkrAccount.getMoneyAccounts()) {
if (moneyAccountMsg.getCurrCode().equals(CurrencyCode.RUB.getKey())) {
Account account = accountImdg.getFirstObjectByFieldValues(
Map.of(
"account", moneyAccountMsg.getAccount()
)
);
if (account != null) {
clientCodeNewRequest.setMoneyAccountId(account.getId());
}
}
}
BaseRequest<ClientCodeNewRequest> request = new BaseRequest<>();
request.setRequestPayload(clientCodeNewRequest);
RequestInfoUpdate requestInfoUpdate = clientCodeNew0(request, false);
if (requestInfoUpdate != null) {
log.debug("processing result is: {}", requestInfoUpdate.getMessage());
}
}
return null;
}
protected RequestInfoUpdate clientCodeNew0(BaseRequest<ClientCodeNewRequest> userRequest, boolean fromTCRList) { protected RequestInfoUpdate clientCodeNew0(BaseRequest<ClientCodeNewRequest> userRequest, boolean fromTCRList) {
log.debug("ClientCodeNewRequest received {}", userRequest.getId()); log.debug("ClientCodeNewRequest received {}", userRequest.getId());

View file

@ -31,7 +31,7 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount; import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount;
import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccountsCheckRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccountsGatewayRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRequest; import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonIdRequest; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonIdRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsg; import ru.spcex.clearing.platform.messaging.domain.cud.gateway.MoneyAccountMsg;
@ -139,7 +139,7 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini
callback(CommonIdRequest.class) callback(CommonIdRequest.class)
.setFunction(this::tradingClearingRegistryBlock) .setFunction(this::tradingClearingRegistryBlock)
.forDestination(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_BLOCK, callbacks::put); .forDestination(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_BLOCK, callbacks::put);
callback(TkrAccountsCheckRequest.class) callback(TkrAccountsGatewayRequest.class)
.setFunction(this::tradingClearingRegistryCheck) .setFunction(this::tradingClearingRegistryCheck)
.forDestination(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_CHECK, callbacks::put); .forDestination(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_CHECK, callbacks::put);
init(); init();
@ -495,8 +495,8 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini
return null; return null;
} }
public RequestInfoUpdate tradingClearingRegistryCheck(BaseRequest<TkrAccountsCheckRequest> gatewayRequest) { public RequestInfoUpdate tradingClearingRegistryCheck(BaseRequest<TkrAccountsGatewayRequest> gatewayRequest) {
TkrAccountsCheckRequest req = gatewayRequest.getRequestPayload(); TkrAccountsGatewayRequest req = gatewayRequest.getRequestPayload();
log.debug("TradingClearingRegistryCheckRequest received with requestId : {}", req.getRequestId()); log.debug("TradingClearingRegistryCheckRequest received with requestId : {}", req.getRequestId());
for (TkrAccount accountForCheck : req.getAccounts()) { for (TkrAccount accountForCheck : req.getAccounts()) {
log.debug("Checking TKR with code: {}", accountForCheck.getTkrCode()); log.debug("Checking TKR with code: {}", accountForCheck.getTkrCode());

View file

@ -7,7 +7,7 @@ import ru.spcex.clearing.gatewayapi.controller.inbound.request.tkr.request.TkrRe
import ru.spcex.clearing.gatewayapi.service.adapter.TkrAdapter; import ru.spcex.clearing.gatewayapi.service.adapter.TkrAdapter;
import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount; import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccount;
import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccountsCheckRequest; import ru.spcex.clearing.platform.messaging.domain.cud.account.TkrAccountsGatewayRequest;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
@Service @Service
@ -22,14 +22,26 @@ public class TkrService {
} }
public void processedTkrRequest(TkrRequest tkrRequest) { public void processedTkrRequest(TkrRequest tkrRequest) {
List<TkrAccount> tkrAccounts = tkrRequest.getInfoAccount() List<TkrAccount> tkrAccountsForCheck = tkrRequest.getInfoAccount()
.stream().filter(infoAccount -> !StringUtils.hasText(infoAccount.getClientCode())) .stream().filter(infoAccount -> !StringUtils.hasText(infoAccount.getClientCode()))
.map(tkrAdapter::toTkrResponse).toList(); .map(tkrAdapter::toTkrResponse).toList();
if (!tkrAccounts.isEmpty()) {
TkrAccountsCheckRequest tkrAccountsCheckRequest = new TkrAccountsCheckRequest(); List<TkrAccount> tkrAccountsForNew = tkrRequest.getInfoAccount()
tkrAccountsCheckRequest.setRequestId(tkrRequest.getId()); .stream().filter(infoAccount -> !StringUtils.hasText(infoAccount.getTkrCode()))
tkrAccountsCheckRequest.setAccounts(tkrAccounts); .map(tkrAdapter::toTkrResponse).toList();
kafkaSender.sendRequestToQueue(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_CHECK, tkrAccountsCheckRequest);
if (!tkrAccountsForCheck.isEmpty()) {
TkrAccountsGatewayRequest tkrAccountsRequest = new TkrAccountsGatewayRequest();
tkrAccountsRequest.setRequestId(tkrRequest.getId());
tkrAccountsRequest.setAccounts(tkrAccountsForCheck);
kafkaSender.sendRequestToQueue(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_CHECK, tkrAccountsRequest);
}
if (!tkrAccountsForNew.isEmpty()) {
TkrAccountsGatewayRequest tkrAccountsRequest = new TkrAccountsGatewayRequest();
tkrAccountsRequest.setRequestId(tkrRequest.getId());
tkrAccountsRequest.setAccounts(tkrAccountsForNew);
kafkaSender.sendRequestToQueue(Consts.DESTINATION_CLIENT_CODE_NEW_FROM_GATEWAY, tkrAccountsRequest);
} }
} }
} }

View file

@ -101,6 +101,7 @@ public interface Consts {
String DESTINATION_PROFILE_DOCUMENT_DELETE = "profile-document-delete"; String DESTINATION_PROFILE_DOCUMENT_DELETE = "profile-document-delete";
String DESTINATION_CLIENT_CODE_NEW = "client-code-new"; String DESTINATION_CLIENT_CODE_NEW = "client-code-new";
String DESTINATION_CLIENT_CODE_NEW_FROM_GATEWAY = "client-code-new-from-gateway";
String DESTINATION_CLIENT_CODE_NEW_UM_COMPANY = "client-code-new-from-api-um-company"; String DESTINATION_CLIENT_CODE_NEW_UM_COMPANY = "client-code-new-from-api-um-company";
String DESTINATION_CLIENT_CODE_UPDATE = "client-code-update"; String DESTINATION_CLIENT_CODE_UPDATE = "client-code-update";
String DESTINATION_CLIENT_CODE_DELETE = "client-code-delete"; String DESTINATION_CLIENT_CODE_DELETE = "client-code-delete";

View file

@ -1,8 +1,7 @@
package ru.spcex.clearing.platform.messaging.domain.cud.account; package ru.spcex.clearing.platform.messaging.domain.cud.account;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List; import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
public class ClientCodeNewRequest { public class ClientCodeNewRequest {
@JsonProperty @JsonProperty

View file

@ -4,7 +4,7 @@ import java.util.List;
import java.util.UUID; import java.util.UUID;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
public class TkrAccountsCheckRequest { public class TkrAccountsGatewayRequest {
@JsonProperty @JsonProperty
private UUID requestId; private UUID requestId;
@JsonProperty @JsonProperty