parent
0db6f75823
commit
903fed53b3
1 changed files with 120 additions and 44 deletions
|
|
@ -7,22 +7,37 @@ import org.slf4j.LoggerFactory;
|
|||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
|
||||
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.ExecutionRegisterNewRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.ExecutionRegisterUpdateRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import static ru.spcex.clearing.imdg.IMDGDistributedNames.Map_ExecutionRegister;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
import static ru.spcex.clearing.imdg.IMDGDistributedNames.*;
|
||||
import static ru.spcex.clearing.registry.util.FieldValuesValidator.getFieldValuesOrThrowException;
|
||||
import static ru.spcex.platform.enumeration.Task.createRegistry_LBSR;
|
||||
|
||||
@Service
|
||||
public class ExecutionRegisterService extends QueueConsumer implements InitializingBean {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
||||
private final Imdg<ExecutionRegister> executionRegisterMap;
|
||||
private final Imdg<CompanySymbols> companySymbolsMap;
|
||||
private final Imdg<ExecutionFond> executionFondMap;
|
||||
private final Imdg<ExecutionDeposit> executionDepositMap;
|
||||
private final Imdg<TradingClearingRegistry> tradingClearingRegistryMap;
|
||||
|
||||
|
||||
@Autowired
|
||||
public ExecutionRegisterService(Consumer<String, Object> kafkaQueue,
|
||||
|
|
@ -30,56 +45,117 @@ public class ExecutionRegisterService extends QueueConsumer implements Initializ
|
|||
ImdgProvider imdgProvider) {
|
||||
super(kafkaQueue, kafkaProducer);
|
||||
this.executionRegisterMap = imdgProvider.getImdg(Map_ExecutionRegister, ExecutionRegister.class);
|
||||
this.companySymbolsMap = imdgProvider.getImdg(Map_CompanySymbols, CompanySymbols.class);
|
||||
this.executionFondMap = imdgProvider.getImdg(Map_ExecutionFond, ExecutionFond.class);
|
||||
this.executionDepositMap = imdgProvider.getImdg(Map_ExecutionDeposit, ExecutionDeposit.class);
|
||||
this.tradingClearingRegistryMap = imdgProvider.getImdg(Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
callback(ExecutionRegisterNewRequest.class)
|
||||
callback(LauncherCommandRequest.class)
|
||||
.setConsumer(this::executionRegisterNew)
|
||||
.forDestination(Consts.REGISTRY_EXECUTION_REGISTER_NEW, callbacks::put);
|
||||
callback(ExecutionRegisterUpdateRequest.class)
|
||||
.setConsumer(this::executionRegisterUpdate)
|
||||
.forDestination(Consts.REGISTRY_EXECUTION_REGISTER_UPDATE, callbacks::put);
|
||||
.forDestination(createRegistry_LBSR.topic(), callbacks::put);
|
||||
init();
|
||||
}
|
||||
|
||||
public void executionRegisterNew(BaseRequest<ExecutionRegisterNewRequest> userRequest) {
|
||||
ExecutionRegisterNewRequest req = userRequest.getRequestPayload();
|
||||
public void executionRegisterNew(BaseRequest<LauncherCommandRequest> userRequest) {
|
||||
String localDateNow = LocalDate.now().toString();
|
||||
log.debug("ExecutionRegisterNewRequest received");
|
||||
ExecutionRegister register = new ExecutionRegister();
|
||||
register.setTradingDate(req.getTradingDate());
|
||||
register.setExchangeExecutionId(req.getExchangeExecutionId());
|
||||
register.setExchangeExecutionTime(req.getExchangeExecutionTime());
|
||||
register.setSecurityId(req.getSecurityId());
|
||||
register.setSellerId(req.getSellerId());
|
||||
register.setSellerClearingCode(req.getSellerClearingCode());
|
||||
register.setSellerTradingClearingRegister(req.getSellerTradingClearingRegister());
|
||||
register.setSellerMoneyAccount(req.getSellerMoneyAccount());
|
||||
register.setSellerDepoAccount(req.getSellerDepoAccount());
|
||||
register.setBuyerId(req.getBuyerId());
|
||||
register.setBuyerClearingCode(req.getBuyerClearingCode());
|
||||
register.setBuyerTradingClearingRegister(req.getBuyerTradingClearingRegister());
|
||||
register.setBuyerMoneyAccount(req.getBuyerMoneyAccount());
|
||||
register.setBuyerDepoAccount(req.getBuyerDepoAccount());
|
||||
register.setAmount(req.getAmount());
|
||||
register.setQuantity(req.getQuantity());
|
||||
register.setId(req.getId());
|
||||
register.setCreated(req.getCreatedAt());
|
||||
register.setUpdated(req.getUpdatedAt());
|
||||
register.setClearingDate(req.getClearingDate());
|
||||
executionRegisterMap.insert(register);
|
||||
log.debug("successfully processed, id {}", register.getId());
|
||||
Collection<ExecutionFond> collectionFond = executionFondMap.getCollectionObjectsByFieldValues(Map.of("clearingDate", localDateNow));
|
||||
Collection<ExecutionDeposit> collectionDeposit = executionDepositMap.getCollectionObjectsByFieldValues(Map.of("clearingDate", localDateNow));
|
||||
collectionFond.forEach(x -> insertExecutionRegister(true, x));
|
||||
collectionDeposit.forEach(x -> insertExecutionRegister(false, x));
|
||||
log.debug("successfully processed...");
|
||||
}
|
||||
|
||||
public void executionRegisterUpdate(BaseRequest<ExecutionRegisterUpdateRequest> userRequest) {
|
||||
ExecutionRegisterUpdateRequest req = userRequest.getRequestPayload();
|
||||
log.debug("ExecutionRegisterUpdateRequest received");
|
||||
ExecutionRegister register = executionRegisterMap.getSingleObjectByID(req.getId());
|
||||
register.setSecurityId(req.getSecurityId());
|
||||
register.setExchangeExecutionTime(req.getExchangeExecutionTime());
|
||||
register.setQuantity(req.getQuantity());
|
||||
register.setAmount(req.getAmount());
|
||||
executionRegisterMap.update(register);
|
||||
log.debug("successfully processed, id {}", register.getId());
|
||||
|
||||
private void insertExecutionRegister(Boolean isFond, ExecutionCommon common) {
|
||||
log.trace("Started generating ExecutionRegister entity...");
|
||||
ExecutionRegister executionRegister = new ExecutionRegister();
|
||||
executionRegister.setTradingDate(common.getTradingDate());
|
||||
executionRegister.setExchangeExecutionId(common.getExchangeExecutionId());
|
||||
executionRegister.setExchangeExecutionTime(common.getExchangeExecutionTime());
|
||||
executionRegister.setSecurityId(common.getSecurityId());
|
||||
executionRegister.setSellerId(common.getCompanyId());
|
||||
executionRegister.setSellerClearingCode(getSellerClearingCode(common));
|
||||
executionRegister.setSellerTradingClearingRegister(getSellerTradingClearingRegister(common));
|
||||
executionRegister.setSellerMoneyAccount(getSellerMoneyAccount(common));
|
||||
executionRegister.setSellerDepoAccount(getSellerDepoAccount(common));
|
||||
executionRegister.setBuyerId(common.getCompanyId());
|
||||
executionRegister.setBuyerClearingCode(getBuyerClearingCode(common));
|
||||
executionRegister.setBuyerTradingClearingRegister(getBuyerTradingClearingRegister(common));
|
||||
executionRegister.setBuyerMoneyAccount(getBuyerMoneyAccount(common));
|
||||
executionRegister.setBuyerDepoAccount(getBuyerDepoAccount(common));
|
||||
if (isFond) {
|
||||
executionRegister.setQuantity(common.getQuantity());
|
||||
executionRegister.setAmount(((ExecutionFond) common).getSettlementAmount());
|
||||
} else {
|
||||
executionRegister.setAmount(((ExecutionDeposit) common).getFirstLegAmount());
|
||||
}
|
||||
executionRegister.setClearingDate(common.getClearingDate());
|
||||
executionRegister.setCreated(Instant.now());
|
||||
executionRegisterMap.insert(executionRegister);
|
||||
log.debug("inserted successfully LiabilitiesRegister entity with id: {}", executionRegister.getId());
|
||||
}
|
||||
|
||||
private String getSellerClearingCode(ExecutionCommon common) {
|
||||
Map<String, ? extends Comparable<?>> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ?
|
||||
Map.of("companySymbol", "CLRC", "companyId", common.getCounterPartyId()) :
|
||||
Map.of("companySymbol", "CLRC", "companyId", common.getCompanyId()));
|
||||
CompanySymbols companySymbols = companySymbolsMap.getSingleObjectByFieldValues(fieldValues);
|
||||
return companySymbols != null ? companySymbols.getCompanySymbolValue() : null;
|
||||
}
|
||||
|
||||
private String getSellerTradingClearingRegister(ExecutionCommon common) {
|
||||
Map<String, ? extends Comparable<?>> fieldValues = getFieldValuesOrThrowException(Map.of("companyId", common.getCounterPartyId()));
|
||||
TradingClearingRegistry tradingClearingRegistryForSellerTradingClearingRegister = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues);
|
||||
return common.getSide().equalsIgnoreCase("BUY") ? tradingClearingRegistryForSellerTradingClearingRegister.getCode() : String.valueOf(common.getTradingClearingRegistryId());
|
||||
}
|
||||
|
||||
private String getSellerMoneyAccount(ExecutionCommon common) {
|
||||
Map<String, ? extends Comparable<?>> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ?
|
||||
Map.of("code", common.getCounterPartyId()) :
|
||||
Map.of("code", common.getCompanyId()));
|
||||
TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues);
|
||||
return tradingClearingRegistry != null ? tradingClearingRegistry.getMoneyAccountId().toString() : null;
|
||||
}
|
||||
|
||||
private String getSellerDepoAccount(ExecutionCommon common) {
|
||||
Map<String, ? extends Comparable<?>> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ?
|
||||
Map.of("code", common.getCounterPartyId()) :
|
||||
Map.of("code", common.getCompanyId()));
|
||||
TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues);
|
||||
return tradingClearingRegistry != null ? tradingClearingRegistry.getDepoAccountId().toString() : null;
|
||||
}
|
||||
|
||||
private String getBuyerClearingCode(ExecutionCommon common) {
|
||||
Map<String, ? extends Comparable<?>> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ?
|
||||
Map.of("companySymbol", "CLRC", "companyId", common.getCompanyId()) :
|
||||
Map.of("companySymbol", "CLRC", "companyId", common.getCounterPartyId()));
|
||||
CompanySymbols companySymbols = companySymbolsMap.getSingleObjectByFieldValues(fieldValues);
|
||||
return companySymbols != null ? companySymbols.getCompanySymbolValue() : null;
|
||||
}
|
||||
|
||||
private String getBuyerTradingClearingRegister(ExecutionCommon common) {
|
||||
Map<String, ? extends Comparable<?>> fieldValues = getFieldValuesOrThrowException(Map.of("companyId", common.getCounterPartyId()));
|
||||
TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues);
|
||||
return common.getSide().equalsIgnoreCase("BUY") ? common.getTradingClearingRegistryId().toString() : tradingClearingRegistry.getId().toString();
|
||||
}
|
||||
|
||||
private String getBuyerMoneyAccount(ExecutionCommon common) {
|
||||
Map<String, ? extends Comparable<?>> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ?
|
||||
Map.of("code", common.getCompanyId()) :
|
||||
Map.of("code", common.getCounterPartyId()));
|
||||
TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues);
|
||||
return tradingClearingRegistry != null ? tradingClearingRegistry.getMoneyAccountId().toString() : null;
|
||||
}
|
||||
|
||||
private String getBuyerDepoAccount(ExecutionCommon common) {
|
||||
Map<String, ? extends Comparable<?>> fieldValues = getFieldValuesOrThrowException(common.getSide().equalsIgnoreCase("BUY") ?
|
||||
Map.of("code", common.getCompanyId()) :
|
||||
Map.of("code", common.getCounterPartyId()));
|
||||
TradingClearingRegistry tradingClearingRegistry = tradingClearingRegistryMap.getSingleObjectByFieldValues(fieldValues);
|
||||
return tradingClearingRegistry != null ? tradingClearingRegistry.getDepoAccountId().toString() : null;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue