From 1ff7fb4b2366c97194b1df39e4cd35c26b5983ed Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 2 May 2024 15:57:32 +0300 Subject: [PATCH] TradingClearingRegistryList -> Registry --- .../TradingClearingRegistryListService.java | 29 ++++++---- .../clearing/service/RegistryService.java | 54 ++++++++++++++++--- platform-parent/platform-messaging/pom.xml | 1 - .../cud/clearing/CreateRegistryRequest.java | 10 ++++ 4 files changed, 75 insertions(+), 19 deletions(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryListService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryListService.java index 2e0824d44..1b6b3658d 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryListService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryListService.java @@ -25,7 +25,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; 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.clearing.CreateRegistryByTCRListRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRequest; 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.serialization.LogFormatter; @@ -131,6 +131,10 @@ public class TradingClearingRegistryListService extends QueueConsumer implements } requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, tradingClearingRegistryListNewRequestValidator); + TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(userRequest + .getRequestPayload() + .getTradingClearingRegistryId()); + if (requestInfoUpdate != null) { return requestInfoUpdate; } @@ -165,7 +169,6 @@ public class TradingClearingRegistryListService extends QueueConsumer implements if (!innerCall) { // Для каждого счета из списка (currencyAccountList) должна быть создана отдельная запись объекте clientCode с данным счетом для данного клиента, т.е. у одного клиента может быть несколько валютных счетов. try { - TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(req.getTradingClearingRegistryId()); ClientCodeNewRequest cCodeReq = new ClientCodeNewRequest(); cCodeReq.setTradingClearingRegistryId(req.getTradingClearingRegistryId()); cCodeReq.setDepoAccountId(tcr.getDepoAccountId()); @@ -187,7 +190,7 @@ public class TradingClearingRegistryListService extends QueueConsumer implements } - sendNotificationToClearingSvc(newIds); + sendNotificationToClearingSvc(newIds, tcr); log.debug("successfully processed, id {}", newIds); return null; @@ -207,6 +210,7 @@ public class TradingClearingRegistryListService extends QueueConsumer implements } TradingClearingRegistryListNewRequest req = userRequest.getRequestPayload(); + TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(req.getTradingClearingRegistryId()); Account account = accountImdg.getSingleObjectByID(req.getAccountId()); Instant now = Instant.now(); @@ -253,7 +257,8 @@ public class TradingClearingRegistryListService extends QueueConsumer implements } - sendNotificationToClearingSvc(id); + + sendNotificationToClearingSvc(id, tcr); log.debug("successfully processed, id {}", id); return null; @@ -292,18 +297,20 @@ public class TradingClearingRegistryListService extends QueueConsumer implements @Deprecated - protected void sendNotificationToClearingSvc(List tradingClearingRegistries) { + protected void sendNotificationToClearingSvc(List tradingClearingRegistries, TradingClearingRegistry tcr) { for (Long tradingClearingRegistryId:tradingClearingRegistries) - sendNotificationToClearingSvc(tradingClearingRegistryId); + sendNotificationToClearingSvc(tradingClearingRegistryId, tcr); } /** * clearing-service сообщение на открытие клиринговых регистров; */ - protected void sendNotificationToClearingSvc(Long tradingClearingRegistryId) { - CreateRegistryByTCRListRequest request = new CreateRegistryByTCRListRequest(); - request.setTradingClearingRegistryListId(tradingClearingRegistryId); - log.debug("Send message to kafka \"{}\": {}", Consts.DESTINATION_TRADING_CLEARING_REGISTRY_ON_TCRLIST_NEW, LogFormatter.toStringWrapper(request)); - kafkaSender.sendRequestToQueue(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_ON_TCRLIST_NEW, request); + protected void sendNotificationToClearingSvc(Long tradingClearingRegistryId, TradingClearingRegistry tcr) { + CreateRegistryRequest request = new CreateRegistryRequest(); + request.setTcrListId(tradingClearingRegistryId); + request.setCompanyId(tcr.getCompanyId()); + request.setTradingClearingRegistryId(tcr.getId()); + log.debug("Send message to kafka \"{}\": {}", Consts.REGISTRY_NEW, LogFormatter.toStringWrapper(request)); + kafkaSender.sendRequestToQueue(Consts.REGISTRY_NEW, request); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java index 4893df23f..921335c7b 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryService.java @@ -21,6 +21,7 @@ import ru.clearing.classes.statics.data.misc.Currency; import ru.clearing.classes.statics.data.payment.PaymentInstruction; 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.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.notification.NotificationSender; @@ -70,8 +71,8 @@ import ru.spcex.platform.imdg.validation.Stored; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IMessageResolver; -import ru.spcex.platform.utils.validation.IValidator; import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD; +import ru.spcex.platform.utils.validation.IValidator; @Service public class RegistryService { @@ -79,6 +80,7 @@ public class RegistryService { private final ImdgProvider imdgProvider; private final Imdg tradingClearingRegistryImdg; + private final Imdg tcrListImdg; private final Imdg registryImdg; private final Imdg accImdg; private final Imdg currImdg; @@ -115,6 +117,7 @@ public class RegistryService { AssetTBFProcessing assets) { this.imdgProvider = imdgProvider; this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); + this.tcrListImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.pmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class); this.accImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); @@ -165,13 +168,36 @@ public class RegistryService { } public void updateRegistryIfNeeded(CreateRegistryRequest requestPayload) { + //RUB зашиты в регистр? TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(requestPayload.getTradingClearingRegistryId()); + var ref = new Object() { + TradingClearingRegistryList tcrList = null; + Currency currency = null; + }; + if (requestPayload.getTcrListId() != null) { + ref.tcrList = tcrListImdg.getSingleObjectByID(requestPayload.getTcrListId()); + if (ref.tcrList == null) { + log.error("TradingClearingRegistryList with id: {} not found", requestPayload.getTcrListId()); + return; + } + ref.currency = currImdg.getFirstObjectByFieldValues( + Map.of("currencyCode", ref.tcrList.getCurrency()) + ); + if (ref.currency == null) { + log.error("currency with currencyCode: {} not found", ref.tcrList.getCurrency()); + return; + } + } if (tcr == null) { log.error("TradingClearingRegistry with id: {} not found", requestPayload.getTradingClearingRegistryId()); return; } log.debug("TCR new event, TCR#id={}", tcr.getId()); - Optional registriesCondition = registsryPredicate(tcr.getCompanyId(), tcr.getMoneyAccountId(), tcr.getDepoAccountId()); + Optional registriesCondition = registsryPredicate(tcr.getCompanyId(), + tcr.getMoneyAccountId(), + tcr.getDepoAccountId(), + ref.tcrList + ); if (registriesCondition.isEmpty()) { log.debug("TCR#id={} couldn't construct registry search condition", tcr.getId()); return; @@ -183,6 +209,10 @@ public class RegistryService { rgs.setTradingClearingRegistryId(tcr.getId()); rgs.setTradingClearingRegistry(tcr.getCode()); rgs.setRegistryCapacity(tcr.getTradingClearingRegistryType()); + if (ref.tcrList != null) { + rgs.setSecurityId(ref.currency.getId()); + rgs.setSecuritySymbol(ref.currency.getCurrencyCode()); + } rgs.setUpdated(Instant.now()); registryImdg.update(rgs); log.trace("TCR#id={} registry#id={} updated", tcr.getId(), rgs.getId()); @@ -201,8 +231,10 @@ public class RegistryService { registries.size(), tcr.getId(), tcr.getMoneyAccountId()); } - Account acc = accImdg.getSingleObjectByID(tcr.getMoneyAccountId()); - Currency currency = currImdg.getFirstObjectBySQL("currencyCode = '%s'".formatted(CurrencyCode.RUB.getKey())); + Account acc = ref.tcrList == null ? accImdg.getSingleObjectByID(tcr.getMoneyAccountId()) + : accImdg.getSingleObjectByID(ref.tcrList.getAccountId()); + Currency currency = ref.tcrList == null ? currImdg.getFirstObjectBySQL("currencyCode = '%s'".formatted(CurrencyCode.RUB.getKey())) + : ref.currency; Company cmp = cmpImdg.getSingleObjectByID(tcr.getCompanyId()); if (acc == null) { @@ -220,7 +252,7 @@ public class RegistryService { log.debug("TCR#id={} account#id={} company#id={}, creating assets", tcr.getId(), acc.getId(), cmp.getId()); AssetTrio assets = this.assets.createMAssets(acc, - CurrencyCode.RUB.getKey(), + currency.getCurrencyCode(), currency.getId(), tcr.getTradingClearingRegistryType(), tcr.getId(), @@ -425,13 +457,21 @@ public class RegistryService { /** * находим все регистры AM__/AS__ по пришедшему ТКР */ - private Optional registsryPredicate(Long companyId, Long moneyAccountId, Long depoAccountId) { + private Optional registsryPredicate(Long companyId, + Long moneyAccountId, + Long depoAccountId, TradingClearingRegistryList tcrList) { ImdgPredicateBuilder prdBldr = registryImdg.predicateBuilder(); Function sql = p -> RegistryCodeSqlBuilder.getInstance(p).build(); Optional moneyPredicate = Optional.ofNullable(moneyAccountId) .map(accId -> sql.apply(RegistryTradingParams.AM__)) .map(prdBldr::sql) - .map(codePredicate -> prdBldr.and(codePredicate, prdBldr.equals("accountId", moneyAccountId))); + .map(codePredicate -> prdBldr.and( + codePredicate, + prdBldr.or( + prdBldr.equals("accountId", moneyAccountId), + tcrList != null ? prdBldr.equals("accountId", tcrList.getAccountId()) : prdBldr.alwaysFalse() + ) + )); Optional depoPredicate = Optional.ofNullable(depoAccountId) .map(accId -> sql.apply(RegistryTradingParams.AS__)) .map(prdBldr::sql) diff --git a/platform-parent/platform-messaging/pom.xml b/platform-parent/platform-messaging/pom.xml index ba9fd1bcb..557e1a9ad 100644 --- a/platform-parent/platform-messaging/pom.xml +++ b/platform-parent/platform-messaging/pom.xml @@ -37,7 +37,6 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 - provided ru.spcex.platform diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/clearing/CreateRegistryRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/clearing/CreateRegistryRequest.java index 51d2517ab..3c4966c97 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/clearing/CreateRegistryRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/clearing/CreateRegistryRequest.java @@ -7,6 +7,16 @@ public class CreateRegistryRequest { private Long companyId; @JsonProperty private Long tradingClearingRegistryId; + @JsonProperty + private Long tcrListId; + + public Long getTcrListId() { + return tcrListId; + } + + public void setTcrListId(Long tcrListId) { + this.tcrListId = tcrListId; + } public Long getCompanyId() { return companyId;