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; + } }