This commit is contained in:
parent
9ed6a75fe5
commit
40978a0017
3 changed files with 98 additions and 33 deletions
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue