From 2ad79bb683127b99eaa8c8e691c86a74b1a3dd75 Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 4 Jul 2023 19:23:24 +0300 Subject: [PATCH] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-398=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BE=D1=82=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BA=D1=83=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD?= =?UTF-8?q?=D0=B4=D1=8B=20=D0=BD=D0=B0=20clearing-service=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D1=8F=D0=BC=20tcr=20new?= =?UTF-8?q?/tcr=20new=20auto=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=B8=20=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B5=D0=B3?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D1=80=D0=BE=D0=B2=20=D0=BD=D0=B0=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=B7=D0=B5=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D0=A2=D0=9A=D0=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TradingClearingRegistryService.java | 7 +++- .../clearing/service/EventsReceiver.java | 2 +- .../clearing/service/RegistryService.java | 38 +++++++++++++++++++ .../enumeration/RegistryTradingParams.java | 10 +++++ .../cud/clearing/CreateRegistryRequest.java | 10 +++++ 5 files changed, 65 insertions(+), 2 deletions(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryService.java index 584dc9b48..552d6ce69 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/TradingClearingRegistryService.java @@ -31,7 +31,9 @@ import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.clearing.util.services.RequestHelper; import ru.spcex.clearing.validation.common.ValidationHelper; -import ru.spcex.platform.enumeration.*; +import ru.spcex.platform.enumeration.ServiceStatus; +import ru.spcex.platform.enumeration.TradingClearingRegistryPurpose; +import ru.spcex.platform.enumeration.TradingClearingRegistryType; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.IMessageResolver; @@ -265,6 +267,7 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini // sendNotificationToCompanySvc(tradingClearingRegistry); при автосоздании ТКР в company-service не отправлять. // sendNotificationToClearingSvc(tradingClearingRegistry); sendNotificationToReportSvc(tradingClearingRegistry); + sendNotificationToClearingSvc(tradingClearingRegistry); log.debug("successfully processed, id {}", id); return null; @@ -335,6 +338,7 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini log.info("New TCR.id={} was created.", tradingClearingRegistry.getId()); sendNotificationToReportSvc(tradingClearingRegistry); + sendNotificationToClearingSvc(tradingClearingRegistry); log.debug("successfully processed, id {}", id); return null; @@ -455,6 +459,7 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini protected void sendNotificationToClearingSvc(TradingClearingRegistry tradingClearingRegistry) { CreateRegistryRequest request = new CreateRegistryRequest(); request.setCompanyId(tradingClearingRegistry.getCompanyId()); + request.setTradingClearingRegistryId(tradingClearingRegistry.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/EventsReceiver.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java index 89a3a644d..bdb4d84b2 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java @@ -111,7 +111,7 @@ public class EventsReceiver extends QueueConsumer implements InitializingBean { .setConsumer(event -> clearingService.executeSTrade()) .forDestination(S_TRADES_IMPORTED, callbacks::put); callback(CreateRegistryRequest.class) - .setConsumer(event -> registryService.createRegistry(event.getRequestPayload())) + .setConsumer(event -> registryService.updateRegistryIfNeeded(event.getRequestPayload())) .forDestination(Consts.REGISTRY_NEW, callbacks::put); callback(LauncherCommandRequest.class) .setConsumer(event -> registryService.resetBalances()) 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 9955b58ba..15b00c391 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 @@ -10,6 +10,9 @@ import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRe import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; +import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.utils.enumeration.IEnumKey; import java.math.BigDecimal; @@ -58,6 +61,41 @@ public class RegistryService { } + public void updateRegistryIfNeeded(CreateRegistryRequest requestPayload) { + TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(requestPayload.getTradingClearingRegistryId()); + if (tcr == null) { + log.error("TradingClearingRegistry with id: {} not found", requestPayload.getTradingClearingRegistryId()); + return; + } + log.debug("TCR new event, TCR#id={}", tcr.getId()); + Long accountId = tcr.getMoneyAccountId() != null ? tcr.getMoneyAccountId() : tcr.getDepoAccountId(); + Collection registries = findRegistry(tcr.getCompanyId(), accountId); + log.debug("TCR#id={} registries for update found: {}", tcr.getId(), registries.size()); + registries.forEach(rgs -> { + rgs.setTradingClearingRegistryId(tcr.getId()); + rgs.setTradingClearingRegistry(tcr.getCode()); + rgs.setRegistryCapacity(tcr.getTradingClearingRegistryType()); + rgs.setUpdated(Instant.now()); + registryImdg.update(rgs); + }); + } + + /** + * находим все регистры AM__/AS__ по пришедшему ТКР + */ + private Collection findRegistry(Long companyId, Long accountId) { //String account + ImdgPredicateBuilder prdBldr = registryImdg.predicateBuilder(); + String rgsCodeSQL = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.AM__, RegistryTradingParams.AS__).build(); + ImdgPredicate rgsCodeSqlPredicate = prdBldr.and( + prdBldr.sql(rgsCodeSQL), + prdBldr.equals("companyId", companyId), + prdBldr.equals("accountId", accountId), +// prdBldr.equals("account", account), + prdBldr.sql("tradingClearingRegistryId is null") + ); + return registryImdg.getCollectionObjectsByPredicate(rgsCodeSqlPredicate); + } + private RegistryTradingParams createRegistryInfoByType(String type) { TradingClearingRegistryType registryType = IEnumKey.getEnumByKey(TradingClearingRegistryType.class, type); RegistryTradingParams registryInfo = null; diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java index 40e0730dd..8271d2bb6 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/RegistryTradingParams.java @@ -32,6 +32,8 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation, public final static RegistryTradingParams LS_T; public final static RegistryTradingParams L__T; public final static RegistryTradingParams DM__; + public final static RegistryTradingParams AM__; + public final static RegistryTradingParams AS__; static { OS_T = new RegistryTradingParams(RegistryDesignation.O, @@ -107,6 +109,14 @@ public record RegistryTradingParams(RegistryDesignation registryDesignation, RegistryInstrumentType.M, null, null); + AM__ = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.M, + null, + null); + AS__ = new RegistryTradingParams(RegistryDesignation.A, + RegistryInstrumentType.S, + null, + null); } } 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 8b70c72f2..51d2517ab 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 @@ -5,6 +5,8 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class CreateRegistryRequest { @JsonProperty private Long companyId; + @JsonProperty + private Long tradingClearingRegistryId; public Long getCompanyId() { return companyId; @@ -13,4 +15,12 @@ public class CreateRegistryRequest { public void setCompanyId(Long companyId) { this.companyId = companyId; } + + public Long getTradingClearingRegistryId() { + return tradingClearingRegistryId; + } + + public void setTradingClearingRegistryId(Long tradingClearingRegistryId) { + this.tradingClearingRegistryId = tradingClearingRegistryId; + } }