добавил отправку команды на clearing-service по событиям tcr new/tcr new auto
добавил поиск и обновление регистров на базе созданных ТКР
This commit is contained in:
ialbert 2023-07-04 19:23:24 +03:00
parent be55af4c5f
commit 2ad79bb683
5 changed files with 65 additions and 2 deletions

View file

@ -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);
}

View file

@ -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())

View file

@ -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<Registry> 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<Registry> 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;

View file

@ -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);
}
}

View file

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