TradingClearingRegistryList -> Registry
This commit is contained in:
parent
d1c9227b58
commit
1ff7fb4b23
4 changed files with 75 additions and 19 deletions
|
|
@ -25,7 +25,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
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.Consts;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryByTCRListRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.clearing.CreateRegistryRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListNewRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListNewRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListUpdateRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryListUpdateRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.serialization.LogFormatter;
|
import ru.spcex.clearing.platform.messaging.serialization.LogFormatter;
|
||||||
|
|
@ -131,6 +131,10 @@ public class TradingClearingRegistryListService extends QueueConsumer implements
|
||||||
}
|
}
|
||||||
|
|
||||||
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, tradingClearingRegistryListNewRequestValidator);
|
requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, tradingClearingRegistryListNewRequestValidator);
|
||||||
|
TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(userRequest
|
||||||
|
.getRequestPayload()
|
||||||
|
.getTradingClearingRegistryId());
|
||||||
|
|
||||||
if (requestInfoUpdate != null) {
|
if (requestInfoUpdate != null) {
|
||||||
return requestInfoUpdate;
|
return requestInfoUpdate;
|
||||||
}
|
}
|
||||||
|
|
@ -165,7 +169,6 @@ public class TradingClearingRegistryListService extends QueueConsumer implements
|
||||||
if (!innerCall) {
|
if (!innerCall) {
|
||||||
// Для каждого счета из списка (currencyAccountList) должна быть создана отдельная запись объекте clientCode с данным счетом для данного клиента, т.е. у одного клиента может быть несколько валютных счетов.
|
// Для каждого счета из списка (currencyAccountList) должна быть создана отдельная запись объекте clientCode с данным счетом для данного клиента, т.е. у одного клиента может быть несколько валютных счетов.
|
||||||
try {
|
try {
|
||||||
TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(req.getTradingClearingRegistryId());
|
|
||||||
ClientCodeNewRequest cCodeReq = new ClientCodeNewRequest();
|
ClientCodeNewRequest cCodeReq = new ClientCodeNewRequest();
|
||||||
cCodeReq.setTradingClearingRegistryId(req.getTradingClearingRegistryId());
|
cCodeReq.setTradingClearingRegistryId(req.getTradingClearingRegistryId());
|
||||||
cCodeReq.setDepoAccountId(tcr.getDepoAccountId());
|
cCodeReq.setDepoAccountId(tcr.getDepoAccountId());
|
||||||
|
|
@ -187,7 +190,7 @@ public class TradingClearingRegistryListService extends QueueConsumer implements
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sendNotificationToClearingSvc(newIds);
|
sendNotificationToClearingSvc(newIds, tcr);
|
||||||
|
|
||||||
log.debug("successfully processed, id {}", newIds);
|
log.debug("successfully processed, id {}", newIds);
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -207,6 +210,7 @@ public class TradingClearingRegistryListService extends QueueConsumer implements
|
||||||
}
|
}
|
||||||
|
|
||||||
TradingClearingRegistryListNewRequest req = userRequest.getRequestPayload();
|
TradingClearingRegistryListNewRequest req = userRequest.getRequestPayload();
|
||||||
|
TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(req.getTradingClearingRegistryId());
|
||||||
Account account = accountImdg.getSingleObjectByID(req.getAccountId());
|
Account account = accountImdg.getSingleObjectByID(req.getAccountId());
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
|
|
||||||
|
|
@ -253,7 +257,8 @@ public class TradingClearingRegistryListService extends QueueConsumer implements
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sendNotificationToClearingSvc(id);
|
|
||||||
|
sendNotificationToClearingSvc(id, tcr);
|
||||||
|
|
||||||
log.debug("successfully processed, id {}", id);
|
log.debug("successfully processed, id {}", id);
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -292,18 +297,20 @@ public class TradingClearingRegistryListService extends QueueConsumer implements
|
||||||
|
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
protected void sendNotificationToClearingSvc(List<Long> tradingClearingRegistries) {
|
protected void sendNotificationToClearingSvc(List<Long> tradingClearingRegistries, TradingClearingRegistry tcr) {
|
||||||
for (Long tradingClearingRegistryId:tradingClearingRegistries)
|
for (Long tradingClearingRegistryId:tradingClearingRegistries)
|
||||||
sendNotificationToClearingSvc(tradingClearingRegistryId);
|
sendNotificationToClearingSvc(tradingClearingRegistryId, tcr);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* clearing-service сообщение на открытие клиринговых регистров;
|
* clearing-service сообщение на открытие клиринговых регистров;
|
||||||
*/
|
*/
|
||||||
protected void sendNotificationToClearingSvc(Long tradingClearingRegistryId) {
|
protected void sendNotificationToClearingSvc(Long tradingClearingRegistryId, TradingClearingRegistry tcr) {
|
||||||
CreateRegistryByTCRListRequest request = new CreateRegistryByTCRListRequest();
|
CreateRegistryRequest request = new CreateRegistryRequest();
|
||||||
request.setTradingClearingRegistryListId(tradingClearingRegistryId);
|
request.setTcrListId(tradingClearingRegistryId);
|
||||||
log.debug("Send message to kafka \"{}\": {}", Consts.DESTINATION_TRADING_CLEARING_REGISTRY_ON_TCRLIST_NEW, LogFormatter.toStringWrapper(request));
|
request.setCompanyId(tcr.getCompanyId());
|
||||||
kafkaSender.sendRequestToQueue(Consts.DESTINATION_TRADING_CLEARING_REGISTRY_ON_TCRLIST_NEW, request);
|
request.setTradingClearingRegistryId(tcr.getId());
|
||||||
|
log.debug("Send message to kafka \"{}\": {}", Consts.REGISTRY_NEW, LogFormatter.toStringWrapper(request));
|
||||||
|
kafkaSender.sendRequestToQueue(Consts.REGISTRY_NEW, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import ru.clearing.classes.statics.data.misc.Currency;
|
||||||
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
|
import ru.clearing.classes.statics.data.payment.PaymentInstruction;
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
|
||||||
import ru.spcex.clearing.error.ClearingError;
|
import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.notification.NotificationSender;
|
import ru.spcex.clearing.notification.NotificationSender;
|
||||||
|
|
@ -70,8 +71,8 @@ import ru.spcex.platform.imdg.validation.Stored;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
|
||||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||||
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class RegistryService {
|
public class RegistryService {
|
||||||
|
|
@ -79,6 +80,7 @@ public class RegistryService {
|
||||||
|
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
private final Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
||||||
|
private final Imdg<TradingClearingRegistryList> tcrListImdg;
|
||||||
private final Imdg<Registry> registryImdg;
|
private final Imdg<Registry> registryImdg;
|
||||||
private final Imdg<Account> accImdg;
|
private final Imdg<Account> accImdg;
|
||||||
private final Imdg<Currency> currImdg;
|
private final Imdg<Currency> currImdg;
|
||||||
|
|
@ -115,6 +117,7 @@ public class RegistryService {
|
||||||
AssetTBFProcessing assets) {
|
AssetTBFProcessing assets) {
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class);
|
||||||
|
this.tcrListImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistryList, TradingClearingRegistryList.class);
|
||||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
this.pmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
this.pmtImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_PaymentInstruction, PaymentInstruction.class);
|
||||||
this.accImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
this.accImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
|
|
@ -165,13 +168,36 @@ public class RegistryService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateRegistryIfNeeded(CreateRegistryRequest requestPayload) {
|
public void updateRegistryIfNeeded(CreateRegistryRequest requestPayload) {
|
||||||
|
//RUB зашиты в регистр?
|
||||||
TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(requestPayload.getTradingClearingRegistryId());
|
TradingClearingRegistry tcr = tradingClearingRegistryImdg.getSingleObjectByID(requestPayload.getTradingClearingRegistryId());
|
||||||
|
var ref = new Object() {
|
||||||
|
TradingClearingRegistryList tcrList = null;
|
||||||
|
Currency currency = null;
|
||||||
|
};
|
||||||
|
if (requestPayload.getTcrListId() != null) {
|
||||||
|
ref.tcrList = tcrListImdg.getSingleObjectByID(requestPayload.getTcrListId());
|
||||||
|
if (ref.tcrList == null) {
|
||||||
|
log.error("TradingClearingRegistryList with id: {} not found", requestPayload.getTcrListId());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ref.currency = currImdg.getFirstObjectByFieldValues(
|
||||||
|
Map.of("currencyCode", ref.tcrList.getCurrency())
|
||||||
|
);
|
||||||
|
if (ref.currency == null) {
|
||||||
|
log.error("currency with currencyCode: {} not found", ref.tcrList.getCurrency());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (tcr == null) {
|
if (tcr == null) {
|
||||||
log.error("TradingClearingRegistry with id: {} not found", requestPayload.getTradingClearingRegistryId());
|
log.error("TradingClearingRegistry with id: {} not found", requestPayload.getTradingClearingRegistryId());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log.debug("TCR new event, TCR#id={}", tcr.getId());
|
log.debug("TCR new event, TCR#id={}", tcr.getId());
|
||||||
Optional<ImdgPredicate> registriesCondition = registsryPredicate(tcr.getCompanyId(), tcr.getMoneyAccountId(), tcr.getDepoAccountId());
|
Optional<ImdgPredicate> registriesCondition = registsryPredicate(tcr.getCompanyId(),
|
||||||
|
tcr.getMoneyAccountId(),
|
||||||
|
tcr.getDepoAccountId(),
|
||||||
|
ref.tcrList
|
||||||
|
);
|
||||||
if (registriesCondition.isEmpty()) {
|
if (registriesCondition.isEmpty()) {
|
||||||
log.debug("TCR#id={} couldn't construct registry search condition", tcr.getId());
|
log.debug("TCR#id={} couldn't construct registry search condition", tcr.getId());
|
||||||
return;
|
return;
|
||||||
|
|
@ -183,6 +209,10 @@ public class RegistryService {
|
||||||
rgs.setTradingClearingRegistryId(tcr.getId());
|
rgs.setTradingClearingRegistryId(tcr.getId());
|
||||||
rgs.setTradingClearingRegistry(tcr.getCode());
|
rgs.setTradingClearingRegistry(tcr.getCode());
|
||||||
rgs.setRegistryCapacity(tcr.getTradingClearingRegistryType());
|
rgs.setRegistryCapacity(tcr.getTradingClearingRegistryType());
|
||||||
|
if (ref.tcrList != null) {
|
||||||
|
rgs.setSecurityId(ref.currency.getId());
|
||||||
|
rgs.setSecuritySymbol(ref.currency.getCurrencyCode());
|
||||||
|
}
|
||||||
rgs.setUpdated(Instant.now());
|
rgs.setUpdated(Instant.now());
|
||||||
registryImdg.update(rgs);
|
registryImdg.update(rgs);
|
||||||
log.trace("TCR#id={} registry#id={} updated", tcr.getId(), rgs.getId());
|
log.trace("TCR#id={} registry#id={} updated", tcr.getId(), rgs.getId());
|
||||||
|
|
@ -201,8 +231,10 @@ public class RegistryService {
|
||||||
registries.size(), tcr.getId(), tcr.getMoneyAccountId());
|
registries.size(), tcr.getId(), tcr.getMoneyAccountId());
|
||||||
}
|
}
|
||||||
|
|
||||||
Account acc = accImdg.getSingleObjectByID(tcr.getMoneyAccountId());
|
Account acc = ref.tcrList == null ? accImdg.getSingleObjectByID(tcr.getMoneyAccountId())
|
||||||
Currency currency = currImdg.getFirstObjectBySQL("currencyCode = '%s'".formatted(CurrencyCode.RUB.getKey()));
|
: accImdg.getSingleObjectByID(ref.tcrList.getAccountId());
|
||||||
|
Currency currency = ref.tcrList == null ? currImdg.getFirstObjectBySQL("currencyCode = '%s'".formatted(CurrencyCode.RUB.getKey()))
|
||||||
|
: ref.currency;
|
||||||
Company cmp = cmpImdg.getSingleObjectByID(tcr.getCompanyId());
|
Company cmp = cmpImdg.getSingleObjectByID(tcr.getCompanyId());
|
||||||
|
|
||||||
if (acc == null) {
|
if (acc == null) {
|
||||||
|
|
@ -220,7 +252,7 @@ public class RegistryService {
|
||||||
log.debug("TCR#id={} account#id={} company#id={}, creating assets", tcr.getId(), acc.getId(), cmp.getId());
|
log.debug("TCR#id={} account#id={} company#id={}, creating assets", tcr.getId(), acc.getId(), cmp.getId());
|
||||||
|
|
||||||
AssetTrio assets = this.assets.createMAssets(acc,
|
AssetTrio assets = this.assets.createMAssets(acc,
|
||||||
CurrencyCode.RUB.getKey(),
|
currency.getCurrencyCode(),
|
||||||
currency.getId(),
|
currency.getId(),
|
||||||
tcr.getTradingClearingRegistryType(),
|
tcr.getTradingClearingRegistryType(),
|
||||||
tcr.getId(),
|
tcr.getId(),
|
||||||
|
|
@ -425,13 +457,21 @@ public class RegistryService {
|
||||||
/**
|
/**
|
||||||
* находим все регистры AM__/AS__ по пришедшему ТКР
|
* находим все регистры AM__/AS__ по пришедшему ТКР
|
||||||
*/
|
*/
|
||||||
private Optional<ImdgPredicate> registsryPredicate(Long companyId, Long moneyAccountId, Long depoAccountId) {
|
private Optional<ImdgPredicate> registsryPredicate(Long companyId,
|
||||||
|
Long moneyAccountId,
|
||||||
|
Long depoAccountId, TradingClearingRegistryList tcrList) {
|
||||||
ImdgPredicateBuilder prdBldr = registryImdg.predicateBuilder();
|
ImdgPredicateBuilder prdBldr = registryImdg.predicateBuilder();
|
||||||
Function<RegistryTradingParams, String> sql = p -> RegistryCodeSqlBuilder.getInstance(p).build();
|
Function<RegistryTradingParams, String> sql = p -> RegistryCodeSqlBuilder.getInstance(p).build();
|
||||||
Optional<ImdgPredicate> moneyPredicate = Optional.ofNullable(moneyAccountId)
|
Optional<ImdgPredicate> moneyPredicate = Optional.ofNullable(moneyAccountId)
|
||||||
.map(accId -> sql.apply(RegistryTradingParams.AM__))
|
.map(accId -> sql.apply(RegistryTradingParams.AM__))
|
||||||
.map(prdBldr::sql)
|
.map(prdBldr::sql)
|
||||||
.map(codePredicate -> prdBldr.and(codePredicate, prdBldr.equals("accountId", moneyAccountId)));
|
.map(codePredicate -> prdBldr.and(
|
||||||
|
codePredicate,
|
||||||
|
prdBldr.or(
|
||||||
|
prdBldr.equals("accountId", moneyAccountId),
|
||||||
|
tcrList != null ? prdBldr.equals("accountId", tcrList.getAccountId()) : prdBldr.alwaysFalse()
|
||||||
|
)
|
||||||
|
));
|
||||||
Optional<ImdgPredicate> depoPredicate = Optional.ofNullable(depoAccountId)
|
Optional<ImdgPredicate> depoPredicate = Optional.ofNullable(depoAccountId)
|
||||||
.map(accId -> sql.apply(RegistryTradingParams.AS__))
|
.map(accId -> sql.apply(RegistryTradingParams.AS__))
|
||||||
.map(prdBldr::sql)
|
.map(prdBldr::sql)
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.platform</groupId>
|
<groupId>ru.spcex.platform</groupId>
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,16 @@ public class CreateRegistryRequest {
|
||||||
private Long companyId;
|
private Long companyId;
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private Long tradingClearingRegistryId;
|
private Long tradingClearingRegistryId;
|
||||||
|
@JsonProperty
|
||||||
|
private Long tcrListId;
|
||||||
|
|
||||||
|
public Long getTcrListId() {
|
||||||
|
return tcrListId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTcrListId(Long tcrListId) {
|
||||||
|
this.tcrListId = tcrListId;
|
||||||
|
}
|
||||||
|
|
||||||
public Long getCompanyId() {
|
public Long getCompanyId() {
|
||||||
return companyId;
|
return companyId;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue