Merge branch 'dev' into spring-state-machine-template
# Conflicts: # clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/EventsReceiver.java
This commit is contained in:
commit
7b32872920
236 changed files with 19466 additions and 23834 deletions
|
|
@ -26,6 +26,7 @@ preflight:
|
||||||
only:
|
only:
|
||||||
- dev
|
- dev
|
||||||
- /^dev_.*$/
|
- /^dev_.*$/
|
||||||
|
- new
|
||||||
resource_group: clearing-test
|
resource_group: clearing-test
|
||||||
|
|
||||||
build:
|
build:
|
||||||
|
|
@ -41,6 +42,7 @@ build:
|
||||||
only:
|
only:
|
||||||
- dev
|
- dev
|
||||||
- /^dev_.*$/
|
- /^dev_.*$/
|
||||||
|
- new
|
||||||
resource_group: clearing-test
|
resource_group: clearing-test
|
||||||
|
|
||||||
test:
|
test:
|
||||||
|
|
@ -52,7 +54,7 @@ test:
|
||||||
script:
|
script:
|
||||||
- echo "Installing maven and python" && apk update && apk add maven python3
|
- echo "Installing maven and python" && apk update && apk add maven python3
|
||||||
- echo "Copying jar files to clearing-all/bin" && cp -r /builds/mfd/clearing/z-distr/target/clearing/bin ./clr_test/clearing-all/bin
|
- echo "Copying jar files to clearing-all/bin" && cp -r /builds/mfd/clearing/z-distr/target/clearing/bin ./clr_test/clearing-all/bin
|
||||||
- echo "Copying DDL.sql to db directory" && cp /builds/mfd/clearing/z-distr/target/clearing/db/DDL.sql ./db
|
- echo "Copying DDL.sql to db directory" && cp /builds/mfd/clearing/z-distr/target/clearing/db/DDL.sql ./clr_test/db/
|
||||||
- python3 clr_test/run_test_docker_containers.py
|
- python3 clr_test/run_test_docker_containers.py
|
||||||
artifacts:
|
artifacts:
|
||||||
expire_in: 1 day
|
expire_in: 1 day
|
||||||
|
|
@ -62,4 +64,5 @@ test:
|
||||||
only:
|
only:
|
||||||
- dev
|
- dev
|
||||||
- /^dev_.*$/
|
- /^dev_.*$/
|
||||||
|
- new
|
||||||
resource_group: clearing-test
|
resource_group: clearing-test
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.spcex.clearing.account.config.settings;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.context.annotation.PropertySource;
|
import org.springframework.context.annotation.PropertySource;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.spcex.clearing.account.config.settings.elem.AppSettings;
|
||||||
import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings;
|
import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings;
|
||||||
import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
|
import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
|
import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams;
|
||||||
|
|
@ -14,6 +15,7 @@ public class AccountServiceSettings {
|
||||||
private HazelcastClientParams hazelcast;
|
private HazelcastClientParams hazelcast;
|
||||||
private KafkaConsumerSettings kafkaConsumer;
|
private KafkaConsumerSettings kafkaConsumer;
|
||||||
private KafkaProducerSettings kafkaProducer;
|
private KafkaProducerSettings kafkaProducer;
|
||||||
|
private AppSettings app;
|
||||||
|
|
||||||
public HazelcastClientParams getHazelcast() {
|
public HazelcastClientParams getHazelcast() {
|
||||||
return hazelcast;
|
return hazelcast;
|
||||||
|
|
@ -38,4 +40,12 @@ public class AccountServiceSettings {
|
||||||
public void setKafkaProducer(KafkaProducerSettings kafkaProducer) {
|
public void setKafkaProducer(KafkaProducerSettings kafkaProducer) {
|
||||||
this.kafkaProducer = kafkaProducer;
|
this.kafkaProducer = kafkaProducer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AppSettings getApp() {
|
||||||
|
return app;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setApp(AppSettings app) {
|
||||||
|
this.app = app;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
package ru.spcex.clearing.account.config.settings.elem;
|
||||||
|
|
||||||
|
public class AppSettings {
|
||||||
|
private String registryUnit = "T";
|
||||||
|
|
||||||
|
public String getRegistryUnit() {
|
||||||
|
return registryUnit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRegistryUnit(String registryUnit) {
|
||||||
|
this.registryUnit = registryUnit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@ import java.time.Instant;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.kafka.clients.consumer.Consumer;
|
import org.apache.kafka.clients.consumer.Consumer;
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
|
@ -42,6 +43,8 @@ import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.ImdgTransaction;
|
import ru.spcex.platform.imdg.api.ImdgTransaction;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
import ru.spcex.platform.imdg.validation.Stored;
|
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.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
|
@ -145,9 +148,29 @@ public class AccountService extends QueueConsumer implements InitializingBean {
|
||||||
account.setCompanyId(req.getCompanyId());
|
account.setCompanyId(req.getCompanyId());
|
||||||
account.setAccount(req.getAccount());
|
account.setAccount(req.getAccount());
|
||||||
if (AccountType.Info.equalsByKey(req.getAccountType())) {
|
if (AccountType.Info.equalsByKey(req.getAccountType())) {
|
||||||
Long infoSequenceId = informationAccountService.accountNextId(currencyCode, currencyCodeId);
|
Account anltAccount;
|
||||||
|
{
|
||||||
|
ImdgPredicateBuilder pb = accountMap.predicateBuilder();
|
||||||
|
ImdgPredicate andPredicate = pb.and(
|
||||||
|
pb.equals("accountType", AccountType.Anlt.getKey()),
|
||||||
|
pb.equals("currency", currency.getCurrencyCode())
|
||||||
|
);
|
||||||
|
Collection<Account> accountsAnlt = accountMap.getCollectionObjectsByPredicate(andPredicate);
|
||||||
|
if (accountsAnlt.isEmpty()) {
|
||||||
|
log.warn("Account with {} not exist.", andPredicate);
|
||||||
|
} else if (accountsAnlt.size() > 1) {
|
||||||
|
log.warn("Account for companyId 1 and accountType=ANLT contains multiply elements, use first");
|
||||||
|
}
|
||||||
|
anltAccount = accountsAnlt.iterator().next();
|
||||||
|
}
|
||||||
|
|
||||||
String accountValue = informationAccountService.generateInfoAccount(currencyCodeId, infoSequenceId);
|
String specialAnltAccId = "7000";
|
||||||
|
if (anltAccount != null && StringUtils.isNotEmpty(anltAccount.getAccount()) && anltAccount.getAccount().length() >= 4) {
|
||||||
|
specialAnltAccId = anltAccount.getAccount().substring(anltAccount.getAccount().length() - 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
Long infoSequenceId = informationAccountService.accountNextId(currencyCode, currencyCodeId);
|
||||||
|
String accountValue = informationAccountService.generateInfoAccount(currencyCodeId, infoSequenceId, specialAnltAccId);
|
||||||
log.trace("New info-account SequenceId={} account={}", infoSequenceId, accountValue);
|
log.trace("New info-account SequenceId={} account={}", infoSequenceId, accountValue);
|
||||||
account.setAccount(accountValue);
|
account.setAccount(accountValue);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -793,7 +793,7 @@ public class ClearingAccountService extends QueueConsumer implements Initializin
|
||||||
}
|
}
|
||||||
if (returnTrigger) {
|
if (returnTrigger) {
|
||||||
log.debug("Remove from waiting list accountId={} (list groupId={})", accountId, inWaitingLst.getGroupId());
|
log.debug("Remove from waiting list accountId={} (list groupId={})", accountId, inWaitingLst.getGroupId());
|
||||||
waitingList.remove(inWaitingLst);
|
waitingList.remove(accountId);
|
||||||
}
|
}
|
||||||
if (returnTrigger)
|
if (returnTrigger)
|
||||||
return inWaitingLst;
|
return inWaitingLst;
|
||||||
|
|
|
||||||
|
|
@ -119,9 +119,6 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
String currency = req.getCurrency() == null ? CurrencyCode.RUB.getKey() : req.getCurrency(); //userRequest.getRequestPayload().getCurrency();
|
String currency = req.getCurrency() == null ? CurrencyCode.RUB.getKey() : req.getCurrency(); //userRequest.getRequestPayload().getCurrency();
|
||||||
|
|
||||||
Long newId = informationAccountImdg.nextIDSequenceFor();
|
Long newId = informationAccountImdg.nextIDSequenceFor();
|
||||||
Long infoSequenceId = accountNextId(currency, 810L);
|
|
||||||
String accountValue = generateInfoAccount(810L, infoSequenceId);
|
|
||||||
log.trace("New info-account id={}, sequenceId={}, account={}", newId, infoSequenceId, accountValue);
|
|
||||||
|
|
||||||
ImdgPredicateBuilder accountPredicateBuilder = accountImdg.predicateBuilder();
|
ImdgPredicateBuilder accountPredicateBuilder = accountImdg.predicateBuilder();
|
||||||
ImdgPredicate companyIdPredicate = accountPredicateBuilder.equals("companyId", 1L);
|
ImdgPredicate companyIdPredicate = accountPredicateBuilder.equals("companyId", 1L);
|
||||||
|
|
@ -215,15 +212,11 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
String currency = userRequest.getRequestPayload().getCurrency();
|
String currency = userRequest.getRequestPayload().getCurrency();
|
||||||
if (currency == null)
|
if (currency == null)
|
||||||
currency = CurrencyCode.RUB.getKey();
|
currency = CurrencyCode.RUB.getKey();
|
||||||
Long newId = informationAccountImdg.nextIDSequenceFor();
|
|
||||||
Long infoSequenceId = accountNextId(currency, 810L); // требуется последовательность n+1
|
|
||||||
String accountValue = generateInfoAccount(810L, infoSequenceId);
|
|
||||||
log.trace("New info-account id={}, sequenceId={}, account={}", newId, infoSequenceId, accountValue);
|
|
||||||
|
|
||||||
Long anltAccountId = null;
|
Long anltAccountId = null;
|
||||||
|
Account anltAccount;
|
||||||
{
|
{
|
||||||
ImdgPredicate andPredicate = pb.and(
|
ImdgPredicate andPredicate = pb.and(
|
||||||
pb.equals("companyId", 1L),
|
|
||||||
pb.equals("accountType", AccountType.Anlt.getKey()),
|
pb.equals("accountType", AccountType.Anlt.getKey()),
|
||||||
pb.equals("currency", currency)
|
pb.equals("currency", currency)
|
||||||
);
|
);
|
||||||
|
|
@ -234,10 +227,20 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
} else if (accountsAnlt.size() > 1) {
|
} else if (accountsAnlt.size() > 1) {
|
||||||
log.warn("Account for companyId 1 and accountType=ANLT contains multiply elements, use first");
|
log.warn("Account for companyId 1 and accountType=ANLT contains multiply elements, use first");
|
||||||
}
|
}
|
||||||
Account anltAccount = accountsAnlt.iterator().next();
|
anltAccount = accountsAnlt.iterator().next();
|
||||||
anltAccountId = anltAccount.getId();
|
anltAccountId = anltAccount.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
String specialAnltAccId = "7000";
|
||||||
|
if (anltAccount != null && StringUtils.isNotEmpty(anltAccount.getAccount()) && anltAccount.getAccount().length() >= 4) {
|
||||||
|
specialAnltAccId = anltAccount.getAccount().substring(anltAccount.getAccount().length() - 4);
|
||||||
|
}
|
||||||
|
Long newId = informationAccountImdg.nextIDSequenceFor();
|
||||||
|
Long infoSequenceId = accountNextId(currency, 810L); // требуется последовательность n+1
|
||||||
|
String accountValue = generateInfoAccount(810L, infoSequenceId, specialAnltAccId);
|
||||||
|
log.trace("New info-account id={}, sequenceId={}, account={}", newId, infoSequenceId, accountValue);
|
||||||
|
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
Account account = new Account();
|
Account account = new Account();
|
||||||
account.setAccount(accountValue);
|
account.setAccount(accountValue);
|
||||||
|
|
@ -301,8 +304,8 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
kafkaSender.sendRequestToQueue(Consts.CREATE_NOTIFICATION_NCMP, request);
|
kafkaSender.sendRequestToQueue(Consts.CREATE_NOTIFICATION_NCMP, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String generateInfoAccount(Long currencyCodeId, Long id) {
|
public String generateInfoAccount(Long currencyCodeId, Long id, String specialAnltAccId) {
|
||||||
return "%d%03d%08d%d".formatted(39911, currencyCodeId, id, 7000);
|
return "%d%03d%08d%s".formatted(39911, currencyCodeId, id, specialAnltAccId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized Long accountNextId(String currency) {
|
public synchronized Long accountNextId(String currency) {
|
||||||
|
|
@ -339,7 +342,7 @@ public class InformationAccountService extends QueueConsumer implements Initiali
|
||||||
infoCounter = new AtomicLong(1);
|
infoCounter = new AtomicLong(1);
|
||||||
log.debug("No account information on map. n={}", infoCounter.get());
|
log.debug("No account information on map. n={}", infoCounter.get());
|
||||||
} else {
|
} else {
|
||||||
Pattern accPattern = Pattern.compile("39911%s([0-9]{8})7000".formatted(idWithTrailingZero));
|
Pattern accPattern = Pattern.compile("39911%s([0-9]{8})\\d{4}".formatted(idWithTrailingZero));
|
||||||
int maxN = 1;
|
int maxN = 1;
|
||||||
int parsedCount = 0;
|
int parsedCount = 0;
|
||||||
String lastAccount = null; // for debug
|
String lastAccount = null; // for debug
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||||
import ru.clearing.classes.statics.data.company.relation.Relation;
|
import ru.clearing.classes.statics.data.company.relation.Relation;
|
||||||
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.clearing.classes.statics.data.registry.TradingClearingRegistryList;
|
||||||
|
import ru.spcex.clearing.account.config.settings.AccountServiceSettings;
|
||||||
import ru.spcex.clearing.account.errors.AccountError;
|
import ru.spcex.clearing.account.errors.AccountError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
|
|
@ -93,6 +94,7 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini
|
||||||
private final IMessageResolver messageResolver;
|
private final IMessageResolver messageResolver;
|
||||||
private final Producer<String, Object> kafkaProducer;
|
private final Producer<String, Object> kafkaProducer;
|
||||||
private final KafkaSender kafkaSender;
|
private final KafkaSender kafkaSender;
|
||||||
|
private final AccountServiceSettings accountServiceSettings;
|
||||||
|
|
||||||
public TradingClearingRegistryService(Consumer<String, Object> kafkaQueue,
|
public TradingClearingRegistryService(Consumer<String, Object> kafkaQueue,
|
||||||
Producer<String, Object> kafkaProducer,
|
Producer<String, Object> kafkaProducer,
|
||||||
|
|
@ -107,7 +109,7 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini
|
||||||
@Qualifier("tradingClearingRegistryUpdateRequest")
|
@Qualifier("tradingClearingRegistryUpdateRequest")
|
||||||
Function<TradingClearingRegistryUpdateRequest, IValidator> tradingClearingRegistryUpdateRequestValidator,
|
Function<TradingClearingRegistryUpdateRequest, IValidator> tradingClearingRegistryUpdateRequestValidator,
|
||||||
@Qualifier("tradingClearingRegistryBlockRequest")
|
@Qualifier("tradingClearingRegistryBlockRequest")
|
||||||
Function<CommonIdRequest, IValidator> tradingClearingRegistryBlockRequestValidator) {
|
Function<CommonIdRequest, IValidator> tradingClearingRegistryBlockRequestValidator, AccountServiceSettings accountServiceSettings) {
|
||||||
super(kafkaQueue, kafkaProducer);
|
super(kafkaQueue, kafkaProducer);
|
||||||
this.kafkaProducer = kafkaProducer;
|
this.kafkaProducer = kafkaProducer;
|
||||||
this.kafkaSender = kafkaSender;
|
this.kafkaSender = kafkaSender;
|
||||||
|
|
@ -131,6 +133,7 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini
|
||||||
this.tradingClearingRegistryUpdateRequestValidator = tradingClearingRegistryUpdateRequestValidator;
|
this.tradingClearingRegistryUpdateRequestValidator = tradingClearingRegistryUpdateRequestValidator;
|
||||||
this.tradingClearingRegistryBlockRequestValidator = tradingClearingRegistryBlockRequestValidator;
|
this.tradingClearingRegistryBlockRequestValidator = tradingClearingRegistryBlockRequestValidator;
|
||||||
this.messageResolver = messageResolver;
|
this.messageResolver = messageResolver;
|
||||||
|
this.accountServiceSettings = accountServiceSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -444,7 +447,8 @@ public class TradingClearingRegistryService extends QueueConsumer implements Ini
|
||||||
code = "%4s".formatted(code).replace(' ', '0');
|
code = "%4s".formatted(code).replace(' ', '0');
|
||||||
// code += registryPurpose.getKey(); // C / M / ...
|
// code += registryPurpose.getKey(); // C / M / ...
|
||||||
code += "C";//пока ставим всегда С, возможно придется откатить
|
code += "C";//пока ставим всегда С, возможно придется откатить
|
||||||
String trType = tradingRegistryType + "T"; // 2 символа
|
String registryUnit = accountServiceSettings.getApp() != null ? accountServiceSettings.getApp().getRegistryUnit() : "T";
|
||||||
|
String trType = tradingRegistryType + registryUnit; // 2 символа
|
||||||
code += trType;
|
code += trType;
|
||||||
String sId = "%5s".formatted(id).replace(' ', '0');
|
String sId = "%5s".formatted(id).replace(' ', '0');
|
||||||
if (sId.length() > 5)
|
if (sId.length() > 5)
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ public class ClientCodeMessageListener extends QueueConsumer implements Initiali
|
||||||
clientCodeNewRequest.setCompanyId(company.getId());
|
clientCodeNewRequest.setCompanyId(company.getId());
|
||||||
clientCodeNewRequest.setCode(tkrAccount.getClientCode());
|
clientCodeNewRequest.setCode(tkrAccount.getClientCode());
|
||||||
clientCodeNewRequest.setDepoAccountId(depoAccountId);
|
clientCodeNewRequest.setDepoAccountId(depoAccountId);
|
||||||
Account moneyAccount = accountByCurrency.get(CurrencyCode.RUB);
|
Account moneyAccount = accountByCurrency.get(CurrencyCode.RUB.getKey());
|
||||||
clientCodeNewRequest.setMoneyAccountId(moneyAccount.getId());
|
clientCodeNewRequest.setMoneyAccountId(moneyAccount.getId());
|
||||||
|
|
||||||
List<Long> foreignCurrencyList = accountByCurrency.entrySet()
|
List<Long> foreignCurrencyList = accountByCurrency.entrySet()
|
||||||
|
|
|
||||||
|
|
@ -17,3 +17,5 @@ account-service.kafka-producer.retries=0
|
||||||
account-service.kafka-producer.batch-size=16384
|
account-service.kafka-producer.batch-size=16384
|
||||||
account-service.kafka-producer.linger-ms=1
|
account-service.kafka-producer.linger-ms=1
|
||||||
account-service.kafka-producer.buffer-memory=33554432
|
account-service.kafka-producer.buffer-memory=33554432
|
||||||
|
|
||||||
|
account-service.app.registry-unit=L
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||||
import com.fasterxml.jackson.databind.MapperFeature;
|
import com.fasterxml.jackson.databind.MapperFeature;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
|
@ -12,9 +14,6 @@ import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import ru.spcex.clearing.backendapi.meta.MetaServer;
|
import ru.spcex.clearing.backendapi.meta.MetaServer;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class MetaConfiguration {
|
public class MetaConfiguration {
|
||||||
@Value("file:${spring.config.location}/meta.json")
|
@Value("file:${spring.config.location}/meta.json")
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.spcex.clearing.backendapi.config.element;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.context.annotation.PropertySource;
|
import org.springframework.context.annotation.PropertySource;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.spcex.clearing.backendapi.security.element.JsConfigSettings;
|
||||||
import ru.spcex.clearing.backendapi.security.element.SecuritySettings;
|
import ru.spcex.clearing.backendapi.security.element.SecuritySettings;
|
||||||
import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings;
|
import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings;
|
||||||
import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
|
import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings;
|
||||||
|
|
@ -17,6 +18,7 @@ public class BackendApiSettings {
|
||||||
private KafkaProducerSettings kafkaProducer;
|
private KafkaProducerSettings kafkaProducer;
|
||||||
private KafkaConsumerSettings kafkaConsumer;
|
private KafkaConsumerSettings kafkaConsumer;
|
||||||
private SecuritySettings security;
|
private SecuritySettings security;
|
||||||
|
private JsConfigSettings jsConfig;
|
||||||
private String exampleSetting;
|
private String exampleSetting;
|
||||||
|
|
||||||
public HazelcastClientParams getHazelcast() {
|
public HazelcastClientParams getHazelcast() {
|
||||||
|
|
@ -59,6 +61,14 @@ public class BackendApiSettings {
|
||||||
this.security = security;
|
this.security = security;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public JsConfigSettings getJsConfig() {
|
||||||
|
return jsConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJsConfig(JsConfigSettings jsConfig) {
|
||||||
|
this.jsConfig = jsConfig;
|
||||||
|
}
|
||||||
|
|
||||||
public HazelcastClientParams getHazelcastSearch() {
|
public HazelcastClientParams getHazelcastSearch() {
|
||||||
return hazelcastSearch;
|
return hazelcastSearch;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
package ru.spcex.clearing.backendapi.controller.queue.misc;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiResponse;
|
||||||
|
import io.swagger.annotations.ApiResponses;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import ru.spcex.clearing.backendapi.config.element.BackendApiSettings;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse;
|
||||||
|
import ru.spcex.clearing.backendapi.security.element.JsConfigSettings;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/")
|
||||||
|
public class JsConfigController {
|
||||||
|
private final BackendApiSettings backendApiSettings;
|
||||||
|
|
||||||
|
public JsConfigController(BackendApiSettings backendApiSettings) {
|
||||||
|
this.backendApiSettings = backendApiSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "get js config.")
|
||||||
|
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
|
||||||
|
@RequestMapping(path = "/spcexConfig.js", method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String, Object> getJsConfig() {
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
|
||||||
|
String title = new String(backendApiSettings.getJsConfig().getServerTitle().getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
|
||||||
|
result.put(JsConfigSettings.SERVER_TITLE_PARAM_NAME, title);
|
||||||
|
result.put(JsConfigSettings.IS_CENTRAL_COUNTER_PARTY_PARAM_NAME, backendApiSettings.getJsConfig().getCentralCounterPartyEnable());
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
package ru.spcex.clearing.backendapi.controller.queue.securities;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import io.swagger.annotations.ApiResponse;
|
||||||
|
import io.swagger.annotations.ApiResponses;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import ru.clearing.classes.statics.data.security.Rates;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesNewAction;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesUpdateAction;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse;
|
||||||
|
import ru.spcex.clearing.backendapi.service.IOperator;
|
||||||
|
import ru.spcex.clearing.backendapi.service.IStateLoader;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/rates")
|
||||||
|
public class RatesController extends AbstractQueueController {
|
||||||
|
private final IStateLoader stateLoader;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public RatesController(IOperator operator, IStateLoader stateLoader) {
|
||||||
|
super(operator);
|
||||||
|
this.stateLoader = stateLoader;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "get all rates.")
|
||||||
|
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
|
||||||
|
@RequestMapping(method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
public CommonGetAllResponse getAll() {
|
||||||
|
Collection<Map<String, Object>> all = stateLoader.getAllMetaTransform(IMDGDistributedNames.Map_Rates, Rates.class);
|
||||||
|
CommonGetAllResponse response = new CommonGetAllResponse();
|
||||||
|
response.fromEntity(all);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "create rates.")
|
||||||
|
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)})
|
||||||
|
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||||
|
@ResponseBody
|
||||||
|
public CudResponse create(
|
||||||
|
@ApiParam(value = "Значения полей нового объекта.", required = true)
|
||||||
|
@RequestBody RatesNewAction ratesNewAction) throws ExecutionException, InterruptedException {
|
||||||
|
return processRequest(Consts.DESTINATION_RATES_NEW, ratesNewAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "update risk_parameter.")
|
||||||
|
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)})
|
||||||
|
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||||
|
@ResponseBody
|
||||||
|
public CudResponse update(
|
||||||
|
@ApiParam(value = "Идентификатор изменяемого объекта.", required = true, example = "1234")
|
||||||
|
@PathVariable("id") Long id,
|
||||||
|
@ApiParam(value = "Новые значения полей объекта.", required = true)
|
||||||
|
@RequestBody RatesUpdateAction ratesUpdateAction) throws ExecutionException, InterruptedException {
|
||||||
|
ratesUpdateAction.setId(id);
|
||||||
|
return processRequest(Consts.DESTINATION_RATES_UPDATE, ratesUpdateAction);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
package ru.spcex.clearing.backendapi.controller.queue.securities;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import io.swagger.annotations.ApiResponse;
|
||||||
|
import io.swagger.annotations.ApiResponses;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import ru.clearing.classes.statics.data.security.RiskParameter;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterNewAction;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterUpdateAction;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.response.BasicSpcexResponse;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.response.cud.CudResponse;
|
||||||
|
import ru.spcex.clearing.backendapi.controller.response.entity.CommonGetAllResponse;
|
||||||
|
import ru.spcex.clearing.backendapi.service.IOperator;
|
||||||
|
import ru.spcex.clearing.backendapi.service.IStateLoader;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/risk-parameter")
|
||||||
|
public class RiskParameterController extends AbstractQueueController {
|
||||||
|
private final IStateLoader stateLoader;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public RiskParameterController(IOperator operator, IStateLoader stateLoader) {
|
||||||
|
super(operator);
|
||||||
|
this.stateLoader = stateLoader;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "get all risk_parameter.")
|
||||||
|
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CommonGetAllResponse.class)})
|
||||||
|
@RequestMapping(method = RequestMethod.GET)
|
||||||
|
@ResponseBody
|
||||||
|
public CommonGetAllResponse getAll() {
|
||||||
|
Collection<Map<String, Object>> all = stateLoader.getAllMetaTransform(IMDGDistributedNames.Map_RiskParameter, RiskParameter.class);
|
||||||
|
CommonGetAllResponse response = new CommonGetAllResponse();
|
||||||
|
response.fromEntity(all);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "create risk_parameter.")
|
||||||
|
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)})
|
||||||
|
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||||
|
@ResponseBody
|
||||||
|
public CudResponse create(
|
||||||
|
@ApiParam(value = "Значения полей нового объекта.", required = true)
|
||||||
|
@RequestBody RiskParameterNewAction riskParameterNewAction) throws ExecutionException, InterruptedException {
|
||||||
|
return processRequest(Consts.DESTINATION_RISK_PARAMETER_NEW, riskParameterNewAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "update risk_parameter.")
|
||||||
|
@ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)})
|
||||||
|
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||||
|
@ResponseBody
|
||||||
|
public CudResponse update(
|
||||||
|
@ApiParam(value = "Идентификатор изменяемого объекта.", required = true, example = "1234")
|
||||||
|
@PathVariable("id") Long id,
|
||||||
|
@ApiParam(value = "Новые значения полей объекта.", required = true)
|
||||||
|
@RequestBody RiskParameterUpdateAction riskParameterUpdateAction) throws ExecutionException, InterruptedException {
|
||||||
|
riskParameterUpdateAction.setId(id);
|
||||||
|
return processRequest(Consts.DESTINATION_RISK_PARAMETER_UPDATE, riskParameterUpdateAction);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -53,6 +53,51 @@ public class BankAccountNewAction implements IAction<BankAccountNewRequest> {
|
||||||
@ApiModelProperty(value = "Код SWIFT посредника", example = "ABCDE")
|
@ApiModelProperty(value = "Код SWIFT посредника", example = "ABCDE")
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private String intermediarySwiftCode;
|
private String intermediarySwiftCode;
|
||||||
|
@ApiModelProperty(value = "Наименование владельца счета", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String name;
|
||||||
|
@ApiModelProperty(value = "Адрес владельца счета", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String address;
|
||||||
|
@ApiModelProperty(value = "Место нахождения банка получателя средств", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAddress;
|
||||||
|
@ApiModelProperty(value = "SWIFT банка получателя средств", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankSwiftCode;
|
||||||
|
@ApiModelProperty(value = "Номер счета банка получателя средств", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAccount;
|
||||||
|
@ApiModelProperty(value = "Наименование банка-посредника 1", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankName1;
|
||||||
|
@ApiModelProperty(value = "Место нахождения банка-посредника 1", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAddress1;
|
||||||
|
@ApiModelProperty(value = "Номер счета банка-посредника 1", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAccount1;
|
||||||
|
@ApiModelProperty(value = "Наименование банка-посредника 2", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankName2;
|
||||||
|
@ApiModelProperty(value = "Место нахождения банка-посредника 2", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAddress2;
|
||||||
|
@ApiModelProperty(value = "SWIFT банка-посредника 2", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String intermediarySwiftCode2;
|
||||||
|
@ApiModelProperty(value = "Номер счета банка-посредника 2", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAccount2;
|
||||||
|
@ApiModelProperty(value = "Лицевой счет получателя", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String personalAccount;
|
||||||
|
@ApiModelProperty(value = "КБК", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String budgetClassificationCode;
|
||||||
|
@ApiModelProperty(value = "ОКТМО получателя средств", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String oktmo;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BankAccountNewRequest toRequest() {
|
public BankAccountNewRequest toRequest() {
|
||||||
|
|
@ -69,6 +114,21 @@ public class BankAccountNewAction implements IAction<BankAccountNewRequest> {
|
||||||
req.setCompanyId(this.companyId);
|
req.setCompanyId(this.companyId);
|
||||||
req.setSwiftCode(swiftCode);
|
req.setSwiftCode(swiftCode);
|
||||||
req.setIntermediarySwiftCode(intermediarySwiftCode);
|
req.setIntermediarySwiftCode(intermediarySwiftCode);
|
||||||
|
req.setName(name);
|
||||||
|
req.setAddress(address);
|
||||||
|
req.setBankAddress(bankAddress);
|
||||||
|
req.setBankSwiftCode(bankSwiftCode);
|
||||||
|
req.setBankAccount(bankAccount);
|
||||||
|
req.setBankName1(bankName1);
|
||||||
|
req.setBankAddress1(bankAddress1);
|
||||||
|
req.setBankAccount1(bankAccount1);
|
||||||
|
req.setBankName2(bankName2);
|
||||||
|
req.setBankAddress2(bankAddress2);
|
||||||
|
req.setIntermediarySwiftCode2(intermediarySwiftCode2);
|
||||||
|
req.setBankAccount2(bankAccount2);
|
||||||
|
req.setPersonalAccount(personalAccount);
|
||||||
|
req.setBudgetClassificationCode(budgetClassificationCode);
|
||||||
|
req.setOktmo(oktmo);
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -173,4 +233,124 @@ public class BankAccountNewAction implements IAction<BankAccountNewRequest> {
|
||||||
public void setIntermediarySwiftCode(String intermediarySwiftCode) {
|
public void setIntermediarySwiftCode(String intermediarySwiftCode) {
|
||||||
this.intermediarySwiftCode = intermediarySwiftCode;
|
this.intermediarySwiftCode = intermediarySwiftCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddress(String address) {
|
||||||
|
this.address = address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAddress() {
|
||||||
|
return bankAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAddress(String bankAddress) {
|
||||||
|
this.bankAddress = bankAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankSwiftCode() {
|
||||||
|
return bankSwiftCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankSwiftCode(String bankSwiftCode) {
|
||||||
|
this.bankSwiftCode = bankSwiftCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAccount() {
|
||||||
|
return bankAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAccount(String bankAccount) {
|
||||||
|
this.bankAccount = bankAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankName1() {
|
||||||
|
return bankName1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankName1(String bankName1) {
|
||||||
|
this.bankName1 = bankName1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAddress1() {
|
||||||
|
return bankAddress1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAddress1(String bankAddress1) {
|
||||||
|
this.bankAddress1 = bankAddress1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAccount1() {
|
||||||
|
return bankAccount1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAccount1(String bankAccount1) {
|
||||||
|
this.bankAccount1 = bankAccount1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankName2() {
|
||||||
|
return bankName2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankName2(String bankName2) {
|
||||||
|
this.bankName2 = bankName2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAddress2() {
|
||||||
|
return bankAddress2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAddress2(String bankAddress2) {
|
||||||
|
this.bankAddress2 = bankAddress2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIntermediarySwiftCode2() {
|
||||||
|
return intermediarySwiftCode2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIntermediarySwiftCode2(String intermediarySwiftCode2) {
|
||||||
|
this.intermediarySwiftCode2 = intermediarySwiftCode2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAccount2() {
|
||||||
|
return bankAccount2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAccount2(String bankAccount2) {
|
||||||
|
this.bankAccount2 = bankAccount2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPersonalAccount() {
|
||||||
|
return personalAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPersonalAccount(String personalAccount) {
|
||||||
|
this.personalAccount = personalAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBudgetClassificationCode() {
|
||||||
|
return budgetClassificationCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBudgetClassificationCode(String budgetClassificationCode) {
|
||||||
|
this.budgetClassificationCode = budgetClassificationCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOktmo() {
|
||||||
|
return oktmo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOktmo(String oktmo) {
|
||||||
|
this.oktmo = oktmo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,52 @@ public class BankAccountUpdateAction implements IAction<BankAccountUpdateRequest
|
||||||
@ApiModelProperty(value = "Номер счета", example = "11111222223333344444")
|
@ApiModelProperty(value = "Номер счета", example = "11111222223333344444")
|
||||||
private String account;
|
private String account;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Наименование владельца счета", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String name;
|
||||||
|
@ApiModelProperty(value = "Адрес владельца счета", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String address;
|
||||||
|
@ApiModelProperty(value = "Место нахождения банка получателя средств", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAddress;
|
||||||
|
@ApiModelProperty(value = "SWIFT банка получателя средств", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankSwiftCode;
|
||||||
|
@ApiModelProperty(value = "Номер счета банка получателя средств", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAccount;
|
||||||
|
@ApiModelProperty(value = "Наименование банка-посредника 1", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankName1;
|
||||||
|
@ApiModelProperty(value = "Место нахождения банка-посредника 1", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAddress1;
|
||||||
|
@ApiModelProperty(value = "Номер счета банка-посредника 1", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAccount1;
|
||||||
|
@ApiModelProperty(value = "Наименование банка-посредника 2", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankName2;
|
||||||
|
@ApiModelProperty(value = "Место нахождения банка-посредника 2", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAddress2;
|
||||||
|
@ApiModelProperty(value = "SWIFT банка-посредника 2", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String intermediarySwiftCode2;
|
||||||
|
@ApiModelProperty(value = "Номер счета банка-посредника 2", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String bankAccount2;
|
||||||
|
@ApiModelProperty(value = "Лицевой счет получателя", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String personalAccount;
|
||||||
|
@ApiModelProperty(value = "КБК", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String budgetClassificationCode;
|
||||||
|
@ApiModelProperty(value = "ОКТМО получателя средств", example = "ABCDE")
|
||||||
|
@JsonProperty
|
||||||
|
private String oktmo;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BankAccountUpdateRequest toRequest() {
|
public BankAccountUpdateRequest toRequest() {
|
||||||
var req = new BankAccountUpdateRequest();
|
var req = new BankAccountUpdateRequest();
|
||||||
|
|
@ -63,6 +109,21 @@ public class BankAccountUpdateAction implements IAction<BankAccountUpdateRequest
|
||||||
req.setAccount(this.account);
|
req.setAccount(this.account);
|
||||||
req.setSwiftCode(swiftCode);
|
req.setSwiftCode(swiftCode);
|
||||||
req.setIntermediarySwiftCode(intermediarySwiftCode);
|
req.setIntermediarySwiftCode(intermediarySwiftCode);
|
||||||
|
req.setName(name);
|
||||||
|
req.setAddress(address);
|
||||||
|
req.setBankAddress(bankAddress);
|
||||||
|
req.setBankSwiftCode(bankSwiftCode);
|
||||||
|
req.setBankAccount(bankAccount);
|
||||||
|
req.setBankName1(bankName1);
|
||||||
|
req.setBankAddress1(bankAddress1);
|
||||||
|
req.setBankAccount1(bankAccount1);
|
||||||
|
req.setBankName2(bankName2);
|
||||||
|
req.setBankAddress2(bankAddress2);
|
||||||
|
req.setIntermediarySwiftCode2(intermediarySwiftCode2);
|
||||||
|
req.setBankAccount2(bankAccount2);
|
||||||
|
req.setPersonalAccount(personalAccount);
|
||||||
|
req.setBudgetClassificationCode(budgetClassificationCode);
|
||||||
|
req.setOktmo(oktmo);
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -167,4 +228,124 @@ public class BankAccountUpdateAction implements IAction<BankAccountUpdateRequest
|
||||||
public void setIntermediarySwiftCode(String intermediarySwiftCode) {
|
public void setIntermediarySwiftCode(String intermediarySwiftCode) {
|
||||||
this.intermediarySwiftCode = intermediarySwiftCode;
|
this.intermediarySwiftCode = intermediarySwiftCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddress(String address) {
|
||||||
|
this.address = address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAddress() {
|
||||||
|
return bankAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAddress(String bankAddress) {
|
||||||
|
this.bankAddress = bankAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankSwiftCode() {
|
||||||
|
return bankSwiftCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankSwiftCode(String bankSwiftCode) {
|
||||||
|
this.bankSwiftCode = bankSwiftCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAccount() {
|
||||||
|
return bankAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAccount(String bankAccount) {
|
||||||
|
this.bankAccount = bankAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankName1() {
|
||||||
|
return bankName1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankName1(String bankName1) {
|
||||||
|
this.bankName1 = bankName1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAddress1() {
|
||||||
|
return bankAddress1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAddress1(String bankAddress1) {
|
||||||
|
this.bankAddress1 = bankAddress1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAccount1() {
|
||||||
|
return bankAccount1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAccount1(String bankAccount1) {
|
||||||
|
this.bankAccount1 = bankAccount1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankName2() {
|
||||||
|
return bankName2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankName2(String bankName2) {
|
||||||
|
this.bankName2 = bankName2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAddress2() {
|
||||||
|
return bankAddress2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAddress2(String bankAddress2) {
|
||||||
|
this.bankAddress2 = bankAddress2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIntermediarySwiftCode2() {
|
||||||
|
return intermediarySwiftCode2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIntermediarySwiftCode2(String intermediarySwiftCode2) {
|
||||||
|
this.intermediarySwiftCode2 = intermediarySwiftCode2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAccount2() {
|
||||||
|
return bankAccount2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAccount2(String bankAccount2) {
|
||||||
|
this.bankAccount2 = bankAccount2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPersonalAccount() {
|
||||||
|
return personalAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPersonalAccount(String personalAccount) {
|
||||||
|
this.personalAccount = personalAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBudgetClassificationCode() {
|
||||||
|
return budgetClassificationCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBudgetClassificationCode(String budgetClassificationCode) {
|
||||||
|
this.budgetClassificationCode = budgetClassificationCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOktmo() {
|
||||||
|
return oktmo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOktmo(String oktmo) {
|
||||||
|
this.oktmo = oktmo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
package ru.spcex.clearing.backendapi.controller.request.cud.securities;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import ru.spcex.clearing.backendapi.domain.actions.IAction;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.security.RatesNewRequest;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.LocalDateDeserializer;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.json.serialize.LocalDateSerializer;
|
||||||
|
|
||||||
|
public class RatesNewAction implements IAction<RatesNewRequest> {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Курс.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private BigDecimal value;
|
||||||
|
@ApiModelProperty(value = "Дата.", example = "1234")
|
||||||
|
@JsonSerialize(using = LocalDateSerializer.class)
|
||||||
|
@JsonDeserialize(using = LocalDateDeserializer.class)
|
||||||
|
@JsonProperty
|
||||||
|
private LocalDate valueDate;
|
||||||
|
@ApiModelProperty(value = "Валюта.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private Long currencyId;
|
||||||
|
@ApiModelProperty(value = "Статус.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RatesNewRequest toRequest() {
|
||||||
|
RatesNewRequest request = new RatesNewRequest();
|
||||||
|
request.setValue(this.value);
|
||||||
|
request.setValueDate(this.valueDate);
|
||||||
|
request.setCurrencyId(this.currencyId);
|
||||||
|
request.setStatus(this.status);
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty(hidden = true)
|
||||||
|
@Override
|
||||||
|
public ActionType getActionType() {
|
||||||
|
return ActionType.NEW;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(BigDecimal value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getValueDate() {
|
||||||
|
return valueDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValueDate(LocalDate valueDate) {
|
||||||
|
this.valueDate = valueDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getCurrencyId() {
|
||||||
|
return currencyId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrencyId(Long currencyPairId) {
|
||||||
|
this.currencyId = currencyPairId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
package ru.spcex.clearing.backendapi.controller.request.cud.securities;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import ru.spcex.clearing.backendapi.domain.actions.IAction;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.security.RatesUpdateRequest;
|
||||||
|
|
||||||
|
public class RatesUpdateAction implements IAction<RatesUpdateRequest> {
|
||||||
|
|
||||||
|
@ApiModelProperty(hidden = true)
|
||||||
|
@JsonProperty
|
||||||
|
public Long id;
|
||||||
|
@ApiModelProperty(value = "Курс.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private BigDecimal value;
|
||||||
|
@ApiModelProperty(value = "Статус.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RatesUpdateRequest toRequest() {
|
||||||
|
RatesUpdateRequest request = new RatesUpdateRequest();
|
||||||
|
request.setId(this.id);
|
||||||
|
request.setValue(this.value);
|
||||||
|
request.setStatus(this.status);
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty(hidden = true)
|
||||||
|
@Override
|
||||||
|
public ActionType getActionType() {
|
||||||
|
return ActionType.NEW;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(BigDecimal value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
package ru.spcex.clearing.backendapi.controller.request.cud.securities;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import ru.spcex.clearing.backendapi.domain.actions.IAction;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.security.RiskParameterNewRequest;
|
||||||
|
|
||||||
|
public class RiskParameterNewAction implements IAction<RiskParameterNewRequest> {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "Курс.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private BigDecimal value;
|
||||||
|
@ApiModelProperty(value = "Код расчёта.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private String settlementType;
|
||||||
|
@ApiModelProperty(value = "Валютная пара.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private Long currencyPairId;
|
||||||
|
@ApiModelProperty(value = "Статус.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RiskParameterNewRequest toRequest() {
|
||||||
|
RiskParameterNewRequest request = new RiskParameterNewRequest();
|
||||||
|
request.setValue(this.value);
|
||||||
|
request.setSettlementType(this.settlementType);
|
||||||
|
request.setCurrencyPairId(this.currencyPairId);
|
||||||
|
request.setStatus(this.status);
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty(hidden = true)
|
||||||
|
@Override
|
||||||
|
public ActionType getActionType() {
|
||||||
|
return ActionType.NEW;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(BigDecimal value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSettlementType() {
|
||||||
|
return settlementType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSettlementType(String settlementType) {
|
||||||
|
this.settlementType = settlementType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getCurrencyPairId() {
|
||||||
|
return currencyPairId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrencyPairId(Long currencyPairId) {
|
||||||
|
this.currencyPairId = currencyPairId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
package ru.spcex.clearing.backendapi.controller.request.cud.securities;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import ru.spcex.clearing.backendapi.domain.actions.IAction;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.ActionType;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.cud.security.RiskParameterUpdateRequest;
|
||||||
|
|
||||||
|
public class RiskParameterUpdateAction implements IAction<RiskParameterUpdateRequest> {
|
||||||
|
|
||||||
|
@ApiModelProperty(hidden = true)
|
||||||
|
@JsonProperty
|
||||||
|
public Long id;
|
||||||
|
@ApiModelProperty(value = "Курс.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private BigDecimal value;
|
||||||
|
@ApiModelProperty(value = "Статус.", example = "1234")
|
||||||
|
@JsonProperty
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RiskParameterUpdateRequest toRequest() {
|
||||||
|
RiskParameterUpdateRequest request = new RiskParameterUpdateRequest();
|
||||||
|
request.setId(this.id);
|
||||||
|
request.setValue(this.value);
|
||||||
|
request.setStatus(this.status);
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty(hidden = true)
|
||||||
|
@Override
|
||||||
|
public ActionType getActionType() {
|
||||||
|
return ActionType.NEW;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BigDecimal getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(BigDecimal value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -65,6 +65,7 @@ public class WebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
|
||||||
.antMatchers("/login").permitAll()
|
.antMatchers("/login").permitAll()
|
||||||
.antMatchers("/error").permitAll()
|
.antMatchers("/error").permitAll()
|
||||||
.antMatchers("/backend-api-login/**").permitAll()
|
.antMatchers("/backend-api-login/**").permitAll()
|
||||||
|
.antMatchers("/spcex.config.js").permitAll()
|
||||||
.anyRequest();
|
.anyRequest();
|
||||||
if (securityDisabled) {
|
if (securityDisabled) {
|
||||||
anyReq.permitAll();
|
anyReq.permitAll();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package ru.spcex.clearing.backendapi.security.element;
|
||||||
|
|
||||||
|
public class JsConfigSettings {
|
||||||
|
public final static String SERVER_TITLE_PARAM_NAME = "serverTitle";
|
||||||
|
public final static String IS_CENTRAL_COUNTER_PARTY_PARAM_NAME = "isCentralCounterparty";
|
||||||
|
private String serverTitle;
|
||||||
|
private Boolean centralCounterPartyEnable;
|
||||||
|
|
||||||
|
public String getServerTitle() {
|
||||||
|
return serverTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServerTitle(String serverTitle) {
|
||||||
|
this.serverTitle = serverTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getCentralCounterPartyEnable() {
|
||||||
|
return centralCounterPartyEnable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCentralCounterPartyEnable(Boolean centralCounterPartyEnable) {
|
||||||
|
this.centralCounterPartyEnable = centralCounterPartyEnable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -26,6 +26,9 @@ backend-api.kafka-consumer.auto-offset-reset=latest
|
||||||
backend-api.kafka-consumer.linger-ms=1
|
backend-api.kafka-consumer.linger-ms=1
|
||||||
backend-api.kafka-consumer.buffer-memory=33554432
|
backend-api.kafka-consumer.buffer-memory=33554432
|
||||||
backend-api.security.authorization-disabled=false
|
backend-api.security.authorization-disabled=false
|
||||||
|
|
||||||
|
backend-api.js-config.server-title=?????? 183
|
||||||
|
backend-api.js-config.central-counter-party-enable=true
|
||||||
#access logs, sample
|
#access logs, sample
|
||||||
#server.tomcat.accesslog.directory=logs
|
#server.tomcat.accesslog.directory=logs
|
||||||
#server.tomcat.accesslog.enabled=true
|
#server.tomcat.accesslog.enabled=true
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
"version": "3.14.105.103",
|
"version": "3.15.208.113",
|
||||||
|
|
||||||
"enums": {
|
"enums": {
|
||||||
|
|
||||||
|
|
@ -6037,6 +6037,17 @@
|
||||||
"fields": []
|
"fields": []
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
|
{"method":"post",
|
||||||
|
|
||||||
|
"destination": "GREC",
|
||||||
|
|
||||||
|
"group": "Формирование отчетности",
|
||||||
|
|
||||||
|
"name": "Формирование отчетности ЦК",
|
||||||
|
|
||||||
|
"fields": []
|
||||||
|
}
|
||||||
|
,
|
||||||
{"method":"post",
|
{"method":"post",
|
||||||
|
|
||||||
"destination": "FDFF",
|
"destination": "FDFF",
|
||||||
|
|
@ -10362,6 +10373,182 @@
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
,
|
||||||
|
"riskParameter": {
|
||||||
|
|
||||||
|
"name": "Параметры риска",
|
||||||
|
|
||||||
|
"destination": "risk-parameter",
|
||||||
|
|
||||||
|
"class": "ru.clearing.classes.statics.data.security.RiskParameter",
|
||||||
|
|
||||||
|
"table": "risk-parameter",
|
||||||
|
|
||||||
|
"fields": [
|
||||||
|
{"code": "id",
|
||||||
|
"type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "currencyPair",
|
||||||
|
"name": "Код валютной пары","shortname": "Код валютной пары","type": 2,"length": 12
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "currencyPairId",
|
||||||
|
"name": "Идентификатор валютной пары","shortname": "Валютная пара","type": 1
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "settlementType",
|
||||||
|
"name": "Код расчета","shortname": "Код расчета","type": 2,"length": 4
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "value",
|
||||||
|
"name": "Ставка","shortname": "Ставка","type": 10
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "workflowStatus",
|
||||||
|
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
,"actions":[
|
||||||
|
{"method":"post",
|
||||||
|
|
||||||
|
"name": "Добавление параметров риска",
|
||||||
|
|
||||||
|
"confirmation": "value,settlementType,currencyPairId,status",
|
||||||
|
|
||||||
|
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterNewAction",
|
||||||
|
|
||||||
|
"fields": [
|
||||||
|
{"code": "currencyPairId",
|
||||||
|
"name": "Идентификатор валютной пары","shortname": "Валютная пара","type": 1,"link": "currencyPair","linkCode": "code","linkKeyCode": "id"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "settlementType",
|
||||||
|
"name": "Код расчёта","shortname": "Код расчёта","type": 12,"link": "currencySettlementType","linkCode": "code"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "value",
|
||||||
|
"name": "Ставка","shortname": "Ставка","type": 10
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "status",
|
||||||
|
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"method":"put",
|
||||||
|
|
||||||
|
"name": "Изменение параметров риска",
|
||||||
|
|
||||||
|
"confirmation": "value,status",
|
||||||
|
|
||||||
|
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterUpdateAction",
|
||||||
|
|
||||||
|
"fields": [
|
||||||
|
{"code": "id",
|
||||||
|
"type": 1,"name": "Идентификатор записи","shortname": "ID","link": "riskParameter","linkCode": "id","required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "value",
|
||||||
|
"name": "Ставка","shortname": "Ставка","type": 10
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "status",
|
||||||
|
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
,
|
||||||
|
"rates": {
|
||||||
|
|
||||||
|
"name": "Расчетные курсы",
|
||||||
|
|
||||||
|
"destination": "rates",
|
||||||
|
|
||||||
|
"class": "ru.clearing.classes.statics.data.security.Rates",
|
||||||
|
|
||||||
|
"table": "rates",
|
||||||
|
|
||||||
|
"fields": [
|
||||||
|
{"code": "id",
|
||||||
|
"type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "currencyId",
|
||||||
|
"name": "Идентификатор валюты","shortname": "Валюта","type": 1
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "currency",
|
||||||
|
"name": "Код валюты","shortname": "Код валюты","type": 2,"length": 4
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "valueDate",
|
||||||
|
"name": "Дата, на которую расчетный курс","shortname": "Дата","type": 6
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "value",
|
||||||
|
"name": "Расчетный курс","shortname": "Расчетный курс","type": 10
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "workflowStatus",
|
||||||
|
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
,"actions":[
|
||||||
|
{"method":"post",
|
||||||
|
|
||||||
|
"name": "Добавление расчетного курса",
|
||||||
|
|
||||||
|
"confirmation": "value,valueDate,currencyId,status",
|
||||||
|
|
||||||
|
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesNewAction",
|
||||||
|
|
||||||
|
"fields": [
|
||||||
|
{"code": "currencyId",
|
||||||
|
"name": "Идентификатор валюты","shortname": "Валюта","type": 1,"link": "currencyCode","linkCode": "code","linkKeyCode": "id"
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "valueDate",
|
||||||
|
"name": "Дата, на которую расчетный курс","shortname": "Дата","type": 6
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "value",
|
||||||
|
"name": "Расчетный курс","shortname": "Расчетный курс","type": 10
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "status",
|
||||||
|
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"method":"put",
|
||||||
|
|
||||||
|
"name": "Изменение расчетного курса",
|
||||||
|
|
||||||
|
"confirmation": "value,status",
|
||||||
|
|
||||||
|
"class": "ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesUpdateAction",
|
||||||
|
|
||||||
|
"fields": [
|
||||||
|
{"code": "id",
|
||||||
|
"type": 1,"name": "Идентификатор записи","shortname": "ID","link": "rates","linkCode": "id","required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "value",
|
||||||
|
"name": "Расчетный курс","shortname": "Расчетный курс","type": 10
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "status",
|
||||||
|
"name": "Статус","shortname": "Статус","type": 2,"length": 4,"link": "workflowStatus"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
|
<!--?xml-stylesheet type="text/xsl" href="\..\corp-reports\src\data\meta\meta.server.xslt"?-->
|
||||||
<meta version="3.14.105.103">
|
<meta version="3.15.208.113">
|
||||||
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
|
<!-- _xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" _xsi:noNamespaceSchemaLocation="file:///E:/d/projects/meta/from/meta.xsd" -->
|
||||||
<!--Здесь словари-->
|
<!--Здесь словари-->
|
||||||
<enums>
|
<enums>
|
||||||
|
|
@ -1398,6 +1398,8 @@
|
||||||
</post>
|
</post>
|
||||||
<post destination="GREF" group="Формирование отчетности" name="Формирование итоговой отчетности">
|
<post destination="GREF" group="Формирование отчетности" name="Формирование итоговой отчетности">
|
||||||
</post>
|
</post>
|
||||||
|
<post destination="GREC" group="Формирование отчетности" name="Формирование отчетности ЦК">
|
||||||
|
</post>
|
||||||
<post destination="FDFF" group="Обмен с расчетной организацией" name="Формирование ДФ-05 с кодом 9 (финальный)">
|
<post destination="FDFF" group="Обмен с расчетной организацией" name="Формирование ДФ-05 с кодом 9 (финальный)">
|
||||||
</post>
|
</post>
|
||||||
<post destination="CHDF" group="Общее" name="Проверка наличия пары ДФ-01/ДФ-57 и ДФ-08/ДФ-21">
|
<post destination="CHDF" group="Общее" name="Проверка наличия пары ДФ-01/ДФ-57 и ДФ-08/ДФ-21">
|
||||||
|
|
@ -2397,6 +2399,48 @@
|
||||||
<code name="Код рынка" shortname="Код рынка" type="2" length="12"/>
|
<code name="Код рынка" shortname="Код рынка" type="2" length="12"/>
|
||||||
<section name="Секция" shortname="Секция" type="12"/>
|
<section name="Секция" shortname="Секция" type="12"/>
|
||||||
</blacklistMarket>
|
</blacklistMarket>
|
||||||
|
<riskParameter name="Параметры риска" destination="risk-parameter" class="ru.clearing.classes.statics.data.security.RiskParameter" table="risk-parameter">
|
||||||
|
<id type="1" name="Идентификатор записи" shortname="ID" searchable="true" sortable="true" visible="true"/>
|
||||||
|
<currencyPair name="Код валютной пары" shortname="Код валютной пары" type="2" length="12"/>
|
||||||
|
<currencyPairId name="Идентификатор валютной пары" shortname="Валютная пара" type="1"/>
|
||||||
|
<settlementType name="Код расчета" shortname="Код расчета" type="2" length="4"/>
|
||||||
|
<value name="Ставка" shortname="Ставка" type="10"/>
|
||||||
|
<workflowStatus name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
|
||||||
|
<actions>
|
||||||
|
<post name="Добавление параметров риска" confirmation="value,settlementType,currencyPairId,status" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterNewAction">
|
||||||
|
<currencyPairId name="Идентификатор валютной пары" shortname="Валютная пара" type="1" link="currencyPair" linkCode="code" linkKeyCode="id"/>
|
||||||
|
<settlementType name="Код расчёта" shortname="Код расчёта" type="12" link="currencySettlementType" linkCode="code"/>
|
||||||
|
<value name="Ставка" shortname="Ставка" type="10"/>
|
||||||
|
<status name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
|
||||||
|
</post>
|
||||||
|
<put name="Изменение параметров риска" confirmation="value,status" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RiskParameterUpdateAction">
|
||||||
|
<id type="1" name="Идентификатор записи" shortname="ID" link="riskParameter" linkCode="id" required="true"/>
|
||||||
|
<value name="Ставка" shortname="Ставка" type="10"/>
|
||||||
|
<status name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
|
||||||
|
</put>
|
||||||
|
</actions>
|
||||||
|
</riskParameter>
|
||||||
|
<rates name="Расчетные курсы" destination="rates" class="ru.clearing.classes.statics.data.security.Rates" table="rates">
|
||||||
|
<id type="1" name="Идентификатор записи" shortname="ID" searchable="true" sortable="true" visible="true"/>
|
||||||
|
<currencyId name="Идентификатор валюты" shortname="Валюта" type="1"/>
|
||||||
|
<currency name="Код валюты" shortname="Код валюты" type="2" length="4"/>
|
||||||
|
<valueDate name="Дата, на которую расчетный курс" shortname="Дата" type="6"/>
|
||||||
|
<value name="Расчетный курс" shortname="Расчетный курс" type="10"/>
|
||||||
|
<workflowStatus name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
|
||||||
|
<actions>
|
||||||
|
<post name="Добавление расчетного курса" confirmation="value,valueDate,currencyId,status" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesNewAction">
|
||||||
|
<currencyId name="Идентификатор валюты" shortname="Валюта" type="1" link="currencyCode" linkCode="code" linkKeyCode="id"/>
|
||||||
|
<valueDate name="Дата, на которую расчетный курс" shortname="Дата" type="6"/>
|
||||||
|
<value name="Расчетный курс" shortname="Расчетный курс" type="10"/>
|
||||||
|
<status name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
|
||||||
|
</post>
|
||||||
|
<put name="Изменение расчетного курса" confirmation="value,status" class="ru.spcex.clearing.backendapi.controller.request.cud.securities.RatesUpdateAction">
|
||||||
|
<id type="1" name="Идентификатор записи" shortname="ID" link="rates" linkCode="id" required="true"/>
|
||||||
|
<value name="Расчетный курс" shortname="Расчетный курс" type="10"/>
|
||||||
|
<status name="Статус" shortname="Статус" type="2" length="4" link="workflowStatus"/>
|
||||||
|
</put>
|
||||||
|
</actions>
|
||||||
|
</rates>
|
||||||
</objects>
|
</objects>
|
||||||
<views>
|
<views>
|
||||||
<AccountUnion>
|
<AccountUnion>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
{
|
{
|
||||||
"version": "3.12.8.101",
|
"version": "3.14.105.104",
|
||||||
|
|
||||||
"enums": {
|
"enums": {
|
||||||
|
|
||||||
|
|
@ -1523,7 +1523,7 @@
|
||||||
|
|
||||||
"destination": "db-versions",
|
"destination": "db-versions",
|
||||||
|
|
||||||
"class": "",
|
"class": "ru.clearing.classes.statics.data.misc.DbVersion",
|
||||||
|
|
||||||
"table": "db_version",
|
"table": "db_version",
|
||||||
|
|
||||||
|
|
@ -1535,6 +1535,10 @@
|
||||||
{"code": "version",
|
{"code": "version",
|
||||||
"type": 2,"length": 50,"name": "Версия базы данных, привязанная к релизу","shortname": "Версия БД","searchable": true,"sortable": true,"visible": true
|
"type": 2,"length": 50,"name": "Версия базы данных, привязанная к релизу","shortname": "Версия БД","searchable": true,"sortable": true,"visible": true
|
||||||
}
|
}
|
||||||
|
,
|
||||||
|
{"code": "dictionaryVersion",
|
||||||
|
"type": 2,"length": 100,"name": "Версия справочника","shortname": "Версия справочника","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -4984,6 +4988,66 @@
|
||||||
{"code": "intermediarySwiftCode",
|
{"code": "intermediarySwiftCode",
|
||||||
"type": 2,"length": 255,"name": "Код SWIFT посредника","shortname": "SWIFT посредника","searchable": true,"sortable": true,"visible": true
|
"type": 2,"length": 255,"name": "Код SWIFT посредника","shortname": "SWIFT посредника","searchable": true,"sortable": true,"visible": true
|
||||||
}
|
}
|
||||||
|
,
|
||||||
|
{"code": "name",
|
||||||
|
"type": 2,"length": 255,"name": "Наименование владельца счета","shortname": "Владелец счета","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "address",
|
||||||
|
"type": 2,"length": 255,"name": "Адрес владельца счета","shortname": "Адрес владельца","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAddress",
|
||||||
|
"type": 2,"length": 255,"name": "Место нахождения банка получателя средств","shortname": "Место нахождение банка","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankSwiftCode",
|
||||||
|
"type": 2,"length": 12,"name": "SWIFT банка получателя средств","shortname": "SWIFT банка","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAccount",
|
||||||
|
"type": 2,"length": 35,"name": "Номер счета банка получателя средств","shortname": "Номер счёта получателя","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankName1",
|
||||||
|
"type": 2,"length": 255,"name": "Наименование банка-посредника 1","shortname": "Банк посредник 1","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAddress1",
|
||||||
|
"type": 2,"length": 255,"name": "Место нахождения банка-посредника 1","shortname": "Место нахождения банка-посредника 1","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAccount1",
|
||||||
|
"type": 2,"length": 35,"name": "Номер счета банка-посредника 1","shortname": "Счет банка-посредника 1","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankName2",
|
||||||
|
"type": 2,"length": 255,"name": "Наименование банка-посредника 2","shortname": "Банк посредник 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAddress2",
|
||||||
|
"type": 2,"length": 255,"name": "Место нахождения банка-посредника 2","shortname": "Место нахождения банка-посредника 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "intermediarySwiftCode2",
|
||||||
|
"type": 2,"length": 12,"name": "SWIFT банка-посредника 2","shortname": "Счет банка-посредника 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAccount2",
|
||||||
|
"type": 2,"length": 35,"name": "Номер счета банка-посредника 2","shortname": "Счет банка-посредника 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "personalAccount",
|
||||||
|
"type": 2,"length": 20,"name": "Лицевой счет получателя","shortname": "Счет получателя","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "budgetClassificationCode",
|
||||||
|
"type": 2,"length": 20,"name": "КБК","shortname": "КБК","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "oktmo",
|
||||||
|
"type": 2,"length": 20,"name": "ОКТМО получателя средств","shortname": "ОКТМО","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
,"actions":[
|
,"actions":[
|
||||||
{"method":"post",
|
{"method":"post",
|
||||||
|
|
@ -5042,6 +5106,66 @@
|
||||||
{"code": "intermediarySwiftCode",
|
{"code": "intermediarySwiftCode",
|
||||||
"type": 2,"length": 255,"name": "Код SWIFT посредника","shortname": "SWIFT посредника","searchable": true,"sortable": true,"visible": true
|
"type": 2,"length": 255,"name": "Код SWIFT посредника","shortname": "SWIFT посредника","searchable": true,"sortable": true,"visible": true
|
||||||
}
|
}
|
||||||
|
,
|
||||||
|
{"code": "name",
|
||||||
|
"type": 2,"length": 255,"name": "Наименование владельца счета","shortname": "Владелец счета","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "address",
|
||||||
|
"type": 2,"length": 255,"name": "Адрес владельца счета","shortname": "Адрес владельца","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAddress",
|
||||||
|
"type": 2,"length": 255,"name": "Место нахождения банка получателя средств","shortname": "Место нахождение банка","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankSwiftCode",
|
||||||
|
"type": 2,"length": 12,"name": "SWIFT банка получателя средств","shortname": "SWIFT банка","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAccount",
|
||||||
|
"type": 2,"length": 35,"name": "Номер счета банка получателя средств","shortname": "Номер счёта получателя","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankName1",
|
||||||
|
"type": 2,"length": 255,"name": "Наименование банка-посредника 1","shortname": "Банк посредник 1","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAddress1",
|
||||||
|
"type": 2,"length": 255,"name": "Место нахождения банка-посредника 1","shortname": "Место нахождения банка-посредника 1","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAccount1",
|
||||||
|
"type": 2,"length": 35,"name": "Номер счета банка-посредника 1","shortname": "Счет банка-посредника 1","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankName2",
|
||||||
|
"type": 2,"length": 255,"name": "Наименование банка-посредника 2","shortname": "Банк посредник 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAddress2",
|
||||||
|
"type": 2,"length": 255,"name": "Место нахождения банка-посредника 2","shortname": "Место нахождения банка-посредника 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "intermediarySwiftCode2",
|
||||||
|
"type": 2,"length": 12,"name": "SWIFT банка-посредника 2","shortname": "Счет банка-посредника 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAccount2",
|
||||||
|
"type": 2,"length": 35,"name": "Номер счета банка-посредника 2","shortname": "Счет банка-посредника 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "personalAccount",
|
||||||
|
"type": 2,"length": 20,"name": "Лицевой счет получателя","shortname": "Счет получателя","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "budgetClassificationCode",
|
||||||
|
"type": 2,"length": 20,"name": "КБК","shortname": "КБК","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "oktmo",
|
||||||
|
"type": 2,"length": 20,"name": "ОКТМО получателя средств","shortname": "ОКТМО","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
|
|
@ -5101,6 +5225,66 @@
|
||||||
{"code": "intermediarySwiftCode",
|
{"code": "intermediarySwiftCode",
|
||||||
"type": 2,"length": 255,"name": "Код SWIFT посредника","shortname": "SWIFT посредника","searchable": true,"sortable": true,"visible": true
|
"type": 2,"length": 255,"name": "Код SWIFT посредника","shortname": "SWIFT посредника","searchable": true,"sortable": true,"visible": true
|
||||||
}
|
}
|
||||||
|
,
|
||||||
|
{"code": "name",
|
||||||
|
"type": 2,"length": 255,"name": "Наименование владельца счета","shortname": "Владелец счета","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "address",
|
||||||
|
"type": 2,"length": 255,"name": "Адрес владельца счета","shortname": "Адрес владельца","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAddress",
|
||||||
|
"type": 2,"length": 255,"name": "Место нахождения банка получателя средств","shortname": "Место нахождение банка","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankSwiftCode",
|
||||||
|
"type": 2,"length": 12,"name": "SWIFT банка получателя средств","shortname": "SWIFT банка","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAccount",
|
||||||
|
"type": 2,"length": 35,"name": "Номер счета банка получателя средств","shortname": "Номер счёта получателя","searchable": true,"sortable": true,"visible": true,"required": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankName1",
|
||||||
|
"type": 2,"length": 255,"name": "Наименование банка-посредника 1","shortname": "Банк посредник 1","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAddress1",
|
||||||
|
"type": 2,"length": 255,"name": "Место нахождения банка-посредника 1","shortname": "Место нахождения банка-посредника 1","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAccount1",
|
||||||
|
"type": 2,"length": 35,"name": "Номер счета банка-посредника 1","shortname": "Счет банка-посредника 1","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankName2",
|
||||||
|
"type": 2,"length": 255,"name": "Наименование банка-посредника 2","shortname": "Банк посредник 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAddress2",
|
||||||
|
"type": 2,"length": 255,"name": "Место нахождения банка-посредника 2","shortname": "Место нахождения банка-посредника 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "intermediarySwiftCode2",
|
||||||
|
"type": 2,"length": 12,"name": "SWIFT банка-посредника 2","shortname": "Счет банка-посредника 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "bankAccount2",
|
||||||
|
"type": 2,"length": 35,"name": "Номер счета банка-посредника 2","shortname": "Счет банка-посредника 2","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "personalAccount",
|
||||||
|
"type": 2,"length": 20,"name": "Лицевой счет получателя","shortname": "Счет получателя","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "budgetClassificationCode",
|
||||||
|
"type": 2,"length": 20,"name": "КБК","shortname": "КБК","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "oktmo",
|
||||||
|
"type": 2,"length": 20,"name": "ОКТМО получателя средств","shortname": "ОКТМО","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
|
|
@ -10332,6 +10516,32 @@
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
,
|
||||||
|
"blacklistMarket": {
|
||||||
|
|
||||||
|
"name": "blacklist площадок",
|
||||||
|
|
||||||
|
"destination": "blacklist-market",
|
||||||
|
|
||||||
|
"class": "ru.clearing.classes.statics.data.misc.BlacklistMarket",
|
||||||
|
|
||||||
|
"table": "blacklist_market",
|
||||||
|
|
||||||
|
"fields": [
|
||||||
|
{"code": "id",
|
||||||
|
"type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true,"visible": true
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "code",
|
||||||
|
"name": "Код рынка","shortname": "Код рынка","type": 2,"length": 12
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{"code": "section",
|
||||||
|
"name": "Секция","shortname": "Секция","type": 12
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,21 @@ public class BankAccount extends SpcexObjectBase {
|
||||||
private String account;
|
private String account;
|
||||||
private Long companyId;
|
private Long companyId;
|
||||||
private String intermediarySwiftCode;
|
private String intermediarySwiftCode;
|
||||||
|
private String name;
|
||||||
|
private String address;
|
||||||
|
private String bankAddress;
|
||||||
|
private String bankSwiftCode;
|
||||||
|
private String bankAccount;
|
||||||
|
private String bankName1;
|
||||||
|
private String bankAddress1;
|
||||||
|
private String bankAccount1;
|
||||||
|
private String bankName2;
|
||||||
|
private String bankAddress2;
|
||||||
|
private String intermediarySwiftCode2;
|
||||||
|
private String bankAccount2;
|
||||||
|
private String personalAccount;
|
||||||
|
private String budgetClassificationCode;
|
||||||
|
private String oktmo;
|
||||||
|
|
||||||
public Long getAccountId() {
|
public Long getAccountId() {
|
||||||
return accountId;
|
return accountId;
|
||||||
|
|
@ -143,7 +158,128 @@ public class BankAccount extends SpcexObjectBase {
|
||||||
return intermediarySwiftCode;
|
return intermediarySwiftCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIntermediarySwiftCode(String intermediarySwiftCode) {
|
public void setIntermediarySwiftCode(String value) {
|
||||||
this.intermediarySwiftCode = intermediarySwiftCode;
|
this.intermediarySwiftCode = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String value) {
|
||||||
|
this.name = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddress(String value) {
|
||||||
|
this.address = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAddress() {
|
||||||
|
return bankAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAddress(String value) {
|
||||||
|
this.bankAddress = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankSwiftCode() {
|
||||||
|
return bankSwiftCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankSwiftCode(String value) {
|
||||||
|
this.bankSwiftCode = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAccount() {
|
||||||
|
return bankAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAccount(String value) {
|
||||||
|
this.bankAccount = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankName1() {
|
||||||
|
return bankName1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankName1(String value) {
|
||||||
|
this.bankName1 = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAddress1() {
|
||||||
|
return bankAddress1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAddress1(String value) {
|
||||||
|
this.bankAddress1 = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAccount1() {
|
||||||
|
return bankAccount1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAccount1(String value) {
|
||||||
|
this.bankAccount1 = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankName2() {
|
||||||
|
return bankName2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankName2(String value) {
|
||||||
|
this.bankName2 = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAddress2() {
|
||||||
|
return bankAddress2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAddress2(String value) {
|
||||||
|
this.bankAddress2 = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIntermediarySwiftCode2() {
|
||||||
|
return intermediarySwiftCode2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIntermediarySwiftCode2(String value) {
|
||||||
|
this.intermediarySwiftCode2 = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBankAccount2() {
|
||||||
|
return bankAccount2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBankAccount2(String value) {
|
||||||
|
this.bankAccount2 = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPersonalAccount() {
|
||||||
|
return personalAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPersonalAccount(String value) {
|
||||||
|
this.personalAccount = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBudgetClassificationCode() {
|
||||||
|
return budgetClassificationCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBudgetClassificationCode(String value) {
|
||||||
|
this.budgetClassificationCode = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOktmo() {
|
||||||
|
return oktmo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOktmo(String value) {
|
||||||
|
this.oktmo = value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -60,6 +60,8 @@ public class STrades extends BusinessObject {
|
||||||
private Long tradeTimeMs;
|
private Long tradeTimeMs;
|
||||||
private String bankAccId;
|
private String bankAccId;
|
||||||
private String section;
|
private String section;
|
||||||
|
private String kind;
|
||||||
|
private Long linkedTrade;
|
||||||
|
|
||||||
public Long getTradeNum() {
|
public Long getTradeNum() {
|
||||||
return tradeNum;
|
return tradeNum;
|
||||||
|
|
@ -412,4 +414,20 @@ public class STrades extends BusinessObject {
|
||||||
public void setSection(String section) {
|
public void setSection(String section) {
|
||||||
this.section = section;
|
this.section = section;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getKind() {
|
||||||
|
return kind;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKind(String kind) {
|
||||||
|
this.kind = kind;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getLinkedTrade() {
|
||||||
|
return linkedTrade;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLinkedTrade(Long linkedTrade) {
|
||||||
|
this.linkedTrade = linkedTrade;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
package ru.clearing.classes.statics.data.security;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import ru.clearing.classes.objects.BusinessObject;
|
||||||
|
|
||||||
|
public class Rates extends BusinessObject {
|
||||||
|
private BigDecimal value;
|
||||||
|
private LocalDate valueDate;
|
||||||
|
private String currency;
|
||||||
|
private Long currencyId;
|
||||||
|
private String workflowStatus;
|
||||||
|
|
||||||
|
public BigDecimal getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(BigDecimal value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getValueDate() {
|
||||||
|
return valueDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValueDate(LocalDate valueDate) {
|
||||||
|
this.valueDate = valueDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrency() {
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrency(String currency) {
|
||||||
|
this.currency = currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getCurrencyId() {
|
||||||
|
return currencyId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrencyId(Long currencyId) {
|
||||||
|
this.currencyId = currencyId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWorkflowStatus() {
|
||||||
|
return workflowStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkflowStatus(String workflowStatus) {
|
||||||
|
this.workflowStatus = workflowStatus;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package ru.clearing.classes.statics.data.security;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import ru.clearing.classes.objects.BusinessObject;
|
||||||
|
|
||||||
|
public class RiskParameter extends BusinessObject {
|
||||||
|
private BigDecimal value;
|
||||||
|
private String settlementType;
|
||||||
|
private String currencyPair;
|
||||||
|
private Long currencyPairId;
|
||||||
|
private String workflowStatus;
|
||||||
|
|
||||||
|
public BigDecimal getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(BigDecimal value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSettlementType() {
|
||||||
|
return settlementType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSettlementType(String settlementType) {
|
||||||
|
this.settlementType = settlementType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrencyPair() {
|
||||||
|
return currencyPair;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrencyPair(String currencyPair) {
|
||||||
|
this.currencyPair = currencyPair;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getCurrencyPairId() {
|
||||||
|
return currencyPairId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrencyPairId(Long currencyPairId) {
|
||||||
|
this.currencyPairId = currencyPairId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWorkflowStatus() {
|
||||||
|
return workflowStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkflowStatus(String workflowStatus) {
|
||||||
|
this.workflowStatus = workflowStatus;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,13 +6,13 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>cleaning-builders</artifactId>
|
<artifactId>cleaning-builders</artifactId>
|
||||||
<name>cleaning-builders</name>
|
<name>cleaning-builders</name>
|
||||||
<description>Cleaning builders module</description>
|
<description>Cleaning builders module</description>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>classes</artifactId>
|
<artifactId>classes</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,17 @@ public class ClearingServiceSettings {
|
||||||
private KafkaConsumerSettings kafkaConsumer;
|
private KafkaConsumerSettings kafkaConsumer;
|
||||||
private KafkaProducerSettings kafkaProducer;
|
private KafkaProducerSettings kafkaProducer;
|
||||||
private SessionStageSettings sessionStage;
|
private SessionStageSettings sessionStage;
|
||||||
|
private boolean balanceCheckOmt = false;
|
||||||
private TradeSettings trade = new TradeSettings();
|
private TradeSettings trade = new TradeSettings();
|
||||||
|
|
||||||
|
public boolean isBalanceCheckOmt() {
|
||||||
|
return balanceCheckOmt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBalanceCheckOmt(boolean balanceCheckOmt) {
|
||||||
|
this.balanceCheckOmt = balanceCheckOmt;
|
||||||
|
}
|
||||||
|
|
||||||
public HazelcastClientParams getHazelcast() {
|
public HazelcastClientParams getHazelcast() {
|
||||||
return hazelcast;
|
return hazelcast;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ import ru.spcex.clearing.service.payment.PaymentInstructionOutboundService;
|
||||||
import ru.spcex.clearing.session.stage.CurrencySession;
|
import ru.spcex.clearing.session.stage.CurrencySession;
|
||||||
import ru.spcex.clearing.session.stage.FinalMkrSession;
|
import ru.spcex.clearing.session.stage.FinalMkrSession;
|
||||||
import ru.spcex.clearing.session.stage.IntermediateMkrSession;
|
import ru.spcex.clearing.session.stage.IntermediateMkrSession;
|
||||||
|
import ru.spcex.clearing.session.stage.PaymSession;
|
||||||
import ru.spcex.clearing.session.stage.PrimaryAuctionB0Session;
|
import ru.spcex.clearing.session.stage.PrimaryAuctionB0Session;
|
||||||
import ru.spcex.clearing.session.stage.PrimaryAuctionBnSession;
|
import ru.spcex.clearing.session.stage.PrimaryAuctionBnSession;
|
||||||
import ru.spcex.clearing.session.stage.PrimaryAuctionT0Session;
|
import ru.spcex.clearing.session.stage.PrimaryAuctionT0Session;
|
||||||
|
|
@ -73,6 +74,7 @@ public class EventsReceiver extends QueueConsumerV2 implements InitializingBean
|
||||||
private final PrimaryAuctionB0Session primaryAuctionB0Session;
|
private final PrimaryAuctionB0Session primaryAuctionB0Session;
|
||||||
private final IntermediateMkrSession intermediateMkrSession;
|
private final IntermediateMkrSession intermediateMkrSession;
|
||||||
private final FinalMkrSession finalMkrSession;
|
private final FinalMkrSession finalMkrSession;
|
||||||
|
private final PaymSession paymSession;
|
||||||
private final UnitedSession unitedSession;
|
private final UnitedSession unitedSession;
|
||||||
private final ReturnDepositSession returnDepositSession;
|
private final ReturnDepositSession returnDepositSession;
|
||||||
private final SessionManager sessionManager;
|
private final SessionManager sessionManager;
|
||||||
|
|
@ -96,7 +98,7 @@ public class EventsReceiver extends QueueConsumerV2 implements InitializingBean
|
||||||
PrimaryAuctionBnSession primaryAuctionBnSession,
|
PrimaryAuctionBnSession primaryAuctionBnSession,
|
||||||
SecondaryAuctionT0Session secondaryAuctionT0Session,
|
SecondaryAuctionT0Session secondaryAuctionT0Session,
|
||||||
CurrencySession currencySession,
|
CurrencySession currencySession,
|
||||||
PrimaryAuctionB0Session primaryAuctionB0Session, PrimaryAuctionT0Session primaryAuctionT0Session, IntermediateMkrSession intermediateMkrSession, FinalMkrSession finalMkrSession, UnitedSession unitedSession, ReturnDepositSession returnDepositSession, SessionManager sessionManager, SessionStateMachineWrapper stateMachineWrapper,
|
PrimaryAuctionB0Session primaryAuctionB0Session, PrimaryAuctionT0Session primaryAuctionT0Session, IntermediateMkrSession intermediateMkrSession, FinalMkrSession finalMkrSession, PaymSession paymSession, UnitedSession unitedSession, ReturnDepositSession returnDepositSession, SessionManager sessionManager, SessionStateMachineWrapper stateMachineWrapper,
|
||||||
Sdf06Executor sdf06Executor,
|
Sdf06Executor sdf06Executor,
|
||||||
Sdf10Executor sdf10Executor, BalanceRevise balanceRevise, Sdf05Sender sdf05Sender, StatementServiceV2 statementService, SessionTerminator sessionTerminator, PaymentInstructionOutboundService pmtOutboundService, ExecutionCurrencyComponent execCurrUpload, ExecutionDepositComponent execDepUpload, ExecutionFondComponent execFondUpload) {
|
Sdf10Executor sdf10Executor, BalanceRevise balanceRevise, Sdf05Sender sdf05Sender, StatementServiceV2 statementService, SessionTerminator sessionTerminator, PaymentInstructionOutboundService pmtOutboundService, ExecutionCurrencyComponent execCurrUpload, ExecutionDepositComponent execDepUpload, ExecutionFondComponent execFondUpload) {
|
||||||
super(kafkaQueue, kafkaResponseQueue);
|
super(kafkaQueue, kafkaResponseQueue);
|
||||||
|
|
@ -111,6 +113,7 @@ public class EventsReceiver extends QueueConsumerV2 implements InitializingBean
|
||||||
this.primaryAuctionT0Session = primaryAuctionT0Session;
|
this.primaryAuctionT0Session = primaryAuctionT0Session;
|
||||||
this.intermediateMkrSession = intermediateMkrSession;
|
this.intermediateMkrSession = intermediateMkrSession;
|
||||||
this.finalMkrSession = finalMkrSession;
|
this.finalMkrSession = finalMkrSession;
|
||||||
|
this.paymSession = paymSession;
|
||||||
this.unitedSession = unitedSession;
|
this.unitedSession = unitedSession;
|
||||||
this.returnDepositSession = returnDepositSession;
|
this.returnDepositSession = returnDepositSession;
|
||||||
this.sessionManager = sessionManager;
|
this.sessionManager = sessionManager;
|
||||||
|
|
@ -177,6 +180,7 @@ public class EventsReceiver extends QueueConsumerV2 implements InitializingBean
|
||||||
//finalMkrSession.continueSession(req);
|
//finalMkrSession.continueSession(req);
|
||||||
unitedSession.continueSession(req);
|
unitedSession.continueSession(req);
|
||||||
returnDepositSession.continueSession(req);
|
returnDepositSession.continueSession(req);
|
||||||
|
paymSession.continueSession(req);
|
||||||
SessionContinueEvent payload = req.getRequestPayload();
|
SessionContinueEvent payload = req.getRequestPayload();
|
||||||
Stream
|
Stream
|
||||||
.ofNullable(payload.getSdfType())
|
.ofNullable(payload.getSdfType())
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,9 @@ public class Sdf54Creator {
|
||||||
Status.Active.getKey(),
|
Status.Active.getKey(),
|
||||||
pmt.getCreditLeg_currencyCode()
|
pmt.getCreditLeg_currencyCode()
|
||||||
));
|
));
|
||||||
|
if (anltAcc == null) {
|
||||||
|
throw new IllegalStateException("couldn't fill acc_deb - no ANLT account for " + pmt.getCreditLeg_currencyCode());
|
||||||
|
}
|
||||||
// c_acc_deb = c_acc_deb == null ? paymentInstruction.getCreditLeg_account() : c_acc_deb;
|
// c_acc_deb = c_acc_deb == null ? paymentInstruction.getCreditLeg_account() : c_acc_deb;
|
||||||
c_acc_cred = c_acc_cred == null ? pmt.getDebitLeg_account() : c_acc_cred;
|
c_acc_cred = c_acc_cred == null ? pmt.getDebitLeg_account() : c_acc_cred;
|
||||||
|
|
||||||
|
|
@ -77,6 +80,9 @@ public class Sdf54Creator {
|
||||||
sDf54.setId(idGenerator.nextId());
|
sDf54.setId(idGenerator.nextId());
|
||||||
sDf54.setSeg_type("V");
|
sDf54.setSeg_type("V");
|
||||||
|
|
||||||
|
Long debCompanyId = anltAcc.getCompanyId();
|
||||||
|
sDf54.setAcc_deb(anltAcc.getAccount());
|
||||||
|
|
||||||
//**********************
|
//**********************
|
||||||
String tranBic = selectSymbolValue(Sender.Prc.getId(), CompanySymbol.BIC);
|
String tranBic = selectSymbolValue(Sender.Prc.getId(), CompanySymbol.BIC);
|
||||||
if (tranBic == null) {
|
if (tranBic == null) {
|
||||||
|
|
@ -103,22 +109,19 @@ public class Sdf54Creator {
|
||||||
sDf54::setSbanknam5);
|
sDf54::setSbanknam5);
|
||||||
sDf54.setOp_type("01");
|
sDf54.setOp_type("01");
|
||||||
sDf54.setOp_order("5");
|
sDf54.setOp_order("5");
|
||||||
String innDeb = selectSymbolValue(Sender.One.getId(), CompanySymbol.INN);
|
String innDeb = selectSymbolValue(debCompanyId, CompanySymbol.INN);
|
||||||
if (innDeb == null) {
|
if (innDeb == null) {
|
||||||
log.warn("CompanySymbols INN not found for companyId={}", Sender.One.getId());
|
log.warn("CompanySymbols INN not found for companyId={}", debCompanyId);
|
||||||
} else {
|
} else {
|
||||||
sDf54.setInn_deb(innDeb);
|
sDf54.setInn_deb(innDeb);
|
||||||
}
|
}
|
||||||
String kppDeb = selectSymbolValue(Sender.One.getId(), CompanySymbol.CPP);
|
String kppDeb = selectSymbolValue(debCompanyId, CompanySymbol.CPP);
|
||||||
if (kppDeb == null) {
|
if (kppDeb == null) {
|
||||||
log.warn("CompanySymbols CPP not found for companyId={}", Sender.One.getId());
|
log.warn("CompanySymbols CPP not found for companyId={}", debCompanyId);
|
||||||
} else {
|
} else {
|
||||||
sDf54.setKpp_deb(kppDeb);
|
sDf54.setKpp_deb(kppDeb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (anltAcc != null) {
|
|
||||||
sDf54.setAcc_deb(anltAcc.getAccount());
|
|
||||||
}
|
|
||||||
Account accDebAcc = accountImdg.getSingleObjectByID(pmt.getDebitLeg_accountId());
|
Account accDebAcc = accountImdg.getSingleObjectByID(pmt.getDebitLeg_accountId());
|
||||||
if (accDebAcc == null || !AccountStatus.ACTIVE.equalsByKey(accDebAcc.getStatus())) {
|
if (accDebAcc == null || !AccountStatus.ACTIVE.equalsByKey(accDebAcc.getStatus())) {
|
||||||
log.warn("paymentInstruction[{}].DebitLeg_accountId={} account not exist or not active.", pmt.getId(), pmt.getDebitLeg_accountId());
|
log.warn("paymentInstruction[{}].DebitLeg_accountId={} account not exist or not active.", pmt.getId(), pmt.getDebitLeg_accountId());
|
||||||
|
|
@ -177,7 +180,7 @@ public class Sdf54Creator {
|
||||||
sDf54.setC_acc_cred(c_acc_cred);
|
sDf54.setC_acc_cred(c_acc_cred);
|
||||||
|
|
||||||
{
|
{
|
||||||
Company company1 = companyImdg.getSingleObjectByID(Sender.One.getId());
|
Company company1 = companyImdg.getSingleObjectByID(debCompanyId);
|
||||||
if (company1 != null) { // "АО СПВБ" company.shortName[id = 1]
|
if (company1 != null) { // "АО СПВБ" company.shortName[id = 1]
|
||||||
String sclientn;
|
String sclientn;
|
||||||
if (LocaleUtil.isRus(locale)) {
|
if (LocaleUtil.isRus(locale)) {
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ import ru.spcex.clearing.service.Sdf54Creator;
|
||||||
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderV2;
|
import ru.spcex.clearing.service.builder.PaymentInstructionBuilderV2;
|
||||||
import ru.spcex.clearing.service.integration.GatewayRequestCreator;
|
import ru.spcex.clearing.service.integration.GatewayRequestCreator;
|
||||||
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
||||||
|
import ru.spcex.clearing.service.registry.BalanceChecker;
|
||||||
import ru.spcex.clearing.service.registry.DmiService;
|
import ru.spcex.clearing.service.registry.DmiService;
|
||||||
import ru.spcex.clearing.service.registry.RegistryManager;
|
import ru.spcex.clearing.service.registry.RegistryManager;
|
||||||
import ru.spcex.clearing.service.schedule.TradingTimeService;
|
import ru.spcex.clearing.service.schedule.TradingTimeService;
|
||||||
|
|
@ -55,6 +56,7 @@ import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumId;
|
import ru.spcex.platform.utils.enumeration.IEnumId;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
import ru.spcex.platform.utils.localization.SpringPropertiesLocalizer;
|
import ru.spcex.platform.utils.localization.SpringPropertiesLocalizer;
|
||||||
|
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||||
import ru.spcex.platform.utils.text.TextUtil;
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
import ru.spcex.platform.utils.validation.IValidator;
|
||||||
|
|
@ -82,6 +84,7 @@ public class PaymentInstructionOutboundService {
|
||||||
private final TradingTimeService time;
|
private final TradingTimeService time;
|
||||||
private final GatewayRequester gateway;
|
private final GatewayRequester gateway;
|
||||||
private final NotificationSender notification;
|
private final NotificationSender notification;
|
||||||
|
private final BalanceChecker balanceChecker;
|
||||||
private final SpringPropertiesLocalizer resolver;
|
private final SpringPropertiesLocalizer resolver;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -89,7 +92,7 @@ public class PaymentInstructionOutboundService {
|
||||||
IMessageResolver msgs,
|
IMessageResolver msgs,
|
||||||
ImdgProvider imdgProvider,
|
ImdgProvider imdgProvider,
|
||||||
Function<PIClearingOutbondActionNewRequest, IValidator> validation, RegistryManager rgsMng, KafkaSender kafkaSender, AssetTBFProcessing assetsMng, DmiService dmiService, TradingTimeService time, GatewayRequester gateway, NotificationSender notification,
|
Function<PIClearingOutbondActionNewRequest, IValidator> validation, RegistryManager rgsMng, KafkaSender kafkaSender, AssetTBFProcessing assetsMng, DmiService dmiService, TradingTimeService time, GatewayRequester gateway, NotificationSender notification,
|
||||||
SpringPropertiesLocalizer resolver) {
|
SpringPropertiesLocalizer resolver, BalanceChecker balanceChecker) {
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.rights = rights;
|
this.rights = rights;
|
||||||
this.msgs = msgs;
|
this.msgs = msgs;
|
||||||
|
|
@ -101,6 +104,7 @@ public class PaymentInstructionOutboundService {
|
||||||
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
this.currImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
|
this.currImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
|
||||||
this.sdf54Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf54, SDf54.class);
|
this.sdf54Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf54, SDf54.class);
|
||||||
|
this.balanceChecker = balanceChecker;
|
||||||
this.sdf54Creator = new Sdf54Creator(imdgProvider, resolver);
|
this.sdf54Creator = new Sdf54Creator(imdgProvider, resolver);
|
||||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||||
this.rgsMng = rgsMng;
|
this.rgsMng = rgsMng;
|
||||||
|
|
@ -172,25 +176,42 @@ public class PaymentInstructionOutboundService {
|
||||||
//fixme pmt.setDocumentNumber(registry.getSecurityId());
|
//fixme pmt.setDocumentNumber(registry.getSecurityId());
|
||||||
|
|
||||||
pmtImdg.insert(pmt);
|
pmtImdg.insert(pmt);
|
||||||
log.debug("new PaymentInstruction.id: {}", pmt.getId());
|
log.debug("PIClearingOutbondActionNewRequest.id={} new PaymentInstruction.id: {}",
|
||||||
|
req.getId(),
|
||||||
|
pmt.getId());
|
||||||
Optional<AssetTrio> assets = assetsMng.searchMoneyByAccAndCompany(addressee.getId(), accCred.getId());
|
Optional<AssetTrio> assets = assetsMng.searchMoneyByAccAndCompany(addressee.getId(), accCred.getId());
|
||||||
if (assets.isEmpty() || assetsMng.insufficientBalance(assets.get().a__f(), amount)) {
|
log.debug("PIClearingOutbondActionNewRequest.id={} a__f asset id={}",
|
||||||
|
req.getId(),
|
||||||
|
assets.map(AssetTrio::a__f).map(Registry::getId).orElse(null));
|
||||||
|
if (assets.isEmpty() || balanceChecker.insufficientBalance(assets.get().a__f(),
|
||||||
|
tcr.getId(), //never null because validation
|
||||||
|
accCred.getCurrency(),
|
||||||
|
amount)) {
|
||||||
pmt.setTransactionStatus(TransactionStatus.cher.getKey());
|
pmt.setTransactionStatus(TransactionStatus.cher.getKey());
|
||||||
pmt.setUpdated(now);
|
pmt.setUpdated(now);
|
||||||
pmtImdg.update(pmt);
|
pmtImdg.update(pmt);
|
||||||
log.debug("insufficient balance, pmt.id: {}, am*f.balance={}",
|
log.debug("insufficient balance, pmt.id: {}, am*f.balance={}",
|
||||||
pmt.getId(), assets.map(AssetTrio::a__f).map(Registry::getBalance).orElse(null));
|
pmt.getId(), assets.map(AssetTrio::a__f).map(Registry::getBalance).orElse(null));
|
||||||
return error(req.getId(), ClearingError.BalanceInsufficient);
|
return error(req.getId(), ClearingError.BalanceInsufficient);
|
||||||
}
|
}
|
||||||
log.debug("assets found and balance is ok. am*b.id={}, am*t.id={}, am*f.id={}",
|
log.debug("assets found and balance is ok. am*b.id={}, am*t.id={}, am*f.id={}",
|
||||||
assets.get().a__b().getId(), assets.get().a__t().getId(), assets.get().a__f().getId());
|
assets.get().a__b().getId(), assets.get().a__t().getId(), assets.get().a__f().getId());
|
||||||
SDf54 sDf54 = sdf54Creator.create(pmt);
|
SDf54 sDf54 = null;
|
||||||
|
try {
|
||||||
|
sDf54 = sdf54Creator.create(pmt);
|
||||||
|
} catch (IllegalStateException e) {
|
||||||
|
log.error(ExceptionUtils.getStackTrace(e));
|
||||||
|
pmt.setTransactionStatus(TransactionStatus.fail.getKey());
|
||||||
|
pmt.setUpdated(now);
|
||||||
|
pmtImdg.update(pmt);
|
||||||
|
return error(req.getId(), ClearingError.GeneralError);
|
||||||
|
}
|
||||||
sDf54.setId(idGenerator.nextId());
|
sDf54.setId(idGenerator.nextId());
|
||||||
sDf54.setGenerationId(pmt.getId());
|
sDf54.setGenerationId(pmt.getId());
|
||||||
if (time.isTradingTime()) {
|
if (time.isTradingTime()) {
|
||||||
Supplier<AssetOperationRequest> builder = () -> GatewayRequestCreator.from(pmt,
|
Supplier<AssetOperationRequest> builder = () -> GatewayRequestCreator.from(pmt,
|
||||||
assets.get().a__b().getTradingCode(),
|
assets.get().a__b().getTradingCode(),
|
||||||
tcr.getCode());
|
tcr == null ? null : tcr.getCode());
|
||||||
Optional<Boolean> gatewayOk = gateway.gatewayRequestAndWait(builder);
|
Optional<Boolean> gatewayOk = gateway.gatewayRequestAndWait(builder);
|
||||||
if (gatewayOk.isEmpty() || gatewayOk.get().equals(Boolean.FALSE)) {
|
if (gatewayOk.isEmpty() || gatewayOk.get().equals(Boolean.FALSE)) {
|
||||||
String gtwErrMsg = msgs.resolve(mapError(gatewayOk));
|
String gtwErrMsg = msgs.resolve(mapError(gatewayOk));
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,247 @@
|
||||||
|
package ru.spcex.clearing.service.registry;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
import java.util.function.Function;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
|
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
||||||
|
import ru.clearing.classes.statics.data.security.Rates;
|
||||||
|
import ru.clearing.classes.statics.data.security.RiskParameter;
|
||||||
|
import ru.spcex.clearing.config.element.ClearingServiceSettings;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import static ru.spcex.clearing.util.NumberUtils.safeCast;
|
||||||
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
|
import static ru.spcex.platform.enumeration.RegistryTradingParams.OM_T;
|
||||||
|
import ru.spcex.platform.enumeration.WorkflowStatus;
|
||||||
|
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.imdg.iml.hazelcast.adapter.CashCloser;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.adapter.key.GenericCashingKey1;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.adapter.key.GenericCashingKey2;
|
||||||
|
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||||
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class BalanceChecker {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
private final Imdg<Registry> rgsImdg;
|
||||||
|
private final Imdg<Rates> rateImdg;
|
||||||
|
private final Imdg<RiskParameter> riskParamImdg;
|
||||||
|
private final Imdg<CurrencyPairSecurity> currPairImdg;
|
||||||
|
private final boolean balanceCheckOmts;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public BalanceChecker(ImdgProvider imdgProvider, ClearingServiceSettings settings) {
|
||||||
|
this.rgsImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
|
this.rateImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_Rates, Rates.class, null);
|
||||||
|
this.riskParamImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_RiskParameter, RiskParameter.class, null);
|
||||||
|
this.currPairImdg = imdgProvider.getCashingImdg(IMDGDistributedNames.Map_CurrencyPairSecurity, CurrencyPairSecurity.class, null);
|
||||||
|
this.balanceCheckOmts = settings.isBalanceCheckOmt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean insufficientBalance(Registry a__f,
|
||||||
|
Long tcrId,
|
||||||
|
String accCurrency,
|
||||||
|
BigDecimal amount) {
|
||||||
|
if (!balanceCheckOmts) {
|
||||||
|
log.info("{}#id={}#balance={} check for amount {}; OM*T checks disabled",
|
||||||
|
a__f.getRegistryCode(), a__f.getId(), a__f.getBalance(), amount);
|
||||||
|
return safeBD(a__f.getBalance()).compareTo(safeBD(amount)) < 0;
|
||||||
|
}
|
||||||
|
log.info("{}#id={}#balance={} check for amount {}; OM*T checks enabled",
|
||||||
|
a__f.getRegistryCode(), a__f.getId(), a__f.getBalance(), amount);
|
||||||
|
LocalDate today = LocalDate.now();
|
||||||
|
ImdgPredicateBuilder rgsPb = rgsImdg.predicateBuilder();
|
||||||
|
ImdgPredicateBuilder ratePb = rateImdg.predicateBuilder();
|
||||||
|
|
||||||
|
Function<ImdgPredicate, ImdgPredicate> rgsAnd = p -> rgsPb.and(
|
||||||
|
rgsPb.sql(RegistryCodeSqlBuilder.getInstance(OM_T).build()),
|
||||||
|
rgsPb.equals("tradingClearingRegistryId", tcrId),
|
||||||
|
rgsPb.or(
|
||||||
|
rgsPb.equals("registryStatus", RegistryStatus.PROC.getKey()),
|
||||||
|
rgsPb.equals("registryStatus", RegistryStatus.MNG.getKey())
|
||||||
|
),
|
||||||
|
p
|
||||||
|
);
|
||||||
|
|
||||||
|
try (BalanceCheckerCash cash = new BalanceCheckerCash()) {
|
||||||
|
Collection<Registry> omtsToday = rgsImdg.getCollectionObjectsByPredicate(
|
||||||
|
rgsAnd.apply(
|
||||||
|
rgsPb.equals("settlementDate", today)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
Collection<Registry> omtsNotToday = rgsImdg.getCollectionObjectsByPredicate(
|
||||||
|
rgsAnd.apply(
|
||||||
|
rgsPb.not(rgsPb.equals("settlementDate", today))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
log.debug("a__f.id={} balance checking; omt today: {}, omt !today: {}",
|
||||||
|
a__f.getId(), omtsToday.size(), omtsNotToday.size());
|
||||||
|
|
||||||
|
BiFunction<Collection<Registry>, String, BigDecimal> omtSum = (rgss, settlType)
|
||||||
|
-> rgss
|
||||||
|
.stream()
|
||||||
|
.map(r -> {
|
||||||
|
Optional<Rates> crossRate = loadRate(r, today, cash);
|
||||||
|
Optional<RiskParameter> riskParam = loadRisk(r, settlType, cash);
|
||||||
|
BigDecimal oblAmount = r.getBalance();
|
||||||
|
BigDecimal rate = crossRate.map(Rates::getValue).orElse(BigDecimal.ONE);
|
||||||
|
BigDecimal risk = riskParam.map(RiskParameter::getValue).orElse(BigDecimal.ONE);
|
||||||
|
BigDecimal singleOblSum = safeBD(oblAmount)
|
||||||
|
.multiply(rate)
|
||||||
|
.multiply(risk);
|
||||||
|
log.debug("for {}.id={}: Rate.id={}; RiskParameter.id={}",
|
||||||
|
r.getRegistryCode(), r.getId(),
|
||||||
|
crossRate.map(SpcexObjectBase::getId).orElse(null),
|
||||||
|
riskParam.map(SpcexObjectBase::getId).orElse(null)
|
||||||
|
);
|
||||||
|
return singleOblSum;
|
||||||
|
})
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
|
||||||
|
BigDecimal todaySum = omtSum.apply(omtsToday, "T0");
|
||||||
|
BigDecimal notTodaySum = omtSum.apply(omtsNotToday, "T1");
|
||||||
|
|
||||||
|
Rates rate = rateImdg.getFirstObjectByPredicate(
|
||||||
|
ratePb.and(
|
||||||
|
ratePb.equals("currency", accCurrency),
|
||||||
|
ratePb.equals("valueDate", today)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
BigDecimal rateValue = (rate != null && rate.getValue() != null) ?
|
||||||
|
rate.getValue() : BigDecimal.ONE;
|
||||||
|
|
||||||
|
BigDecimal sumForObligations = todaySum
|
||||||
|
.add(notTodaySum)
|
||||||
|
.divide(rateValue, RoundingMode.HALF_UP);
|
||||||
|
|
||||||
|
log.debug("a__f.id={}, today OM*T sum {}; !today OM*T sum {}; rate for final formula: id={}, value={}; overall OM*T sum: {}",
|
||||||
|
a__f.getId(), todaySum, notTodaySum,
|
||||||
|
rate != null ? rate.getId() : null,
|
||||||
|
rateValue,
|
||||||
|
sumForObligations
|
||||||
|
);
|
||||||
|
|
||||||
|
return safeBD(a__f.getBalance())
|
||||||
|
.subtract(sumForObligations)
|
||||||
|
.compareTo(safeBD(amount)) < 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Optional<Rates> loadRate(Registry rgs,
|
||||||
|
LocalDate valueDate,
|
||||||
|
BalanceCheckerCash cash) {
|
||||||
|
if (TextUtil.isEmpty(rgs.getSecuritySymbol())) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
ImdgPredicateBuilder ratePb = rateImdg.predicateBuilder();
|
||||||
|
ImdgPredicate ratePredicate = ratePb.and(
|
||||||
|
ratePb.equals("valueDate", valueDate),
|
||||||
|
ratePb.equals("currency", rgs.getSecuritySymbol())
|
||||||
|
);
|
||||||
|
return Optional.ofNullable(rateImdg.getFirstObjectByPredicate(
|
||||||
|
ratePb.cashed(
|
||||||
|
ratePredicate,
|
||||||
|
cash.ratesCash,
|
||||||
|
new GenericCashingKey2<>(valueDate, rgs.getSecuritySymbol())
|
||||||
|
)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private CurrencyPairSecurity loadCurrPairSec(String contract, BalanceCheckerCash cash) {
|
||||||
|
ImdgPredicateBuilder currPb = currPairImdg.predicateBuilder();
|
||||||
|
Long contractCasted = safeCast(contract);
|
||||||
|
if (contractCasted == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
ImdgPredicate prdct = currPb.cashed(
|
||||||
|
currPb.equals("id", contractCasted),
|
||||||
|
cash.currPairCash,
|
||||||
|
new GenericCashingKey1<>(contractCasted));
|
||||||
|
return currPairImdg.getFirstObjectByPredicate(
|
||||||
|
prdct
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Optional<RiskParameter> loadRisk(
|
||||||
|
Registry rgs, String settlementType, BalanceCheckerCash cash
|
||||||
|
) {
|
||||||
|
CurrencyPairSecurity pair = loadCurrPairSec(
|
||||||
|
rgs.getContract(), cash
|
||||||
|
);
|
||||||
|
|
||||||
|
if (pair == null) {
|
||||||
|
log.warn("cannot find currencyPairSecurity for {}#id={}#contract={}",
|
||||||
|
rgs.getRegistryCode(),
|
||||||
|
rgs.getId(),
|
||||||
|
rgs.getContract());
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
log.debug("found currencyPairSecurity.id={} for {}.id={}",
|
||||||
|
rgs.getRegistryCode(),
|
||||||
|
rgs.getId(),
|
||||||
|
pair.getId());
|
||||||
|
|
||||||
|
ImdgPredicateBuilder riskPb = riskParamImdg.predicateBuilder();
|
||||||
|
|
||||||
|
|
||||||
|
ImdgPredicate prdct = riskPb.and(
|
||||||
|
riskPb.equals("currencyPairId", pair.getCurrencyPairId()),
|
||||||
|
riskPb.equals("settlementType", settlementType),
|
||||||
|
riskPb.equals("workflowStatus", WorkflowStatus.Active.getKey())
|
||||||
|
);
|
||||||
|
ImdgPredicate prdctF = riskPb.cashed(
|
||||||
|
prdct,
|
||||||
|
cash.riskCash,
|
||||||
|
new GenericCashingKey2<>(pair.getId(), settlementType)
|
||||||
|
);
|
||||||
|
return Optional.ofNullable(riskParamImdg.getFirstObjectByPredicate(prdctF));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static class BalanceCheckerCash extends CashCloser {
|
||||||
|
protected final CashV2<GenericCashingKey2<LocalDate, String>, Rates> ratesCash;
|
||||||
|
protected final CashV2<GenericCashingKey2<Long, String>, RiskParameter> riskCash;
|
||||||
|
protected final CashV2<GenericCashingKey1<Long>, CurrencyPairSecurity> currPairCash;
|
||||||
|
|
||||||
|
public BalanceCheckerCash() {
|
||||||
|
cashes = new ArrayList<>();
|
||||||
|
ratesCash = add(new CashV2<GenericCashingKey2<LocalDate, String>, Rates>() {
|
||||||
|
@Override
|
||||||
|
protected GenericCashingKey2<LocalDate, String> extractKey(Rates obj) {
|
||||||
|
return new GenericCashingKey2<>(obj.getValueDate(), obj.getCurrency());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
riskCash = add(new CashV2<GenericCashingKey2<Long, String>, RiskParameter>() {
|
||||||
|
@Override
|
||||||
|
protected GenericCashingKey2<Long, String> extractKey(RiskParameter obj) {
|
||||||
|
return new GenericCashingKey2<>(obj.getCurrencyPairId(), obj.getSettlementType());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
currPairCash = add(new CashV2<GenericCashingKey1<Long>, CurrencyPairSecurity>() {
|
||||||
|
@Override
|
||||||
|
protected GenericCashingKey1<Long> extractKey(CurrencyPairSecurity obj) {
|
||||||
|
return new GenericCashingKey1<>(obj.getCurrencyPairId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,6 @@ import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.enumeration.AccountType;
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
import ru.spcex.platform.enumeration.Sender;
|
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
|
@ -32,9 +31,8 @@ public class AnltAccLoad implements IValidationRule<ImdgValidationContext<Object
|
||||||
Imdg<SpcexObjectBase> accImdg = context.obtainMap(IMDGDistributedNames.Map_Account, SpcexObjectBase.class);
|
Imdg<SpcexObjectBase> accImdg = context.obtainMap(IMDGDistributedNames.Map_Account, SpcexObjectBase.class);
|
||||||
ImdgPredicateBuilder pb = accImdg.predicateBuilder();
|
ImdgPredicateBuilder pb = accImdg.predicateBuilder();
|
||||||
ImdgPredicate prdct = pb.and(
|
ImdgPredicate prdct = pb.and(
|
||||||
pb.equals("companyId", Sender.One.getId()),
|
pb.equals("currency", rgs.getSecuritySymbol()),
|
||||||
pb.equals("accountType", AccountType.Anlt.getKey()),
|
pb.equals("accountType", AccountType.Anlt.getKey())
|
||||||
pb.equals("currency", rgs.getSecuritySymbol())
|
|
||||||
);
|
);
|
||||||
Object anltAcc = accImdg.getSingleObjectByPredicate(prdct);
|
Object anltAcc = accImdg.getSingleObjectByPredicate(prdct);
|
||||||
if (anltAcc == null) {
|
if (anltAcc == null) {
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,6 @@ import ru.spcex.platform.enumeration.AccountType;
|
||||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||||
import ru.spcex.platform.enumeration.ServiceStatus;
|
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
|
||||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
import ru.spcex.platform.imdg.validation.Stored;
|
import ru.spcex.platform.imdg.validation.Stored;
|
||||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
|
|
@ -138,22 +136,6 @@ public enum IdentificationFundsValidationRule implements IValidationRule<ImdgVal
|
||||||
context.storeObject(ValidationStored.IdentificationFundsAssetTrio, assetTrio.get());
|
context.storeObject(ValidationStored.IdentificationFundsAssetTrio, assetTrio.get());
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
},
|
|
||||||
AnltLoad() {
|
|
||||||
@Override
|
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<IdentificationFundsRequest> context) {
|
|
||||||
Imdg<Account> accImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class);
|
|
||||||
ImdgPredicateBuilder pb = accImdg.predicateBuilder();
|
|
||||||
ImdgPredicate prdct = pb.and(
|
|
||||||
pb.equals("companyId", 1L),
|
|
||||||
pb.equals("accountType", AccountType.Anlt.getKey())
|
|
||||||
);
|
|
||||||
Account anltAcc = accImdg.getSingleObjectByPredicate(prdct);
|
|
||||||
if (anltAcc == null) {
|
|
||||||
return of(ClearingError.GeneralError);
|
|
||||||
}
|
|
||||||
return empty();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
private final static Logger log = LoggerFactory.getLogger(IdentificationFundsValidationRule.class);
|
private final static Logger log = LoggerFactory.getLogger(IdentificationFundsValidationRule.class);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import ru.spcex.clearing.error.ClearingError;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.service.validation.RegistryValidationStored;
|
import ru.spcex.clearing.service.validation.RegistryValidationStored;
|
||||||
import ru.spcex.platform.enumeration.Section;
|
import ru.spcex.platform.enumeration.Section;
|
||||||
|
import ru.spcex.platform.enumeration.Sender;
|
||||||
import ru.spcex.platform.enumeration.ServiceStatus;
|
import ru.spcex.platform.enumeration.ServiceStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
|
|
@ -54,6 +55,9 @@ public class ClearingAvailableValidationRule implements IValidationRule<ImdgVali
|
||||||
String section = validatedObject.getSection();
|
String section = validatedObject.getSection();
|
||||||
Section sctn = IEnumKey.getEnumByKey(Section.class, validatedObject.getSection());
|
Section sctn = IEnumKey.getEnumByKey(Section.class, validatedObject.getSection());
|
||||||
if (Section.CURR.equals(sctn)) {
|
if (Section.CURR.equals(sctn)) {
|
||||||
|
if (Sender.CK.equalsById(validatedObject.getCompanyId())) {
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
section = Section.MKR.getKey();
|
section = Section.MKR.getKey();
|
||||||
}
|
}
|
||||||
Imdg<Relation> rltnImdg = context.obtainMap(IMDGDistributedNames.Map_Relation, Relation.class);
|
Imdg<Relation> rltnImdg = context.obtainMap(IMDGDistributedNames.Map_Relation, Relation.class);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,238 @@
|
||||||
|
package ru.spcex.clearing.session.stage;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
||||||
|
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
||||||
|
import ru.clearing.classes.statics.data.misc.Session;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.BalanceRevise;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.DealsPrepare;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.EndStageNotification;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.FinishingSession;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.FormingPaymentInstructionAssets;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.InclusionObligations;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.InspectionObligationsV2;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.ObligationAdmission;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.RequirementsAndObligationCreation;
|
||||||
|
import ru.spcex.clearing.session.stage.monitor.SessionMonitor;
|
||||||
|
import ru.spcex.clearing.session.stage.task.DealsPreparePayload;
|
||||||
|
import ru.spcex.clearing.session.stage.task.EndStageNotificationPayload;
|
||||||
|
import ru.spcex.clearing.session.stage.task.FinishingSessionPayload;
|
||||||
|
import ru.spcex.clearing.session.stage.task.FormingPaymentInstructionPayload;
|
||||||
|
import ru.spcex.clearing.session.stage.task.InclusionToPoolPayload;
|
||||||
|
import ru.spcex.clearing.session.stage.task.InspectionPoolPayload;
|
||||||
|
import ru.spcex.clearing.session.stage.task.RequirementsAndObligationCreationPayload;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.ExecutionType;
|
||||||
|
import ru.spcex.platform.enumeration.Section;
|
||||||
|
import ru.spcex.platform.enumeration.SessionStatus;
|
||||||
|
import ru.spcex.platform.enumeration.SessionType;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class PaymSession extends AbstractSession implements InitializingBean {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
private final DealsPrepare dealsPrepare;
|
||||||
|
private final RequirementsAndObligationCreation requirementsAndObligationCreation;
|
||||||
|
private final ObligationAdmission obligationsAdmission;
|
||||||
|
private final BalanceRevise balanceRevise;
|
||||||
|
private final InclusionObligations inclusionObligations;
|
||||||
|
|
||||||
|
private final InspectionObligationsV2 inspectionObligations;
|
||||||
|
private final FormingPaymentInstructionAssets formingPaymentInstructionAssets;
|
||||||
|
private final FinishingSession finishingSession;
|
||||||
|
private final EndStageNotification endStageNotification;
|
||||||
|
|
||||||
|
private final Imdg<ExecutionCurrency> executionCurrencyImdg;
|
||||||
|
private final Supplier<List<String>> marketCodes;
|
||||||
|
private SessionMonitor afterReviseErrorMonitor;
|
||||||
|
|
||||||
|
|
||||||
|
public PaymSession(
|
||||||
|
ImdgProvider imdgProvider,
|
||||||
|
DealsPrepare dealsPrepare,
|
||||||
|
RequirementsAndObligationCreation requirementsAndObligationCreation,
|
||||||
|
ObligationAdmission obligationsAdmission,
|
||||||
|
InclusionObligations inclusionObligations,
|
||||||
|
BalanceRevise balanceRevise,
|
||||||
|
FormingPaymentInstructionAssets formingPaymentInstructionAssets,
|
||||||
|
FinishingSession finishingSession,
|
||||||
|
EndStageNotification endStageNotification,
|
||||||
|
IMessageResolver messageResolver,
|
||||||
|
InspectionObligationsV2 inspectionObligations,
|
||||||
|
@Qualifier("marketCodesForCurr") Supplier<List<String>> marketCodes) {
|
||||||
|
super(imdgProvider, messageResolver);
|
||||||
|
this.dealsPrepare = dealsPrepare;
|
||||||
|
this.requirementsAndObligationCreation = requirementsAndObligationCreation;
|
||||||
|
this.obligationsAdmission = obligationsAdmission;
|
||||||
|
this.inclusionObligations = inclusionObligations;
|
||||||
|
this.balanceRevise = balanceRevise;
|
||||||
|
this.formingPaymentInstructionAssets = formingPaymentInstructionAssets;
|
||||||
|
this.finishingSession = finishingSession;
|
||||||
|
this.endStageNotification = endStageNotification;
|
||||||
|
this.executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class);
|
||||||
|
this.inspectionObligations = inspectionObligations;
|
||||||
|
this.marketCodes = marketCodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
dealsPrepare.searchForExecutions(ExecutionType.ExecutionCurrency);
|
||||||
|
ImdgPredicateBuilder execFondPb = executionCurrencyImdg.predicateBuilder();
|
||||||
|
dealsPrepare.addExecutionCurrencyCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||||
|
requirementsAndObligationCreation.setSessionType(sessionType());
|
||||||
|
formingPaymentInstructionAssets.setSessionType(sessionType());
|
||||||
|
formingPaymentInstructionAssets.setDisableCompanyCondition(true);
|
||||||
|
inclusionObligations.setSessionType(sessionType());
|
||||||
|
|
||||||
|
inspectionObligations.setSection(section());
|
||||||
|
inspectionObligations.setSessionType(sessionType());
|
||||||
|
finishingSession.setSection(section());
|
||||||
|
finishingSession.setSessionType(sessionType());
|
||||||
|
imdgProvider.waitAvailable();
|
||||||
|
initSessionIfPresent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void runSession(BaseRequest<?> req) {
|
||||||
|
if (!startSession()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
runStage(TaskType.StartRevisePart1, currSession.getId(), balanceRevise);
|
||||||
|
//stage 1
|
||||||
|
StageResult<List<ExecutionCommon>> dealsPreparationResult;
|
||||||
|
{
|
||||||
|
DealsPreparePayload payload = new DealsPreparePayload();
|
||||||
|
payload.setSessionId(currSession.getId());
|
||||||
|
dealsPreparationResult = runStage(TaskType.DealsPrepare, payload, dealsPrepare);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
//stage 2
|
||||||
|
RequirementsAndObligationCreationPayload payload = new RequirementsAndObligationCreationPayload(
|
||||||
|
dealsPreparationResult.getStageResult(), currSession.getId()
|
||||||
|
);
|
||||||
|
runStage(TaskType.RequirementsAndObligationsCreate, payload, requirementsAndObligationCreation);
|
||||||
|
}
|
||||||
|
//stage 3
|
||||||
|
runStage(TaskType.ObligationsAdmission, currSession.getId(), obligationsAdmission);
|
||||||
|
//stage 4
|
||||||
|
{
|
||||||
|
InclusionToPoolPayload inclusionToPoolPayload = new InclusionToPoolPayload();
|
||||||
|
inclusionToPoolPayload.setSessionType(currSession.getSessionType());
|
||||||
|
inclusionToPoolPayload.setSessionId(currSession.getId());
|
||||||
|
runStage(TaskType.InclusionToPool, inclusionToPoolPayload, inclusionObligations);
|
||||||
|
}
|
||||||
|
//stage 5
|
||||||
|
{
|
||||||
|
InspectionPoolPayload companyIdPayload = new InspectionPoolPayload();
|
||||||
|
companyIdPayload.setSessionId(currSession.getId());
|
||||||
|
companyIdPayload.setProcessedCompanyId(currSession.getCompanyId());
|
||||||
|
runStage(TaskType.InspectionObligations, companyIdPayload, inspectionObligations);
|
||||||
|
}
|
||||||
|
//stage 7
|
||||||
|
{
|
||||||
|
FormingPaymentInstructionPayload payload = new FormingPaymentInstructionPayload();
|
||||||
|
payload.setSessionId(currSession.getId());
|
||||||
|
runStage(TaskType.FormingPaymentInstruction, payload, formingPaymentInstructionAssets);
|
||||||
|
}
|
||||||
|
finishPart();
|
||||||
|
} catch (StageException e) {
|
||||||
|
//already logged
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void continueSession(BaseRequest<?> req) {
|
||||||
|
try {
|
||||||
|
if (!isRunning()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log.info("session is running, stage {}, monitors: {}",
|
||||||
|
currStage.get(),
|
||||||
|
logMonitors(afterReviseErrorMonitor));
|
||||||
|
if (afterReviseErrorMonitor != null && isMonitorPassed(afterReviseErrorMonitor, req.getRequestPayload())) {
|
||||||
|
afterReviseErrorMonitor = null;
|
||||||
|
finishPart();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (StageException e) {
|
||||||
|
//already logged
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void finishPart() {
|
||||||
|
try {
|
||||||
|
//stage 9 continue revision
|
||||||
|
{
|
||||||
|
StageResult<Object> reviseRes = runStage(TaskType.AgainRevise, currSession.getId(), balanceRevise, false);
|
||||||
|
if (!reviseRes.isSuccess()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//stage 10
|
||||||
|
{
|
||||||
|
FinishingSessionPayload payload = new FinishingSessionPayload();
|
||||||
|
payload.setSessionId(currSession.getId());
|
||||||
|
payload.setPr("1");
|
||||||
|
runStage(TaskType.FinishingSession, payload, finishingSession);
|
||||||
|
}
|
||||||
|
//stage 11
|
||||||
|
{
|
||||||
|
EndStageNotificationPayload payload = new EndStageNotificationPayload();
|
||||||
|
payload.setSection(currSession.getSection());
|
||||||
|
payload.setSessionId(currSession.getId());
|
||||||
|
runStage(TaskType.EndStageNotification, payload, endStageNotification);
|
||||||
|
endSession();
|
||||||
|
}
|
||||||
|
} catch (StageException e) {
|
||||||
|
//already logged
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean startSession() {
|
||||||
|
synchronized (this.currStage) {
|
||||||
|
if (this.currStage.get() != null) {
|
||||||
|
log.info("already running session.id={}", this.currSession.getId());
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
TaskType startStatus = TaskType.StartRevise;
|
||||||
|
Session newSession = new Session();
|
||||||
|
newSession.setSection(section().getKey());
|
||||||
|
newSession.setSessionType(sessionType().getKey());
|
||||||
|
newSession.setSessionStatus(startStatus.getKey());
|
||||||
|
newSession.setWorkflowStatus(SessionStatus.ACTV.getKey());
|
||||||
|
newSession.setClearingDate(LocalDate.now());
|
||||||
|
newSession.setCreated(Instant.now());
|
||||||
|
|
||||||
|
//todo companyId/securityId/userId передается из сообщения очереди
|
||||||
|
sessionImdg.insert(newSession);
|
||||||
|
currSession = newSession;
|
||||||
|
log.info("started new session.id={}", this.currSession.getId());
|
||||||
|
currStage.set(TaskType.StartRevise);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Section section() {
|
||||||
|
return Section.CURR;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SessionType sessionType() {
|
||||||
|
return SessionType.PAYM;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,131 @@
|
||||||
|
package ru.spcex.clearing.session.stage;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
||||||
|
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
||||||
|
import ru.clearing.classes.statics.data.misc.Session;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.BalanceRevise;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.DealsPrepare;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.ObligationAdmission;
|
||||||
|
import ru.spcex.clearing.session.stage.impl.RequirementsAndObligationCreation;
|
||||||
|
import ru.spcex.clearing.session.stage.task.DealsPreparePayload;
|
||||||
|
import ru.spcex.clearing.session.stage.task.RequirementsAndObligationCreationPayload;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.ExecutionType;
|
||||||
|
import ru.spcex.platform.enumeration.Section;
|
||||||
|
import ru.spcex.platform.enumeration.SessionStatus;
|
||||||
|
import ru.spcex.platform.enumeration.SessionType;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class PrepSession extends AbstractSession implements InitializingBean {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
private final DealsPrepare dealsPrepare;
|
||||||
|
private final RequirementsAndObligationCreation requirementsAndObligationCreation;
|
||||||
|
private final ObligationAdmission obligationsAdmission;
|
||||||
|
private final Imdg<ExecutionCurrency> executionCurrencyImdg;
|
||||||
|
private final Supplier<List<String>> marketCodes;
|
||||||
|
|
||||||
|
public PrepSession(
|
||||||
|
ImdgProvider imdgProvider,
|
||||||
|
BalanceRevise balanceRevise,
|
||||||
|
DealsPrepare dealsPrepare,
|
||||||
|
RequirementsAndObligationCreation requirementsAndObligationCreation,
|
||||||
|
IMessageResolver messageResolver, ObligationAdmission obligationsAdmission,
|
||||||
|
@Qualifier("marketCodesForCurr") Supplier<List<String>> marketCodes) {
|
||||||
|
super(imdgProvider, messageResolver);
|
||||||
|
this.dealsPrepare = dealsPrepare;
|
||||||
|
this.requirementsAndObligationCreation = requirementsAndObligationCreation;
|
||||||
|
this.obligationsAdmission = obligationsAdmission;
|
||||||
|
this.executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class);
|
||||||
|
this.marketCodes = marketCodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterPropertiesSet() throws Exception {
|
||||||
|
dealsPrepare.searchForExecutions(ExecutionType.ExecutionCurrency);
|
||||||
|
ImdgPredicateBuilder execFondPb = executionCurrencyImdg.predicateBuilder();
|
||||||
|
dealsPrepare.addExecutionCurrencyCondition(execFondPb.regex("settlementCode", "^T0.*$"));
|
||||||
|
dealsPrepare.addExecutionCurrencyCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||||
|
requirementsAndObligationCreation.setSessionType(sessionType());
|
||||||
|
imdgProvider.waitAvailable();
|
||||||
|
initSessionIfPresent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void runSession(BaseRequest<?> req) {
|
||||||
|
if (!startSession()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
log.info("session is running, stage {}", currStage.get());
|
||||||
|
try {
|
||||||
|
//stage 1
|
||||||
|
StageResult<List<ExecutionCommon>> dealsPreparationResult;
|
||||||
|
{
|
||||||
|
DealsPreparePayload payload = new DealsPreparePayload();
|
||||||
|
payload.setSessionId(currSession.getId());
|
||||||
|
dealsPreparationResult = runStage(TaskType.DealsPrepare, payload, dealsPrepare);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
//stage 2
|
||||||
|
RequirementsAndObligationCreationPayload payload = new RequirementsAndObligationCreationPayload(
|
||||||
|
dealsPreparationResult.getStageResult(), currSession.getId()
|
||||||
|
);
|
||||||
|
runStage(TaskType.RequirementsAndObligationsCreate, payload, requirementsAndObligationCreation);
|
||||||
|
}
|
||||||
|
//stage 3
|
||||||
|
runStage(TaskType.ObligationsAdmission, currSession.getId(), obligationsAdmission);
|
||||||
|
endSession();
|
||||||
|
} catch (StageException e) {
|
||||||
|
//already logged
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean startSession() {
|
||||||
|
synchronized (this.currStage) {
|
||||||
|
if (this.currStage.get() != null) {
|
||||||
|
log.info("already running session.id={}", this.currSession.getId());
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
TaskType startStatus = TaskType.StartRevise;
|
||||||
|
Session newSession = new Session();
|
||||||
|
newSession.setSection(section().getKey());
|
||||||
|
newSession.setSessionType(sessionType().getKey());
|
||||||
|
newSession.setSessionStatus(startStatus.getKey());
|
||||||
|
newSession.setWorkflowStatus(SessionStatus.ACTV.getKey());
|
||||||
|
newSession.setClearingDate(LocalDate.now());
|
||||||
|
newSession.setCreated(Instant.now());
|
||||||
|
|
||||||
|
//todo companyId/securityId/userId передается из сообщения очереди
|
||||||
|
sessionImdg.insert(newSession);
|
||||||
|
currSession = newSession;
|
||||||
|
log.info("started new session.id={}", this.currSession.getId());
|
||||||
|
currStage.set(TaskType.StartRevise);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Section section() {
|
||||||
|
return Section.CURR;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SessionType sessionType() {
|
||||||
|
return SessionType.PREP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -37,6 +37,9 @@ public class SessionManager {
|
||||||
private final CurrencySession currencySession;
|
private final CurrencySession currencySession;
|
||||||
private final IntermediateMkrSession intermediateMkrSession;
|
private final IntermediateMkrSession intermediateMkrSession;
|
||||||
private final FinalMkrSession finalMkrSession;
|
private final FinalMkrSession finalMkrSession;
|
||||||
|
private final PrepSession prepSession;
|
||||||
|
private final PaymSession paymSession;
|
||||||
|
|
||||||
private final ReturnDepositSession returnDepositSession;
|
private final ReturnDepositSession returnDepositSession;
|
||||||
private final UnitedSession unitedSession;
|
private final UnitedSession unitedSession;
|
||||||
private final TradingTimeService time;
|
private final TradingTimeService time;
|
||||||
|
|
@ -46,7 +49,7 @@ public class SessionManager {
|
||||||
PrimaryAuctionBnSession primaryAuctionBnSession,
|
PrimaryAuctionBnSession primaryAuctionBnSession,
|
||||||
PrimaryAuctionB0Session primaryAuctionB0Session,
|
PrimaryAuctionB0Session primaryAuctionB0Session,
|
||||||
SecondaryAuctionT0Session secondaryAuctionT0Session, CurrencySession currencySession,
|
SecondaryAuctionT0Session secondaryAuctionT0Session, CurrencySession currencySession,
|
||||||
IntermediateMkrSession intermediateMkrSession, FinalMkrSession finalMkrSession, ReturnDepositSession returnDepositSession, UnitedSession unitedSession, TradingTimeService time) {
|
IntermediateMkrSession intermediateMkrSession, FinalMkrSession finalMkrSession, PrepSession prepSession, PaymSession paymSession, ReturnDepositSession returnDepositSession, UnitedSession unitedSession, TradingTimeService time) {
|
||||||
this.notification = notification;
|
this.notification = notification;
|
||||||
this.msgs = msgs;
|
this.msgs = msgs;
|
||||||
this.primaryAuctionT0Session = primaryAuctionT0Session;
|
this.primaryAuctionT0Session = primaryAuctionT0Session;
|
||||||
|
|
@ -56,6 +59,8 @@ public class SessionManager {
|
||||||
this.currencySession = currencySession;
|
this.currencySession = currencySession;
|
||||||
this.intermediateMkrSession = intermediateMkrSession;
|
this.intermediateMkrSession = intermediateMkrSession;
|
||||||
this.finalMkrSession = finalMkrSession;
|
this.finalMkrSession = finalMkrSession;
|
||||||
|
this.prepSession = prepSession;
|
||||||
|
this.paymSession = paymSession;
|
||||||
this.returnDepositSession = returnDepositSession;
|
this.returnDepositSession = returnDepositSession;
|
||||||
|
|
||||||
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||||
|
|
@ -123,6 +128,8 @@ public class SessionManager {
|
||||||
case CURR -> session = currencySession;
|
case CURR -> session = currencySession;
|
||||||
case MEDM -> session = intermediateMkrSession;
|
case MEDM -> session = intermediateMkrSession;
|
||||||
case FINL -> session = finalMkrSession;
|
case FINL -> session = finalMkrSession;
|
||||||
|
case PREP -> session = prepSession;
|
||||||
|
case PAYM -> session = paymSession;
|
||||||
case XDEP -> session = returnDepositSession;
|
case XDEP -> session = returnDepositSession;
|
||||||
case UNIT -> session = unitedSession;
|
case UNIT -> session = unitedSession;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,7 @@ public class FinishingSession implements ISessionStage {
|
||||||
notAllowed,
|
notAllowed,
|
||||||
executions.size() - (allowed + notAllowed));
|
executions.size() - (allowed + notAllowed));
|
||||||
}
|
}
|
||||||
if (IEnumKey.contains(sessionType, SessionType.CURR, SessionType.TRDT, SessionType.IPOB, SessionType.IPO0, SessionType.IPOT, SessionType.UNIT)) {
|
if (IEnumKey.contains(sessionType, SessionType.CURR, SessionType.PAYM, SessionType.TRDT, SessionType.IPOB, SessionType.IPO0, SessionType.IPOT, SessionType.UNIT)) {
|
||||||
Collection<? extends ExecutionCommon> executions = findExecutionFondBySessionId(sessionId, sessionType);
|
Collection<? extends ExecutionCommon> executions = findExecutionFondBySessionId(sessionId, sessionType);
|
||||||
Map<Long, ExecutionCurrency> execCurr = new HashMap<>();
|
Map<Long, ExecutionCurrency> execCurr = new HashMap<>();
|
||||||
Map<Long, ExecutionFond> execFond = new HashMap<>();
|
Map<Long, ExecutionFond> execFond = new HashMap<>();
|
||||||
|
|
@ -248,7 +248,9 @@ public class FinishingSession implements ISessionStage {
|
||||||
return sResult;
|
return sResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sdf05Sender.sendSdf05(pr);
|
if (!SessionType.PAYM.equals(sessionType)) {
|
||||||
|
sdf05Sender.sendSdf05(pr);
|
||||||
|
}
|
||||||
if (Section.FOND.equals(section) || Section.MULT.equals(section)) {
|
if (Section.FOND.equals(section) || Section.MULT.equals(section)) {
|
||||||
sdf14Sender.sendSdf14(sessionId);
|
sdf14Sender.sendSdf14(sessionId);
|
||||||
}
|
}
|
||||||
|
|
@ -336,7 +338,7 @@ public class FinishingSession implements ISessionStage {
|
||||||
return res;
|
return res;
|
||||||
} else {
|
} else {
|
||||||
Imdg<? extends ExecutionCommon> excImdg;
|
Imdg<? extends ExecutionCommon> excImdg;
|
||||||
if (sessionType.equals(SessionType.CURR)) {
|
if (sessionType.equals(SessionType.CURR) || sessionType.equals(SessionType.PAYM)) {
|
||||||
excImdg = executionCurrencyImdg;
|
excImdg = executionCurrencyImdg;
|
||||||
} else {
|
} else {
|
||||||
excImdg = executionFondImdg;
|
excImdg = executionFondImdg;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
@ -101,6 +100,7 @@ public class FormingPaymentInstructionAssets implements ISessionStage {
|
||||||
private SessionType sessionType;
|
private SessionType sessionType;
|
||||||
private final PaymentStateMarkService dmvSrv;
|
private final PaymentStateMarkService dmvSrv;
|
||||||
private final AssetTBFProcessing assets;
|
private final AssetTBFProcessing assets;
|
||||||
|
private boolean disableCompanyCondition = false;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public FormingPaymentInstructionAssets(ImdgProvider imdgProvider,
|
public FormingPaymentInstructionAssets(ImdgProvider imdgProvider,
|
||||||
|
|
@ -137,6 +137,10 @@ public class FormingPaymentInstructionAssets implements ISessionStage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDisableCompanyCondition(boolean disableCompanyCondition) {
|
||||||
|
this.disableCompanyCondition = disableCompanyCondition;
|
||||||
|
}
|
||||||
|
|
||||||
private Collection<Registry> selectAMBRegistries(Long sessionId) {
|
private Collection<Registry> selectAMBRegistries(Long sessionId) {
|
||||||
ImdgPredicateBuilder rgsPb = registryImdg.predicateBuilder();
|
ImdgPredicateBuilder rgsPb = registryImdg.predicateBuilder();
|
||||||
RegistryCodeSqlBuilder registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(
|
RegistryCodeSqlBuilder registryCodeSqlBuilder = RegistryCodeSqlBuilder.getInstance(
|
||||||
|
|
@ -200,10 +204,14 @@ public class FormingPaymentInstructionAssets implements ISessionStage {
|
||||||
if (AccountType.Clrn.equalsByKey(registry.getAccountType())) {
|
if (AccountType.Clrn.equalsByKey(registry.getAccountType())) {
|
||||||
counterAcc = accountImdg.getSingleObjectByID(registry.getAccountId());
|
counterAcc = accountImdg.getSingleObjectByID(registry.getAccountId());
|
||||||
} else if (AccountType.Info.equalsByKey(registry.getAccountType())) {
|
} else if (AccountType.Info.equalsByKey(registry.getAccountType())) {
|
||||||
counterAcc = accountImdg.getFirstObjectByFieldValues(
|
ImdgPredicateBuilder pb = accountImdg.predicateBuilder();
|
||||||
Map.of("companyId", 1L,
|
ImdgPredicate prdct = pb.and(
|
||||||
"currency", registry.getSecuritySymbol(),
|
disableCompanyCondition ? pb.alwaysTrue() : pb.equals("companyId", 1L),
|
||||||
"accountType", AccountType.Anlt.getKey())
|
pb.equals("currency", registry.getSecuritySymbol()),
|
||||||
|
pb.equals("accountType", AccountType.Anlt.getKey())
|
||||||
|
);
|
||||||
|
counterAcc = accountImdg.getFirstObjectByPredicate(
|
||||||
|
prdct
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
Long senderId;
|
Long senderId;
|
||||||
|
|
@ -407,7 +415,7 @@ public class FormingPaymentInstructionAssets implements ISessionStage {
|
||||||
Registry rgs = pair.getSecond();
|
Registry rgs = pair.getSecond();
|
||||||
Account account = accountImdg.getSingleObjectByID(paymentInstruction.getCreditLeg_accountId());
|
Account account = accountImdg.getSingleObjectByID(paymentInstruction.getCreditLeg_accountId());
|
||||||
Security security = securityImdg.getSingleObjectByID(paymentInstruction.getCreditLeg_securityId());
|
Security security = securityImdg.getSingleObjectByID(paymentInstruction.getCreditLeg_securityId());
|
||||||
if (SessionType.CURR.equals(sessionType) || (rgs != null
|
if (SessionType.CURR.equals(sessionType) || SessionType.PAYM.equals(sessionType) || (rgs != null
|
||||||
&& RegistryInstrumentType.M.equalsByKey(rgs.getRegistryInstrumentType())
|
&& RegistryInstrumentType.M.equalsByKey(rgs.getRegistryInstrumentType())
|
||||||
&& !CurrencyCode.isRub(rgs.getSecuritySymbol()))) {
|
&& !CurrencyCode.isRub(rgs.getSecuritySymbol()))) {
|
||||||
boolean madeStatements = statementsWereMade(paymentInstruction, rgs);
|
boolean madeStatements = statementsWereMade(paymentInstruction, rgs);
|
||||||
|
|
@ -496,7 +504,7 @@ public class FormingPaymentInstructionAssets implements ISessionStage {
|
||||||
private boolean statementsWereMade(PaymentInstruction pmt, Registry am_b) {
|
private boolean statementsWereMade(PaymentInstruction pmt, Registry am_b) {
|
||||||
ImdgPredicateBuilder pb = stlmHPropsImdg.predicateBuilder();
|
ImdgPredicateBuilder pb = stlmHPropsImdg.predicateBuilder();
|
||||||
String curCode = pmt.getCreditLeg_currencyCode();
|
String curCode = pmt.getCreditLeg_currencyCode();
|
||||||
{
|
if (!SessionType.PAYM.equals(sessionType)) {
|
||||||
SettlementHouseProperties sttHs = stlmHPropsImdg.getFirstObjectByPredicate(
|
SettlementHouseProperties sttHs = stlmHPropsImdg.getFirstObjectByPredicate(
|
||||||
pb.and(
|
pb.and(
|
||||||
pb.in("currencyCode", curCode),
|
pb.in("currencyCode", curCode),
|
||||||
|
|
|
||||||
|
|
@ -41,4 +41,5 @@ public interface IRegistryBuilder {
|
||||||
default IRegistryBuilder dpAccCash(CashV2<Long, DepoAccount> dpAccCash) {return this;}//CashV2<Long, DepoAccount> dpAccCash;
|
default IRegistryBuilder dpAccCash(CashV2<Long, DepoAccount> dpAccCash) {return this;}//CashV2<Long, DepoAccount> dpAccCash;
|
||||||
default IRegistryBuilder currCash(CashV2<String, Currency> currCash) {return this;}//CashV2<String, Currency> currCash;
|
default IRegistryBuilder currCash(CashV2<String, Currency> currCash) {return this;}//CashV2<String, Currency> currCash;
|
||||||
default IRegistryBuilder clrAccCash(CashV2<Long, ClearingAccount> clrAccCash) {return this;}//CashV2<Long, ClearingAccount> clrAccCash;
|
default IRegistryBuilder clrAccCash(CashV2<Long, ClearingAccount> clrAccCash) {return this;}//CashV2<Long, ClearingAccount> clrAccCash;
|
||||||
|
default IRegistryBuilder ckTcr(TradingClearingRegistry ckTcr) {return this;}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ public class InclusionObligations implements ISessionStage {
|
||||||
switch (ssnTpe) {
|
switch (ssnTpe) {
|
||||||
case MEDM, FINL, XDEP -> execImdg = (Imdg<T>) executionDepositImdg;
|
case MEDM, FINL, XDEP -> execImdg = (Imdg<T>) executionDepositImdg;
|
||||||
case IPO0, IPOB, TRDT, IPOT -> execImdg = (Imdg<T>) executionFondImdg;
|
case IPO0, IPOB, TRDT, IPOT -> execImdg = (Imdg<T>) executionFondImdg;
|
||||||
case CURR -> execImdg = (Imdg<T>) executionCurrImdg;
|
case CURR, PAYM -> execImdg = (Imdg<T>) executionCurrImdg;
|
||||||
default -> {
|
default -> {
|
||||||
//кейс для "общих" сессий (напр. UNIT) в которых сочетаются разные сделки
|
//кейс для "общих" сессий (напр. UNIT) в которых сочетаются разные сделки
|
||||||
//смотрим на секцию регистра.
|
//смотрим на секцию регистра.
|
||||||
|
|
@ -228,6 +228,11 @@ public class InclusionObligations implements ISessionStage {
|
||||||
rgsPb.equals("sessionType", SessionType.MEDM.getKey()),
|
rgsPb.equals("sessionType", SessionType.MEDM.getKey()),
|
||||||
rgsPb.equals("sessionType", SessionType.XDEP.getKey())
|
rgsPb.equals("sessionType", SessionType.XDEP.getKey())
|
||||||
);
|
);
|
||||||
|
} else if (SessionType.PAYM.equals(sessionType)) {
|
||||||
|
return rgsPb.or(
|
||||||
|
rgsPb.equals("sessionType", SessionType.PREP.getKey()),
|
||||||
|
rgsPb.equals("sessionType", SessionType.PAYM.getKey())
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
return rgsPb.equals("sessionType", sessionType.getKey());
|
return rgsPb.equals("sessionType", sessionType.getKey());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,7 @@ public class InspectionObligationsV2 implements ISessionStage {
|
||||||
boolean isUncovered = false;
|
boolean isUncovered = false;
|
||||||
List<CheckResult> checkResults = new ArrayList<>();
|
List<CheckResult> checkResults = new ArrayList<>();
|
||||||
for (Registry obligation : obligationsInGroup) {
|
for (Registry obligation : obligationsInGroup) {
|
||||||
if ((SessionType.FINL.equals(sessionType) || SessionType.UNIT.equals(sessionType) || SessionType.MEDM.equals(sessionType)) && RegistryInstrumentType.S.equalsByKey(obligation.getRegistryInstrumentType())) {
|
if ((SessionType.FINL.equals(sessionType) || SessionType.UNIT.equals(sessionType) || SessionType.MEDM.equals(sessionType)) && RegistryInstrumentType.S.equalsByKey(obligation.getRegistryInstrumentType()) || SessionType.PAYM.equals(sessionType)) {
|
||||||
checkResults.add(new CheckResult(obligation, false));
|
checkResults.add(new CheckResult(obligation, false));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,275 @@
|
||||||
|
package ru.spcex.clearing.session.stage.impl;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Optional;
|
||||||
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
import ru.clearing.classes.statics.data.account.ClearingAccount;
|
||||||
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
|
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
||||||
|
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
||||||
|
import ru.clearing.classes.statics.data.misc.Currency;
|
||||||
|
import ru.clearing.classes.statics.data.misc.Session;
|
||||||
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
|
import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
|
||||||
|
import ru.clearing.platform.dictionary.CurrencyPairDictionary;
|
||||||
|
import ru.spcex.clearing.component.predicate.cash.account.AccountIdCashingPredicate;
|
||||||
|
import ru.spcex.clearing.component.predicate.cash.currency.CurrencyCodePredicate;
|
||||||
|
import ru.spcex.clearing.service.TcrSearcher;
|
||||||
|
import ru.spcex.clearing.session.stage.util.RegistryUtil;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.ExecutionType;
|
||||||
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
|
import ru.spcex.platform.enumeration.BalanceDimension;
|
||||||
|
import ru.spcex.platform.enumeration.CurrencyCode;
|
||||||
|
import ru.spcex.platform.enumeration.ISide;
|
||||||
|
import ru.spcex.platform.enumeration.MoneyFlowSide;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryCapacity;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
|
import ru.spcex.platform.enumeration.RegistryUnit;
|
||||||
|
import ru.spcex.platform.enumeration.Section;
|
||||||
|
import ru.spcex.platform.enumeration.Sender;
|
||||||
|
import ru.spcex.platform.enumeration.Side;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
|
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2;
|
||||||
|
|
||||||
|
public class RegistryCkBuilder implements IRegistryBuilder {
|
||||||
|
private CashV2<String, Currency> currCash;
|
||||||
|
private CashV2<Long, ClearingAccount> clrAccCash;
|
||||||
|
|
||||||
|
private Imdg<Company> companyImdg;
|
||||||
|
private Imdg<TradingClearingRegistry> tradingClearingRegistryImdg;
|
||||||
|
private Imdg<Session> sessionImdg;
|
||||||
|
private Imdg<ClearingAccount> clearingAccountImdg;
|
||||||
|
private Imdg<Currency> currencyImdg;
|
||||||
|
private Imdg<CurrencyPairSecurity> currPairSecImdg;
|
||||||
|
private Imdg<CurrencyPairDictionary> currPairDictImdg;
|
||||||
|
private TcrSearcher tcrSearcher;
|
||||||
|
private ExecutionCommon exec;
|
||||||
|
private RegistryDesignation regDsgn;
|
||||||
|
private TradingClearingRegistry ckTcr;
|
||||||
|
|
||||||
|
|
||||||
|
private RegistryCkBuilder() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RegistryCkBuilder builder() {
|
||||||
|
return new RegistryCkBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegistryBuilder cmpImdg(Imdg<Company> cmpImdg) {
|
||||||
|
this.companyImdg = cmpImdg;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegistryBuilder tcrImdg(Imdg<TradingClearingRegistry> tcrImdg) {
|
||||||
|
this.tradingClearingRegistryImdg = tcrImdg;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegistryBuilder ssnImdg(Imdg<Session> ssnImdg) {
|
||||||
|
this.sessionImdg = ssnImdg;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegistryBuilder clAccImdg(Imdg<ClearingAccount> clAccImdg) {
|
||||||
|
this.clearingAccountImdg = clAccImdg;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegistryBuilder currPairSecImdg(Imdg<CurrencyPairSecurity> currPairSecImdg) {
|
||||||
|
this.currPairSecImdg = currPairSecImdg;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegistryBuilder currPairDictImdg(Imdg<CurrencyPairDictionary> currPairDictImdg) {
|
||||||
|
this.currPairDictImdg = currPairDictImdg;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegistryBuilder currImdg(Imdg<Currency> currImdg) {
|
||||||
|
this.currencyImdg = currImdg;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegistryBuilder tcrSearcher(TcrSearcher tcrSearcher) {
|
||||||
|
this.tcrSearcher = tcrSearcher;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RegistryCkBuilder exec(ExecutionCommon exec) {
|
||||||
|
this.exec = exec;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RegistryCkBuilder registryDesignation(RegistryDesignation registryDesignation) {
|
||||||
|
this.regDsgn = registryDesignation;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IRegistryBuilder returnDeposit(boolean returnDep) {
|
||||||
|
if (returnDep) {
|
||||||
|
throw new IllegalStateException("cannot create second leg registry for ExecutionFond");
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IRegistryBuilder ckTcr(TradingClearingRegistry ckTcr) {
|
||||||
|
this.ckTcr = ckTcr;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Registry build() {
|
||||||
|
ISide side = getSide(exec);
|
||||||
|
Registry reg = new Registry();
|
||||||
|
reg.setCompanyId(Sender.CK.getId());
|
||||||
|
reg.setCounterPartyId(exec.getCompanyId());
|
||||||
|
|
||||||
|
reg.setCreated(Instant.now());
|
||||||
|
Company company = searchCompany();
|
||||||
|
reg.setTradingCode(company.getTradingCode());
|
||||||
|
reg.setClearingCode(company.getClearingCode());
|
||||||
|
reg.setShortName(company.getShortName());
|
||||||
|
reg.setFullName(company.getFullName());
|
||||||
|
TradingClearingRegistry tcr = ckTcr;
|
||||||
|
String capacityByAccount = null;
|
||||||
|
|
||||||
|
//In: execution_currency (SECURITY_SYMBOL: CNYRUB_TOM_C, securityId-->registry.contract)
|
||||||
|
// C securityId идем в currency_pair_security, чтобы найти currency_pair_id
|
||||||
|
// C currency_pair_id идем currency_pair_dictionary для базовой base_currency_id [CNY], и обменная в чем торги quote_currency_id [RUB]
|
||||||
|
//3.1 Для side=Buy
|
||||||
|
//OM_T = RUB [quote_currency_id] balance=settlement_ammount
|
||||||
|
//TM_T = CNY [base_currency_id] balance=quantity
|
||||||
|
//3.2 для side=Sell
|
||||||
|
//OM_T = CNY [base_currency_id] balance=quantity
|
||||||
|
//TM_T = RUB [quote_currency_id] balance=settlement_ammount
|
||||||
|
reg.setContract(String.valueOf(exec.getSecurityId()));
|
||||||
|
CurrencyPairSecurity curPairSec = currPairSecImdg.getSingleObjectByID(exec.getSecurityId());
|
||||||
|
CurrencyPairDictionary curPairDict = null;
|
||||||
|
if (curPairSec != null) {
|
||||||
|
curPairDict = currPairDictImdg.getSingleObjectByID(curPairSec.getCurrencyPairId());
|
||||||
|
}
|
||||||
|
assert curPairSec != null && curPairDict != null;
|
||||||
|
ExecutionCurrency execCurr = (ExecutionCurrency) this.exec;
|
||||||
|
//что покупают
|
||||||
|
String baseCurrency = curPairDict.getBaseCurrency();
|
||||||
|
//за что покупают
|
||||||
|
String quoteCurrency = curPairDict.getQuoteCurrency();
|
||||||
|
reg.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
|
||||||
|
reg.setBalanceDimension(BalanceDimension.MONY.getKey());
|
||||||
|
String curr;
|
||||||
|
|
||||||
|
Currency currency;
|
||||||
|
if ((regDsgn.equals(RegistryDesignation.O) && !side.isBuy()) || (regDsgn.equals(RegistryDesignation.T) && !side.isSell())) {
|
||||||
|
curr = quoteCurrency;
|
||||||
|
reg.setBalance(execCurr.getSettlementAmount());
|
||||||
|
} else if ((regDsgn.equals(RegistryDesignation.T) && !side.isBuy()) || (regDsgn.equals(RegistryDesignation.O) && !side.isSell())) {
|
||||||
|
curr = baseCurrency;
|
||||||
|
reg.setBalance(execCurr.getQuantity());
|
||||||
|
} else curr = CurrencyCode.RUB.getKey();
|
||||||
|
ImdgPredicate currPrdct = CurrencyCodePredicate
|
||||||
|
.getPredicate(curr)
|
||||||
|
.cashed(currencyImdg.predicateBuilder(), currCash);
|
||||||
|
|
||||||
|
currency = currencyImdg.getFirstObjectByPredicate(currPrdct);
|
||||||
|
reg.setSecurityId(currency.getId());
|
||||||
|
reg.setSecuritySymbol(currency.getCurrencyCode());
|
||||||
|
Optional<Account> acc = tcrSearcher.searchByTcr(tcr.getId(), curr);
|
||||||
|
if (acc.isPresent()) {
|
||||||
|
reg.setAccountId(acc.get().getId());
|
||||||
|
reg.setAccount(acc.get().getAccount());
|
||||||
|
reg.setAccountType(acc.get().getAccountType());
|
||||||
|
capacityByAccount = defineCapacityByAccountType(acc.get().getAccountType(), acc.get().getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
reg.setRegistryDesignation(regDsgn.getKey());
|
||||||
|
if (capacityByAccount != null) {
|
||||||
|
reg.setRegistryCapacity(capacityByAccount);
|
||||||
|
}
|
||||||
|
reg.setRegistryUnit(RegistryUnit.T.getKey());
|
||||||
|
reg.setRegistryCode(RegistryUtil.clearingCode(reg));
|
||||||
|
reg.setTradingClearingRegistryId(tcr.getId());
|
||||||
|
reg.setTradingClearingRegistry(tcr.getCode());
|
||||||
|
reg.setRegistryStatus(RegistryStatus.PROC.getKey());
|
||||||
|
reg.setSettlementDate(execCurr.getSettlementDate());
|
||||||
|
reg.setValueDate(execCurr.getSettlementDate());
|
||||||
|
reg.setSettlementCode(execCurr.getSettlementCode());
|
||||||
|
reg.setTradingDate(exec.getTradingDate());
|
||||||
|
reg.setClearingDate(LocalDate.now());
|
||||||
|
reg.setPrice(exec.getPrice());
|
||||||
|
reg.setCounterPartyId(exec.getCompanyId());
|
||||||
|
reg.setGroupId(groupId());
|
||||||
|
reg.setSessionId(exec.getSessionId());
|
||||||
|
reg.setSessionType(sessionType());
|
||||||
|
reg.setSection(Section.CURR.getKey());
|
||||||
|
return reg;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Long groupId() {
|
||||||
|
// Market market = marketImdg.getFirstObjectBySQL("code = '" + exec.getMarket() + "'");
|
||||||
|
return exec.getExchangeExecutionId();
|
||||||
|
}
|
||||||
|
|
||||||
|
//можно передать из стейджа
|
||||||
|
private String sessionType() {
|
||||||
|
Session session = sessionImdg.getSingleObjectByID(exec.getSessionId());
|
||||||
|
return session.getSessionType();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Company searchCompany() {
|
||||||
|
return companyImdg.getSingleObjectByID(Sender.CK.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private TradingClearingRegistry searchTradingClearingRegistry() {
|
||||||
|
|
||||||
|
return tradingClearingRegistryImdg.getSingleObjectByID(exec.getTradingClearingRegistryId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ISide getSide(ExecutionCommon exec) {
|
||||||
|
if (exec.type().equals(ExecutionType.ExecutionDeposit)) {
|
||||||
|
return ISide.parse(MoneyFlowSide.class, exec.getSide());
|
||||||
|
} else if (exec.type().equals(ExecutionType.ExecutionFond)) {
|
||||||
|
return ISide.parse(Side.class, exec.getSide());
|
||||||
|
} else if (exec.type().equals(ExecutionType.ExecutionCurrency)) {
|
||||||
|
return ISide.parse(Side.class, exec.getSide());
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException("Unknown Execution type: " + exec.type());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String defineCapacityByAccountType(String accountType, Long moneyAccountId) {
|
||||||
|
String capacityByAccount = null;
|
||||||
|
if (AccountType.Clrn.equalsByKey(accountType)) {
|
||||||
|
ImdgPredicate prdct = AccountIdCashingPredicate
|
||||||
|
.getPredicate(moneyAccountId)
|
||||||
|
.cashed(clearingAccountImdg.predicateBuilder(), clrAccCash);
|
||||||
|
ClearingAccount clearingAccount = clearingAccountImdg.getFirstObjectByPredicate(prdct);
|
||||||
|
if (clearingAccount != null) {
|
||||||
|
capacityByAccount = clearingAccount.getClearingAccountType();
|
||||||
|
}
|
||||||
|
} else if (AccountType.Info.equalsByKey(accountType)) {
|
||||||
|
capacityByAccount = RegistryCapacity.A.getKey();
|
||||||
|
}
|
||||||
|
return capacityByAccount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IRegistryBuilder currCash(CashV2<String, Currency> currCash) {
|
||||||
|
this.currCash = currCash;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IRegistryBuilder clrAccCash(CashV2<Long, ClearingAccount> clrAccCash) {
|
||||||
|
this.clrAccCash = clrAccCash;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -51,6 +51,8 @@ import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||||
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||||
import ru.spcex.platform.enumeration.RegistryUnit;
|
import ru.spcex.platform.enumeration.RegistryUnit;
|
||||||
|
import ru.spcex.platform.enumeration.Sender;
|
||||||
|
import ru.spcex.platform.enumeration.SessionType;
|
||||||
import ru.spcex.platform.enumeration.Side;
|
import ru.spcex.platform.enumeration.Side;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgId;
|
import ru.spcex.platform.imdg.api.ImdgId;
|
||||||
|
|
@ -65,6 +67,7 @@ import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ById;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByIdAndString;
|
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByIdAndString;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByString;
|
import ru.spcex.platform.imdg.iml.hazelcast.adapter.CashV2ByString;
|
||||||
import ru.spcex.platform.utils.collection.Pair;
|
import ru.spcex.platform.utils.collection.Pair;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LiabilitiesAndClaims
|
* LiabilitiesAndClaims
|
||||||
|
|
@ -92,7 +95,12 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
private final Imdg<Currency> currImdg;
|
private final Imdg<Currency> currImdg;
|
||||||
private final TcrSearcher tcrSearcher;
|
private final TcrSearcher tcrSearcher;
|
||||||
private final SecuritySelector<Security> secSelector;
|
private final SecuritySelector<Security> secSelector;
|
||||||
|
private SessionType sessionType;
|
||||||
|
private TradingClearingRegistry ckTcr;
|
||||||
|
|
||||||
|
public void setSessionType(SessionType sessionType) {
|
||||||
|
this.sessionType = sessionType;
|
||||||
|
}
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public RequirementsAndObligationCreation(ImdgProvider imdgProvider) {
|
public RequirementsAndObligationCreation(ImdgProvider imdgProvider) {
|
||||||
|
|
@ -193,6 +201,7 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected StageResult<?> createRegisters(List<ExecutionCommon> data, Long sessionId, Map<Long, Registry> rgsStorage) {
|
protected StageResult<?> createRegisters(List<ExecutionCommon> data, Long sessionId, Map<Long, Registry> rgsStorage) {
|
||||||
|
this.ckTcr = null;
|
||||||
data.sort(tradeTimeComparator.thenComparing(execIdComparator));
|
data.sort(tradeTimeComparator.thenComparing(execIdComparator));
|
||||||
Map<Long, Registry> newRgss = rgsStorage != null ? rgsStorage : storageMap(data);
|
Map<Long, Registry> newRgss = rgsStorage != null ? rgsStorage : storageMap(data);
|
||||||
//см. описание к #matchExecutions
|
//см. описание к #matchExecutions
|
||||||
|
|
@ -266,6 +275,12 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T, true);
|
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.T, true);
|
||||||
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O, true);
|
findAndUpdateOrCreate.accept(counterExec, RegistryDesignation.O, true);
|
||||||
}
|
}
|
||||||
|
if (isCk()) {
|
||||||
|
createRegistryForCK(partyExec, RegistryDesignation.O, newRgss);
|
||||||
|
createRegistryForCK(partyExec, RegistryDesignation.T, newRgss);
|
||||||
|
createRegistryForCK(counterExec, RegistryDesignation.O, newRgss);
|
||||||
|
createRegistryForCK(counterExec, RegistryDesignation.T, newRgss);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (rgsStorage == null) {
|
if (rgsStorage == null) {
|
||||||
log.info("batch insert {} registries into map", newRgss.size());
|
log.info("batch insert {} registries into map", newRgss.size());
|
||||||
|
|
@ -274,6 +289,48 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
return new StageResult<>(null, true);
|
return new StageResult<>(null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isCk() {
|
||||||
|
return IEnumKey.contains(sessionType, SessionType.PREP, SessionType.PAYM);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createRegistryForCK(
|
||||||
|
ExecutionCommon exec,
|
||||||
|
RegistryDesignation rgsDsgn,
|
||||||
|
Map<Long, Registry> newRgss
|
||||||
|
) {
|
||||||
|
if (this.ckTcr == null) {
|
||||||
|
this.ckTcr = tcrImdg.getSingleObjectByPredicate(
|
||||||
|
tcrImdg.predicateBuilder().equals("companyId", Sender.CK.getId())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
IRegistryBuilder registryBuilder = RegistryCkBuilder.builder();
|
||||||
|
Registry newRegister = registryBuilder
|
||||||
|
//cashes
|
||||||
|
.dpAccCash(cash.dpAccCash)
|
||||||
|
.currCash(cash.currCash)
|
||||||
|
.clrAccCash(cash.clrAccCash)
|
||||||
|
//imdg
|
||||||
|
.cmpImdg(cmpImdg)
|
||||||
|
.tcrImdg(tcrImdg)
|
||||||
|
.accImdg(accImdg)
|
||||||
|
.ssnImdg(ssnImdg)
|
||||||
|
.clAccImdg(clAccImdg)
|
||||||
|
.dpAccImdg(dpAccImdg)
|
||||||
|
.currPairSecImdg(currPairSecImdg)
|
||||||
|
.currPairDictImdg(currPairDictImdg)
|
||||||
|
.currImdg(currImdg)
|
||||||
|
.tcrSearcher(tcrSearcher)
|
||||||
|
.secSelector(secSelector)
|
||||||
|
.imdg(imdgProvider)
|
||||||
|
.ckTcr(ckTcr)
|
||||||
|
.exec(exec)
|
||||||
|
.registryDesignation(rgsDsgn)
|
||||||
|
.returnDeposit(false)
|
||||||
|
.build();
|
||||||
|
newRegister.setId(idGen.nextId());
|
||||||
|
newRgss.put(newRegister.getId(), newRegister);
|
||||||
|
log.debug("execution id {}: created rgs.id={}", exec, newRegister.getId());
|
||||||
|
}
|
||||||
|
|
||||||
private Optional<Registry> findReg(ExecutionCommon exec, RegistryDesignation des) {
|
private Optional<Registry> findReg(ExecutionCommon exec, RegistryDesignation des) {
|
||||||
ISide side = getSide(exec);
|
ISide side = getSide(exec);
|
||||||
|
|
@ -390,9 +447,16 @@ public class RequirementsAndObligationCreation implements ISessionStage {
|
||||||
invalid = String.format("exchangeExecutionId %d and %d not equal", exec1.getExchangeExecutionId(), exec2.getExchangeExecutionId());
|
invalid = String.format("exchangeExecutionId %d and %d not equal", exec1.getExchangeExecutionId(), exec2.getExchangeExecutionId());
|
||||||
} else if (Objects.equals(getSide(exec1), getSide(exec2))) {
|
} else if (Objects.equals(getSide(exec1), getSide(exec2))) {
|
||||||
invalid = String.format("side %s and %s equal, must be opposite", getSide(exec1), getSide(exec1));
|
invalid = String.format("side %s and %s equal, must be opposite", getSide(exec1), getSide(exec1));
|
||||||
} else if (!Objects.equals(exec1.getCompanyId(), exec2.getCounterPartyId()) || !Objects.equals(exec1.getCounterPartyId(), exec2.getCompanyId())) {
|
} else if (!isCk()
|
||||||
|
&& (!Objects.equals(exec1.getCompanyId(), exec2.getCounterPartyId())
|
||||||
|
|| !Objects.equals(exec1.getCounterPartyId(), exec2.getCompanyId()))) {
|
||||||
invalid = String.format("Execution#id(%d)#companyId(%d)#counterPartyId(%d), Execution#id(%d)#companyId(%d)#counterPartyId(%d)",
|
invalid = String.format("Execution#id(%d)#companyId(%d)#counterPartyId(%d), Execution#id(%d)#companyId(%d)#counterPartyId(%d)",
|
||||||
exec1.getId(), exec1.getCompanyId(), exec1.getCounterPartyId(), exec2.getId(), exec2.getCompanyId(), exec2.getCounterPartyId());
|
exec1.getId(), exec1.getCompanyId(), exec1.getCounterPartyId(), exec2.getId(), exec2.getCompanyId(), exec2.getCounterPartyId());
|
||||||
|
} else if (isCk()
|
||||||
|
&& !Objects.equals(exec1.getTradingDate(), exec2.getTradingDate())) {
|
||||||
|
invalid = String.format("[Execution#id(%d)#tradingDate=%s, Execution#id(%d)#tradingDate=%s] exchangeExecutionId=%d; tradingDate must be equal",
|
||||||
|
exec1.getId(), exec1.getTradingDate(),
|
||||||
|
exec2.getId(), exec2.getTradingDate(), exec2.getExchangeExecutionId());
|
||||||
}
|
}
|
||||||
if (invalid != null) {
|
if (invalid != null) {
|
||||||
log.error("FATAL couldn't match Execution#id({}) with Execution#id({}) error: {}", exec1.getId(), exec2.getId(), invalid);
|
log.error("FATAL couldn't match Execution#id({}) with Execution#id({}) error: {}", exec1.getId(), exec2.getId(), invalid);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package ru.spcex.clearing.util;
|
||||||
|
|
||||||
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
|
|
||||||
|
public class NumberUtils {
|
||||||
|
public static Long safeCast(String s) {
|
||||||
|
if (TextUtil.isEmpty(s)) return null;
|
||||||
|
try {
|
||||||
|
return Long.parseLong(s);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -22,3 +22,5 @@ clearing-service.kafka-producer.buffer-memory=33554432
|
||||||
clearing-service.session-stage.inspection-gateway-timeout=60
|
clearing-service.session-stage.inspection-gateway-timeout=60
|
||||||
|
|
||||||
clearing-service.scheduler.check-payment-instruction=*/5 * * * * *
|
clearing-service.scheduler.check-payment-instruction=*/5 * * * * *
|
||||||
|
|
||||||
|
clearing-service.balance-check-omt=false
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,12 @@
|
||||||
<name>clearing-validation</name>
|
<name>clearing-validation</name>
|
||||||
<description>Clearing-module, dependency version of platform-utils</description>
|
<description>Clearing-module, dependency version of platform-utils</description>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
@ -35,13 +35,13 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>classes</artifactId>
|
<artifactId>classes</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>dictionary</artifactId>
|
<artifactId>dictionary</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,12 @@
|
||||||
<artifactId>db-scripts</artifactId>
|
<artifactId>db-scripts</artifactId>
|
||||||
<name>db-scripts</name>
|
<name>db-scripts</name>
|
||||||
<description>db-scripts for PostgreSQL</description>
|
<description>db-scripts for PostgreSQL</description>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
||||||
5124
clearing-parent/db-scripts/src/main/resources/db/DDL.3.13.sql
Normal file
5124
clearing-parent/db-scripts/src/main/resources/db/DDL.3.13.sql
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,4 +1,4 @@
|
||||||
-- DB version: 3.13
|
-- DB version: 3.15
|
||||||
/* Dictionaries */
|
/* Dictionaries */
|
||||||
|
|
||||||
-- allowed - Справочник признаков допустимости использования объектов
|
-- allowed - Справочник признаков допустимости использования объектов
|
||||||
|
|
@ -2381,7 +2381,7 @@ GRANT ALL PRIVILEGES ON TABLE RELATION_HISTORY TO clearing;
|
||||||
|
|
||||||
-- bankAccount - Счета вывода средств
|
-- bankAccount - Счета вывода средств
|
||||||
DROP TABLE IF EXISTS BANK_ACCOUNT;
|
DROP TABLE IF EXISTS BANK_ACCOUNT;
|
||||||
CREATE TABLE BANK_ACCOUNT(ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY varchar(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN varchar(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50), COMPANY_ID bigint, ID bigint PRIMARY KEY, INTERMEDIARY_SWIFT_CODE varchar(255));
|
CREATE TABLE BANK_ACCOUNT(ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY varchar(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN varchar(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50), COMPANY_ID bigint, ID bigint PRIMARY KEY, INTERMEDIARY_SWIFT_CODE varchar(255), NAME varchar(255), ADDRESS varchar(255), BANK_ADDRESS varchar(255), BANK_SWIFT_CODE varchar(12), BANK_ACCOUNT varchar(35), BANK_NAME1 varchar(255), BANK_ADDRESS1 varchar(255), BANK_ACCOUNT1 varchar(35), BANK_NAME2 varchar(255), BANK_ADDRESS2 varchar(255), INTERMEDIARY_SWIFT_CODE2 varchar(12), BANK_ACCOUNT2 varchar(35), PERSONAL_ACCOUNT varchar(20), BUDGET_CLASSIFICATION_CODE varchar(20), OKTMO varchar(20));
|
||||||
COMMENT ON TABLE BANK_ACCOUNT IS 'Счета вывода средств';
|
COMMENT ON TABLE BANK_ACCOUNT IS 'Счета вывода средств';
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT.ACCOUNT_ID IS 'Идентификатор счета (linked to account)';
|
COMMENT ON COLUMN BANK_ACCOUNT.ACCOUNT_ID IS 'Идентификатор счета (linked to account)';
|
||||||
|
|
@ -2416,12 +2416,42 @@ COMMENT ON COLUMN BANK_ACCOUNT.ID IS 'Идентификатор записи';
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT.INTERMEDIARY_SWIFT_CODE IS 'Код SWIFT посредника';
|
COMMENT ON COLUMN BANK_ACCOUNT.INTERMEDIARY_SWIFT_CODE IS 'Код SWIFT посредника';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.NAME IS 'Наименование владельца счета';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.ADDRESS IS 'Адрес владельца счета';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ADDRESS IS 'Место нахождения банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_SWIFT_CODE IS 'SWIFT банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ACCOUNT IS 'Номер счета банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_NAME1 IS 'Наименование банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ADDRESS1 IS 'Место нахождения банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ACCOUNT1 IS 'Номер счета банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_NAME2 IS 'Наименование банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ADDRESS2 IS 'Место нахождения банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.INTERMEDIARY_SWIFT_CODE2 IS 'SWIFT банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ACCOUNT2 IS 'Номер счета банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.PERSONAL_ACCOUNT IS 'Лицевой счет получателя';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BUDGET_CLASSIFICATION_CODE IS 'КБК';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.OKTMO IS 'ОКТМО получателя средств';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE BANK_ACCOUNT TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE BANK_ACCOUNT TO clearing;
|
||||||
|
|
||||||
|
|
||||||
-- History log of bankAccount - Счета вывода средств
|
-- History log of bankAccount - Счета вывода средств
|
||||||
DROP TABLE IF EXISTS BANK_ACCOUNT_HISTORY;
|
DROP TABLE IF EXISTS BANK_ACCOUNT_HISTORY;
|
||||||
CREATE TABLE BANK_ACCOUNT_HISTORY(BANK_ACCOUNT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY varchar(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN varchar(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50), COMPANY_ID bigint, ID bigint PRIMARY KEY, INTERMEDIARY_SWIFT_CODE varchar(255));
|
CREATE TABLE BANK_ACCOUNT_HISTORY(BANK_ACCOUNT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY varchar(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN varchar(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50), COMPANY_ID bigint, ID bigint PRIMARY KEY, INTERMEDIARY_SWIFT_CODE varchar(255), NAME varchar(255), ADDRESS varchar(255), BANK_ADDRESS varchar(255), BANK_SWIFT_CODE varchar(12), BANK_ACCOUNT varchar(35), BANK_NAME1 varchar(255), BANK_ADDRESS1 varchar(255), BANK_ACCOUNT1 varchar(35), BANK_NAME2 varchar(255), BANK_ADDRESS2 varchar(255), INTERMEDIARY_SWIFT_CODE2 varchar(12), BANK_ACCOUNT2 varchar(35), PERSONAL_ACCOUNT varchar(20), BUDGET_CLASSIFICATION_CODE varchar(20), OKTMO varchar(20));
|
||||||
COMMENT ON TABLE BANK_ACCOUNT_HISTORY IS 'История изменений таблицы bankAccount';
|
COMMENT ON TABLE BANK_ACCOUNT_HISTORY IS 'История изменений таблицы bankAccount';
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT_ID IS 'Идентификатор записи в таблице BANK_ACCOUNT';
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT_ID IS 'Идентификатор записи в таблице BANK_ACCOUNT';
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.EVENT_TIME IS 'Дата и время изменения';
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.EVENT_TIME IS 'Дата и время изменения';
|
||||||
|
|
@ -2460,6 +2490,36 @@ COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ID IS 'Идентификатор зап
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.INTERMEDIARY_SWIFT_CODE IS 'Код SWIFT посредника';
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.INTERMEDIARY_SWIFT_CODE IS 'Код SWIFT посредника';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.NAME IS 'Наименование владельца счета';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ADDRESS IS 'Адрес владельца счета';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ADDRESS IS 'Место нахождения банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_SWIFT_CODE IS 'SWIFT банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT IS 'Номер счета банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_NAME1 IS 'Наименование банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ADDRESS1 IS 'Место нахождения банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT1 IS 'Номер счета банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_NAME2 IS 'Наименование банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ADDRESS2 IS 'Место нахождения банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.INTERMEDIARY_SWIFT_CODE2 IS 'SWIFT банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT2 IS 'Номер счета банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.PERSONAL_ACCOUNT IS 'Лицевой счет получателя';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BUDGET_CLASSIFICATION_CODE IS 'КБК';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.OKTMO IS 'ОКТМО получателя средств';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE BANK_ACCOUNT_HISTORY TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE BANK_ACCOUNT_HISTORY TO clearing;
|
||||||
|
|
||||||
-- informationAccount - Регистр КС
|
-- informationAccount - Регистр КС
|
||||||
|
|
@ -2790,7 +2850,7 @@ GRANT ALL PRIVILEGES ON TABLE SESSION_HISTORY TO clearing;
|
||||||
|
|
||||||
-- sTrades - Сделки из Торговой системы
|
-- sTrades - Сделки из Торговой системы
|
||||||
DROP TABLE IF EXISTS S_TRADES;
|
DROP TABLE IF EXISTS S_TRADES;
|
||||||
CREATE TABLE S_TRADES(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, TRADE_NUM bigint, OPERATION varchar(40), CLASS_CODE varchar(255), TRADE_DATE date, SEC_CODE varchar(255), ACCRUEDINT numeric(72,18), ACCRUEDINT2 numeric(72,18), LOWER_DISCOUNT numeric(72,18), ORDER_NUM bigint, PRICE numeric(72,18), PRICE2 numeric(72,18), REPO_RATE numeric(72,18), REPO_VALUE numeric(72,18), REPO2_VALUE numeric(72,18), START_DISCOUNT numeric(72,18), TS_COMMISSION numeric(72,18), UPPER_DISCOUNT numeric(72,18), VALUE numeric(72,18), YIELD numeric(72,18), QTY numeric(72,18), QTY_PCS numeric(72,18), TRADE_DATE_TIME timestamp, REPO_TERM bigint, CLEARING_COMMISSION numeric(72,18), EXCHANGE_COMMISSION numeric(72,18), TECH_CENTER_COMMISSION numeric(72,18), ACCOUNT varchar(50), BROKER_REF varchar(34), CLIENT_CODE varchar(255), SETTLE_CODE varchar(50), USER_ID varchar(32), EXCHANGE_CODE varchar(64), FIRM_ID varchar(255), FIRM_NAME varchar(255), CP_FIRM_ID varchar(255), CP_FIRM_NAME varchar(255), CLASS_NAME varchar(255), SEC_NAME varchar(255), SETTLE_DATE date, SETTLE_CURRENCY varchar(4), TRADE_CURRENCY varchar(4), TRADE_TIME_MS bigint, BANK_ACC_ID varchar(12), SECTION varchar(4));
|
CREATE TABLE S_TRADES(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, TRADE_NUM bigint, OPERATION varchar(40), CLASS_CODE varchar(255), TRADE_DATE date, SEC_CODE varchar(255), ACCRUEDINT numeric(72,18), ACCRUEDINT2 numeric(72,18), LOWER_DISCOUNT numeric(72,18), ORDER_NUM bigint, PRICE numeric(72,18), PRICE2 numeric(72,18), REPO_RATE numeric(72,18), REPO_VALUE numeric(72,18), REPO2_VALUE numeric(72,18), START_DISCOUNT numeric(72,18), TS_COMMISSION numeric(72,18), UPPER_DISCOUNT numeric(72,18), VALUE numeric(72,18), YIELD numeric(72,18), QTY numeric(72,18), QTY_PCS numeric(72,18), TRADE_DATE_TIME timestamp, REPO_TERM bigint, CLEARING_COMMISSION numeric(72,18), EXCHANGE_COMMISSION numeric(72,18), TECH_CENTER_COMMISSION numeric(72,18), ACCOUNT varchar(50), BROKER_REF varchar(34), CLIENT_CODE varchar(255), SETTLE_CODE varchar(50), USER_ID varchar(32), EXCHANGE_CODE varchar(64), FIRM_ID varchar(255), FIRM_NAME varchar(255), CP_FIRM_ID varchar(255), CP_FIRM_NAME varchar(255), CLASS_NAME varchar(255), SEC_NAME varchar(255), SETTLE_DATE date, SETTLE_CURRENCY varchar(4), TRADE_CURRENCY varchar(4), TRADE_TIME_MS bigint, BANK_ACC_ID varchar(12), SECTION varchar(4), KIND varchar(64), LINKED_TRADE bigint);
|
||||||
COMMENT ON TABLE S_TRADES IS 'Сделки из Торговой системы';
|
COMMENT ON TABLE S_TRADES IS 'Сделки из Торговой системы';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_TRADES.ID IS 'Идентификатор записи';
|
COMMENT ON COLUMN S_TRADES.ID IS 'Идентификатор записи';
|
||||||
|
|
@ -2887,6 +2947,10 @@ COMMENT ON COLUMN S_TRADES.BANK_ACC_ID IS 'Идентификатор расче
|
||||||
|
|
||||||
COMMENT ON COLUMN S_TRADES.SECTION IS 'Код наименования секции (linked to section)';
|
COMMENT ON COLUMN S_TRADES.SECTION IS 'Код наименования секции (linked to section)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN S_TRADES.KIND IS 'Вид сделки';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN S_TRADES.LINKED_TRADE IS 'Номер витринной сделки в торговой системе для сделок';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE S_TRADES TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE S_TRADES TO clearing;
|
||||||
|
|
||||||
-- executionDeposit - Сделки на секции МКР
|
-- executionDeposit - Сделки на секции МКР
|
||||||
|
|
@ -4505,7 +4569,7 @@ GRANT ALL PRIVILEGES ON TABLE S_DF52 TO clearing;
|
||||||
|
|
||||||
-- sDf53 - ДФ-53 Квитанция о получении информации о состоянии счета (блокировка/разблокировка/закрытие/открытие)
|
-- sDf53 - ДФ-53 Квитанция о получении информации о состоянии счета (блокировка/разблокировка/закрытие/открытие)
|
||||||
DROP TABLE IF EXISTS S_DF53;
|
DROP TABLE IF EXISTS S_DF53;
|
||||||
CREATE TABLE S_DF53(ID bigint PRIMARY KEY, ACC_NAME varchar(30), ACCOUNT varchar(25), DEAL varchar(4), DATE varchar(8), STATUS bigint, RESULT varchar(255), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint, IN_S_DF_ID bigint, ACC_TYPE bigint);
|
CREATE TABLE S_DF53(ID bigint PRIMARY KEY, ACC_NAME varchar(30), ACCOUNT varchar(25), DEAL varchar(4), DATE varchar(8), STATUS bigint, RESULT varchar(255), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint, IN_S_DF_ID bigint, ACC_TYPE varchar(3));
|
||||||
COMMENT ON TABLE S_DF53 IS 'ДФ-53 Квитанция о получении информации о состоянии счета (блокировка/разблокировка/закрытие/открытие)';
|
COMMENT ON TABLE S_DF53 IS 'ДФ-53 Квитанция о получении информации о состоянии счета (блокировка/разблокировка/закрытие/открытие)';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF53.ID IS 'Идентификатор записи';
|
COMMENT ON COLUMN S_DF53.ID IS 'Идентификатор записи';
|
||||||
|
|
@ -5117,8 +5181,51 @@ COMMENT ON COLUMN BLACKLIST_MARKET.SECTION IS 'Секция';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE BLACKLIST_MARKET TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE BLACKLIST_MARKET TO clearing;
|
||||||
|
|
||||||
|
CREATE TABLE RISK_PARAMETER
|
||||||
|
(
|
||||||
|
ID BIGINT PRIMARY KEY,
|
||||||
|
VALUE numeric(72,18),
|
||||||
|
SETTLEMENT_TYPE VARCHAR(4),
|
||||||
|
CURRENCY_PAIR VARCHAR(12),
|
||||||
|
CURRENCY_PAIR_ID BIGINT,
|
||||||
|
CREATED_AT timestamp,
|
||||||
|
UPDATED_AT timestamp,
|
||||||
|
WORKFLOW_STATUS VARCHAR(4)
|
||||||
|
);
|
||||||
|
COMMENT ON TABLE RISK_PARAMETER IS 'Риск-параметры';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.ID IS 'Идентификатор записи';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.VALUE IS 'Ставка ';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.SETTLEMENT_TYPE IS 'Код расчета';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.CURRENCY_PAIR IS 'Код валютной пары';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.CURRENCY_PAIR_ID IS 'Идентификатор валютной пары';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.CREATED_AT IS 'Время создания записи';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.UPDATED_AT IS 'Время изменения записи';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.WORKFLOW_STATUS IS 'Статус';
|
||||||
|
GRANT ALL PRIVILEGES ON TABLE RISK_PARAMETER TO clearing;
|
||||||
|
|
||||||
|
CREATE TABLE RATES
|
||||||
|
(
|
||||||
|
ID BIGINT PRIMARY KEY,
|
||||||
|
VALUE numeric(72, 18),
|
||||||
|
VALUE_DATE date,
|
||||||
|
CURRENCY VARCHAR(4),
|
||||||
|
CURRENCY_ID BIGINT,
|
||||||
|
CREATED_AT timestamp,
|
||||||
|
UPDATED_AT timestamp,
|
||||||
|
WORKFLOW_STATUS VARCHAR(4)
|
||||||
|
);
|
||||||
|
COMMENT ON TABLE RATES IS 'Расчетные курсы';
|
||||||
|
COMMENT ON COLUMN RATES.ID IS 'Идентификатор записи';
|
||||||
|
COMMENT ON COLUMN RATES.VALUE IS 'Расчетный курс';
|
||||||
|
COMMENT ON COLUMN RATES.VALUE_DATE IS 'Дата, на которую расчетный курс';
|
||||||
|
COMMENT ON COLUMN RATES.CURRENCY IS 'Код валюты';
|
||||||
|
COMMENT ON COLUMN RATES.CURRENCY_ID IS 'Идентификатор валюты';
|
||||||
|
COMMENT ON COLUMN RATES.CREATED_AT IS 'Время создания записи';
|
||||||
|
COMMENT ON COLUMN RATES.UPDATED_AT IS 'Время изменения записи';
|
||||||
|
COMMENT ON COLUMN RATES.WORKFLOW_STATUS IS 'Статус';
|
||||||
|
GRANT ALL PRIVILEGES ON TABLE RATES TO clearing;
|
||||||
/* views */
|
/* views */
|
||||||
|
|
||||||
-- Data types
|
-- Data types
|
||||||
|
|
||||||
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.13') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION
|
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.15') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
-- DB version: 3.11.0.83
|
-- DB version: 3.15
|
||||||
/* Dictionaries */
|
/* Dictionaries */
|
||||||
|
|
||||||
-- allowed - Справочник признаков допустимости использования объектов
|
-- allowed - Справочник признаков допустимости использования объектов
|
||||||
|
|
@ -856,13 +856,15 @@ GRANT ALL PRIVILEGES ON TABLE PRIORITY_DICTIONARY TO clearing;
|
||||||
|
|
||||||
-- dbVersion - Версия базы данных
|
-- dbVersion - Версия базы данных
|
||||||
DROP TABLE IF EXISTS DB_VERSION;
|
DROP TABLE IF EXISTS DB_VERSION;
|
||||||
CREATE TABLE DB_VERSION(ID bigint PRIMARY KEY, VERSION varchar(50));
|
CREATE TABLE DB_VERSION(ID bigint PRIMARY KEY, VERSION varchar(50), DICTIONARY_VERSION varchar(100));
|
||||||
COMMENT ON TABLE DB_VERSION IS 'Версия базы данных';
|
COMMENT ON TABLE DB_VERSION IS 'Версия базы данных';
|
||||||
|
|
||||||
COMMENT ON COLUMN DB_VERSION.ID IS 'Идентификатор записи';
|
COMMENT ON COLUMN DB_VERSION.ID IS 'Идентификатор записи';
|
||||||
|
|
||||||
COMMENT ON COLUMN DB_VERSION.VERSION IS 'Версия базы данных, привязанная к релизу';
|
COMMENT ON COLUMN DB_VERSION.VERSION IS 'Версия базы данных, привязанная к релизу';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN DB_VERSION.DICTIONARY_VERSION IS 'Версия справочника';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE DB_VERSION TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE DB_VERSION TO clearing;
|
||||||
|
|
||||||
-- userCls - Пользователь
|
-- userCls - Пользователь
|
||||||
|
|
@ -2054,7 +2056,7 @@ GRANT ALL PRIVILEGES ON TABLE TRADING_CLEARING_REGISTRY_LIST_HISTORY TO clearing
|
||||||
|
|
||||||
-- registry - Регистр активов, обязательств и требований УК
|
-- registry - Регистр активов, обязательств и требований УК
|
||||||
DROP TABLE IF EXISTS REGISTRY;
|
DROP TABLE IF EXISTS REGISTRY;
|
||||||
CREATE TABLE REGISTRY(COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint);
|
CREATE TABLE REGISTRY(COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4));
|
||||||
COMMENT ON TABLE REGISTRY IS 'Регистр активов, обязательств и требований УК';
|
COMMENT ON TABLE REGISTRY IS 'Регистр активов, обязательств и требований УК';
|
||||||
|
|
||||||
COMMENT ON COLUMN REGISTRY.COMPANY_ID IS 'Идентификатор участника (linked to company)';
|
COMMENT ON COLUMN REGISTRY.COMPANY_ID IS 'Идентификатор участника (linked to company)';
|
||||||
|
|
@ -2151,12 +2153,14 @@ COMMENT ON COLUMN REGISTRY.UPDATED_AT IS 'Дата и время изменен
|
||||||
|
|
||||||
COMMENT ON COLUMN REGISTRY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
|
COMMENT ON COLUMN REGISTRY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN REGISTRY.SECTION IS 'Код секции (linked to section)';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE REGISTRY TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE REGISTRY TO clearing;
|
||||||
|
|
||||||
|
|
||||||
-- History log of registry - Регистр активов, обязательств и требований УК
|
-- History log of registry - Регистр активов, обязательств и требований УК
|
||||||
DROP TABLE IF EXISTS REGISTRY_HISTORY;
|
DROP TABLE IF EXISTS REGISTRY_HISTORY;
|
||||||
CREATE TABLE REGISTRY_HISTORY(REGISTRY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint);
|
CREATE TABLE REGISTRY_HISTORY(REGISTRY_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), COMPANY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), ACCOUNT_ID bigint, ACCOUNT_TYPE varchar(4), ACCOUNT varchar(50), REGISTRY_DESIGNATION varchar(4), REGISTRY_INSTRUMENT_TYPE varchar(4), REGISTRY_CAPACITY varchar(4), REGISTRY_UNIT varchar(4), REGISTRY_CODE varchar(4), TRADING_CLEARING_REGISTRY_ID bigint, TRADING_CLEARING_REGISTRY varchar(50), REGISTRY_STATUS varchar(4), SECURITY_SYMBOL varchar(255), BALANCE numeric(72,18), OPEN_BALANCE numeric(72,18), CLOSE_BALANCE numeric(72,18), CREDIT numeric(72,18), DEBIT numeric(72,18), SETTLED_CREDIT numeric(72,18), SETTLED_DEBIT numeric(72,18), CHECK_BALANCE numeric(72,18), DIFF_BALANCE numeric(72,18), PLAN_BALANCE numeric(72,18), BALANCE_DIMENSION varchar(4), SETTLEMENT_DATE date, SETTLEMENT_CODE varchar(12), TRADING_DATE date, CLEARING_DATE date, REFUND_DATE date, VALUE_DATE date, PRICE numeric(72,18), CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COMMENT varchar(255), PARENT_ID bigint, GROUP_ID bigint, SESSION_ID bigint, SESSION_TYPE varchar(4), PAYMENT_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SECURITY_ID bigint, SECTION varchar(4));
|
||||||
COMMENT ON TABLE REGISTRY_HISTORY IS 'История изменений таблицы registry';
|
COMMENT ON TABLE REGISTRY_HISTORY IS 'История изменений таблицы registry';
|
||||||
COMMENT ON COLUMN REGISTRY_HISTORY.REGISTRY_ID IS 'Идентификатор записи в таблице REGISTRY';
|
COMMENT ON COLUMN REGISTRY_HISTORY.REGISTRY_ID IS 'Идентификатор записи в таблице REGISTRY';
|
||||||
COMMENT ON COLUMN REGISTRY_HISTORY.EVENT_TIME IS 'Дата и время изменения';
|
COMMENT ON COLUMN REGISTRY_HISTORY.EVENT_TIME IS 'Дата и время изменения';
|
||||||
|
|
@ -2257,6 +2261,8 @@ COMMENT ON COLUMN REGISTRY_HISTORY.UPDATED_AT IS 'Дата и время изм
|
||||||
|
|
||||||
COMMENT ON COLUMN REGISTRY_HISTORY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
|
COMMENT ON COLUMN REGISTRY_HISTORY.SECURITY_ID IS 'Идентификатор инструмента (linked to security)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN REGISTRY_HISTORY.SECTION IS 'Код секции (linked to section)';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE REGISTRY_HISTORY TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE REGISTRY_HISTORY TO clearing;
|
||||||
|
|
||||||
-- account - Счета
|
-- account - Счета
|
||||||
|
|
@ -2373,16 +2379,16 @@ COMMENT ON COLUMN RELATION_HISTORY.UPDATED_AT IS 'Дата-время измен
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE RELATION_HISTORY TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE RELATION_HISTORY TO clearing;
|
||||||
|
|
||||||
-- bankAccount - Счета вывода средств из ПРЦ
|
-- bankAccount - Счета вывода средств
|
||||||
DROP TABLE IF EXISTS BANK_ACCOUNT;
|
DROP TABLE IF EXISTS BANK_ACCOUNT;
|
||||||
CREATE TABLE BANK_ACCOUNT(ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY varchar(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN varchar(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50), COMPANY_ID bigint, ID bigint PRIMARY KEY);
|
CREATE TABLE BANK_ACCOUNT(ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY varchar(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN varchar(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50), COMPANY_ID bigint, ID bigint PRIMARY KEY, INTERMEDIARY_SWIFT_CODE varchar(255), NAME varchar(255), ADDRESS varchar(255), BANK_ADDRESS varchar(255), BANK_SWIFT_CODE varchar(12), BANK_ACCOUNT varchar(35), BANK_NAME1 varchar(255), BANK_ADDRESS1 varchar(255), BANK_ACCOUNT1 varchar(35), BANK_NAME2 varchar(255), BANK_ADDRESS2 varchar(255), INTERMEDIARY_SWIFT_CODE2 varchar(12), BANK_ACCOUNT2 varchar(35), PERSONAL_ACCOUNT varchar(20), BUDGET_CLASSIFICATION_CODE varchar(20), OKTMO varchar(20));
|
||||||
COMMENT ON TABLE BANK_ACCOUNT IS 'Счета вывода средств из ПРЦ';
|
COMMENT ON TABLE BANK_ACCOUNT IS 'Счета вывода средств';
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT.ACCOUNT_ID IS 'Идентификатор счета (linked to account)';
|
COMMENT ON COLUMN BANK_ACCOUNT.ACCOUNT_ID IS 'Идентификатор счета (linked to account)';
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT.BANK_IDENTIFICATION_CODE IS 'Банковский идентификационный код (БИК)';
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_IDENTIFICATION_CODE IS 'Банковский идентификационный код (БИК)';
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT.BANK_NAME IS 'Наименование банка';
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_NAME IS 'Наименование компании в банке';
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT.CORRESPONDENT_ACCOUNT IS 'Корреспондентский счет';
|
COMMENT ON COLUMN BANK_ACCOUNT.CORRESPONDENT_ACCOUNT IS 'Корреспондентский счет';
|
||||||
|
|
||||||
|
|
@ -2408,12 +2414,44 @@ COMMENT ON COLUMN BANK_ACCOUNT.COMPANY_ID IS 'Идентификатор ком
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT.ID IS 'Идентификатор записи';
|
COMMENT ON COLUMN BANK_ACCOUNT.ID IS 'Идентификатор записи';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.INTERMEDIARY_SWIFT_CODE IS 'Код SWIFT посредника';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.NAME IS 'Наименование владельца счета';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.ADDRESS IS 'Адрес владельца счета';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ADDRESS IS 'Место нахождения банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_SWIFT_CODE IS 'SWIFT банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ACCOUNT IS 'Номер счета банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_NAME1 IS 'Наименование банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ADDRESS1 IS 'Место нахождения банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ACCOUNT1 IS 'Номер счета банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_NAME2 IS 'Наименование банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ADDRESS2 IS 'Место нахождения банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.INTERMEDIARY_SWIFT_CODE2 IS 'SWIFT банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ACCOUNT2 IS 'Номер счета банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.PERSONAL_ACCOUNT IS 'Лицевой счет получателя';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BUDGET_CLASSIFICATION_CODE IS 'КБК';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.OKTMO IS 'ОКТМО получателя средств';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE BANK_ACCOUNT TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE BANK_ACCOUNT TO clearing;
|
||||||
|
|
||||||
|
|
||||||
-- History log of bankAccount - Счета вывода средств из ПРЦ
|
-- History log of bankAccount - Счета вывода средств
|
||||||
DROP TABLE IF EXISTS BANK_ACCOUNT_HISTORY;
|
DROP TABLE IF EXISTS BANK_ACCOUNT_HISTORY;
|
||||||
CREATE TABLE BANK_ACCOUNT_HISTORY(BANK_ACCOUNT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY varchar(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN varchar(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50), COMPANY_ID bigint, ID bigint PRIMARY KEY);
|
CREATE TABLE BANK_ACCOUNT_HISTORY(BANK_ACCOUNT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY varchar(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN varchar(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50), COMPANY_ID bigint, ID bigint PRIMARY KEY, INTERMEDIARY_SWIFT_CODE varchar(255), NAME varchar(255), ADDRESS varchar(255), BANK_ADDRESS varchar(255), BANK_SWIFT_CODE varchar(12), BANK_ACCOUNT varchar(35), BANK_NAME1 varchar(255), BANK_ADDRESS1 varchar(255), BANK_ACCOUNT1 varchar(35), BANK_NAME2 varchar(255), BANK_ADDRESS2 varchar(255), INTERMEDIARY_SWIFT_CODE2 varchar(12), BANK_ACCOUNT2 varchar(35), PERSONAL_ACCOUNT varchar(20), BUDGET_CLASSIFICATION_CODE varchar(20), OKTMO varchar(20));
|
||||||
COMMENT ON TABLE BANK_ACCOUNT_HISTORY IS 'История изменений таблицы bankAccount';
|
COMMENT ON TABLE BANK_ACCOUNT_HISTORY IS 'История изменений таблицы bankAccount';
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT_ID IS 'Идентификатор записи в таблице BANK_ACCOUNT';
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT_ID IS 'Идентификатор записи в таблице BANK_ACCOUNT';
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.EVENT_TIME IS 'Дата и время изменения';
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.EVENT_TIME IS 'Дата и время изменения';
|
||||||
|
|
@ -2424,7 +2462,7 @@ COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ACCOUNT_ID IS 'Идентификатор
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_IDENTIFICATION_CODE IS 'Банковский идентификационный код (БИК)';
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_IDENTIFICATION_CODE IS 'Банковский идентификационный код (БИК)';
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_NAME IS 'Наименование банка';
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_NAME IS 'Наименование компании в банке';
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.CORRESPONDENT_ACCOUNT IS 'Корреспондентский счет';
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.CORRESPONDENT_ACCOUNT IS 'Корреспондентский счет';
|
||||||
|
|
||||||
|
|
@ -2450,6 +2488,38 @@ COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.COMPANY_ID IS 'Идентификатор
|
||||||
|
|
||||||
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ID IS 'Идентификатор записи';
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ID IS 'Идентификатор записи';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.INTERMEDIARY_SWIFT_CODE IS 'Код SWIFT посредника';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.NAME IS 'Наименование владельца счета';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ADDRESS IS 'Адрес владельца счета';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ADDRESS IS 'Место нахождения банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_SWIFT_CODE IS 'SWIFT банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT IS 'Номер счета банка получателя средств';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_NAME1 IS 'Наименование банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ADDRESS1 IS 'Место нахождения банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT1 IS 'Номер счета банка-посредника 1';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_NAME2 IS 'Наименование банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ADDRESS2 IS 'Место нахождения банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.INTERMEDIARY_SWIFT_CODE2 IS 'SWIFT банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT2 IS 'Номер счета банка-посредника 2';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.PERSONAL_ACCOUNT IS 'Лицевой счет получателя';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BUDGET_CLASSIFICATION_CODE IS 'КБК';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.OKTMO IS 'ОКТМО получателя средств';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE BANK_ACCOUNT_HISTORY TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE BANK_ACCOUNT_HISTORY TO clearing;
|
||||||
|
|
||||||
-- informationAccount - Регистр КС
|
-- informationAccount - Регистр КС
|
||||||
|
|
@ -3513,9 +3583,9 @@ COMMENT ON COLUMN EXCLUDE_LIABILITIES_REGISTER.UPDATED_AT IS 'Дата-врем
|
||||||
|
|
||||||
COMMENT ON COLUMN EXCLUDE_LIABILITIES_REGISTER.SESSION_ID IS 'Идентификатор клиринговой сессии (linked to session)';
|
COMMENT ON COLUMN EXCLUDE_LIABILITIES_REGISTER.SESSION_ID IS 'Идентификатор клиринговой сессии (linked to session)';
|
||||||
|
|
||||||
COMMENT ON COLUMN EXCLUDE_LIABILITIES_REGISTER.VALID_FROM_DATE IS 'Дата начала cессии';
|
COMMENT ON COLUMN EXCLUDE_LIABILITIES_REGISTER.VALID_FROM_DATE IS 'Дата начала сессии';
|
||||||
|
|
||||||
COMMENT ON COLUMN EXCLUDE_LIABILITIES_REGISTER.VALID_TO_DATE IS 'Дата окончания cессии';
|
COMMENT ON COLUMN EXCLUDE_LIABILITIES_REGISTER.VALID_TO_DATE IS 'Дата окончания сессии';
|
||||||
|
|
||||||
COMMENT ON COLUMN EXCLUDE_LIABILITIES_REGISTER.COMPANY_ID IS 'Идентификатор компании (linked to company)';
|
COMMENT ON COLUMN EXCLUDE_LIABILITIES_REGISTER.COMPANY_ID IS 'Идентификатор компании (linked to company)';
|
||||||
|
|
||||||
|
|
@ -3596,9 +3666,9 @@ COMMENT ON COLUMN LIABILITIES_REGISTER.UPDATED_AT IS 'Дата-время изм
|
||||||
|
|
||||||
COMMENT ON COLUMN LIABILITIES_REGISTER.SESSION_ID IS 'Идентификатор клиринговой сессии (linked to session)';
|
COMMENT ON COLUMN LIABILITIES_REGISTER.SESSION_ID IS 'Идентификатор клиринговой сессии (linked to session)';
|
||||||
|
|
||||||
COMMENT ON COLUMN LIABILITIES_REGISTER.VALID_FROM_DATE IS 'Дата начала cессии';
|
COMMENT ON COLUMN LIABILITIES_REGISTER.VALID_FROM_DATE IS 'Дата начала сессии';
|
||||||
|
|
||||||
COMMENT ON COLUMN LIABILITIES_REGISTER.VALID_TO_DATE IS 'Дата окончания cессии';
|
COMMENT ON COLUMN LIABILITIES_REGISTER.VALID_TO_DATE IS 'Дата окончания сессии';
|
||||||
|
|
||||||
COMMENT ON COLUMN LIABILITIES_REGISTER.COMPANY_ID IS 'Идентификатор компании (linked to company)';
|
COMMENT ON COLUMN LIABILITIES_REGISTER.COMPANY_ID IS 'Идентификатор компании (linked to company)';
|
||||||
|
|
||||||
|
|
@ -4100,7 +4170,7 @@ GRANT ALL PRIVILEGES ON TABLE S_DF05 TO clearing;
|
||||||
|
|
||||||
-- sDf06 - ДФ-06 Запрос на зачисление/списание денежных средств
|
-- sDf06 - ДФ-06 Запрос на зачисление/списание денежных средств
|
||||||
DROP TABLE IF EXISTS S_DF06;
|
DROP TABLE IF EXISTS S_DF06;
|
||||||
CREATE TABLE S_DF06(ID bigint PRIMARY KEY, ACCOUNT varchar(20), SUM numeric(72,18), MARKET varchar(1), TYPE varchar(255), DEAL varchar(10), CLIENT_N varchar(255), INN varchar(255), BIC varchar(255), SPEC varchar(255), NUMBER numeric(72,18), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint, _DOC__NUM varchar(3), _DOC__DATE varchar(8), PAY_VAL varchar(12));
|
CREATE TABLE S_DF06(ID bigint PRIMARY KEY, ACCOUNT varchar(20), SUM numeric(72,18), MARKET varchar(1), TYPE varchar(255), DEAL varchar(10), CLIENT_N varchar(255), INN varchar(255), BIC varchar(255), SPEC varchar(255), NUMBER numeric(72,18), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint, DOC_NUM varchar(3), DOC_DATE varchar(8), PAY_VAL varchar(12));
|
||||||
COMMENT ON TABLE S_DF06 IS 'ДФ-06 Запрос на зачисление/списание денежных средств';
|
COMMENT ON TABLE S_DF06 IS 'ДФ-06 Запрос на зачисление/списание денежных средств';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF06.ID IS 'Идентификатор записи';
|
COMMENT ON COLUMN S_DF06.ID IS 'Идентификатор записи';
|
||||||
|
|
@ -4131,9 +4201,9 @@ COMMENT ON COLUMN S_DF06.GENERATION_TIME IS 'Дата и время обрабо
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF06.GENERATION_ID IS 'Идентификатор взаимодействия';
|
COMMENT ON COLUMN S_DF06.GENERATION_ID IS 'Идентификатор взаимодействия';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF06._DOC__NUM IS 'Номер выгружаемого документа';
|
COMMENT ON COLUMN S_DF06.DOC_NUM IS 'Номер выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF06._DOC__DATE IS 'Дата выгружаемого документа';
|
COMMENT ON COLUMN S_DF06.DOC_DATE IS 'Дата выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF06.PAY_VAL IS 'Валюта документа';
|
COMMENT ON COLUMN S_DF06.PAY_VAL IS 'Валюта документа';
|
||||||
|
|
||||||
|
|
@ -4141,7 +4211,7 @@ GRANT ALL PRIVILEGES ON TABLE S_DF06 TO clearing;
|
||||||
|
|
||||||
-- sDf07 - ДФ-07 Ответ на запрос по зачислению/списанию денежных средств
|
-- sDf07 - ДФ-07 Ответ на запрос по зачислению/списанию денежных средств
|
||||||
DROP TABLE IF EXISTS S_DF07;
|
DROP TABLE IF EXISTS S_DF07;
|
||||||
CREATE TABLE S_DF07(ID bigint PRIMARY KEY, ACCOUNT varchar(20), SUM numeric(72,18), MARKET varchar(1), TYPE varchar(255), DEAL varchar(10), CLIENT_N varchar(255), INN varchar(255), BIC varchar(255), SPEC varchar(255), NUMBER numeric(72,18), RESULT numeric(72,18), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint, IN_S_DF_ID bigint, _DOC__NUM varchar(3), _DOC__DATE varchar(8), PAY_VAL varchar(12));
|
CREATE TABLE S_DF07(ID bigint PRIMARY KEY, ACCOUNT varchar(20), SUM numeric(72,18), MARKET varchar(1), TYPE varchar(255), DEAL varchar(10), CLIENT_N varchar(255), INN varchar(255), BIC varchar(255), SPEC varchar(255), NUMBER numeric(72,18), RESULT numeric(72,18), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint, IN_S_DF_ID bigint, DOC_NUM varchar(3), DOC_DATE varchar(8), PAY_VAL varchar(12));
|
||||||
COMMENT ON TABLE S_DF07 IS 'ДФ-07 Ответ на запрос по зачислению/списанию денежных средств';
|
COMMENT ON TABLE S_DF07 IS 'ДФ-07 Ответ на запрос по зачислению/списанию денежных средств';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF07.ID IS 'Идентификатор записи';
|
COMMENT ON COLUMN S_DF07.ID IS 'Идентификатор записи';
|
||||||
|
|
@ -4176,9 +4246,9 @@ COMMENT ON COLUMN S_DF07.GENERATION_ID IS 'Идентификатор взаим
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF07.IN_S_DF_ID IS 'Идентификатор соответствующей записи из таблицы-источника';
|
COMMENT ON COLUMN S_DF07.IN_S_DF_ID IS 'Идентификатор соответствующей записи из таблицы-источника';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF07._DOC__NUM IS 'Номер выгружаемого документа';
|
COMMENT ON COLUMN S_DF07.DOC_NUM IS 'Номер выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF07._DOC__DATE IS 'Дата выгружаемого документа';
|
COMMENT ON COLUMN S_DF07.DOC_DATE IS 'Дата выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF07.PAY_VAL IS 'Валюта документа';
|
COMMENT ON COLUMN S_DF07.PAY_VAL IS 'Валюта документа';
|
||||||
|
|
||||||
|
|
@ -4526,7 +4596,7 @@ GRANT ALL PRIVILEGES ON TABLE S_DF53 TO clearing;
|
||||||
|
|
||||||
-- sDf54 - ДФ-54 Вывод свободных средств для инициаторов категории В с клирингового счета 30414
|
-- sDf54 - ДФ-54 Вывод свободных средств для инициаторов категории В с клирингового счета 30414
|
||||||
DROP TABLE IF EXISTS S_DF54;
|
DROP TABLE IF EXISTS S_DF54;
|
||||||
CREATE TABLE S_DF54(ID bigint PRIMARY KEY, SEG_TYPE varchar(1), DOC_TYPE varchar(4), DOCNM_REF varchar(16), DOCNMPREV varchar(16), SBANKCODE varchar(12), C_ACC_DEB varchar(35), SBANKNAM1 varchar(35), SBANKNAM2 varchar(35), SBANKNAM3 varchar(35), SBANKNAM4 varchar(35), SBANKNAM5 varchar(35), RBANKCODE varchar(12), C_ACC_CRED varchar(35), RBANKNAM1 varchar(35), RBANKNAM2 varchar(35), RBANKNAM3 varchar(35), RBANKNAM4 varchar(35), RBANKNAM5 varchar(35), OP_TYPE varchar(2), OP_ORDER varchar(1), PAY_DATE varchar(8), PAY_VAL varchar(12), SUM_DEB varchar(22), SCLIENTN1 varchar(35), SCLIENTN2 varchar(35), SCLIENTN3 varchar(35), SCLIENTN4 varchar(35), INN_DEB varchar(12), KPP_DEB varchar(9), ACC_DEB varchar(35), RCLIENTN1 varchar(35), RCLIENTN2 varchar(35), RCLIENTN3 varchar(35), RCLIENTN4 varchar(35), INN_CRED varchar(12), KPP_CRED varchar(9), ACC_KR_1 varchar(35), SPECIF_1 varchar(255), SEND_TYPE varchar(10), DOC_RESULT varchar(2), GENERATION_TIME timestamp, GENERATION_ID bigint, _DOC__NUM varchar(3), _DOC__DATE varchar(8), _VALUE_DATE varchar(8), _SWIFT_BEN varchar(11), _SWIFT_INT varchar(11));
|
CREATE TABLE S_DF54(ID bigint PRIMARY KEY, SEG_TYPE varchar(1), DOC_TYPE varchar(4), DOCNM_REF varchar(16), DOCNMPREV varchar(16), SBANKCODE varchar(12), C_ACC_DEB varchar(35), SBANKNAM1 varchar(35), SBANKNAM2 varchar(35), SBANKNAM3 varchar(35), SBANKNAM4 varchar(35), SBANKNAM5 varchar(35), RBANKCODE varchar(12), C_ACC_CRED varchar(35), RBANKNAM1 varchar(35), RBANKNAM2 varchar(35), RBANKNAM3 varchar(35), RBANKNAM4 varchar(35), RBANKNAM5 varchar(35), OP_TYPE varchar(2), OP_ORDER varchar(1), PAY_DATE varchar(8), PAY_VAL varchar(12), SUM_DEB varchar(22), SCLIENTN1 varchar(35), SCLIENTN2 varchar(35), SCLIENTN3 varchar(35), SCLIENTN4 varchar(35), INN_DEB varchar(12), KPP_DEB varchar(9), ACC_DEB varchar(35), RCLIENTN1 varchar(35), RCLIENTN2 varchar(35), RCLIENTN3 varchar(35), RCLIENTN4 varchar(35), INN_CRED varchar(12), KPP_CRED varchar(9), ACC_KR_1 varchar(35), SPECIF_1 varchar(255), SEND_TYPE varchar(10), DOC_RESULT varchar(2), GENERATION_TIME timestamp, GENERATION_ID bigint, DOC_NUM varchar(3), DOC_DATE varchar(8), VALUE_DATE varchar(8), SWIFT_BEN varchar(11), SWIFT_INT varchar(11));
|
||||||
COMMENT ON TABLE S_DF54 IS 'ДФ-54 Вывод свободных средств для инициаторов категории В с клирингового счета 30414';
|
COMMENT ON TABLE S_DF54 IS 'ДФ-54 Вывод свободных средств для инициаторов категории В с клирингового счета 30414';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF54.ID IS 'Идентификатор записи';
|
COMMENT ON COLUMN S_DF54.ID IS 'Идентификатор записи';
|
||||||
|
|
@ -4615,21 +4685,21 @@ COMMENT ON COLUMN S_DF54.GENERATION_TIME IS 'Дата и время создан
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF54.GENERATION_ID IS 'Идентификатор взаимодействия';
|
COMMENT ON COLUMN S_DF54.GENERATION_ID IS 'Идентификатор взаимодействия';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF54._DOC__NUM IS 'Номер выгружаемого документа';
|
COMMENT ON COLUMN S_DF54.DOC_NUM IS 'Номер выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF54._DOC__DATE IS 'Дата выгружаемого документа';
|
COMMENT ON COLUMN S_DF54.DOC_DATE IS 'Дата выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF54._VALUE_DATE IS 'Дата валютирования';
|
COMMENT ON COLUMN S_DF54.VALUE_DATE IS 'Дата валютирования';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF54._SWIFT_BEN IS 'Свифт банка бенефициара';
|
COMMENT ON COLUMN S_DF54.SWIFT_BEN IS 'Свифт банка бенефициара';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF54._SWIFT_INT IS 'Свифт банка посредника';
|
COMMENT ON COLUMN S_DF54.SWIFT_INT IS 'Свифт банка посредника';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE S_DF54 TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE S_DF54 TO clearing;
|
||||||
|
|
||||||
-- sDf55 - ДФ-55 Квитанция об обработке ДФ-54
|
-- sDf55 - ДФ-55 Квитанция об обработке ДФ-54
|
||||||
DROP TABLE IF EXISTS S_DF55;
|
DROP TABLE IF EXISTS S_DF55;
|
||||||
CREATE TABLE S_DF55(ID bigint PRIMARY KEY, SEG_TYPE varchar(1), DOC_TYPE varchar(4), DOCNM_REF varchar(16), DOCNMPREV varchar(16), SBANKCODE varchar(12), C_ACC_DEB varchar(35), SBANKNAM1 varchar(35), SBANKNAM2 varchar(35), SBANKNAM3 varchar(35), SBANKNAM4 varchar(35), SBANKNAM5 varchar(35), RBANKCODE varchar(12), C_ACC_CRED varchar(35), RBANKNAM1 varchar(35), RBANKNAM2 varchar(35), RBANKNAM3 varchar(35), RBANKNAM4 varchar(35), RBANKNAM5 varchar(35), OP_TYPE varchar(2), OP_ORDER varchar(1), PAY_DATE varchar(8), PAY_VAL varchar(12), SUM_DEB varchar(22), SCLIENTN1 varchar(35), SCLIENTN2 varchar(35), SCLIENTN3 varchar(35), SCLIENTN4 varchar(35), INN_DEB varchar(12), KPP_DEB varchar(9), ACC_DEB varchar(35), RCLIENTN1 varchar(35), RCLIENTN2 varchar(35), RCLIENTN3 varchar(35), RCLIENTN4 varchar(35), INN_CRED varchar(12), KPP_CRED varchar(9), ACC_KR_1 varchar(35), SPECIF_1 varchar(255), SEND_TYPE varchar(10), DOC_RESULT varchar(2), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint, _DOC__NUM varchar(3), _DOC__DATE varchar(8), _VALUE_DATE varchar(8), _SWIFT_BEN varchar(11), _SWIFT_INT varchar(11));
|
CREATE TABLE S_DF55(ID bigint PRIMARY KEY, SEG_TYPE varchar(1), DOC_TYPE varchar(4), DOCNM_REF varchar(16), DOCNMPREV varchar(16), SBANKCODE varchar(12), C_ACC_DEB varchar(35), SBANKNAM1 varchar(35), SBANKNAM2 varchar(35), SBANKNAM3 varchar(35), SBANKNAM4 varchar(35), SBANKNAM5 varchar(35), RBANKCODE varchar(12), C_ACC_CRED varchar(35), RBANKNAM1 varchar(35), RBANKNAM2 varchar(35), RBANKNAM3 varchar(35), RBANKNAM4 varchar(35), RBANKNAM5 varchar(35), OP_TYPE varchar(2), OP_ORDER varchar(1), PAY_DATE varchar(8), PAY_VAL varchar(12), SUM_DEB varchar(22), SCLIENTN1 varchar(35), SCLIENTN2 varchar(35), SCLIENTN3 varchar(35), SCLIENTN4 varchar(35), INN_DEB varchar(12), KPP_DEB varchar(9), ACC_DEB varchar(35), RCLIENTN1 varchar(35), RCLIENTN2 varchar(35), RCLIENTN3 varchar(35), RCLIENTN4 varchar(35), INN_CRED varchar(12), KPP_CRED varchar(9), ACC_KR_1 varchar(35), SPECIF_1 varchar(255), SEND_TYPE varchar(10), DOC_RESULT varchar(2), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint, DOC_NUM varchar(3), DOC_DATE varchar(8), VALUE_DATE varchar(8), SWIFT_BEN varchar(11), SWIFT_INT varchar(11));
|
||||||
COMMENT ON TABLE S_DF55 IS 'ДФ-55 Квитанция об обработке ДФ-54';
|
COMMENT ON TABLE S_DF55 IS 'ДФ-55 Квитанция об обработке ДФ-54';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF55.ID IS 'Идентификатор записи';
|
COMMENT ON COLUMN S_DF55.ID IS 'Идентификатор записи';
|
||||||
|
|
@ -4720,15 +4790,15 @@ COMMENT ON COLUMN S_DF55.GENERATION_TIME IS 'Дата и время обрабо
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF55.GENERATION_ID IS 'Идентификатор взаимодействия';
|
COMMENT ON COLUMN S_DF55.GENERATION_ID IS 'Идентификатор взаимодействия';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF55._DOC__NUM IS 'Номер выгружаемого документа';
|
COMMENT ON COLUMN S_DF55.DOC_NUM IS 'Номер выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF55._DOC__DATE IS 'Дата выгружаемого документа';
|
COMMENT ON COLUMN S_DF55.DOC_DATE IS 'Дата выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF55._VALUE_DATE IS 'Дата валютирования';
|
COMMENT ON COLUMN S_DF55.VALUE_DATE IS 'Дата валютирования';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF55._SWIFT_BEN IS 'Свифт банка бенефициара';
|
COMMENT ON COLUMN S_DF55.SWIFT_BEN IS 'Свифт банка бенефициара';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF55._SWIFT_INT IS 'Свифт банка посредника';
|
COMMENT ON COLUMN S_DF55.SWIFT_INT IS 'Свифт банка посредника';
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE S_DF55 TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE S_DF55 TO clearing;
|
||||||
|
|
||||||
|
|
@ -4757,7 +4827,7 @@ GRANT ALL PRIVILEGES ON TABLE S_DF56 TO clearing;
|
||||||
|
|
||||||
-- sDf57 - ДФ-57 Список транзакций о списании/зачислении за период по всем счетам (ТБС и КС)
|
-- sDf57 - ДФ-57 Список транзакций о списании/зачислении за период по всем счетам (ТБС и КС)
|
||||||
DROP TABLE IF EXISTS S_DF57;
|
DROP TABLE IF EXISTS S_DF57;
|
||||||
CREATE TABLE S_DF57(GENERATION_TIME timestamp, ID bigint PRIMARY KEY, DBF_ID bigint, DEAL_DEB varchar(4), DEAL_CRED varchar(4), SBANKCODE varchar(12), C_ACC_DEB varchar(35), SBANKNAM1 varchar(35), SBANKNAM2 varchar(35), SBANKNAM3 varchar(35), SBANKNAM4 varchar(35), SBANKNAM5 varchar(35), RBANKCODE varchar(35), C_ACC_CRED varchar(35), RBANKNAM1 varchar(35), RBANKNAM2 varchar(35), RBANKNAM3 varchar(35), RBANKNAM4 varchar(35), RBANKNAM5 varchar(35), OP_TYPE varchar(2), PAY_DATE varchar(8), EXT_DATE varchar(255), PAY_VAL varchar(12), SUM_DEB varchar(22), SCLIENTN1 varchar(35), SCLIENTN2 varchar(35), SCLIENTN3 varchar(35), SCLIENTN4 varchar(35), INN_DEB varchar(12), KPP_DEB varchar(9), ACC_DEB varchar(35), RCLIENTN1 varchar(35), RCLIENTN2 varchar(35), RCLIENTN3 varchar(35), RCLIENTN4 varchar(35), INN_CRED varchar(12), KPP_CRED varchar(9), ACC_KR varchar(35), SPECIF varchar(255), FILE_NAME varchar(255), GENERATION_ID bigint, _DOC__NUM varchar(3), _DOC__DATE varchar(8), DT_IN varchar(22), KT_IN varchar(22), DT_OUT varchar(22), KT_OUT varchar(22));
|
CREATE TABLE S_DF57(GENERATION_TIME timestamp, ID bigint PRIMARY KEY, DBF_ID bigint, DEAL_DEB varchar(4), DEAL_CRED varchar(4), SBANKCODE varchar(12), C_ACC_DEB varchar(35), SBANKNAM1 varchar(35), SBANKNAM2 varchar(35), SBANKNAM3 varchar(35), SBANKNAM4 varchar(35), SBANKNAM5 varchar(35), RBANKCODE varchar(35), C_ACC_CRED varchar(35), RBANKNAM1 varchar(35), RBANKNAM2 varchar(35), RBANKNAM3 varchar(35), RBANKNAM4 varchar(35), RBANKNAM5 varchar(35), OP_TYPE varchar(2), PAY_DATE varchar(8), EXT_DATE varchar(255), PAY_VAL varchar(12), SUM_DEB varchar(22), SCLIENTN1 varchar(35), SCLIENTN2 varchar(35), SCLIENTN3 varchar(35), SCLIENTN4 varchar(35), INN_DEB varchar(12), KPP_DEB varchar(9), ACC_DEB varchar(35), RCLIENTN1 varchar(35), RCLIENTN2 varchar(35), RCLIENTN3 varchar(35), RCLIENTN4 varchar(35), INN_CRED varchar(12), KPP_CRED varchar(9), ACC_KR varchar(35), SPECIF varchar(255), FILE_NAME varchar(255), GENERATION_ID bigint, DOC_NUM varchar(3), DOC_DATE varchar(8), DT_IN varchar(22), KT_IN varchar(22), DT_OUT varchar(22), KT_OUT varchar(22));
|
||||||
COMMENT ON TABLE S_DF57 IS 'ДФ-57 Список транзакций о списании/зачислении за период по всем счетам (ТБС и КС)';
|
COMMENT ON TABLE S_DF57 IS 'ДФ-57 Список транзакций о списании/зачислении за период по всем счетам (ТБС и КС)';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF57.GENERATION_TIME IS 'Дата и время создания записи';
|
COMMENT ON COLUMN S_DF57.GENERATION_TIME IS 'Дата и время создания записи';
|
||||||
|
|
@ -4842,9 +4912,9 @@ COMMENT ON COLUMN S_DF57.FILE_NAME IS 'Наименование входящег
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF57.GENERATION_ID IS 'Идентификатор взаимодействия';
|
COMMENT ON COLUMN S_DF57.GENERATION_ID IS 'Идентификатор взаимодействия';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF57._DOC__NUM IS 'Номер выгружаемого документа';
|
COMMENT ON COLUMN S_DF57.DOC_NUM IS 'Номер выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF57._DOC__DATE IS 'Дата выгружаемого документа';
|
COMMENT ON COLUMN S_DF57.DOC_DATE IS 'Дата выгружаемого документа';
|
||||||
|
|
||||||
COMMENT ON COLUMN S_DF57.DT_IN IS 'Входящий дебетовый остаток';
|
COMMENT ON COLUMN S_DF57.DT_IN IS 'Входящий дебетовый остаток';
|
||||||
|
|
||||||
|
|
@ -5094,8 +5164,64 @@ COMMENT ON COLUMN S_CROSS_RATE.UPDATED_AT IS 'Дата-время изменен
|
||||||
|
|
||||||
GRANT ALL PRIVILEGES ON TABLE S_CROSS_RATE TO clearing;
|
GRANT ALL PRIVILEGES ON TABLE S_CROSS_RATE TO clearing;
|
||||||
|
|
||||||
|
-- blacklistMarket - blacklist площадок
|
||||||
|
DROP TABLE IF EXISTS BLACKLIST_MARKET;
|
||||||
|
CREATE TABLE BLACKLIST_MARKET(ID bigint PRIMARY KEY, CODE varchar(12), SECTION varchar(4));
|
||||||
|
COMMENT ON TABLE BLACKLIST_MARKET IS 'blacklist площадок';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BLACKLIST_MARKET.ID IS 'Идентификатор записи';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BLACKLIST_MARKET.CODE IS 'Код рынка';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN BLACKLIST_MARKET.SECTION IS 'Секция';
|
||||||
|
|
||||||
|
GRANT ALL PRIVILEGES ON TABLE BLACKLIST_MARKET TO clearing;
|
||||||
|
|
||||||
|
CREATE TABLE RISK_PARAMETER
|
||||||
|
(
|
||||||
|
ID BIGINT PRIMARY KEY,
|
||||||
|
VALUE numeric(72,18),
|
||||||
|
SETTLEMENT_TYPE VARCHAR(4),
|
||||||
|
CURRENCY_PAIR VARCHAR(12),
|
||||||
|
CURRENCY_PAIR_ID BIGINT,
|
||||||
|
CREATED_AT timestamp,
|
||||||
|
UPDATED_AT timestamp,
|
||||||
|
WORKFLOW_STATUS VARCHAR(4)
|
||||||
|
);
|
||||||
|
COMMENT ON TABLE RISK_PARAMETER IS 'Риск-параметры';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.ID IS 'Идентификатор записи';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.VALUE IS 'Ставка ';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.SETTLEMENT_TYPE IS 'Код расчета';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.CURRENCY_PAIR IS 'Код валютной пары';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.CURRENCY_PAIR_ID IS 'Идентификатор валютной пары';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.CREATED_AT IS 'Время создания записи';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.UPDATED_AT IS 'Время изменения записи';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.WORKFLOW_STATUS IS 'Статус';
|
||||||
|
GRANT ALL PRIVILEGES ON TABLE RISK_PARAMETER TO clearing;
|
||||||
|
|
||||||
|
CREATE TABLE RATES
|
||||||
|
(
|
||||||
|
ID BIGINT PRIMARY KEY,
|
||||||
|
VALUE numeric(72, 18),
|
||||||
|
VALUE_DATE date,
|
||||||
|
CURRENCY VARCHAR(4),
|
||||||
|
CURRENCY_ID BIGINT,
|
||||||
|
CREATED_AT timestamp,
|
||||||
|
UPDATED_AT timestamp,
|
||||||
|
WORKFLOW_STATUS VARCHAR(4)
|
||||||
|
);
|
||||||
|
COMMENT ON TABLE RATES IS 'Расчетные курсы';
|
||||||
|
COMMENT ON COLUMN RATES.ID IS 'Идентификатор записи';
|
||||||
|
COMMENT ON COLUMN RATES.VALUE IS 'Расчетный курс';
|
||||||
|
COMMENT ON COLUMN RATES.VALUE_DATE IS 'Дата, на которую расчетный курс';
|
||||||
|
COMMENT ON COLUMN RATES.CURRENCY IS 'Код валюты';
|
||||||
|
COMMENT ON COLUMN RATES.CURRENCY_ID IS 'Идентификатор валюты';
|
||||||
|
COMMENT ON COLUMN RATES.CREATED_AT IS 'Время создания записи';
|
||||||
|
COMMENT ON COLUMN RATES.UPDATED_AT IS 'Время изменения записи';
|
||||||
|
COMMENT ON COLUMN RATES.WORKFLOW_STATUS IS 'Статус';
|
||||||
|
GRANT ALL PRIVILEGES ON TABLE RATES TO clearing;
|
||||||
/* views */
|
/* views */
|
||||||
|
|
||||||
-- Data types
|
-- Data types
|
||||||
|
|
||||||
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.11') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION
|
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.15') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION
|
||||||
|
|
@ -1,7 +1,3 @@
|
||||||
-- DB version: 3.13
|
|
||||||
-- DATA version: 3.13.0.95
|
|
||||||
|
|
||||||
|
|
||||||
/* Dictionaries */
|
/* Dictionaries */
|
||||||
|
|
||||||
INSERT INTO ALLOWED_DICTIONARY(ID, CODE, NAME) values (1, 'ALWD', 'Разрешено') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO ALLOWED_DICTIONARY(ID, CODE, NAME) values (1, 'ALWD', 'Разрешено') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
@ -188,6 +184,8 @@ INSERT INTO COMPANY_ROLE_DICTIONARY(ID, CODE, NAME) values (6, 'CLRM', 'Учас
|
||||||
|
|
||||||
INSERT INTO COMPANY_ROLE_DICTIONARY(ID, CODE, NAME) values (7, 'ODEP', 'Участник расчетов по открытым депозитным счетам на секции МКР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO COMPANY_ROLE_DICTIONARY(ID, CODE, NAME) values (7, 'ODEP', 'Участник расчетов по открытым депозитным счетам на секции МКР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
|
INSERT INTO COMPANY_ROLE_DICTIONARY(ID, CODE, NAME) values (8, 'CLCC', 'Центральный контрагент') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO CURRENCY_CODE_DICTIONARY(ID, CODE, NAME) values (643, 'RUB', 'Российский рубль') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO CURRENCY_CODE_DICTIONARY(ID, CODE, NAME) values (643, 'RUB', 'Российский рубль') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO CURRENCY_CODE_DICTIONARY(ID, CODE, NAME) values (840, 'USD', 'Доллар США') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO CURRENCY_CODE_DICTIONARY(ID, CODE, NAME) values (840, 'USD', 'Доллар США') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
@ -483,6 +481,7 @@ INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (30, 'CBRR', 'Загрузк
|
||||||
INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (31, 'MTCR', 'Формирование файлов с МТКР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (31, 'MTCR', 'Формирование файлов с МТКР') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (32, 'LIMC', 'Выгрузка в Торговую систему остатков по валюте (отправка lim)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (32, 'LIMC', 'Выгрузка в Торговую систему остатков по валюте (отправка lim)') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (33, 'GREC', 'Формирование отчетности ЦК') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO TASK_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Активна') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO TASK_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Активна') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
|
|
@ -500,7 +499,9 @@ INSERT INTO PARENT_DICTIONARY(ID, CODE, NAME) values (2, 'PLNR', 'Расписа
|
||||||
|
|
||||||
INSERT INTO PARENT_DICTIONARY(ID, CODE, NAME) values (3, 'CLND', 'Календарь') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO PARENT_DICTIONARY(ID, CODE, NAME) values (3, 'CLND', 'Календарь') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO CURRENCY_SETTLEMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'TOD', 'Поставка сегодня') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO CURRENCY_SETTLEMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'T0', 'Сегодня') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
|
INSERT INTO CURRENCY_SETTLEMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (2, 'T1', 'Завтра') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO MAJOR_SIGN_DICTIONARY(ID, CODE, NAME) values (1, 'CONV', 'Конвертируемая валюта') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO MAJOR_SIGN_DICTIONARY(ID, CODE, NAME) values (1, 'CONV', 'Конвертируемая валюта') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
|
|
@ -556,6 +557,10 @@ INSERT INTO SESSION_TYPE_DICTIONARY(ID, CODE, NAME) values (9, 'CURR', 'Валю
|
||||||
|
|
||||||
INSERT INTO SESSION_TYPE_DICTIONARY(ID, CODE, NAME) values (10, 'UNIT', 'Клиринговая сессия Т0') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO SESSION_TYPE_DICTIONARY(ID, CODE, NAME) values (10, 'UNIT', 'Клиринговая сессия Т0') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
|
INSERT INTO SESSION_TYPE_DICTIONARY(ID, CODE, NAME) values (11, 'PREP', 'Предварительная сессия с ЦК') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
|
INSERT INTO SESSION_TYPE_DICTIONARY(ID, CODE, NAME) values (12, 'PAYM', 'Расчетная сессия с ЦК') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (1, 'BUY', 'Привлечь') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (1, 'BUY', 'Привлечь') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (2, 'SELL', 'Разместить') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (2, 'SELL', 'Разместить') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
@ -719,6 +724,8 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1021, 'SECR', 'Инф
|
||||||
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1022, 'SECR', 'Информация об инструментах Денежного рынка на режимах изменяется автоматически.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1022, 'SECR', 'Информация об инструментах Денежного рынка на режимах изменяется автоматически.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1023, 'SECR', 'Информация об инструментах Денежного рынка на режимах блокируется автоматически.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1023, 'SECR', 'Информация об инструментах Денежного рынка на режимах блокируется автоматически.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1024, 'SECR', 'Параметр для инструмента %s на дату уже существует.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1025, 'SECR', 'Расчетный курс для валюты %s на дату уже существует.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2000, 'UTIL', 'Общая ошибка модуля utility-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2000, 'UTIL', 'Общая ошибка модуля utility-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME;
|
||||||
|
|
||||||
|
|
@ -1024,4 +1031,4 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (10001, 'TRDI', 'Сде
|
||||||
|
|
||||||
/* Business objects */
|
/* Business objects */
|
||||||
|
|
||||||
INSERT INTO DB_VERSION(ID, DICTIONARY_VERSION) values (1, '3.13.0.95') ON CONFLICT (ID) DO UPDATE SET DICTIONARY_VERSION = EXCLUDED.DICTIONARY_VERSION
|
INSERT INTO DB_VERSION(ID, DICTIONARY_VERSION) values (1, '3.15.0.96') ON CONFLICT (ID) DO UPDATE SET DICTIONARY_VERSION = EXCLUDED.DICTIONARY_VERSION
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
-- DB version: 3.14 -> 3.15
|
||||||
|
|
||||||
|
-- == alter exist tables ==
|
||||||
|
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS NAME varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS ADDRESS varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BANK_ADDRESS varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BANK_SWIFT_CODE varchar(12);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BANK_ACCOUNT varchar(35);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BANK_NAME1 varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BANK_ADDRESS1 varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BANK_ACCOUNT1 varchar(35);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BANK_NAME2 varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BANK_ADDRESS2 varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS INTERMEDIARY_SWIFT_CODE2 varchar(12);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BANK_ACCOUNT2 varchar(35);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS PERSONAL_ACCOUNT varchar(20);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS BUDGET_CLASSIFICATION_CODE varchar(20);
|
||||||
|
ALTER TABLE BANK_ACCOUNT ADD COLUMN IF NOT EXISTS OKTMO varchar(20);
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.NAME IS 'Íàèìåíîâàíèå âëàäåëüöà ñ÷åòà';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.ADDRESS IS 'Àäðåñ âëàäåëüöà ñ÷åòà (ïîëó÷àòåëÿ ñðåäñòâ)';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ADDRESS IS 'Ìåñòî íàõîæäåíèÿ áàíêà ïîëó÷àòåëÿ ñðåäñòâ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_SWIFT_CODE IS 'SWIFT áàíêà ïîëó÷àòåëÿ ñðåäñòâ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ACCOUNT IS 'Íîìåð ñ÷åòà áàíêà ïîëó÷àòåëÿ ñðåäñòâ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_NAME1 IS 'Íàèìåíîâàíèå áàíêà-ïîñðåäíèêà 1 (ïðè íàëè÷èè)';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ADDRESS1 IS 'Ìåñòî íàõîæäåíèÿ áàíêà-ïîñðåäíèêà 1 (ïðè íàëè÷èè)';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ACCOUNT1 IS 'Íîìåð ñ÷åòà áàíêà-ïîñðåäíèêà 1';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_NAME2 IS 'Íàèìåíîâàíèå áàíêà-ïîñðåäíèêà 2';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ADDRESS2 IS 'Ìåñòî íàõîæäåíèÿ áàíêà-ïîñðåäíèêà 2';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.INTERMEDIARY_SWIFT_CODE2 IS 'SWIFT áàíêà-ïîñðåäíèêà 2';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BANK_ACCOUNT2 IS 'Íîìåð ñ÷åòà áàíêà-ïîñðåäíèêà 2';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.PERSONAL_ACCOUNT IS 'Ëèöåâîé ñ÷åò ïîëó÷àòåëÿ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.BUDGET_CLASSIFICATION_CODE IS 'ÊÁÊ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT.OKTMO IS 'ÎÊÒÌÎ ïîëó÷àòåëÿ ñðåäñòâ';
|
||||||
|
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS NAME varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS ADDRESS varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BANK_ADDRESS varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BANK_SWIFT_CODE varchar(12);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BANK_ACCOUNT varchar(35);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BANK_NAME1 varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BANK_ADDRESS1 varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BANK_ACCOUNT1 varchar(35);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BANK_NAME2 varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BANK_ADDRESS2 varchar(255);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS INTERMEDIARY_SWIFT_CODE2 varchar(12);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BANK_ACCOUNT2 varchar(35);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS PERSONAL_ACCOUNT varchar(20);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS BUDGET_CLASSIFICATION_CODE varchar(20);
|
||||||
|
ALTER TABLE BANK_ACCOUNT_HISTORY ADD COLUMN IF NOT EXISTS OKTMO varchar(20);
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.NAME IS 'Íàèìåíîâàíèå âëàäåëüöà ñ÷åòà';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ADDRESS IS 'Àäðåñ âëàäåëüöà ñ÷åòà (ïîëó÷àòåëÿ ñðåäñòâ)';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ADDRESS IS 'Ìåñòî íàõîæäåíèÿ áàíêà ïîëó÷àòåëÿ ñðåäñòâ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_SWIFT_CODE IS 'SWIFT áàíêà ïîëó÷àòåëÿ ñðåäñòâ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT IS 'Íîìåð ñ÷åòà áàíêà ïîëó÷àòåëÿ ñðåäñòâ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_NAME1 IS 'Íàèìåíîâàíèå áàíêà-ïîñðåäíèêà 1 (ïðè íàëè÷èè)';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ADDRESS1 IS 'Ìåñòî íàõîæäåíèÿ áàíêà-ïîñðåäíèêà 1 (ïðè íàëè÷èè)';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT1 IS 'Íîìåð ñ÷åòà áàíêà-ïîñðåäíèêà 1';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_NAME2 IS 'Íàèìåíîâàíèå áàíêà-ïîñðåäíèêà 2';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ADDRESS2 IS 'Ìåñòî íàõîæäåíèÿ áàíêà-ïîñðåäíèêà 2';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.INTERMEDIARY_SWIFT_CODE2 IS 'SWIFT áàíêà-ïîñðåäíèêà 2';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BANK_ACCOUNT2 IS 'Íîìåð ñ÷åòà áàíêà-ïîñðåäíèêà 2';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.PERSONAL_ACCOUNT IS 'Ëèöåâîé ñ÷åò ïîëó÷àòåëÿ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.BUDGET_CLASSIFICATION_CODE IS 'ÊÁÊ';
|
||||||
|
COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.OKTMO IS 'ÎÊÒÌÎ ïîëó÷àòåëÿ ñðåäñòâ';
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE S_TRADES ADD COLUMN IF NOT EXISTS KIND varchar(64);
|
||||||
|
ALTER TABLE S_TRADES ADD COLUMN IF NOT EXISTS LINKED_TRADE bigint;
|
||||||
|
COMMENT ON COLUMN S_TRADES.KIND IS 'Âèä ñäåëêè';
|
||||||
|
COMMENT ON COLUMN S_TRADES.LINKED_TRADE IS 'Íîìåð âèòðèííîé ñäåëêè â òîðãîâîé ñèñòåìå äëÿ ñäåëîê';
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS RISK_PARAMETER;
|
||||||
|
CREATE TABLE RISK_PARAMETER
|
||||||
|
(
|
||||||
|
ID BIGINT PRIMARY KEY,
|
||||||
|
VALUE numeric(72,18),
|
||||||
|
SETTLEMENT_TYPE VARCHAR(4),
|
||||||
|
CURRENCY_PAIR VARCHAR(12),
|
||||||
|
CURRENCY_PAIR_ID BIGINT,
|
||||||
|
CREATED_AT timestamp,
|
||||||
|
UPDATED_AT timestamp,
|
||||||
|
WORKFLOW_STATUS VARCHAR(4)
|
||||||
|
);
|
||||||
|
COMMENT ON TABLE RISK_PARAMETER IS 'Ðèñê-ïàðàìåòðû';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.ID IS 'Èäåíòèôèêàòîð çàïèñè';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.VALUE IS 'Ñòàâêà';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.SETTLEMENT_TYPE IS 'Êîä ðàñ÷åòà';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.CURRENCY_PAIR IS 'Êîä âàëþòíîé ïàðû';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.CURRENCY_PAIR_ID IS 'Èäåíòèôèêàòîð âàëþòíîé ïàðû';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.CREATED_AT IS 'Âðåìÿ ñîçäàíèÿ çàïèñè';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.UPDATED_AT IS 'Âðåìÿ èçìåíåíèÿ çàïèñè';
|
||||||
|
COMMENT ON COLUMN RISK_PARAMETER.WORKFLOW_STATUS IS 'Ñòàòóñ';
|
||||||
|
GRANT ALL PRIVILEGES ON TABLE RISK_PARAMETER TO clearing;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS RATES;
|
||||||
|
CREATE TABLE RATES
|
||||||
|
(
|
||||||
|
ID BIGINT PRIMARY KEY,
|
||||||
|
VALUE numeric(72, 18),
|
||||||
|
VALUE_DATE date,
|
||||||
|
CURRENCY VARCHAR(4),
|
||||||
|
CURRENCY_ID BIGINT,
|
||||||
|
CREATED_AT timestamp,
|
||||||
|
UPDATED_AT timestamp,
|
||||||
|
WORKFLOW_STATUS VARCHAR(4)
|
||||||
|
);
|
||||||
|
COMMENT ON TABLE RATES IS 'Ðàñ÷åòíûå êóðñû';
|
||||||
|
COMMENT ON COLUMN RATES.ID IS 'Èäåíòèôèêàòîð çàïèñè';
|
||||||
|
COMMENT ON COLUMN RATES.VALUE IS 'Ðàñ÷åòíûé êóðñ';
|
||||||
|
COMMENT ON COLUMN RATES.VALUE_DATE IS 'Äàòà, íà êîòîðóþ ðàñ÷åòíûé êóðñ';
|
||||||
|
COMMENT ON COLUMN RATES.CURRENCY IS 'Êîä âàëþòû';
|
||||||
|
COMMENT ON COLUMN RATES.CURRENCY_ID IS 'Èäåíòèôèêàòîð âàëþòû';
|
||||||
|
COMMENT ON COLUMN RATES.CREATED_AT IS 'Âðåìÿ ñîçäàíèÿ çàïèñè';
|
||||||
|
COMMENT ON COLUMN RATES.UPDATED_AT IS 'Âðåìÿ èçìåíåíèÿ çàïèñè';
|
||||||
|
COMMENT ON COLUMN RATES.WORKFLOW_STATUS IS 'Ñòàòóñ';
|
||||||
|
GRANT ALL PRIVILEGES ON TABLE RATES TO clearing;
|
||||||
|
|
||||||
|
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.15') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION
|
||||||
|
|
@ -7,12 +7,12 @@
|
||||||
<artifactId>dbf-exporter</artifactId>
|
<artifactId>dbf-exporter</artifactId>
|
||||||
<name>dbf-exporter</name>
|
<name>dbf-exporter</name>
|
||||||
<description>DBF exporter for DBF files</description>
|
<description>DBF exporter for DBF files</description>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package ru.spcex.clearing.dbf.exporter.logic.data;
|
package ru.spcex.clearing.dbf.exporter.logic.data;
|
||||||
|
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult;
|
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Контейнер для передачи результата между стадиями
|
* Контейнер для передачи результата между стадиями
|
||||||
|
|
@ -19,13 +18,15 @@ public class ResultContainer {
|
||||||
private StageResult lastStageResult;
|
private StageResult lastStageResult;
|
||||||
private LocalDateTime registrationDateTime;
|
private LocalDateTime registrationDateTime;
|
||||||
private String memberCode;
|
private String memberCode;
|
||||||
|
private String section;
|
||||||
|
|
||||||
protected ResultContainer() {}
|
protected ResultContainer() {}
|
||||||
|
|
||||||
public static ResultContainer createNewTask(Table tableForExport) {
|
public static ResultContainer createNewTask(Table tableForExport, String section) {
|
||||||
ResultContainer container = new ResultContainer();
|
ResultContainer container = new ResultContainer();
|
||||||
container.tableForExport = tableForExport;
|
container.tableForExport = tableForExport;
|
||||||
container.uuid = UUID.randomUUID();
|
container.uuid = UUID.randomUUID();
|
||||||
|
container.section = section;
|
||||||
return container;
|
return container;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,4 +93,8 @@ public class ResultContainer {
|
||||||
public void setMemberCode(String memberCode) {
|
public void setMemberCode(String memberCode) {
|
||||||
this.memberCode = memberCode;
|
this.memberCode = memberCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getSection() {
|
||||||
|
return section;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,14 @@
|
||||||
package ru.spcex.clearing.dbf.exporter.logic.data.enums;
|
package ru.spcex.clearing.dbf.exporter.logic.data.enums;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.integration.sftp.session.SftpFileInfo;
|
import org.springframework.integration.sftp.session.SftpFileInfo;
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.SECTION;
|
|
||||||
import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.outDir;
|
import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.outDir;
|
||||||
|
|
||||||
public enum FilenameTemplate {
|
public enum FilenameTemplate {
|
||||||
|
|
@ -66,7 +61,7 @@ public enum FilenameTemplate {
|
||||||
result.append(File.separator);
|
result.append(File.separator);
|
||||||
result.append(resultContainer.getTableForExport().getFilePrefix().toUpperCase(Locale.ROOT));
|
result.append(resultContainer.getTableForExport().getFilePrefix().toUpperCase(Locale.ROOT));
|
||||||
result.append('_');
|
result.append('_');
|
||||||
result.append(SECTION);
|
result.append(resultContainer.getSection());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@ import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class PrepareDBFFile extends Stage implements InitializingBean {
|
public class PrepareDBFFile extends Stage implements InitializingBean {
|
||||||
public static final String SECTION = "S";
|
|
||||||
private final ExportDBFServiceSettings settings;
|
private final ExportDBFServiceSettings settings;
|
||||||
public static String outDir;
|
public static String outDir;
|
||||||
private final SFTPConfig.DbfGateway gateway;
|
private final SFTPConfig.DbfGateway gateway;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
package ru.spcex.clearing.dbf.exporter.services;
|
package ru.spcex.clearing.dbf.exporter.services;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Optional;
|
||||||
import org.apache.kafka.clients.consumer.Consumer;
|
import org.apache.kafka.clients.consumer.Consumer;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.Processor;
|
import ru.spcex.clearing.dbf.exporter.logic.Processor;
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
||||||
|
|
@ -17,22 +20,22 @@ import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
|
||||||
import ru.spcex.platform.enumeration.Task;
|
import ru.spcex.platform.enumeration.Task;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class CommandService extends QueueConsumer implements InitializingBean {
|
public class CommandService extends QueueConsumer implements InitializingBean {
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
private final Processor processor;
|
private final Processor processor;
|
||||||
|
private final String section;
|
||||||
|
|
||||||
public CommandService(Consumer<String, Object> kafkaQueue,
|
public CommandService(Consumer<String, Object> kafkaQueue,
|
||||||
ImdgProvider imdgProvider,
|
ImdgProvider imdgProvider,
|
||||||
Processor processor) {
|
Processor processor,
|
||||||
|
@Value("${export-dbf-service.section:S}") String section) {
|
||||||
super(kafkaQueue);
|
super(kafkaQueue);
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.processor = processor;
|
this.processor = processor;
|
||||||
|
this.section = section;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -79,7 +82,7 @@ public class CommandService extends QueueConsumer implements InitializingBean {
|
||||||
if (tableForExport.isEmpty()) {
|
if (tableForExport.isEmpty()) {
|
||||||
throw new IllegalStateException(String.format("Unsupported table prefix: %s", request.getNameOfTable()));
|
throw new IllegalStateException(String.format("Unsupported table prefix: %s", request.getNameOfTable()));
|
||||||
}
|
}
|
||||||
ResultContainer resultContainer = ResultContainer.createNewTask(tableForExport.get());
|
ResultContainer resultContainer = ResultContainer.createNewTask(tableForExport.get(), section);
|
||||||
resultContainer.setGroupId(request.getSdfGroupId());
|
resultContainer.setGroupId(request.getSdfGroupId());
|
||||||
resultContainer.setSourceName(request.getFileName());
|
resultContainer.setSourceName(request.getFileName());
|
||||||
processor.process(resultContainer);
|
processor.process(resultContainer);
|
||||||
|
|
@ -87,7 +90,7 @@ public class CommandService extends QueueConsumer implements InitializingBean {
|
||||||
|
|
||||||
private void processSpecial(Table table, BaseRequest<SdfClearingRequest> systemRequest) {
|
private void processSpecial(Table table, BaseRequest<SdfClearingRequest> systemRequest) {
|
||||||
SdfClearingRequest request = systemRequest.getRequestPayload();
|
SdfClearingRequest request = systemRequest.getRequestPayload();
|
||||||
ResultContainer resultContainer = ResultContainer.createNewTask(table);
|
ResultContainer resultContainer = ResultContainer.createNewTask(table, section);
|
||||||
resultContainer.setGroupId(request.getGroupId());
|
resultContainer.setGroupId(request.getGroupId());
|
||||||
resultContainer.setSourceName(null);
|
resultContainer.setSourceName(null);
|
||||||
processor.process(resultContainer);
|
processor.process(resultContainer);
|
||||||
|
|
@ -96,7 +99,7 @@ public class CommandService extends QueueConsumer implements InitializingBean {
|
||||||
private void processByLauncher(Table table, BaseRequest<LauncherCommandRequest> systemRequest) {
|
private void processByLauncher(Table table, BaseRequest<LauncherCommandRequest> systemRequest) {
|
||||||
LauncherCommandRequest request = systemRequest.getRequestPayload();
|
LauncherCommandRequest request = systemRequest.getRequestPayload();
|
||||||
log.info("RequestId={}, LauncherCommandRequest task={}. Table {}", systemRequest.getId(), request.getTaskName(), table);
|
log.info("RequestId={}, LauncherCommandRequest task={}. Table {}", systemRequest.getId(), request.getTaskName(), table);
|
||||||
ResultContainer resultContainer = ResultContainer.createNewTask(table);
|
ResultContainer resultContainer = ResultContainer.createNewTask(table, section);
|
||||||
resultContainer.setGroupId(null);
|
resultContainer.setGroupId(null);
|
||||||
resultContainer.setSourceName(null);
|
resultContainer.setSourceName(null);
|
||||||
processor.process(resultContainer);
|
processor.process(resultContainer);
|
||||||
|
|
|
||||||
|
|
@ -30,3 +30,5 @@ export-dbf-service.kafka-producer.retries=0
|
||||||
export-dbf-service.kafka-producer.batch-size=16384
|
export-dbf-service.kafka-producer.batch-size=16384
|
||||||
export-dbf-service.kafka-producer.linger-ms=1
|
export-dbf-service.kafka-producer.linger-ms=1
|
||||||
export-dbf-service.kafka-producer.buffer-memory=33554432
|
export-dbf-service.kafka-producer.buffer-memory=33554432
|
||||||
|
|
||||||
|
export-dbf-service.section=S
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
package ru.spcex.clearing.dbf.exporter.logic.data.enums;
|
package ru.spcex.clearing.dbf.exporter.logic.data.enums;
|
||||||
|
|
||||||
import com.jcraft.jsch.ChannelSftp.LsEntry;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.integration.sftp.session.SftpFileInfo;
|
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
|
||||||
import ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import com.jcraft.jsch.ChannelSftp.LsEntry;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
import static org.mockito.Mockito.*;
|
import static org.mockito.Mockito.*;
|
||||||
|
import org.springframework.integration.sftp.session.SftpFileInfo;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
|
||||||
import static ru.spcex.clearing.dbf.exporter.logic.data.enums.FilenameTemplate.df_section_sameName;
|
import static ru.spcex.clearing.dbf.exporter.logic.data.enums.FilenameTemplate.df_section_sameName;
|
||||||
|
import ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile;
|
||||||
|
|
||||||
class FilenameTemplateTest {
|
class FilenameTemplateTest {
|
||||||
|
|
||||||
|
|
@ -38,7 +36,7 @@ class FilenameTemplateTest {
|
||||||
SftpFileInfo sftpFileInfo = spy(new SftpFileInfo(lsEntry));
|
SftpFileInfo sftpFileInfo = spy(new SftpFileInfo(lsEntry));
|
||||||
doReturn(false).when(sftpFileInfo).isDirectory();
|
doReturn(false).when(sftpFileInfo).isDirectory();
|
||||||
List<SftpFileInfo> files = List.of(sftpFileInfo);
|
List<SftpFileInfo> files = List.of(sftpFileInfo);
|
||||||
ResultContainer resultContainer = ResultContainer.createNewTask(Table.S_DF02);
|
ResultContainer resultContainer = ResultContainer.createNewTask(Table.S_DF02, "S");
|
||||||
resultContainer.setGroupId(10L);
|
resultContainer.setGroupId(10L);
|
||||||
resultContainer.setSourceName("DF-01_S_PRC1807230915_1.dbf");
|
resultContainer.setSourceName("DF-01_S_PRC1807230915_1.dbf");
|
||||||
PrepareDBFFile.outDir="TEST_DIR";
|
PrepareDBFFile.outDir="TEST_DIR";
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,12 @@
|
||||||
<artifactId>dbf-importer</artifactId>
|
<artifactId>dbf-importer</artifactId>
|
||||||
<name>dbf-importer</name>
|
<name>dbf-importer</name>
|
||||||
<description>DBF loader for DBF files</description>
|
<description>DBF loader for DBF files</description>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
|
||||||
|
|
@ -60,12 +60,12 @@ public class DbfImportKafkaMessenger implements InitializingBean {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void notifyUserAboutErrorParsing(Throwable error, ResultContainer resultContainer) {
|
public void notifyUserAboutErrorParsing(Throwable error, ResultContainer resultContainer) {
|
||||||
if (resultContainer == null || resultContainer.getDbfFile() == null || resultContainer.getDbfFile() == null)
|
if (resultContainer == null || resultContainer.getDbfFile() == null)
|
||||||
return;
|
return;
|
||||||
ETable currTable = resultContainer.getDbfTable();
|
ETable currTable = resultContainer.getDbfTable();
|
||||||
String fileName = resultContainer.getDbfFile().getName();
|
String fileName = resultContainer.getDbfFile().getName();
|
||||||
log.debug("Notify user about error {} \"{}\"",
|
log.debug("Notify user about error {} \"{}\"",
|
||||||
resultContainer.getDbfTable(), fileName);
|
currTable, fileName);
|
||||||
sendUserNotification(ObjectType.rgst, String.format("Файл \"%s\" не сохранен", fileName), Priority.HIGH);
|
sendUserNotification(ObjectType.rgst, String.format("Файл \"%s\" не сохранен", fileName), Priority.HIGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,12 @@
|
||||||
<name>Clearing dictionary</name>
|
<name>Clearing dictionary</name>
|
||||||
<description>Clearing dictionary</description>
|
<description>Clearing dictionary</description>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,12 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
<artifactId>extdb-importer</artifactId>
|
<artifactId>extdb-importer</artifactId>
|
||||||
<name>extdb-importer</name>
|
<name>extdb-importer</name>
|
||||||
<description>Extdb importer module. Аналог trade-importer.</description>
|
<description>Extdb importer module. Аналог trade-importer.</description>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ public class GatewayApiSettings {
|
||||||
private KafkaProducerSettings kafkaProducer;
|
private KafkaProducerSettings kafkaProducer;
|
||||||
private KafkaConsumerSettings kafkaConsumer;
|
private KafkaConsumerSettings kafkaConsumer;
|
||||||
private InboundServerSettings inboundServer;
|
private InboundServerSettings inboundServer;
|
||||||
|
private InboundExternalServerSettings inboundExternalServer;
|
||||||
|
private String clearingSystem;
|
||||||
|
|
||||||
public HazelcastClientParams getHazelcast() {
|
public HazelcastClientParams getHazelcast() {
|
||||||
return hazelcast;
|
return hazelcast;
|
||||||
|
|
@ -47,4 +49,20 @@ public class GatewayApiSettings {
|
||||||
public void setInboundServer(InboundServerSettings inboundServer) {
|
public void setInboundServer(InboundServerSettings inboundServer) {
|
||||||
this.inboundServer = inboundServer;
|
this.inboundServer = inboundServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InboundExternalServerSettings getInboundExternalServer() {
|
||||||
|
return inboundExternalServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInboundExternalServer(InboundExternalServerSettings inboundExternalServer) {
|
||||||
|
this.inboundExternalServer = inboundExternalServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getClearingSystem() {
|
||||||
|
return clearingSystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClearingSystem(String clearingSystem) {
|
||||||
|
this.clearingSystem = clearingSystem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package ru.spcex.clearing.gatewayapi.config;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class InboundExternalServerSettings {
|
||||||
|
private String host;
|
||||||
|
private String pathLOCM;
|
||||||
|
private String pathLOSC;
|
||||||
|
private Integer port;
|
||||||
|
private Boolean enableSsl;
|
||||||
|
private List<String> allowedTypes = new ArrayList<>();
|
||||||
|
|
||||||
|
public String getHost() {
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHost(String host) {
|
||||||
|
this.host = host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getPort() {
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPort(Integer port) {
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getEnableSsl() {
|
||||||
|
return enableSsl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEnableSsl(Boolean enableSsl) {
|
||||||
|
this.enableSsl = enableSsl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPathLOCM() {
|
||||||
|
return pathLOCM;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPathLOCM(String pathLOCM) {
|
||||||
|
this.pathLOCM = pathLOCM;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPathLOSC() {
|
||||||
|
return pathLOSC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPathLOSC(String pathLOSC) {
|
||||||
|
this.pathLOSC = pathLOSC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getAllowedTypes() {
|
||||||
|
return allowedTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAllowedTypes(List<String> allowedTypes) {
|
||||||
|
this.allowedTypes = allowedTypes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,11 +1,15 @@
|
||||||
package ru.spcex.clearing.gatewayapi.config;
|
package ru.spcex.clearing.gatewayapi.config;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class InboundServerSettings {
|
public class InboundServerSettings {
|
||||||
private String host;
|
private String host;
|
||||||
private String pathLOCM;
|
private String pathLOCM;
|
||||||
private String pathLOSC;
|
private String pathLOSC;
|
||||||
private Integer port;
|
private Integer port;
|
||||||
private Boolean enableSsl;
|
private Boolean enableSsl;
|
||||||
|
private List<String> allowedTypes = new ArrayList<>();
|
||||||
|
|
||||||
public String getHost() {
|
public String getHost() {
|
||||||
return host;
|
return host;
|
||||||
|
|
@ -46,4 +50,12 @@ public class InboundServerSettings {
|
||||||
public void setPathLOSC(String pathLOSC) {
|
public void setPathLOSC(String pathLOSC) {
|
||||||
this.pathLOSC = pathLOSC;
|
this.pathLOSC = pathLOSC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getAllowedTypes() {
|
||||||
|
return allowedTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAllowedTypes(List<String> allowedTypes) {
|
||||||
|
this.allowedTypes = allowedTypes;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -266,6 +266,8 @@ public class GatewayController {
|
||||||
commonResponse.setType(request.getType());
|
commonResponse.setType(request.getType());
|
||||||
commonResponse.setDatetime(request.getDatetime());
|
commonResponse.setDatetime(request.getDatetime());
|
||||||
commonResponse.setSection(request.getSection());
|
commonResponse.setSection(request.getSection());
|
||||||
|
commonResponse.setSection(request.getSection());
|
||||||
|
commonResponse.setClearingSystem(request.getClearingSystem());
|
||||||
if (success) {
|
if (success) {
|
||||||
commonResponse.setCode(0L);
|
commonResponse.setCode(0L);
|
||||||
commonResponse.setMessage("success");
|
commonResponse.setMessage("success");
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,9 @@ public class CommonRequest {
|
||||||
@JsonProperty("section")
|
@JsonProperty("section")
|
||||||
@ApiModelProperty(value = "Секция (FOND или MKR)", example = "FOND")
|
@ApiModelProperty(value = "Секция (FOND или MKR)", example = "FOND")
|
||||||
private String section;
|
private String section;
|
||||||
|
@JsonProperty("clearing_system")
|
||||||
|
@ApiModelProperty(value = "Клиринговая система", example = "SPVB/LCC")
|
||||||
|
private String clearingSystem;
|
||||||
|
|
||||||
public void validate(List<String> typeValidValues, List<Section> sectionValidValues) {
|
public void validate(List<String> typeValidValues, List<Section> sectionValidValues) {
|
||||||
if (!typeValidValues.isEmpty() && !typeValidValues.contains(type.toUpperCase())) {
|
if (!typeValidValues.isEmpty() && !typeValidValues.contains(type.toUpperCase())) {
|
||||||
|
|
@ -92,4 +95,12 @@ public class CommonRequest {
|
||||||
public void setSection(String section) {
|
public void setSection(String section) {
|
||||||
this.section = section;
|
this.section = section;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getClearingSystem() {
|
||||||
|
return clearingSystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClearingSystem(String clearingSystem) {
|
||||||
|
this.clearingSystem = clearingSystem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,10 @@ public class CommonResponse {
|
||||||
@JsonProperty("message")
|
@JsonProperty("message")
|
||||||
private String message;
|
private String message;
|
||||||
|
|
||||||
|
@JsonProperty("clearing_system")
|
||||||
|
@ApiModelProperty(value = "Клиринговая система", example = "SPVB/LCC")
|
||||||
|
private String clearingSystem;
|
||||||
|
|
||||||
public UUID getId() {
|
public UUID getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
@ -92,4 +96,12 @@ public class CommonResponse {
|
||||||
public void setMessage(String message) {
|
public void setMessage(String message) {
|
||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getClearingSystem() {
|
||||||
|
return clearingSystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClearingSystem(String clearingSystem) {
|
||||||
|
this.clearingSystem = clearingSystem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,10 @@ public class OutboundRequest {
|
||||||
)
|
)
|
||||||
private String section = "";
|
private String section = "";
|
||||||
|
|
||||||
|
@JsonProperty("clearing_system")
|
||||||
|
@ApiModelProperty(value = "Клиринговая система", example = "SPVB/LCC")
|
||||||
|
private String clearingSystem;
|
||||||
|
|
||||||
// todo Пока так, чтобы отсылал null, в дальнейшем тип надо заменить на используемый в запросе. Возможно с помощью параметризации
|
// todo Пока так, чтобы отсылал null, в дальнейшем тип надо заменить на используемый в запросе. Возможно с помощью параметризации
|
||||||
@JsonProperty("content")
|
@JsonProperty("content")
|
||||||
@ApiModelProperty(
|
@ApiModelProperty(
|
||||||
|
|
@ -88,6 +92,14 @@ public class OutboundRequest {
|
||||||
this.section = section;
|
this.section = section;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getClearingSystem() {
|
||||||
|
return clearingSystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClearingSystem(String clearingSystem) {
|
||||||
|
this.clearingSystem = clearingSystem;
|
||||||
|
}
|
||||||
|
|
||||||
public Map<String, Object> getContent() {
|
public Map<String, Object> getContent() {
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package ru.spcex.clearing.gatewayapi.enums;
|
||||||
|
|
||||||
|
public enum ClearingSystems {
|
||||||
|
SPVB("SPVB"),
|
||||||
|
LCC("LCC");
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
ClearingSystems(final String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,6 +9,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||||
import org.apache.kafka.clients.consumer.Consumer;
|
import org.apache.kafka.clients.consumer.Consumer;
|
||||||
import org.apache.kafka.clients.producer.Producer;
|
import org.apache.kafka.clients.producer.Producer;
|
||||||
|
|
@ -25,6 +26,7 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
import ru.clearing.classes.statics.data.register.GatewayResult;
|
import ru.clearing.classes.statics.data.register.GatewayResult;
|
||||||
import ru.spcex.clearing.gatewayapi.config.GatewayApiSettings;
|
import ru.spcex.clearing.gatewayapi.config.GatewayApiSettings;
|
||||||
|
import ru.spcex.clearing.gatewayapi.config.InboundExternalServerSettings;
|
||||||
import ru.spcex.clearing.gatewayapi.config.InboundServerSettings;
|
import ru.spcex.clearing.gatewayapi.config.InboundServerSettings;
|
||||||
import ru.spcex.clearing.gatewayapi.controller.inbound.request.operations.SentAsset;
|
import ru.spcex.clearing.gatewayapi.controller.inbound.request.operations.SentAsset;
|
||||||
import ru.spcex.clearing.gatewayapi.controller.outbound.request.OutboundRequest;
|
import ru.spcex.clearing.gatewayapi.controller.outbound.request.OutboundRequest;
|
||||||
|
|
@ -60,10 +62,12 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
private final UserRoleVerification userRoleVerification;
|
private final UserRoleVerification userRoleVerification;
|
||||||
private final RestTemplate restTemplate;
|
private final RestTemplate restTemplate;
|
||||||
private final InboundServerSettings inboundServerSettings;
|
private final InboundServerSettings inboundServerSettings;
|
||||||
|
private final InboundExternalServerSettings inboundExternalServerSettings;
|
||||||
private final Map<Long, List<SentAsset>> sentAssets;
|
private final Map<Long, List<SentAsset>> sentAssets;
|
||||||
private final Map<UUID, OutboundRequest> outboundRequestByUuid;
|
private final Map<UUID, OutboundRequest> outboundRequestByUuid;
|
||||||
protected final Imdg<GatewayResult> gatewayResultImdg;
|
protected final Imdg<GatewayResult> gatewayResultImdg;
|
||||||
private final static Pattern REPORT_FILE_NAME_PATTERN = Pattern.compile("(\\S*)_(\\d{15}).csv");
|
private final static Pattern REPORT_FILE_NAME_PATTERN = Pattern.compile("(\\S*)_(\\d{15}).csv");
|
||||||
|
private final String clearingSystemValue;
|
||||||
|
|
||||||
public GatewayService(Consumer<String, Object> kafkaQueue,
|
public GatewayService(Consumer<String, Object> kafkaQueue,
|
||||||
Producer<String, Object> kafkaProducer,
|
Producer<String, Object> kafkaProducer,
|
||||||
|
|
@ -76,7 +80,10 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
super(kafkaQueue, kafkaProducer);
|
super(kafkaQueue, kafkaProducer);
|
||||||
this.restTemplate = restTemplate;
|
this.restTemplate = restTemplate;
|
||||||
this.userRoleVerification = userRoleVerification;
|
this.userRoleVerification = userRoleVerification;
|
||||||
|
this.clearingSystemValue = StringUtils.isNotEmpty(gatewayApiSettings.getClearingSystem()) ?
|
||||||
|
gatewayApiSettings.getClearingSystem() : "SPVB";
|
||||||
this.inboundServerSettings = gatewayApiSettings.getInboundServer();
|
this.inboundServerSettings = gatewayApiSettings.getInboundServer();
|
||||||
|
this.inboundExternalServerSettings = gatewayApiSettings.getInboundExternalServer();
|
||||||
this.sentAssets = sentAssets;
|
this.sentAssets = sentAssets;
|
||||||
this.outboundRequestByUuid = outboundRequestByUuid;
|
this.outboundRequestByUuid = outboundRequestByUuid;
|
||||||
this.gatewayResultImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_GatewayResult, GatewayResult.class);
|
this.gatewayResultImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_GatewayResult, GatewayResult.class);
|
||||||
|
|
@ -112,42 +119,29 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
if (requestInfoUpdate != null) return;
|
if (requestInfoUpdate != null) return;
|
||||||
|
|
||||||
logUnknownProperties(userRequest);
|
logUnknownProperties(userRequest);
|
||||||
|
|
||||||
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
|
||||||
|
|
||||||
OutboundRequest outboundFondRequest = OutboundRequestBuilder.builder()
|
OutboundRequest outboundFondRequest = OutboundRequestBuilder.builder()
|
||||||
.type(OutboundRequestType.MEMBER_ON_DEMAND.getKey())
|
.type(OutboundRequestType.MEMBER_ON_DEMAND.getKey())
|
||||||
|
.clearingSystem(clearingSystemValue)
|
||||||
.build();
|
.build();
|
||||||
HttpEntity<OutboundRequest> request = makeDefaultRequest(outboundFondRequest);
|
|
||||||
|
|
||||||
outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest);
|
outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest);
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, request, SuccessResponse.class);
|
sendRequest(outboundFondRequest);
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
|
||||||
if (bodyResponse != null) {
|
|
||||||
log.debug("LOCM task complete, success response : {}", bodyResponse);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestOnLimit(BaseRequest<LimExportedRequest> userRequest) {
|
public void requestOnLimit(BaseRequest<LimExportedRequest> userRequest) {
|
||||||
LimExportedRequest exportedRequest = userRequest.getRequestPayload();
|
LimExportedRequest exportedRequest = userRequest.getRequestPayload();
|
||||||
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
|
||||||
|
|
||||||
Map<String, Object> content = Map.of("file", exportedRequest.getLimFileName());
|
Map<String, Object> content = Map.of("file", exportedRequest.getLimFileName());
|
||||||
|
|
||||||
OutboundRequest outboundFondRequest = OutboundRequestBuilder.builder()
|
OutboundRequest outboundFondRequest = OutboundRequestBuilder.builder()
|
||||||
.section(exportedRequest.getSection())
|
.section(exportedRequest.getSection())
|
||||||
.type(OutboundRequestType.FILL_LIMITS.getKey())
|
.type(OutboundRequestType.FILL_LIMITS.getKey())
|
||||||
|
.clearingSystem(clearingSystemValue)
|
||||||
.content(content)
|
.content(content)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
HttpEntity<OutboundRequest> request = makeDefaultRequest(outboundFondRequest);
|
|
||||||
outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest);
|
outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest);
|
||||||
gatewayResultImdg.insert(GatewayResultBuilder.builder().outboundRequest(outboundFondRequest).build());
|
gatewayResultImdg.insert(GatewayResultBuilder.builder().outboundRequest(outboundFondRequest).build());
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, request, SuccessResponse.class);
|
sendRequest(outboundFondRequest);
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
|
||||||
if (bodyResponse != null) {
|
|
||||||
log.debug("Limit request complete, success response: {}", bodyResponse);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestOnDemandSecurity(BaseRequest<GatewayTaskRequest> userRequest) {
|
public void requestOnDemandSecurity(BaseRequest<GatewayTaskRequest> userRequest) {
|
||||||
|
|
@ -158,45 +152,34 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
|
|
||||||
logUnknownProperties(userRequest);
|
logUnknownProperties(userRequest);
|
||||||
|
|
||||||
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
|
||||||
|
|
||||||
OutboundRequest outboundFondRequest = OutboundRequestBuilder.builder()
|
OutboundRequest outboundFondRequest = OutboundRequestBuilder.builder()
|
||||||
.section(Section.FOND.getKey())
|
.section(Section.FOND.getKey())
|
||||||
.type(OutboundRequestType.ON_DEMAND.getKey())
|
.type(OutboundRequestType.ON_DEMAND.getKey())
|
||||||
|
.clearingSystem(clearingSystemValue)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
OutboundRequest outboundMkrRequest = OutboundRequestBuilder.builder()
|
OutboundRequest outboundMkrRequest = OutboundRequestBuilder.builder()
|
||||||
.section(Section.MKR.getKey())
|
.section(Section.MKR.getKey())
|
||||||
.type(OutboundRequestType.ON_DEMAND.getKey())
|
.type(OutboundRequestType.ON_DEMAND.getKey())
|
||||||
|
.clearingSystem(clearingSystemValue)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
OutboundRequest outboundCurrRequest = OutboundRequestBuilder.builder()
|
OutboundRequest outboundCurrRequest = OutboundRequestBuilder.builder()
|
||||||
.section(Section.CURR.getKey())
|
.section(Section.CURR.getKey())
|
||||||
.type(OutboundRequestType.ON_DEMAND.getKey())
|
.type(OutboundRequestType.ON_DEMAND.getKey())
|
||||||
|
.clearingSystem(clearingSystemValue)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
HttpEntity<OutboundRequest> requestFond = makeDefaultRequest(outboundFondRequest);
|
|
||||||
HttpEntity<OutboundRequest> requestMKR = makeDefaultRequest(outboundMkrRequest);
|
|
||||||
HttpEntity<OutboundRequest> requestCURR = makeDefaultRequest(outboundCurrRequest);
|
|
||||||
|
|
||||||
outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest);
|
outboundRequestByUuid.put(outboundFondRequest.getId(), outboundFondRequest);
|
||||||
outboundRequestByUuid.put(outboundMkrRequest.getId(), outboundMkrRequest);
|
outboundRequestByUuid.put(outboundMkrRequest.getId(), outboundMkrRequest);
|
||||||
outboundRequestByUuid.put(outboundCurrRequest.getId(), outboundCurrRequest);
|
outboundRequestByUuid.put(outboundCurrRequest.getId(), outboundCurrRequest);
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, requestFond, SuccessResponse.class);
|
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
sendRequest(outboundFondRequest);
|
||||||
if (bodyResponse != null) {
|
log.debug("LOSC task 1/3 complete (FOND section)");
|
||||||
log.debug("LOSC task 1/3 complete (FOND section), success response: {}", bodyResponse);
|
sendRequest(outboundMkrRequest);
|
||||||
}
|
log.debug("LOSC task 2/3 complete (MKR section)");
|
||||||
response = restTemplate.exchange(url, HttpMethod.POST, requestMKR, SuccessResponse.class);
|
sendRequest(outboundCurrRequest);
|
||||||
bodyResponse = response.getBody();
|
log.debug("LOSC task 3/3 complete (CURR section)");
|
||||||
if (bodyResponse != null) {
|
|
||||||
log.debug("LOSC task 2/3 complete (MKR section), success response: {}", bodyResponse);
|
|
||||||
}
|
|
||||||
response = restTemplate.exchange(url, HttpMethod.POST, requestCURR, SuccessResponse.class);
|
|
||||||
bodyResponse = response.getBody();
|
|
||||||
if (bodyResponse != null) {
|
|
||||||
log.debug("LOSC task 3/3 complete (CURR section), success response: {}", bodyResponse);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestOnAsset(BaseRequest<AssetOperationListRequest> request) {
|
public void requestOnAsset(BaseRequest<AssetOperationListRequest> request) {
|
||||||
|
|
@ -221,19 +204,14 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
OutboundRequest outboundRequest = OutboundRequestBuilder.builder()
|
OutboundRequest outboundRequest = OutboundRequestBuilder.builder()
|
||||||
.section(assetOperation.getAmount() != null ? Section.MKR.getKey() : Section.FOND.getKey())
|
.section(assetOperation.getAmount() != null ? Section.MKR.getKey() : Section.FOND.getKey())
|
||||||
.type(OutboundRequestType.ASSET_OPERATION.getKey())
|
.type(OutboundRequestType.ASSET_OPERATION.getKey())
|
||||||
|
.clearingSystem(clearingSystemValue)
|
||||||
.content(content).build();
|
.content(content).build();
|
||||||
|
|
||||||
gatewayBuilder.outboundRequest(outboundRequest);
|
gatewayBuilder.outboundRequest(outboundRequest);
|
||||||
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
|
||||||
HttpEntity<OutboundRequest> r = makeDefaultRequest(outboundRequest);
|
|
||||||
try {
|
try {
|
||||||
outboundRequestByUuid.put(outboundRequest.getId(), outboundRequest);
|
outboundRequestByUuid.put(outboundRequest.getId(), outboundRequest);
|
||||||
gatewayResultImdg.insert(gatewayBuilder.build());
|
gatewayResultImdg.insert(gatewayBuilder.build());
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, r, SuccessResponse.class);
|
sendRequest(outboundRequest);
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
|
||||||
if (bodyResponse != null) {
|
|
||||||
log.debug("Response from service: {}", bodyResponse);
|
|
||||||
}
|
|
||||||
} catch (Throwable err) {
|
} catch (Throwable err) {
|
||||||
log.error("Exchange error: {}", ExceptionUtils.getStackTrace(err));
|
log.error("Exchange error: {}", ExceptionUtils.getStackTrace(err));
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -260,15 +238,10 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
OutboundRequest outboundRequest = OutboundRequestBuilder.builder()
|
OutboundRequest outboundRequest = OutboundRequestBuilder.builder()
|
||||||
.section(Section.FOND.getKey())
|
.section(Section.FOND.getKey())
|
||||||
.type(reportType.getKey())
|
.type(reportType.getKey())
|
||||||
|
.clearingSystem(clearingSystemValue)
|
||||||
.content(content).build();
|
.content(content).build();
|
||||||
|
|
||||||
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
sendRequest(outboundRequest);
|
||||||
HttpEntity<OutboundRequest> r = makeDefaultRequest(outboundRequest);
|
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, r, SuccessResponse.class);
|
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
|
||||||
if (bodyResponse != null) {
|
|
||||||
log.debug("Response from service: {}", bodyResponse);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestOnTkr(BaseRequest<SendTkrRequest> request) {
|
public void requestOnTkr(BaseRequest<SendTkrRequest> request) {
|
||||||
|
|
@ -278,6 +251,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
OutboundRequest outboundRequest = OutboundRequestBuilder.builder()
|
OutboundRequest outboundRequest = OutboundRequestBuilder.builder()
|
||||||
.type(OutboundRequestType.MEMBER_RESPONSE_TKR.getKey())
|
.type(OutboundRequestType.MEMBER_RESPONSE_TKR.getKey())
|
||||||
.content(content)
|
.content(content)
|
||||||
|
.clearingSystem(clearingSystemValue)
|
||||||
.build();
|
.build();
|
||||||
if (reportRequest.getRequestId() != null) {
|
if (reportRequest.getRequestId() != null) {
|
||||||
outboundRequest.setId(reportRequest.getRequestId());
|
outboundRequest.setId(reportRequest.getRequestId());
|
||||||
|
|
@ -286,13 +260,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
.outboundRequest(outboundRequest)
|
.outboundRequest(outboundRequest)
|
||||||
.build();
|
.build();
|
||||||
gatewayResultImdg.insert(gatewayResult);
|
gatewayResultImdg.insert(gatewayResult);
|
||||||
String url = formingInboundUrl(inboundServerSettings.getPathLOCM());
|
sendRequest(outboundRequest);
|
||||||
HttpEntity<OutboundRequest> r = makeDefaultRequest(outboundRequest);
|
|
||||||
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, r, SuccessResponse.class);
|
|
||||||
SuccessResponse bodyResponse = response.getBody();
|
|
||||||
if (bodyResponse != null) {
|
|
||||||
log.debug("Response from service: {}", bodyResponse);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void makeContentByReportRequest(Map<String, Object> content, ReportPart reportPart) {
|
protected void makeContentByReportRequest(Map<String, Object> content, ReportPart reportPart) {
|
||||||
|
|
@ -318,12 +286,45 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
case KS_REP_FIRM_DETAILS -> paramName = "ks_rep_firm_details";
|
case KS_REP_FIRM_DETAILS -> paramName = "ks_rep_firm_details";
|
||||||
case KS_SESSION_LIST -> paramName = "ks_session_list";
|
case KS_SESSION_LIST -> paramName = "ks_session_list";
|
||||||
case KS_COMMISSION_TRADES -> paramName = "ks_commission_trades";
|
case KS_COMMISSION_TRADES -> paramName = "ks_commission_trades";
|
||||||
|
case KS_REP_LCC_TRADES_REPORT -> paramName = "ks_rep_lcc_trades";
|
||||||
|
case KS_REP_LCC_NETTO_REPORT -> paramName = "ks_rep_lcc_netto";
|
||||||
}
|
}
|
||||||
if (paramName != null) {
|
if (paramName != null) {
|
||||||
content.put(paramName, reportPart.getFileName());
|
content.put(paramName, reportPart.getFileName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendRequest(OutboundRequest request) {
|
||||||
|
if (inboundServerSettings != null &&
|
||||||
|
(inboundServerSettings.getAllowedTypes().isEmpty() ||
|
||||||
|
inboundServerSettings.getAllowedTypes().contains(request.getType()))) {
|
||||||
|
String url = formingInboundUrl(inboundServerSettings.getEnableSsl(),
|
||||||
|
inboundServerSettings.getHost(),
|
||||||
|
inboundServerSettings.getPort(),
|
||||||
|
inboundServerSettings.getPathLOCM());
|
||||||
|
exchange(request, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inboundExternalServerSettings != null &&
|
||||||
|
(inboundExternalServerSettings.getAllowedTypes().isEmpty() ||
|
||||||
|
inboundExternalServerSettings.getAllowedTypes().contains(request.getType()))) {
|
||||||
|
String url = formingInboundUrl(inboundExternalServerSettings.getEnableSsl(),
|
||||||
|
inboundExternalServerSettings.getHost(),
|
||||||
|
inboundExternalServerSettings.getPort(),
|
||||||
|
inboundExternalServerSettings.getPathLOCM());
|
||||||
|
exchange(request, url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exchange(OutboundRequest request, String url) {
|
||||||
|
HttpEntity<OutboundRequest> r = makeDefaultRequest(request);
|
||||||
|
ResponseEntity<SuccessResponse> response = restTemplate.exchange(url, HttpMethod.POST, r, SuccessResponse.class);
|
||||||
|
SuccessResponse bodyResponse = response.getBody();
|
||||||
|
if (bodyResponse != null) {
|
||||||
|
log.debug("Response from service: {}", bodyResponse);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public String formingInboundUrl(String path) {
|
public String formingInboundUrl(String path) {
|
||||||
return "%s://%s:%s/%s".formatted(
|
return "%s://%s:%s/%s".formatted(
|
||||||
inboundServerSettings.getEnableSsl() ? "https" : "http",
|
inboundServerSettings.getEnableSsl() ? "https" : "http",
|
||||||
|
|
@ -333,6 +334,15 @@ public class GatewayService extends QueueConsumer implements InitializingBean {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String formingInboundUrl(Boolean enableSsl, String host, Integer port, String path) {
|
||||||
|
return "%s://%s:%s/%s".formatted(
|
||||||
|
enableSsl ? "https" : "http",
|
||||||
|
host,
|
||||||
|
port,
|
||||||
|
path
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private void logUnknownProperties(BaseRequest<GatewayTaskRequest> request) {
|
private void logUnknownProperties(BaseRequest<GatewayTaskRequest> request) {
|
||||||
Map<String, Object> unknownProperties = request.getUnknownProperties();
|
Map<String, Object> unknownProperties = request.getUnknownProperties();
|
||||||
for (Map.Entry<String, Object> unknownProperty : unknownProperties.entrySet()) {
|
for (Map.Entry<String, Object> unknownProperty : unknownProperties.entrySet()) {
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,9 @@ public class TkrService {
|
||||||
if (tkrRequest.getErrors() != null && !tkrRequest.getErrors().isEmpty()) {
|
if (tkrRequest.getErrors() != null && !tkrRequest.getErrors().isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (tkrRequest.getInfoAccount() == null || tkrRequest.getInfoAccount().isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
List<TkrAccount> tkrAccountsForCheck = tkrRequest.getInfoAccount()
|
List<TkrAccount> tkrAccountsForCheck = tkrRequest.getInfoAccount()
|
||||||
.stream().filter(infoAccount -> TypeOperations.CHECK.equalsByKey(infoAccount.getTypeOperationClient()))
|
.stream().filter(infoAccount -> TypeOperations.CHECK.equalsByKey(infoAccount.getTypeOperationClient()))
|
||||||
.map(tkrAdapter::toTkrResponse)
|
.map(tkrAdapter::toTkrResponse)
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
package ru.spcex.clearing.gatewayapi.service.builders;
|
package ru.spcex.clearing.gatewayapi.service.builders;
|
||||||
|
|
||||||
import ru.spcex.clearing.gatewayapi.controller.outbound.request.OutboundRequest;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import ru.spcex.clearing.gatewayapi.controller.outbound.request.OutboundRequest;
|
||||||
|
|
||||||
public class OutboundRequestBuilder {
|
public class OutboundRequestBuilder {
|
||||||
|
|
||||||
private String section;
|
private String section;
|
||||||
private String requestType;
|
private String requestType;
|
||||||
|
private String clearingSystem;
|
||||||
private Map<String, Object> content;
|
private Map<String, Object> content;
|
||||||
|
|
||||||
private OutboundRequestBuilder() {
|
private OutboundRequestBuilder() {
|
||||||
|
|
@ -34,11 +34,16 @@ public class OutboundRequestBuilder {
|
||||||
this.content = content;
|
this.content = content;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
public OutboundRequestBuilder clearingSystem(String val) {
|
||||||
|
this.clearingSystem = val;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public OutboundRequest build() {
|
public OutboundRequest build() {
|
||||||
OutboundRequest outboundRequest = new OutboundRequest();
|
OutboundRequest outboundRequest = new OutboundRequest();
|
||||||
outboundRequest.setId(UUID.randomUUID());
|
outboundRequest.setId(UUID.randomUUID());
|
||||||
outboundRequest.setDatetime(Instant.now());
|
outboundRequest.setDatetime(Instant.now());
|
||||||
|
outboundRequest.setClearingSystem(clearingSystem);
|
||||||
if (section != null) {
|
if (section != null) {
|
||||||
outboundRequest.setSection(section);
|
outboundRequest.setSection(section);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,17 @@ gateway-api.kafka-consumer.auto-offset-reset=latest
|
||||||
gateway-api.kafka-consumer.linger-ms=1
|
gateway-api.kafka-consumer.linger-ms=1
|
||||||
gateway-api.kafka-consumer.buffer-memory=33554432
|
gateway-api.kafka-consumer.buffer-memory=33554432
|
||||||
|
|
||||||
|
gateway-api.clearing-system=LCC
|
||||||
|
|
||||||
gateway-api.inbound-server.enable-ssl=false
|
gateway-api.inbound-server.enable-ssl=false
|
||||||
gateway-api.inbound-server.host=10.200.200.183
|
gateway-api.inbound-server.host=10.200.200.183
|
||||||
gateway-api.inbound-server.port=8084
|
gateway-api.inbound-server.port=8084
|
||||||
gateway-api.inbound-server.pathLOCM=test_rest/inbound_request
|
gateway-api.inbound-server.pathLOCM=test_rest/inbound_request
|
||||||
gateway-api.inbound-server.pathLOSC=test_rest/inbound_request
|
gateway-api.inbound-server.pathLOSC=test_rest/inbound_request
|
||||||
|
gateway-api.inbound-server.allowed-types=ASSET_OPERATION,ON_DEMAND
|
||||||
|
|
||||||
|
gateway-api.inbound-external-server.enable-ssl=false
|
||||||
|
gateway-api.inbound-external-server.host=10.200.200.183
|
||||||
|
gateway-api.inbound-external-server.port=8084
|
||||||
|
gateway-api.inbound-external-server.pathLOCM=test_rest/inbound_request
|
||||||
|
gateway-api.inbound-external-server.allowed-types=FILL_LIMITS,MEMBER_ON_DEMAND
|
||||||
|
|
@ -5,12 +5,12 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>imdg-hist</artifactId>
|
<artifactId>imdg-hist</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -36,13 +36,13 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>classes</artifactId>
|
<artifactId>classes</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>dictionary</artifactId>
|
<artifactId>dictionary</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
@ -82,7 +82,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>cleaning-builders</artifactId>
|
<artifactId>cleaning-builders</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,12 @@
|
||||||
<artifactId>imdg</artifactId>
|
<artifactId>imdg</artifactId>
|
||||||
<name>Clearing in memory data grid</name>
|
<name>Clearing in memory data grid</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>clearing-parent</artifactId>
|
<artifactId>clearing-parent</artifactId>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
@ -32,13 +32,13 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>classes</artifactId>
|
<artifactId>classes</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>dictionary</artifactId>
|
<artifactId>dictionary</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
@ -89,7 +89,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>cleaning-builders</artifactId>
|
<artifactId>cleaning-builders</artifactId>
|
||||||
<version>SPCEX-3.14.106</version>
|
<version>SPCEX-3.15.209</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
@ -118,6 +118,18 @@
|
||||||
<artifactId>assertj-core</artifactId>
|
<artifactId>assertj-core</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>testcontainers</artifactId>
|
||||||
|
<version>1.20.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>postgresql</artifactId>
|
||||||
|
<version>1.20.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,22 @@
|
||||||
package ru.spcex.clearing.imdg.base;
|
package ru.spcex.clearing.imdg.base;
|
||||||
|
|
||||||
import com.hazelcast.core.MapStore;
|
import com.hazelcast.core.MapStore;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.ParameterMetaData;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.sql.Types;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
@ -8,18 +24,11 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.jdbc.core.SqlTypeValue;
|
import org.springframework.jdbc.core.SqlTypeValue;
|
||||||
import org.springframework.jdbc.core.StatementCreatorUtils;
|
import org.springframework.jdbc.core.StatementCreatorUtils;
|
||||||
import org.springframework.lang.NonNull;
|
import org.springframework.lang.NonNull;
|
||||||
|
import ru.spcex.clearing.imdg.util.ColumnMetaData;
|
||||||
|
import ru.spcex.clearing.imdg.util.PostgresColumnTypeUtil;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.utils.text.TextUtil;
|
import ru.spcex.platform.utils.text.TextUtil;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Timestamp;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MapStore для выгрузки обычных объектов
|
* MapStore для выгрузки обычных объектов
|
||||||
*
|
*
|
||||||
|
|
@ -29,7 +38,7 @@ public abstract class SimpleObjectMapStore<T extends SpcexObjectBase> implements
|
||||||
private final static int BATCH_SIZE = 1000;
|
private final static int BATCH_SIZE = 1000;
|
||||||
protected final Logger log = LoggerFactory.getLogger(this.getClass());
|
protected final Logger log = LoggerFactory.getLogger(this.getClass());
|
||||||
protected final JdbcTemplate jdbcTemplate;
|
protected final JdbcTemplate jdbcTemplate;
|
||||||
protected SimpleDateFormat DB_DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd");
|
protected Map<String, ColumnMetaData> columnMetaDataMap;
|
||||||
|
|
||||||
protected SimpleObjectMapStore(JdbcTemplate jdbcTemplate) {
|
protected SimpleObjectMapStore(JdbcTemplate jdbcTemplate) {
|
||||||
this.jdbcTemplate = jdbcTemplate;
|
this.jdbcTemplate = jdbcTemplate;
|
||||||
|
|
@ -135,8 +144,8 @@ public abstract class SimpleObjectMapStore<T extends SpcexObjectBase> implements
|
||||||
List<Long> keys;
|
List<Long> keys;
|
||||||
try {
|
try {
|
||||||
keys = jdbcTemplate.query("select id from " + getTableName() + " where " + dateField + (canBeGreat ? " >= ?" : " = ?"),
|
keys = jdbcTemplate.query("select id from " + getTableName() + " where " + dateField + (canBeGreat ? " >= ?" : " = ?"),
|
||||||
(resultSet, i) -> resultSet.getLong("id"),
|
(resultSet, i) -> resultSet.getLong("id"),
|
||||||
new Object[]{today});
|
new Object[]{today});
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
log.error("At load keys from {} (by field {}): {}", getTableName(), dateField, ExceptionUtils.getStackTrace(e));
|
log.error("At load keys from {} (by field {}): {}", getTableName(), dateField, ExceptionUtils.getStackTrace(e));
|
||||||
throw e;
|
throw e;
|
||||||
|
|
@ -149,10 +158,16 @@ public abstract class SimpleObjectMapStore<T extends SpcexObjectBase> implements
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void batchInsertUpdate(@NonNull String insertStatement, @NonNull List<Object[]> args) {
|
protected void batchInsertUpdate(@NonNull String insertStatement, @NonNull List<Object[]> args) {
|
||||||
|
batchInsertUpdate(insertStatement, args, getTableName(), getFields());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void batchInsertUpdate(@NonNull String insertStatement, @NonNull List<Object[]> args, String tableName, String[] fields) {
|
||||||
|
readMetaData(tableName);
|
||||||
try {
|
try {
|
||||||
int[][] ret = jdbcTemplate.batchUpdate(insertStatement, args, BATCH_SIZE, (ps, params) -> {
|
int[][] ret = jdbcTemplate.batchUpdate(insertStatement, args, BATCH_SIZE, (ps, params) -> {
|
||||||
for (int i = 0; i < params.length; i++) {
|
for (int i = 0; i < params.length; i++) {
|
||||||
Object value = params[i];
|
Object value = params[i];
|
||||||
|
value = normalizeValue(value, ps.getParameterMetaData(), columnMetaDataMap, i, insertStatement, params, tableName, fields);
|
||||||
try {
|
try {
|
||||||
StatementCreatorUtils.setParameterValue(ps, i + 1, SqlTypeValue.TYPE_UNKNOWN, value);
|
StatementCreatorUtils.setParameterValue(ps, i + 1, SqlTypeValue.TYPE_UNKNOWN, value);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
|
@ -161,13 +176,120 @@ public abstract class SimpleObjectMapStore<T extends SpcexObjectBase> implements
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
int batchSize = ret.length > 0 ? ret[0].length : ret.length;
|
int batchSize = ret.length > 0 ? ret[0].length : ret.length;
|
||||||
log.debug("{} {} rows stored", getTableName(), batchSize);
|
log.debug("{} {} rows stored", tableName, batchSize);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("SQL error at batch UPDATE OR INSERT INTO {}\n{}", getTableName(), ExceptionUtils.getStackTrace(e));
|
log.error("SQL error at batch UPDATE OR INSERT INTO {}\n{}", tableName, ExceptionUtils.getStackTrace(e));
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Object normalizeValue(Object value, ParameterMetaData metaData, Map<String, ColumnMetaData> columnMetaDataMap, int i,
|
||||||
|
String insertStatement, Object[] params, String tableName, String[] fields) throws SQLException {
|
||||||
|
if (value == null)
|
||||||
|
return null;
|
||||||
|
i++; // нумерация в ParameterMetaData начинается с 1
|
||||||
|
final int type = metaData.getParameterType(i);
|
||||||
|
|
||||||
|
final String fieldName = fields[i - 1].toLowerCase();
|
||||||
|
if (columnMetaDataMap == null) {
|
||||||
|
log.trace("Column metadata was empty, can not verify {}.{}", tableName, fieldName);
|
||||||
|
}
|
||||||
|
if ((type == Types.VARCHAR || type == Types.CHAR) && value instanceof String stringValue) {
|
||||||
|
int length;
|
||||||
|
if (columnMetaDataMap == null) {
|
||||||
|
length = metaData.getPrecision(i + 1);
|
||||||
|
} else {
|
||||||
|
// в postgresql для String ParameterMetaData.getPrecision возвращает 0, используется columnMetaDataMap
|
||||||
|
length = columnMetaDataMap.get(fieldName).getPrecision();
|
||||||
|
}
|
||||||
|
if (length > 0 && stringValue.length() > length) {
|
||||||
|
value = stringValue.substring(0, length);
|
||||||
|
log.error("String value is too large [insertSql: {}, params: {}, i: {}, incorrect value: {}, normalized value: {}]",
|
||||||
|
insertStatement, Arrays.toString(params), i, stringValue, value);
|
||||||
|
}
|
||||||
|
} else if ((type == Types.DECIMAL || type == Types.NUMERIC || type == Types.BIGINT || type == Types.INTEGER) &&
|
||||||
|
(value instanceof BigDecimal || value instanceof Long || value instanceof Integer)) {
|
||||||
|
|
||||||
|
if (value instanceof Integer && (type == Types.INTEGER || type == Types.BIGINT)) {
|
||||||
|
return value; // ok
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value instanceof Long vl) {
|
||||||
|
if (type == Types.BIGINT) {
|
||||||
|
return value; // ok
|
||||||
|
}
|
||||||
|
if (type == Types.INTEGER) {
|
||||||
|
if (vl > Integer.MAX_VALUE) {
|
||||||
|
value = Integer.MAX_VALUE;
|
||||||
|
log.error("Long value for insert is too large [insertSql: {}, params: {}, i: {}, incorrect value: {}, normalized value: {}]",
|
||||||
|
insertStatement, Arrays.toString(params), i, vl, value);
|
||||||
|
}
|
||||||
|
if (vl < Integer.MIN_VALUE) {
|
||||||
|
value = Integer.MIN_VALUE;
|
||||||
|
log.error("Long value for insert is too large [insertSql: {}, params: {}, i: {}, incorrect value: {}, normalized value: {}]",
|
||||||
|
insertStatement, Arrays.toString(params), i, vl, value);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BigDecimal bigDecimalValue;
|
||||||
|
if (value instanceof Integer intValue) {
|
||||||
|
bigDecimalValue = BigDecimal.valueOf(intValue);
|
||||||
|
} else if (value instanceof Long longValue) {
|
||||||
|
bigDecimalValue = BigDecimal.valueOf(longValue);
|
||||||
|
} else {
|
||||||
|
bigDecimalValue = (BigDecimal) value;
|
||||||
|
}
|
||||||
|
if (type == Types.BIGINT) {
|
||||||
|
if (bigDecimalValue.compareTo(BigDecimal.valueOf(Long.MAX_VALUE)) > 0) {
|
||||||
|
Object oldValue = value;
|
||||||
|
value = Long.MAX_VALUE;
|
||||||
|
log.error("Double value as BIGINT is too large [insertSql: {}, params: {}, i: {}, incorrect value: {}, normalized value: {}]",
|
||||||
|
insertStatement, Arrays.toString(params), i, oldValue, value);
|
||||||
|
} else if (bigDecimalValue.compareTo(BigDecimal.valueOf(Long.MIN_VALUE)) < 0) {
|
||||||
|
Object oldValue = value;
|
||||||
|
value = Long.MIN_VALUE;
|
||||||
|
log.error("Double value as BIGINT is too large [insertSql: {}, params: {}, i: {}, incorrect value: {}, normalized value: {}]",
|
||||||
|
insertStatement, Arrays.toString(params), i, oldValue, value);
|
||||||
|
}
|
||||||
|
return value; // value ok
|
||||||
|
}
|
||||||
|
if (type == Types.INTEGER) {
|
||||||
|
if (bigDecimalValue.compareTo(BigDecimal.valueOf(Integer.MAX_VALUE)) > 0) {
|
||||||
|
Object oldValue = value;
|
||||||
|
value = Integer.MAX_VALUE;
|
||||||
|
log.error("Double value as INTEGER is too large [insertSql: {}, params: {}, i: {}, incorrect value: {}, normalized value: {}]",
|
||||||
|
insertStatement, Arrays.toString(params), i, oldValue, value);
|
||||||
|
} else if (bigDecimalValue.compareTo(BigDecimal.valueOf(Integer.MIN_VALUE)) < 0) {
|
||||||
|
Object oldValue = value;
|
||||||
|
value = Integer.MIN_VALUE;
|
||||||
|
log.error("Double value as INTEGER is too large [insertSql: {}, params: {}, i: {}, incorrect value: {}, normalized value: {}]",
|
||||||
|
insertStatement, Arrays.toString(params), i, oldValue, value);
|
||||||
|
}
|
||||||
|
return value; // value ok
|
||||||
|
}
|
||||||
|
int dbScalePartLength;
|
||||||
|
int precision;
|
||||||
|
if (columnMetaDataMap == null) {
|
||||||
|
dbScalePartLength = metaData.getScale(i);
|
||||||
|
precision = metaData.getPrecision(i);
|
||||||
|
} else {
|
||||||
|
dbScalePartLength = columnMetaDataMap.get(fieldName).getScale();
|
||||||
|
precision = columnMetaDataMap.get(fieldName).getPrecision();
|
||||||
|
}
|
||||||
|
if (!checkBigDecimalSize(bigDecimalValue, precision, dbScalePartLength)) {
|
||||||
|
boolean negative = bigDecimalValue.signum() < 0;
|
||||||
|
value = new BigDecimal(BigDecimal.valueOf(Math.pow(10, precision - dbScalePartLength)).longValue() - 1);
|
||||||
|
if (negative)
|
||||||
|
value = ((BigDecimal) value).negate();
|
||||||
|
log.error("BigDecimal value is too large [insertSql: {}, params: {}, i: {}, incorrect value: {}, normalized value: {}]",
|
||||||
|
insertStatement, Arrays.toString(params), i, bigDecimalValue, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
protected Instant getInstantFromTimestamp(ResultSet rs, String column) throws SQLException {
|
protected Instant getInstantFromTimestamp(ResultSet rs, String column) throws SQLException {
|
||||||
Timestamp date = rs.getTimestamp(column);
|
Timestamp date = rs.getTimestamp(column);
|
||||||
return date != null ? date.toInstant() : null;
|
return date != null ? date.toInstant() : null;
|
||||||
|
|
@ -191,4 +313,16 @@ public abstract class SimpleObjectMapStore<T extends SpcexObjectBase> implements
|
||||||
|
|
||||||
return TextUtil.format(INSERT_TEMPLATE, params);
|
return TextUtil.format(INSERT_TEMPLATE, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void readMetaData(String tableName) {
|
||||||
|
synchronized (this) {
|
||||||
|
columnMetaDataMap = PostgresColumnTypeUtil.extractTableMetadata(jdbcTemplate, tableName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean checkBigDecimalSize(BigDecimal value, int dbSize, int dbScale) {
|
||||||
|
if (value == null)
|
||||||
|
return true;
|
||||||
|
return value.precision() - value.scale() <= dbSize - dbScale;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,6 @@ public abstract class ASecurityHistoryMapStore<STH extends BusinessEvent<? exten
|
||||||
securityArgs.add(securityItemArgs);
|
securityArgs.add(securityItemArgs);
|
||||||
}
|
}
|
||||||
batchInsertUpdate(insertStatement, tableArgs);
|
batchInsertUpdate(insertStatement, tableArgs);
|
||||||
batchInsertUpdate(insertToSecurityStatement, securityArgs);
|
batchInsertUpdate(insertToSecurityStatement, securityArgs, "SECURITY_HISTORY", this.getFieldsSecurity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@ public class BankAccountHistoryMapStore extends TemplateEventMapStore<BankAccoun
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] getFields() {
|
public String[] getFields() {
|
||||||
return new String[]{"ID", "EVENT_TIME", "EVENT_TYPE", "EVENT_USER_ID",
|
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID", "EVENT_TYPE",
|
||||||
"BANK_ACCOUNT_ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE", "ACCOUNT", "COMPANY_ID", "INTERMEDIARY_SWIFT_CODE"
|
"BANK_ACCOUNT_ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE", "ACCOUNT", "COMPANY_ID", "INTERMEDIARY_SWIFT_CODE", "NAME", "ADDRESS", "BANK_ADDRESS", "BANK_SWIFT_CODE", "BANK_ACCOUNT", "BANK_NAME1", "BANK_ADDRESS1", "BANK_ACCOUNT1", "BANK_NAME2", "BANK_ADDRESS2", "INTERMEDIARY_SWIFT_CODE2", "BANK_ACCOUNT2", "PERSONAL_ACCOUNT", "BUDGET_CLASSIFICATION_CODE", "OKTMO"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -38,8 +38,8 @@ public class BankAccountHistoryMapStore extends TemplateEventMapStore<BankAccoun
|
||||||
Object[] args = new Object[]{
|
Object[] args = new Object[]{
|
||||||
historyLog.getId(),
|
historyLog.getId(),
|
||||||
TimeUtil.toDateFromInstant(historyLog.getEventTime()),
|
TimeUtil.toDateFromInstant(historyLog.getEventTime()),
|
||||||
historyLog.getEventType(),
|
|
||||||
historyLog.getUserId(),
|
historyLog.getUserId(),
|
||||||
|
historyLog.getEventType(),
|
||||||
|
|
||||||
object.getId(),
|
object.getId(),
|
||||||
object.getAccountId(),
|
object.getAccountId(),
|
||||||
|
|
@ -56,7 +56,22 @@ public class BankAccountHistoryMapStore extends TemplateEventMapStore<BankAccoun
|
||||||
object.getTaxRegistrationReasonCode(),
|
object.getTaxRegistrationReasonCode(),
|
||||||
object.getAccount(),
|
object.getAccount(),
|
||||||
object.getCompanyId(),
|
object.getCompanyId(),
|
||||||
object.getIntermediarySwiftCode()
|
object.getIntermediarySwiftCode(),
|
||||||
|
object.getName(),
|
||||||
|
object.getAddress(),
|
||||||
|
object.getBankAddress(),
|
||||||
|
object.getBankSwiftCode(),
|
||||||
|
object.getBankAccount(),
|
||||||
|
object.getBankName1(),
|
||||||
|
object.getBankAddress1(),
|
||||||
|
object.getBankAccount1(),
|
||||||
|
object.getBankName2(),
|
||||||
|
object.getBankAddress2(),
|
||||||
|
object.getIntermediarySwiftCode2(),
|
||||||
|
object.getBankAccount2(),
|
||||||
|
object.getPersonalAccount(),
|
||||||
|
object.getBudgetClassificationCode(),
|
||||||
|
object.getOktmo()
|
||||||
};
|
};
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ public abstract class ASecurityMapStore <S extends Security> extends TemplateMap
|
||||||
securityArgs.add(argsSecurityItem);
|
securityArgs.add(argsSecurityItem);
|
||||||
}
|
}
|
||||||
batchInsertUpdate(insertStatement, childTableArgs);
|
batchInsertUpdate(insertStatement, childTableArgs);
|
||||||
batchInsertUpdate(insertToSecurityStatement, securityArgs);
|
batchInsertUpdate(insertToSecurityStatement, securityArgs, "SECURITY", this.getFieldsSecurity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,9 @@ package ru.spcex.clearing.imdg.businessobject;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
||||||
|
|
@ -33,7 +36,20 @@ public class ExecutionCurrencyMapStore extends TemplateMapStore<ExecutionCurrenc
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterable<Long> loadAllKeys() {
|
public Iterable<Long> loadAllKeys() {
|
||||||
return defaultLoadAllKeysOnTodayByField("TRADING_DATE", false);
|
LocalDate today = LocalDate.now();
|
||||||
|
String dateField = "TRADING_DATE";
|
||||||
|
log.debug("loadAllKeys from {}", getTableName());
|
||||||
|
List<Long> keys;
|
||||||
|
try {
|
||||||
|
keys = jdbcTemplate.query("select id from " + getTableName()
|
||||||
|
+ " where TRADING_DATE" + " = ? or SETTLEMENT_DATE >= ?",
|
||||||
|
(resultSet, i) -> resultSet.getLong("id"),
|
||||||
|
new Object[]{today, today});
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("At load keys from {} (by field {}): {}", getTableName(), dateField, ExceptionUtils.getStackTrace(e));
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public class BankAccountMapStore extends TemplateMapStore<BankAccount> {
|
||||||
@Override
|
@Override
|
||||||
public String[] getFields() {
|
public String[] getFields() {
|
||||||
return new String[]{
|
return new String[]{
|
||||||
"ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE", "ACCOUNT", "COMPANY_ID", "INTERMEDIARY_SWIFT_CODE"
|
"ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE", "ACCOUNT", "COMPANY_ID", "INTERMEDIARY_SWIFT_CODE", "NAME", "ADDRESS", "BANK_ADDRESS", "BANK_SWIFT_CODE", "BANK_ACCOUNT", "BANK_NAME1", "BANK_ADDRESS1", "BANK_ACCOUNT1", "BANK_NAME2", "BANK_ADDRESS2", "INTERMEDIARY_SWIFT_CODE2", "BANK_ACCOUNT2", "PERSONAL_ACCOUNT", "BUDGET_CLASSIFICATION_CODE", "OKTMO"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,6 +56,21 @@ public class BankAccountMapStore extends TemplateMapStore<BankAccount> {
|
||||||
object.setAccount(resultSet.getObject("ACCOUNT", String.class));
|
object.setAccount(resultSet.getObject("ACCOUNT", String.class));
|
||||||
object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class));
|
object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class));
|
||||||
object.setIntermediarySwiftCode(resultSet.getObject("INTERMEDIARY_SWIFT_CODE", String.class));
|
object.setIntermediarySwiftCode(resultSet.getObject("INTERMEDIARY_SWIFT_CODE", String.class));
|
||||||
|
object.setName(resultSet.getObject("NAME", String.class));
|
||||||
|
object.setAddress(resultSet.getObject("ADDRESS", String.class));
|
||||||
|
object.setBankAddress(resultSet.getObject("BANK_ADDRESS", String.class));
|
||||||
|
object.setBankSwiftCode(resultSet.getObject("BANK_SWIFT_CODE", String.class));
|
||||||
|
object.setBankAccount(resultSet.getObject("BANK_ACCOUNT", String.class));
|
||||||
|
object.setBankName1(resultSet.getObject("BANK_NAME1", String.class));
|
||||||
|
object.setBankAddress1(resultSet.getObject("BANK_ADDRESS1", String.class));
|
||||||
|
object.setBankAccount1(resultSet.getObject("BANK_ACCOUNT1", String.class));
|
||||||
|
object.setBankName2(resultSet.getObject("BANK_NAME2", String.class));
|
||||||
|
object.setBankAddress2(resultSet.getObject("BANK_ADDRESS2", String.class));
|
||||||
|
object.setIntermediarySwiftCode2(resultSet.getObject("INTERMEDIARY_SWIFT_CODE2", String.class));
|
||||||
|
object.setBankAccount2(resultSet.getObject("BANK_ACCOUNT2", String.class));
|
||||||
|
object.setPersonalAccount(resultSet.getObject("PERSONAL_ACCOUNT", String.class));
|
||||||
|
object.setBudgetClassificationCode(resultSet.getObject("BUDGET_CLASSIFICATION_CODE", String.class));
|
||||||
|
object.setOktmo(resultSet.getObject("OKTMO", String.class));
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -77,7 +92,22 @@ public class BankAccountMapStore extends TemplateMapStore<BankAccount> {
|
||||||
object.getTaxRegistrationReasonCode(),
|
object.getTaxRegistrationReasonCode(),
|
||||||
object.getAccount(),
|
object.getAccount(),
|
||||||
object.getCompanyId(),
|
object.getCompanyId(),
|
||||||
object.getIntermediarySwiftCode()
|
object.getIntermediarySwiftCode(),
|
||||||
|
object.getName(),
|
||||||
|
object.getAddress(),
|
||||||
|
object.getBankAddress(),
|
||||||
|
object.getBankSwiftCode(),
|
||||||
|
object.getBankAccount(),
|
||||||
|
object.getBankName1(),
|
||||||
|
object.getBankAddress1(),
|
||||||
|
object.getBankAccount1(),
|
||||||
|
object.getBankName2(),
|
||||||
|
object.getBankAddress2(),
|
||||||
|
object.getIntermediarySwiftCode2(),
|
||||||
|
object.getBankAccount2(),
|
||||||
|
object.getPersonalAccount(),
|
||||||
|
object.getBudgetClassificationCode(),
|
||||||
|
object.getOktmo()
|
||||||
};
|
};
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
package ru.spcex.clearing.imdg.object;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.clearing.classes.statics.data.security.Rates;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.imdg.base.TemplateMapStore;
|
||||||
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class RatesMapStore extends TemplateMapStore<Rates> {
|
||||||
|
|
||||||
|
public RatesMapStore(JdbcTemplate jdbcTemplate) {
|
||||||
|
super(jdbcTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMapName() {
|
||||||
|
return IMDGDistributedNames.Map_Rates;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTableName() {
|
||||||
|
return "RATES";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getFields() {
|
||||||
|
return new String[]{
|
||||||
|
"ID", "VALUE", "VALUE_DATE", "CURRENCY", "CURRENCY_ID", "CREATED_AT", "UPDATED_AT", "WORKFLOW_STATUS"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Rates objectReader(ResultSet resultSet) throws SQLException {
|
||||||
|
Rates object = new Rates();
|
||||||
|
object.setId(resultSet.getObject("ID", Long.class));
|
||||||
|
object.setValue(resultSet.getObject("VALUE", BigDecimal.class));
|
||||||
|
object.setValueDate(getLocalDateFromSqlDate(resultSet,"VALUE_DATE"));
|
||||||
|
object.setCurrency(resultSet.getObject("CURRENCY", String.class));
|
||||||
|
object.setCurrencyId(resultSet.getObject("CURRENCY_ID", Long.class));
|
||||||
|
object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
|
||||||
|
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
|
||||||
|
object.setWorkflowStatus(resultSet.getObject("WORKFLOW_STATUS", String.class));
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object[] objectToField(Rates object) {
|
||||||
|
Object[] args = new Object[]{
|
||||||
|
object.getId(),
|
||||||
|
object.getValue(),
|
||||||
|
TimeUtil.toDateFromLocalDate(object.getValueDate()),
|
||||||
|
object.getCurrency(),
|
||||||
|
object.getCurrencyId(),
|
||||||
|
TimeUtil.toDateFromInstant(object.getCreated()),
|
||||||
|
TimeUtil.toDateFromInstant(object.getUpdated()),
|
||||||
|
object.getWorkflowStatus()
|
||||||
|
};
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
package ru.spcex.clearing.imdg.object;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.clearing.classes.statics.data.security.RiskParameter;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.clearing.imdg.base.TemplateMapStore;
|
||||||
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class RiskParameterMapStore extends TemplateMapStore<RiskParameter> {
|
||||||
|
|
||||||
|
public RiskParameterMapStore(JdbcTemplate jdbcTemplate) {
|
||||||
|
super(jdbcTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMapName() {
|
||||||
|
return IMDGDistributedNames.Map_RiskParameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTableName() {
|
||||||
|
return "RISK_PARAMETER";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getFields() {
|
||||||
|
return new String[]{
|
||||||
|
"ID", "VALUE", "SETTLEMENT_TYPE", "CURRENCY_PAIR", "CURRENCY_PAIR_ID", "CREATED_AT", "UPDATED_AT", "WORKFLOW_STATUS"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RiskParameter objectReader(ResultSet resultSet) throws SQLException {
|
||||||
|
RiskParameter object = new RiskParameter();
|
||||||
|
object.setId(resultSet.getObject("ID", Long.class));
|
||||||
|
object.setValue(resultSet.getObject("VALUE", BigDecimal.class));
|
||||||
|
object.setSettlementType(resultSet.getObject("SETTLEMENT_TYPE", String.class));
|
||||||
|
object.setCurrencyPair(resultSet.getObject("CURRENCY_PAIR", String.class));
|
||||||
|
object.setCurrencyPairId(resultSet.getObject("CURRENCY_PAIR_ID", Long.class));
|
||||||
|
object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
|
||||||
|
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
|
||||||
|
object.setWorkflowStatus(resultSet.getObject("WORKFLOW_STATUS", String.class));
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object[] objectToField(RiskParameter object) {
|
||||||
|
Object[] args = new Object[]{
|
||||||
|
object.getId(),
|
||||||
|
object.getValue(),
|
||||||
|
object.getSettlementType(),
|
||||||
|
object.getCurrencyPair(),
|
||||||
|
object.getCurrencyPairId(),
|
||||||
|
TimeUtil.toDateFromInstant(object.getCreated()),
|
||||||
|
TimeUtil.toDateFromInstant(object.getUpdated()),
|
||||||
|
object.getWorkflowStatus()
|
||||||
|
};
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -40,7 +40,8 @@ public class STradesMapStore extends TemplateMapStore<STrades> {
|
||||||
"QTY", "QTY_PCS", "TRADE_DATE_TIME", "REPO_TERM", "CLEARING_COMMISSION", "EXCHANGE_COMMISSION",
|
"QTY", "QTY_PCS", "TRADE_DATE_TIME", "REPO_TERM", "CLEARING_COMMISSION", "EXCHANGE_COMMISSION",
|
||||||
"TECH_CENTER_COMMISSION", "ACCOUNT", "BROKER_REF", "CLIENT_CODE", "SETTLE_CODE", "USER_ID",
|
"TECH_CENTER_COMMISSION", "ACCOUNT", "BROKER_REF", "CLIENT_CODE", "SETTLE_CODE", "USER_ID",
|
||||||
"EXCHANGE_CODE", "FIRM_ID", "FIRM_NAME", "CP_FIRM_ID", "CP_FIRM_NAME", "CLASS_NAME", "SEC_NAME",
|
"EXCHANGE_CODE", "FIRM_ID", "FIRM_NAME", "CP_FIRM_ID", "CP_FIRM_NAME", "CLASS_NAME", "SEC_NAME",
|
||||||
"SETTLE_DATE", "SETTLE_CURRENCY", "TRADE_CURRENCY", "TRADE_TIME_MS", "BANK_ACC_ID", "SECTION"
|
"SETTLE_DATE", "SETTLE_CURRENCY", "TRADE_CURRENCY", "TRADE_TIME_MS", "BANK_ACC_ID", "SECTION",
|
||||||
|
"KIND", "LINKED_TRADE"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,6 +104,8 @@ public class STradesMapStore extends TemplateMapStore<STrades> {
|
||||||
object.setTradeTimeMs(resultSet.getObject("TRADE_TIME_MS", Long.class));
|
object.setTradeTimeMs(resultSet.getObject("TRADE_TIME_MS", Long.class));
|
||||||
object.setBankAccId(resultSet.getObject("BANK_ACC_ID", String.class));
|
object.setBankAccId(resultSet.getObject("BANK_ACC_ID", String.class));
|
||||||
object.setSection(resultSet.getObject("SECTION", String.class));
|
object.setSection(resultSet.getObject("SECTION", String.class));
|
||||||
|
object.setKind(resultSet.getObject("KIND", String.class));
|
||||||
|
object.setLinkedTrade(resultSet.getObject("LINKED_TRADE", Long.class));
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -155,7 +158,9 @@ public class STradesMapStore extends TemplateMapStore<STrades> {
|
||||||
object.getTradeCurrency(),
|
object.getTradeCurrency(),
|
||||||
object.getTradeTimeMs(),
|
object.getTradeTimeMs(),
|
||||||
object.getBankAccId(),
|
object.getBankAccId(),
|
||||||
object.getSection()
|
object.getSection(),
|
||||||
|
object.getKind(),
|
||||||
|
object.getLinkedTrade()
|
||||||
};
|
};
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,14 @@ import com.hazelcast.config.MapStoreConfig;
|
||||||
import com.hazelcast.core.HazelcastInstance;
|
import com.hazelcast.core.HazelcastInstance;
|
||||||
import com.hazelcast.core.IMap;
|
import com.hazelcast.core.IMap;
|
||||||
import com.hazelcast.core.IdGenerator;
|
import com.hazelcast.core.IdGenerator;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.DisposableBean;
|
import org.springframework.beans.factory.DisposableBean;
|
||||||
|
|
@ -16,10 +24,6 @@ import ru.spcex.clearing.imdg.base.SimpleObjectMapStore;
|
||||||
import ru.spcex.clearing.imdg.object.DbVersionMapStore;
|
import ru.spcex.clearing.imdg.object.DbVersionMapStore;
|
||||||
import ru.spcex.platform.imdg.iml.hazelcast.util.HazelcastHelper;
|
import ru.spcex.platform.imdg.iml.hazelcast.util.HazelcastHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.*;
|
|
||||||
|
|
||||||
//todo почистить класс
|
//todo почистить класс
|
||||||
public abstract class AbstractHazelcastLifecycleSupport implements InitializingBean, DisposableBean {
|
public abstract class AbstractHazelcastLifecycleSupport implements InitializingBean, DisposableBean {
|
||||||
private final Logger log = LoggerFactory.getLogger(this.getClass());
|
private final Logger log = LoggerFactory.getLogger(this.getClass());
|
||||||
|
|
@ -48,7 +52,7 @@ public abstract class AbstractHazelcastLifecycleSupport implements InitializingB
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() {
|
public void afterPropertiesSet() {
|
||||||
// HazelcastCommon.loadClassesVersionsByStorage(hazelcastServerInstance, getSerialVersionUIDClasses());
|
// HazelcastCommon.loadClassesVersionsByStorage(hazelcastServerInstance, getSerialVersionUIDClasses());
|
||||||
// databaseVersionCheck();
|
databaseVersionCheck();
|
||||||
|
|
||||||
long loadTime = System.currentTimeMillis();
|
long loadTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
|
@ -119,11 +123,38 @@ public abstract class AbstractHazelcastLifecycleSupport implements InitializingB
|
||||||
HazelcastHelper.imdgSystem_setStorageState(true, hazelcastServerInstance);
|
HazelcastHelper.imdgSystem_setStorageState(true, hazelcastServerInstance);
|
||||||
loadTime = System.currentTimeMillis() - loadTime;
|
loadTime = System.currentTimeMillis() - loadTime;
|
||||||
log.info("All map load time {} ms", loadTime);
|
log.info("All map load time {} ms", loadTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void destroy() {
|
public void destroy() {
|
||||||
hazelcastServerInstance.shutdown();
|
hazelcastServerInstance.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void databaseVersionCheck() {
|
||||||
|
log.debug("Validating database version, expected \"{}\"", getCheckDbVersion());
|
||||||
|
|
||||||
|
String dbVersion = jdbcTemplate.queryForObject("SELECT version FROM db_version", String.class);
|
||||||
|
log.trace("Database version is \"{}\"", dbVersion);
|
||||||
|
if (dbVersion == null || dbVersion.isBlank()) {
|
||||||
|
log.error("Database version is empty");
|
||||||
|
System.exit(1);
|
||||||
|
} else {
|
||||||
|
List<Integer> expectedVersion = Arrays.stream(getCheckDbVersion().split("\\."))
|
||||||
|
.map(Integer::parseInt)
|
||||||
|
.toList();
|
||||||
|
List<Integer> actualVersion = Arrays.stream(dbVersion.split("\\."))
|
||||||
|
.map(Integer::parseInt)
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
if (expectedVersion.size() < 2 || actualVersion.size() < 2) {
|
||||||
|
log.error("Database version have wrong format, expected = {}, actual = {}", expectedVersion, actualVersion);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!expectedVersion.get(0).equals(actualVersion.get(0)) || expectedVersion.get(1) > actualVersion.get(1)) {
|
||||||
|
log.error("Database version is older than expected version, expected = {}, actual = {}", expectedVersion, actualVersion);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue