From 903fed53b3ad471ed3119bc4569e6fc7e71005dc Mon Sep 17 00:00:00 2001 From: aalehin Date: Thu, 1 Jun 2023 18:07:42 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-280 --- execution register --- .../service/ExecutionRegisterService.java | 164 +++++++++++++----- 1 file changed, 120 insertions(+), 44 deletions(-) diff --git a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java index a46b558e1..ace5e593d 100644 --- a/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java +++ b/clearing-parent/registry-service/src/main/java/ru/spcex/clearing/registry/service/ExecutionRegisterService.java @@ -7,22 +7,37 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.clearing.classes.statics.data.execution.ExecutionCommon; +import ru.clearing.classes.statics.data.execution.ExecutionDeposit; +import ru.clearing.classes.statics.data.execution.ExecutionFond; import ru.clearing.classes.statics.data.register.ExecutionRegister; +import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; -import ru.spcex.clearing.platform.messaging.domain.Consts; -import ru.spcex.clearing.platform.messaging.domain.cud.registry.ExecutionRegisterNewRequest; -import ru.spcex.clearing.platform.messaging.domain.cud.registry.ExecutionRegisterUpdateRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import static ru.spcex.clearing.imdg.IMDGDistributedNames.Map_ExecutionRegister; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Collection; +import java.util.Map; + +import static ru.spcex.clearing.imdg.IMDGDistributedNames.*; +import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException; +import static ru.spcex.platform.enumeration.Task.createRegistry_LBSR; @Service public class ExecutionRegisterService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg executionRegisterMap; + private final Imdg companySymbolsMap; + private final Imdg executionFondMap; + private final Imdg executionDepositMap; + private final Imdg tradingClearingRegistryMap; + @Autowired public ExecutionRegisterService(Consumer kafkaQueue, @@ -30,56 +45,117 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ ImdgProvider imdgProvider) { super(kafkaQueue, kafkaProducer); this.executionRegisterMap = imdgProvider.getImdg(Map_ExecutionRegister, ExecutionRegister.class); + this.companySymbolsMap = imdgProvider.getImdg(Map_CompanySymbols, CompanySymbols.class); + this.executionFondMap = imdgProvider.getImdg(Map_ExecutionFond, ExecutionFond.class); + this.executionDepositMap = imdgProvider.getImdg(Map_ExecutionDeposit, ExecutionDeposit.class); + this.tradingClearingRegistryMap = imdgProvider.getImdg(Map_TradingClearingRegistry, TradingClearingRegistry.class); } @Override public void afterPropertiesSet() { - callback(ExecutionRegisterNewRequest.class) + callback(LauncherCommandRequest.class) .setConsumer(this::executionRegisterNew) - .forDestination(Consts.REGISTRY_EXECUTION_REGISTER_NEW, callbacks::put); - callback(ExecutionRegisterUpdateRequest.class) - .setConsumer(this::executionRegisterUpdate) - .forDestination(Consts.REGISTRY_EXECUTION_REGISTER_UPDATE, callbacks::put); + .forDestination(createRegistry_LBSR.topic(), callbacks::put); init(); } - public void executionRegisterNew(BaseRequest userRequest) { - ExecutionRegisterNewRequest req = userRequest.getRequestPayload(); + public void executionRegisterNew(BaseRequest userRequest) { + String localDateNow = LocalDate.now().toString(); log.debug("ExecutionRegisterNewRequest received"); - ExecutionRegister register = new ExecutionRegister(); - register.setTradingDate(req.getTradingDate()); - register.setExchangeExecutionId(req.getExchangeExecutionId()); - register.setExchangeExecutionTime(req.getExchangeExecutionTime()); - register.setSecurityId(req.getSecurityId()); - register.setSellerId(req.getSellerId()); - register.setSellerClearingCode(req.getSellerClearingCode()); - register.setSellerTradingClearingRegister(req.getSellerTradingClearingRegister()); - register.setSellerMoneyAccount(req.getSellerMoneyAccount()); - register.setSellerDepoAccount(req.getSellerDepoAccount()); - register.setBuyerId(req.getBuyerId()); - register.setBuyerClearingCode(req.getBuyerClearingCode()); - register.setBuyerTradingClearingRegister(req.getBuyerTradingClearingRegister()); - register.setBuyerMoneyAccount(req.getBuyerMoneyAccount()); - register.setBuyerDepoAccount(req.getBuyerDepoAccount()); - register.setAmount(req.getAmount()); - register.setQuantity(req.getQuantity()); - register.setId(req.getId()); - register.setCreated(req.getCreatedAt()); - register.setUpdated(req.getUpdatedAt()); - register.setClearingDate(req.getClearingDate()); - executionRegisterMap.insert(register); - log.debug("successfully processed, id {}", register.getId()); + Collection collectionFond = executionFondMap.getCollectionObjectsByFieldValues(Map.of("clearingDate", localDateNow)); + Collection collectionDeposit = executionDepositMap.getCollectionObjectsByFieldValues(Map.of("clearingDate", localDateNow)); + collectionFond.forEach(x -> insertExecutionRegister(true, x)); + collectionDeposit.forEach(x -> insertExecutionRegister(false, x)); + log.debug("successfully processed..."); } - public void executionRegisterUpdate(BaseRequest userRequest) { - ExecutionRegisterUpdateRequest req = userRequest.getRequestPayload(); - log.debug("ExecutionRegisterUpdateRequest received"); - ExecutionRegister register = executionRegisterMap.getSingleObjectByID(req.getId()); - register.setSecurityId(req.getSecurityId()); - register.setExchangeExecutionTime(req.getExchangeExecutionTime()); - register.setQuantity(req.getQuantity()); - register.setAmount(req.getAmount()); - executionRegisterMap.update(register); - log.debug("successfully processed, id {}", register.getId()); + + private void insertExecutionRegister(Boolean isFond, ExecutionCommon common) { + log.trace("Started generating ExecutionRegister entity..."); + ExecutionRegister executionRegister = new ExecutionRegister(); + executionRegister.setTradingDate(common.getTradingDate()); + executionRegister.setExchangeExecutionId(common.getExchangeExecutionId()); + executionRegister.setExchangeExecutionTime(common.getExchangeExecutionTime()); + executionRegister.setSecurityId(common.getSecurityId()); + executionRegister.setSellerId(common.getCompanyId()); + executionRegister.setSellerClearingCode(getSellerClearingCode(common)); + executionRegister.setSellerTradingClearingRegister(getSellerTradingClearingRegister(common)); + executionRegister.setSellerMoneyAccount(getSellerMoneyAccount(common)); + executionRegister.setSellerDepoAccount(getSellerDepoAccount(common)); + executionRegister.setBuyerId(common.getCompanyId()); + executionRegister.setBuyerClearingCode(getBuyerClearingCode(common)); + executionRegister.setBuyerTradingClearingRegister(getBuyerTradingClearingRegister(common)); + executionRegister.setBuyerMoneyAccount(getBuyerMoneyAccount(common)); + executionRegister.setBuyerDepoAccount(getBuyerDepoAccount(common)); + if (isFond) { + executionRegister.setQuantity(common.getQuantity()); + executionRegister.setAmount(((ExecutionFond) common).getSettlementAmount()); + } else { + executionRegister.setAmount(((ExecutionDeposit) common).getFirstLegAmount()); + } + executionRegister.setClearingDate(common.getClearingDate()); + executionRegister.setCreated(Instant.now()); + executionRegisterMap.insert(executionRegister); + log.debug("inserted successfully LiabilitiesRegister entity with id: {}", executionRegister.getId()); + } + + private String getSellerClearingCode(ExecutionCommon common) { + Map> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ? + Map.of("companySymbol", "CLRC", "companyId", common.getCounterPartyId()) : + Map.of("companySymbol", "CLRC", "companyId", common.getCompanyId())); + CompanySymbols companySymbols = companySymbolsMap.getSingleObjectByFieldValues(fieldValues); + return companySymbols != null ? companySymbols.getCompanySymbolValue() : null; + } + + private String getSellerTradingClearingRegister(ExecutionCommon common) { + Map> fieldValues = getFieldValuesOrThrowException(Map.of("companyId", common.getCounterPartyId())); + TradingClearingRegistry tradingClearingRegistryForSellerTradingClearingRegister = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues); + return common.getSide().equalsIgnoreCase("BUY") ? tradingClearingRegistryForSellerTradingClearingRegister.getCode() : String.valueOf(common.getTradingClearingRegistryId()); + } + + private String getSellerMoneyAccount(ExecutionCommon common) { + Map> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ? + Map.of("code", common.getCounterPartyId()) : + Map.of("code", common.getCompanyId())); + TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues); + return tradingClearingRegistry != null ? tradingClearingRegistry.getMoneyAccountId().toString() : null; + } + + private String getSellerDepoAccount(ExecutionCommon common) { + Map> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ? + Map.of("code", common.getCounterPartyId()) : + Map.of("code", common.getCompanyId())); + TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues); + return tradingClearingRegistry != null ? tradingClearingRegistry.getDepoAccountId().toString() : null; + } + + private String getBuyerClearingCode(ExecutionCommon common) { + Map> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ? + Map.of("companySymbol", "CLRC", "companyId", common.getCompanyId()) : + Map.of("companySymbol", "CLRC", "companyId", common.getCounterPartyId())); + CompanySymbols companySymbols = companySymbolsMap.getSingleObjectByFieldValues(fieldValues); + return companySymbols != null ? companySymbols.getCompanySymbolValue() : null; + } + + private String getBuyerTradingClearingRegister(ExecutionCommon common) { + Map> fieldValues = getFieldValuesOrThrowException(Map.of("companyId", common.getCounterPartyId())); + TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues); + return common.getSide().equalsIgnoreCase("BUY") ? common.getTradingClearingRegistryId().toString() : tradingClearingRegistry.getId().toString(); + } + + private String getBuyerMoneyAccount(ExecutionCommon common) { + Map> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ? + Map.of("code", common.getCompanyId()) : + Map.of("code", common.getCounterPartyId())); + TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues); + return tradingClearingRegistry != null ? tradingClearingRegistry.getMoneyAccountId().toString() : null; + } + + private String getBuyerDepoAccount(ExecutionCommon common) { + Map> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ? + Map.of("code", common.getCompanyId()) : + Map.of("code", common.getCounterPartyId())); + TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues); + return tradingClearingRegistry != null ? tradingClearingRegistry.getDepoAccountId().toString() : null; } } \ No newline at end of file