From 40978a0017fdb9a0e444c90ca817e94312f85ccc Mon Sep 17 00:00:00 2001 From: akulikov Date: Fri, 29 Sep 2023 18:18:16 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/CLS-280 --- .../service/ExecutionRegisterService.java | 71 ++++++++++--------- .../service/ExecutionRegisterServiceTest.java | 58 +++++++++++++++ .../ExecutionRegisterOnSaveRequest.java | 2 + 3 files changed, 98 insertions(+), 33 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 9697e48fc..92451a125 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 @@ -15,7 +15,6 @@ 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.ExecutionRegisterOnSaveRequest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; @@ -73,9 +72,13 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ callback(LauncherCommandRequest.class) .setConsumer(this::executionRegisterNew) .forDestination(createRegistry_ECNR.topic(), callbacks::put); - callback(ExecutionRegisterOnSaveRequest.class) - .setConsumer(this::executionRegisterOnSavingOfTrade) - .forDestination(Consts.REGISTRY_EXECUTION_REGISTER_ON_SAVE, callbacks::put); + + + // TODO возможно deprecated +// callback(ExecutionRegisterOnSaveRequest.class) +// .setConsumer(this::executionRegisterOnSavingOfTrade) +// .forDestination(Consts.REGISTRY_EXECUTION_REGISTER_ON_SAVE, callbacks::put); + init(); } @@ -88,41 +91,14 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ collectionFond.size(), collectionDeposit.size(), localDateNow); preClearMap.preClearMap(); collectionFond.forEach(x -> { - if (isDuplicateInMap(x).isEmpty()) { - insertExecutionRegister(true, x); - } + insertExecutionRegister(true, x); }); collectionDeposit.forEach(x -> { - if (isDuplicateInMap(x).isPresent()) { - insertExecutionRegister(false, x); - } + insertExecutionRegister(false, x); }); log.debug("successfully processed..."); } - public void executionRegisterOnSavingOfTrade(BaseRequest userRequest) { - ExecutionRegisterOnSaveRequest request = userRequest.getRequestPayload(); - ExecutionCommon common = setUpExecutionCommon(request); - boolean isFond = request.isExecutionFond(); - Optional optionalDuplicate = isDuplicateInMap(common); - if (optionalDuplicate.isEmpty()) { - insertExecutionRegister(isFond, common); - } else { - updateExecutionRegister(isFond, common, optionalDuplicate.get()); - } - } - - private void updateExecutionRegister(boolean isFond, ExecutionCommon common, ExecutionRegister registerToUpdate) { - log.trace("Started updating ExecutionRegister entity..."); - registerToUpdate.setSecurityId(common.getSecurityId()); - registerToUpdate.setExchangeExecutionTime(common.getExchangeExecutionTime()); - registerToUpdate.setAmount(isFond ? ((ExecutionFond) common).getSettlementAmount() : ((ExecutionDeposit) common).getFirstLegAmount()); - registerToUpdate.setQuantity(isFond ? common.getQuantity() : null); - registerToUpdate.setUpdated(Instant.now()); - executionRegisterMap.update(registerToUpdate); - log.debug("Updated successfully ExecutionRegister entity with id: {}", registerToUpdate.getId()); - } - private void insertExecutionRegister(Boolean isFond, ExecutionCommon common) { log.trace("Started generating ExecutionRegister entity..."); @@ -249,6 +225,34 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ log.debug("inserted successfully ExecutionRegister entity with id: {}", executionRegister.getId()); } + + // TODO возможно deprecated + public void executionRegisterOnSavingOfTrade(BaseRequest userRequest) { + ExecutionRegisterOnSaveRequest request = userRequest.getRequestPayload(); + ExecutionCommon common = setUpExecutionCommon(request); + boolean isFond = request.isExecutionFond(); + Optional optionalDuplicate = isDuplicateInMap(common); + if (optionalDuplicate.isEmpty()) { + insertExecutionRegister(isFond, common); + } else { + updateExecutionRegister(isFond, common, optionalDuplicate.get()); + } + } + + // TODO возможно deprecated + private void updateExecutionRegister(boolean isFond, ExecutionCommon common, ExecutionRegister registerToUpdate) { + log.trace("Started updating ExecutionRegister entity..."); + registerToUpdate.setSecurityId(common.getSecurityId()); + registerToUpdate.setExchangeExecutionTime(common.getExchangeExecutionTime()); + registerToUpdate.setAmount(isFond ? ((ExecutionFond) common).getSettlementAmount() : ((ExecutionDeposit) common).getFirstLegAmount()); + registerToUpdate.setQuantity(isFond ? common.getQuantity() : null); + registerToUpdate.setUpdated(Instant.now()); + executionRegisterMap.update(registerToUpdate); + log.debug("Updated successfully ExecutionRegister entity with id: {}", registerToUpdate.getId()); + } + + + // todo возможно deprecated private ExecutionCommon setUpExecutionCommon(ExecutionRegisterOnSaveRequest request) { ExecutionFond fond = null; ExecutionDeposit deposit = null; @@ -297,6 +301,7 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ return common; } + @Deprecated @Override public Optional isDuplicateInMap(ExecutionCommon entity) { return Optional.empty(); diff --git a/clearing-parent/registry-service/src/test/java/ru/spcex/clearing/registry/service/ExecutionRegisterServiceTest.java b/clearing-parent/registry-service/src/test/java/ru/spcex/clearing/registry/service/ExecutionRegisterServiceTest.java index fabe878ea..422ebbbf0 100644 --- a/clearing-parent/registry-service/src/test/java/ru/spcex/clearing/registry/service/ExecutionRegisterServiceTest.java +++ b/clearing-parent/registry-service/src/test/java/ru/spcex/clearing/registry/service/ExecutionRegisterServiceTest.java @@ -37,6 +37,7 @@ import java.time.ZoneOffset; import java.util.Collection; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { @@ -197,5 +198,62 @@ class ExecutionRegisterServiceTest { assertEquals(executionRegister.getAmount(), SETTLEMENT_AMOUNT); assertEquals(executionRegister.getQuantity(), QUANTITY); assertEquals(executionRegister.getClearingDate(), LocalDate.now()); + + executionFondImdg.delete(executionFond); + } + + @Test + @Order(2) + void executionRegisterNewFromRequest() { + ExecutionDeposit executionDeposit = new ExecutionDeposit(); + executionDeposit.setClearingDate(LocalDate.now()); + executionDeposit.setTradingDate(TRADING_DATE); + executionDeposit.setExchangeExecutionId(EXCHANGE_EXECUTION_ID); + executionDeposit.setExchangeExecutionTime(EXCHANGE_EXECUTION_TIME); + executionDeposit.setSecurityId(SECURITY_ID); + executionDeposit.setFirstLegAmount(SETTLEMENT_AMOUNT); + executionDeposit.setQuantity(QUANTITY); + executionDeposit.setCounterPartyTradingClearingRegistryId(TKR_FOR_COUNTER_PARTY_TKR_ID); + executionDeposit.setTradingClearingRegistryId(TKR_FOR_TKR_ID); + executionDeposit.setCompanyId(COMPANY_ID); + executionDeposit.setCounterPartyId(COUNTER_PARTY_ID); + executionDeposit.setSide(Side.SELL.getKey()); + executionDeposit.setCounterPartyTradingClearingRegistry(COUNTER_PARTY_TKR); + executionDeposit.setPartyTradingClearingRegistry(PARTY_TKR); + executionDepositImdg.insert(executionDeposit); + + LauncherCommandRequest launcherCommandRequest = new LauncherCommandRequest(); + + String jsonString = TestUtils.getJsonStringForSystem(launcherCommandRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) executionRegisterService.getConsumer(), + Task.createRegistry_ECNR.topic(), + requestCount++, + 0, + jsonString); + + TestUtils.waitingSendAndCheckRecord(0L, producer); + + Collection allValues = executionRegisterImdg.getAllValues(); + ExecutionRegister executionRegister = allValues.iterator().next(); + assertEquals(executionRegister.getTradingDate(), TRADING_DATE); + assertEquals(executionRegister.getExchangeExecutionId(), EXCHANGE_EXECUTION_ID); + assertEquals(executionRegister.getExchangeExecutionTime(), EXCHANGE_EXECUTION_TIME); + assertEquals(executionRegister.getSecurityId(), SECURITY_ID); + assertEquals(executionRegister.getSellerId(), COMPANY_ID); + assertEquals(executionRegister.getSellerClearingCode(), COMPANY_SYMBOL_VALUE_FOR_COMPANY_ID); + assertEquals(executionRegister.getSellerTradingClearingRegister(), PARTY_TKR); + assertEquals(executionRegister.getSellerMoneyAccount(), MONEY_ACCOUNT_FOR_TKR); + assertEquals(executionRegister.getSellerDepoAccount(), DEPO_ACCOUNT_FOR_TKR); + assertEquals(executionRegister.getBuyerId(), COUNTER_PARTY_ID); + assertEquals(executionRegister.getBuyerClearingCode(), COMPANY_SYMBOL_VALUE_FOR_COUNTER_PARTY_ID); + assertEquals(executionRegister.getBuyerTradingClearingRegister(), COUNTER_PARTY_TKR); + assertEquals(executionRegister.getBuyerMoneyAccount(), MONEY_ACCOUNT_FOR_COUNTER_PARTY_TKR); + assertEquals(executionRegister.getBuyerDepoAccount(), DEPO_ACCOUNT_FOR_COUNTER_PARTY_TKR); + assertEquals(executionRegister.getAmount(), SETTLEMENT_AMOUNT); + assertNull(executionRegister.getQuantity()); + assertEquals(executionRegister.getClearingDate(), LocalDate.now()); + + executionDepositImdg.delete(executionDeposit); } } \ No newline at end of file diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/ExecutionRegisterOnSaveRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/ExecutionRegisterOnSaveRequest.java index cb7c80222..46650b5ff 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/ExecutionRegisterOnSaveRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/registry/ExecutionRegisterOnSaveRequest.java @@ -1,5 +1,6 @@ package ru.spcex.clearing.platform.messaging.domain.cud.registry; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; @@ -103,6 +104,7 @@ public class ExecutionRegisterOnSaveRequest { @JsonProperty private Instant exchangeExecutionMicroseconds; + @JsonIgnore public boolean isExecutionFond() { return exchangeOrderId != null || settlementAmount != null || comment != null || clientCodeId != null || settlementCode != null || settlementDate != null || exchangeExecutionMicroseconds != null; }