akulikov 2023-09-29 18:18:16 +03:00
parent 9ed6a75fe5
commit 40978a0017
3 changed files with 98 additions and 33 deletions

View file

@ -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.register.ExecutionRegister;
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest; 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.registry.ExecutionRegisterOnSaveRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
@ -73,9 +72,13 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ
callback(LauncherCommandRequest.class) callback(LauncherCommandRequest.class)
.setConsumer(this::executionRegisterNew) .setConsumer(this::executionRegisterNew)
.forDestination(createRegistry_ECNR.topic(), callbacks::put); .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(); init();
} }
@ -88,41 +91,14 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ
collectionFond.size(), collectionDeposit.size(), localDateNow); collectionFond.size(), collectionDeposit.size(), localDateNow);
preClearMap.preClearMap(); preClearMap.preClearMap();
collectionFond.forEach(x -> { collectionFond.forEach(x -> {
if (isDuplicateInMap(x).isEmpty()) {
insertExecutionRegister(true, x); insertExecutionRegister(true, x);
}
}); });
collectionDeposit.forEach(x -> { collectionDeposit.forEach(x -> {
if (isDuplicateInMap(x).isPresent()) {
insertExecutionRegister(false, x); insertExecutionRegister(false, x);
}
}); });
log.debug("successfully processed..."); log.debug("successfully processed...");
} }
public void executionRegisterOnSavingOfTrade(BaseRequest<ExecutionRegisterOnSaveRequest> userRequest) {
ExecutionRegisterOnSaveRequest request = userRequest.getRequestPayload();
ExecutionCommon common = setUpExecutionCommon(request);
boolean isFond = request.isExecutionFond();
Optional<ExecutionRegister> 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) { private void insertExecutionRegister(Boolean isFond, ExecutionCommon common) {
log.trace("Started generating ExecutionRegister entity..."); 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()); log.debug("inserted successfully ExecutionRegister entity with id: {}", executionRegister.getId());
} }
// TODO возможно deprecated
public void executionRegisterOnSavingOfTrade(BaseRequest<ExecutionRegisterOnSaveRequest> userRequest) {
ExecutionRegisterOnSaveRequest request = userRequest.getRequestPayload();
ExecutionCommon common = setUpExecutionCommon(request);
boolean isFond = request.isExecutionFond();
Optional<ExecutionRegister> 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) { private ExecutionCommon setUpExecutionCommon(ExecutionRegisterOnSaveRequest request) {
ExecutionFond fond = null; ExecutionFond fond = null;
ExecutionDeposit deposit = null; ExecutionDeposit deposit = null;
@ -297,6 +301,7 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ
return common; return common;
} }
@Deprecated
@Override @Override
public Optional<ExecutionRegister> isDuplicateInMap(ExecutionCommon entity) { public Optional<ExecutionRegister> isDuplicateInMap(ExecutionCommon entity) {
return Optional.empty(); return Optional.empty();

View file

@ -37,6 +37,7 @@ import java.time.ZoneOffset;
import java.util.Collection; import java.util.Collection;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
@ExtendWith(SpringExtension.class) @ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { @ContextConfiguration(classes = {
@ -197,5 +198,62 @@ class ExecutionRegisterServiceTest {
assertEquals(executionRegister.getAmount(), SETTLEMENT_AMOUNT); assertEquals(executionRegister.getAmount(), SETTLEMENT_AMOUNT);
assertEquals(executionRegister.getQuantity(), QUANTITY); assertEquals(executionRegister.getQuantity(), QUANTITY);
assertEquals(executionRegister.getClearingDate(), LocalDate.now()); 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<ExecutionRegister> 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);
} }
} }

View file

@ -1,5 +1,6 @@
package ru.spcex.clearing.platform.messaging.domain.cud.registry; 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.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@ -103,6 +104,7 @@ public class ExecutionRegisterOnSaveRequest {
@JsonProperty @JsonProperty
private Instant exchangeExecutionMicroseconds; private Instant exchangeExecutionMicroseconds;
@JsonIgnore
public boolean isExecutionFond() { public boolean isExecutionFond() {
return exchangeOrderId != null || settlementAmount != null || comment != null || clientCodeId != null || settlementCode != null || settlementDate != null || exchangeExecutionMicroseconds != null; return exchangeOrderId != null || settlementAmount != null || comment != null || clientCodeId != null || settlementCode != null || settlementDate != null || exchangeExecutionMicroseconds != null;
} }