From c6b9a9060f114f74396fe722f77fcd97dba795c9 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 27 Sep 2022 07:29:29 +0300 Subject: [PATCH 01/41] some imdg refactoring --- .../imdg/config/ConfigurationRootElement.java | 48 ---------- .../imdg/config/DbConnectionConfig.java | 71 --------------- .../spcex/clearing/imdg/config/DfaConfig.java | 34 ------- .../imdg/config/HazelcastConfiguration.java | 1 - .../clearing/imdg/config/PoolMapConfigs.java | 7 +- .../clearing/imdg/config/ServicesElement.java | 34 ------- .../clearing/imdg/config/SettingsElement.java | 29 ------ .../imdg/config/SettingsElementDatabase.java | 89 ------------------ .../AbstractHazelcastLifecycleSupport.java | 90 +------------------ .../service/HazelcastServiceBase.java | 4 +- .../iml/hazelcast/util/HazelcastHelper.java | 20 ++--- 11 files changed, 14 insertions(+), 413 deletions(-) delete mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ConfigurationRootElement.java delete mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java delete mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DfaConfig.java delete mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ServicesElement.java delete mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/SettingsElement.java delete mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/SettingsElementDatabase.java diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ConfigurationRootElement.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ConfigurationRootElement.java deleted file mode 100644 index 68944e935..000000000 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ConfigurationRootElement.java +++ /dev/null @@ -1,48 +0,0 @@ -package ru.spcex.clearing.imdg.config; - - -/** - * Корневой элемент конфигурации - */ - -@SuppressWarnings("DefaultAnnotationParam") -public class ConfigurationRootElement /*extends ConfigurationRootBaseElement*/ { - - /** - * Конфигурация БД - */ -// @JsonProperty(value = "Database", required = true) - private SettingsElementDatabase database = new SettingsElementDatabase(); - -// @JsonProperty(value = "Settings", required = false) - private SettingsElement settings = new SettingsElement(); - - /** - * Конфигурация Hazelcast - */ -// @JsonProperty(value = "HazelcastServer", required = true) -// private HazelcastServerElement hazelcast = new HazelcastServerElement(); - - /** - * Конфигурация сервисов Core - */ -// @JsonProperty(value = "Services") - private ServicesElement servicesElement = new ServicesElement(); - - public SettingsElementDatabase getDatabase() { - return database; - } - -// public HazelcastServerElement getHazelcast() { -// return hazelcast; -// } - - public SettingsElement getSettings() { - return settings; - } - - public ServicesElement getServicesElement() { - return servicesElement; - } - -} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java deleted file mode 100644 index 8730c9b72..000000000 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java +++ /dev/null @@ -1,71 +0,0 @@ -package ru.spcex.clearing.imdg.config; - -import com.mchange.v2.c3p0.ComboPooledDataSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.jdbc.core.JdbcTemplate; -import ru.spcex.clearing.imdg.error.ModuleInitializeException; - -import javax.sql.DataSource; -import java.sql.Connection; - -@SuppressWarnings("UnnecessaryLocalVariable") -@Configuration -public class DbConnectionConfig { - private final Logger log = LoggerFactory.getLogger(this.getClass()); - - private ConfigurationRootElement configRoot = DfaConfig.get().getRoot(); - private final DatabaseConnectionElement settings; - - public DbConnectionConfig(ImdgSettings settings) { - this.settings = settings.getDatabase(); - } - - @Bean - public DataSource dataSource() { - DataSource result; - String login = settings.getLogin(); - String password = settings.getPassword(); - String logTimeoutPart = ""; - String dbPath = settings.getUrl(); - int timeoutSec = configRoot.getDatabase().getConnectionAcquireTimeoutSeconds(); - - ComboPooledDataSource cpds = new ComboPooledDataSource(); - try { - cpds.setDriverClass("org.postgresql.Driver"); - } catch (Exception ue) { - throw new RuntimeException(ue); - } - cpds.setJdbcUrl(dbPath); - cpds.setUser(login); - cpds.setPassword(password); - cpds.setInitialPoolSize(configRoot.getDatabase().getMinPoolSize()); - cpds.setMinPoolSize(configRoot.getDatabase().getMinPoolSize()); - cpds.setMaxPoolSize(configRoot.getDatabase().getMaxPoolSize()); - cpds.setNumHelperThreads(configRoot.getDatabase().getNumHelperThreads()); - cpds.setCheckoutTimeout(timeoutSec * 1000/*todo common 1000==ConstsCommon.SECOND*/); - logTimeoutPart = String.format(" (timeout=%ds)", timeoutSec); - result = cpds; - - String OPERATION_DATABASE_CONNECTION_CHECK = String.format("Database [%s] connection check", dbPath); - try { - Connection conn = result.getConnection(); - conn.close(); - log.info("{}: success", OPERATION_DATABASE_CONNECTION_CHECK); - return result; - } catch (Throwable e) { - String msg = String.format("%s%s: failed: %s -> %s", - OPERATION_DATABASE_CONNECTION_CHECK, logTimeoutPart, e.getClass().getSimpleName(), e.getMessage()); - log.error(msg); - throw new ModuleInitializeException(msg, e); - } - } - - @Bean - public JdbcTemplate jdbcTemplate(DataSource dataSource) { - JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); - return jdbcTemplate; - } -} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DfaConfig.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DfaConfig.java deleted file mode 100644 index dba3920f4..000000000 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DfaConfig.java +++ /dev/null @@ -1,34 +0,0 @@ -package ru.spcex.clearing.imdg.config; - - -public class DfaConfig { - protected static DfaConfig self; - - - ConfigurationRootElement root = new ConfigurationRootElement(); - - protected String defaultLogFileName() { - return "storage"; - } - - - public String appName() { - return "clearing-storage"; - } - - - protected Class parsedClazz() { - return ConfigurationRootElement.class; - } - - public static DfaConfig get() { - if (self == null) { - self = new DfaConfig(); - } - return self; - } - - public ConfigurationRootElement getRoot() { - return root; - } -} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java index f589a29c4..896cebed2 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java @@ -12,7 +12,6 @@ import java.util.List; @Configuration public class HazelcastConfiguration { - private ConfigurationRootElement configRoot = DfaConfig.get().getRoot(); private final PoolMapConfigs poolMapConfigs; private final HazelcastServerElement hzSettings; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java index a4aedfc07..e98acf225 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java @@ -7,6 +7,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.base.AutoconfiguredMap; import ru.spcex.clearing.imdg.base.DictionaryTMapStore; import ru.spcex.clearing.imdg.businessevent.CompanyHistoryMapStore; @@ -15,7 +16,6 @@ import ru.spcex.clearing.imdg.dictionary.*; import ru.spcex.clearing.imdg.object.CompanySymbolsMapStore; import ru.spcex.clearing.imdg.object.ContactMapStore; import ru.spcex.clearing.imdg.object.ProfileDocumentMapStore; -import ru.spcex.clearing.imdg.IMDGDistributedNames; import java.util.ArrayList; import java.util.Arrays; @@ -26,11 +26,6 @@ import java.util.List; public class PoolMapConfigs { private Logger log = LoggerFactory.getLogger(getClass()); - private ConfigurationRootElement configRoot = DfaConfig.get().getRoot(); - - public PoolMapConfigs() { - } - private MapStoreConfig makeDefaultMapStoreConfig(MapLoader mapBean) { return new MapStoreConfig() .setImplementation(mapBean) diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ServicesElement.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ServicesElement.java deleted file mode 100644 index 172c65bdb..000000000 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ServicesElement.java +++ /dev/null @@ -1,34 +0,0 @@ -package ru.spcex.clearing.imdg.config; - -//import com.fasterxml.jackson.annotation.JsonFormat; -//import com.fasterxml.jackson.annotation.JsonProperty; - -import java.io.Serializable; -import java.util.Date; - -/** - * Настройка сервисов - */ -public class ServicesElement implements Serializable { - - /** - * Время, через которое выставленная заявка будет снята, в миллисекундах. - */ -// @JsonProperty(value = "ExpirationDelay") - private Integer ExpirationDelay = 5 * 60 * 1000; - - public Integer getExpirationDelay() { - return ExpirationDelay; - } - - /** - * Время окончания торговой сессии - */ -// @JsonProperty(value = "SessionEndTime") -// @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm:ss", timezone = "Europe/Moscow") - private Date SessionEndTime = null; - - public Date getSessionEndTime() { - return SessionEndTime; - } -} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/SettingsElement.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/SettingsElement.java deleted file mode 100644 index cb44271ba..000000000 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/SettingsElement.java +++ /dev/null @@ -1,29 +0,0 @@ -package ru.spcex.clearing.imdg.config; - -//import com.fasterxml.jackson.annotation.JsonProperty; - -import java.io.Serializable; - -@SuppressWarnings({"DefaultAnnotationParam", "unused", "FieldCanBeLocal"}) -public class SettingsElement implements Serializable { -// @JsonProperty(value = "InitHazelcastThreadMultiplier", required = false) - private int initHazelcastThreadMultiplier = 2; - -// @JsonProperty(value = "RecoveryLogPath", required = false) - private String recoveryLogPath; - -// @JsonProperty(value = "ExecutionLimitationPeriod", required = false) - private Integer executionLimitationPeriod = 10; - - public int getInitHazelcastThreadMultiplier() { - return initHazelcastThreadMultiplier; - } - - public Integer getExecutionLimitationPeriod() { - return executionLimitationPeriod; - } - - public String getRecoveryLogPath() { - return recoveryLogPath; - } -} \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/SettingsElementDatabase.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/SettingsElementDatabase.java deleted file mode 100644 index 642bc3ac2..000000000 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/SettingsElementDatabase.java +++ /dev/null @@ -1,89 +0,0 @@ -package ru.spcex.clearing.imdg.config; - -//import com.fasterxml.jackson.annotation.JsonProperty; - -import java.io.Serializable; - -@SuppressWarnings({"FieldCanBeLocal", "unused", "DefaultAnnotationParam"}) -public class SettingsElementDatabase implements Serializable { - -// @JsonProperty(value = "Driver") - private String driver = "org.firebirdsql.jdbc.FBDriver"; - -// @JsonProperty(value = "JdbcConnectionString", required = true) - private String jdbcConnectionString; - -// @JsonProperty(value = "Login", required = true) - private String login; - -// @JsonProperty(value = "Password", required = true) - private String password; - -// @JsonProperty(value = "MaxPoolSize") - private int maxPoolSize = 30; - -// @JsonProperty(value = "MinPoolSize") - private int minPoolSize = 10; - -// @JsonProperty(value = "EmbeddedFilePath", required = false) - private String embeddedFilePath; - -// @JsonProperty(value = "NumHelperThreads", required = false) - private int numHelperThreads = Runtime.getRuntime().availableProcessors() * 2; - -// @JsonProperty(value = "ConnectionAcquireTimeoutSeconds", required = false) - private int connectionAcquireTimeoutSeconds = 30; - - public String getDriver() { - return driver; - } - - public String getJdbcConnectionString() { - return jdbcConnectionString; - } - - public String getLogin() { - return login; - } - - public String getPassword() { - return password; - } - - public int getMaxPoolSize() { - return maxPoolSize; - } - - public int getMinPoolSize() { - return minPoolSize; - } - - public String getEmbeddedFilePath() { - return embeddedFilePath; - } - - public int getNumHelperThreads() { - return numHelperThreads; - } - - public int getConnectionAcquireTimeoutSeconds() { - return connectionAcquireTimeoutSeconds; - } - - // для поддержки интеграционных тестов otc-test: - public void setJdbcConnectionString(String jdbcConnectionString) { - this.jdbcConnectionString = jdbcConnectionString; - } - - public void setLogin(String login) { - this.login = login; - } - - public void setPassword(String password) { - this.password = password; - } - - public void setEmbeddedFilePath(String embeddedFilePath) { - this.embeddedFilePath = embeddedFilePath; - } -} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/AbstractHazelcastLifecycleSupport.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/AbstractHazelcastLifecycleSupport.java index 868c4de0c..5c1e24129 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/AbstractHazelcastLifecycleSupport.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/AbstractHazelcastLifecycleSupport.java @@ -4,24 +4,20 @@ import com.hazelcast.config.MapStoreConfig; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; import com.hazelcast.core.IdGenerator; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; -import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.JdbcTemplate; import ru.clearing.classes.objects.BusinessObject; +import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.base.DictionaryMapStore; import ru.spcex.clearing.imdg.base.SimpleObjectMapStore; -import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.imdg.iml.hazelcast.util.HazelcastHelper; import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; //todo почистить класс public abstract class AbstractHazelcastLifecycleSupport implements InitializingBean, DisposableBean { @@ -108,103 +104,19 @@ public abstract class AbstractHazelcastLifecycleSupport implements InitializingB log.info("IDGenerator {} already initialized in other node", IMDGDistributedNames.MAP_SEQUENCE_NAME); } -// MapStoreConfig mapStoreConfig = hazelcastServerInstance.getConfig().getMapConfig(HazelcastDistributedNames.Map_FixedIncomeProductExecution).getMapStoreConfig(); -// FixedIncomeProductExecutionMapStore fixedIncomeProductExecutionMapStore = (FixedIncomeProductExecutionMapStore) mapStoreConfig.getImplementation(); -// Long maxExecutionNumber = jdbcTemplate.queryForObject("select max(executionnumber) from " + fixedIncomeProductExecutionMapStore.getTableName(), Long.class); -// log.info("{} max(executionnumber)={}", fixedIncomeProductExecutionMapStore.getTableName(), maxExecutionNumber); -// if (maxExecutionNumber != null) { -// if (Integer.MAX_VALUE - maxExecutionNumber < 1000000) -// log.error("max(executionnumber) close to int32 max value"); -// IAtomicLong executionNumberAtomicLong = hazelcastServerInstance.getAtomicLong(HazelcastDistributedNames.AtomicLong_ExecutionNumber); -// executionNumberAtomicLong.set(maxExecutionNumber); -// } -// -// if (startupTasksAdministrator != null) { -// startupTasksAdministrator.createTasks(); -// } } catch (InterruptedException | ExecutionException e) { throw new RuntimeException("MapStore multithreaded not complete.", e); } HazelcastHelper.otcSystem_setStorageState(true, hazelcastServerInstance); -// hazelcastServerInstance.getClientService().addClientListener(clientListener); loadTime = System.currentTimeMillis() - loadTime; log.info("All map load time {} ms", loadTime); -// TextErrorService.setHazelcast(hazelcastServerInstance); - -// clusterStatistic(); } -// /** -// * Подсчитывает кол-во запусков, первый запуск. Пишет в лог. -// * Storage note status: ... -// */ -// protected void clusterStatistic() { -// try { -// boolean isFirstNodeReady = HazelcastCommon.otcSystem_setStorageInfo(new Date(), true, hazelcastServerInstance); -// String msg = "Storage node status: " + (isFirstNodeReady ? "first Storage node" : "second node") -// + ", first node start at " + HazelcastCommon.otcSystem_getFirstStorageTime(hazelcastServerInstance); -// String firstOtcVersion = HazelcastCommon.otcSystem_getFirstStorageVersion(hazelcastServerInstance); -// if (firstOtcVersion != null) -// msg += "(OTC " + firstOtcVersion + ")"; -// msg += ", count of all storage connection " + HazelcastCommon.otcSystem_getStorageConnectCount(hazelcastServerInstance) + "."; -// msg += " Hazelcast cluster members: " + hazelcastServerInstance.getCluster().getMembers().size() + "."; -// log.info(msg); -// } catch (Exception e) { -// log.warn("Error at print Storage cluster info.", e); -// } -// } - @Override public void destroy() { hazelcastServerInstance.shutdown(); } - - protected void databaseVersionCheck() throws RuntimeException, IllegalArgumentException { - log.debug("Validate DB version, expected \"{}\"", getCheckDbVersion()); - String dbVersion = null; - try { - dbVersion = jdbcTemplate.queryForObject("select version from VERSIONEDID", String.class); - log.info("DB version is \"{}\"", dbVersion); - if (StringUtils.isBlank(dbVersion)) { - String msg = "Database not contain version information (table VERSIONEDID)";//TextErrorService.text(StorageErrors.StorageErrors_WrongDBVersion) + " Database not contain version information (table VERSIONEDID)"; - log.error(msg); - throw new RuntimeException(msg); - } - if (!isAllowDBVersion(getCheckDbVersion(), dbVersion)) { - String msg = " platform " + getCheckDbVersion() + ", db " + dbVersion;//TextErrorService.text(StorageErrors.StorageErrors_WrongDBVersion) + " platform " + getCheckDbVersion() + ", db " + dbVersion; - log.error(msg); - throw new RuntimeException(msg); - } - } catch (DataAccessException | IllegalArgumentException e) { // EmptyResultDataAccessException - String msg = e.toString();//TextErrorService.text(StorageErrors.StorageErrors_WrongDBVersion) + " platform " + getCheckDbVersion() + ", db " + dbVersion; - log.error(msg); - throw new RuntimeException(msg, e); // Ошибка 10002 - Версия Бд не поддерживается - } - } - - /** - * Првоерка версии. Формат: 1.2.* - * - * @param moduleVersion версия кода - * @param dbVersion версия базы - * @return true - версии правильные, false - версия БД устарела или не совпадает. - * @throws IllegalArgumentException если неправильно распарсилась версия, в частности может случиться NumberFormatException. - */ - static boolean isAllowDBVersion(String moduleVersion, String dbVersion) throws IllegalArgumentException { - Pattern versionPattern = Pattern.compile("(\\d+)\\.(\\d+)(\\..*){0,1}"); // (\d+)\.(\d+)(\..*){0,1} - Matcher mModule = versionPattern.matcher(moduleVersion); - Matcher mDB = versionPattern.matcher(dbVersion); - if (!mModule.find()) - throw new IllegalArgumentException("Module version have wrong format: " + moduleVersion); - if (!mDB.find()) - throw new IllegalArgumentException("Version from database have wrong format: " + moduleVersion); - int majorModule = Integer.parseInt(mModule.group(1)); - int minorModule = Integer.parseInt(mModule.group(2)); - int majorDB = Integer.parseInt(mDB.group(1)); - int minorDB = Integer.parseInt(mDB.group(2)); - return majorDB == majorModule && minorDB >= minorModule; - } } diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java index e68defd6d..1ee90ea9c 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/service/HazelcastServiceBase.java @@ -173,7 +173,7 @@ public abstract class HazelcastServiceBase while (!done) { log.debug("Execute awaitGeneratorId()"); try { - HazelcastHelper.otcSystem_waitTillReadyState(getHazelcast()); + HazelcastHelper.waitTillReadyState(getHazelcast()); onAvailable(); done = true; } catch (Throwable e) { @@ -310,7 +310,7 @@ public abstract class HazelcastServiceBase try { HazelcastInstance instance = getHazelcast(); if (instance != null) { - HazelcastHelper.otcSystem_waitTillReadyState(instance); + HazelcastHelper.waitTillReadyState(instance); done = true; break; } else { diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/util/HazelcastHelper.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/util/HazelcastHelper.java index 14b9f3394..97977b217 100644 --- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/util/HazelcastHelper.java +++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/util/HazelcastHelper.java @@ -17,7 +17,8 @@ public final class HazelcastHelper { public static final int DEFAULT_CONNECTION_ATTEMPT_PERIOD_SEC = 10; public static final int DEFAULT_CONNECTION_ATTEMPT_LIMIT = Integer.MAX_VALUE; public static final int TEST_CONNECTION_ATTEMPT_LIMIT = 1; - public static final String OTC_SYSTEM_MAP = "OTC_SYSTEM"; + public static final String CLEARING_SYSTEM_MAP = "CLEARING_SYSTEM"; + public static final String STATE_OF_IMDG_SERVER = "IMDG.STATE"; public static ClientConfig getClientConfig(String members, String login, String password, String instanceName) { return getClientConfig(members, login, password, instanceName, null); @@ -79,8 +80,7 @@ public final class HazelcastHelper { while (!done) { try { instance = HazelcastClient.newHazelcastClient(hzClientConfig);// createHzClient(); - otcSystem_waitTillReadyState(instance); -// TextErrorService.setHazelcast(instance); + waitTillReadyState(instance); log.info("Hazelcast: TextErrorService done"); done = true; } catch (InterruptedException e) { @@ -99,10 +99,10 @@ public final class HazelcastHelper { return instance; } - public static void otcSystem_waitTillReadyState(HazelcastInstance hazelcast) throws InterruptedException { + public static void waitTillReadyState(HazelcastInstance hazelcast) throws InterruptedException { int sleepCount = 0; try { - while (!otcSystem_getStorageState(hazelcast)) { + while (!getIdmgState(hazelcast)) { if (sleepCount++ % 30 == 0) log.info("Wait till STORAGE be ready..."); Thread.sleep(100); @@ -115,14 +115,14 @@ public final class HazelcastHelper { } } - public static boolean otcSystem_getStorageState(HazelcastInstance hazelcast) { - IMap systemMap = hazelcast.getMap(OTC_SYSTEM_MAP); - return Boolean.valueOf(systemMap.get("STORAGE.STATE")); + public static boolean getIdmgState(HazelcastInstance hazelcast) { + IMap systemMap = hazelcast.getMap(CLEARING_SYSTEM_MAP); + return Boolean.valueOf(systemMap.get(STATE_OF_IMDG_SERVER)); } public static void otcSystem_setStorageState(boolean val, HazelcastInstance hazelcast) { - IMap systemMap = hazelcast.getMap(OTC_SYSTEM_MAP); - systemMap.set("STORAGE.STATE", Boolean.toString(val)); + IMap systemMap = hazelcast.getMap(CLEARING_SYSTEM_MAP); + systemMap.set(STATE_OF_IMDG_SERVER, Boolean.toString(val)); } From 7d55b4cb1bd816f7d53bea4a329b03ae328424e6 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 27 Sep 2022 08:25:15 +0300 Subject: [PATCH 02/41] add module to distrib --- pom.xml | 5 + z-distr/pom.xml | 95 +++++++++++++++++++ .../resources/distr/bin/account-service.sh | 3 + .../resources/distr/bin/balance-service.sh | 3 + .../resources/distr/bin/company-service.sh | 3 + .../resources/distr/bin/report-service.sh | 3 + .../resources/distr/bin/utility-service.sh | 3 + .../distr/modules/account-service/Dockerfile | 6 ++ .../distr/modules/balance-service/Dockerfile | 6 ++ .../distr/modules/company-service/Dockerfile | 6 ++ .../distr/modules/reports-service/Dockerfile | 6 ++ .../distr/modules/utility-service/Dockerfile | 6 ++ 12 files changed, 145 insertions(+) create mode 100644 z-distr/src/main/resources/distr/bin/account-service.sh create mode 100644 z-distr/src/main/resources/distr/bin/balance-service.sh create mode 100644 z-distr/src/main/resources/distr/bin/company-service.sh create mode 100644 z-distr/src/main/resources/distr/bin/report-service.sh create mode 100644 z-distr/src/main/resources/distr/bin/utility-service.sh create mode 100644 z-distr/src/main/resources/distr/modules/account-service/Dockerfile create mode 100644 z-distr/src/main/resources/distr/modules/balance-service/Dockerfile create mode 100644 z-distr/src/main/resources/distr/modules/company-service/Dockerfile create mode 100644 z-distr/src/main/resources/distr/modules/reports-service/Dockerfile create mode 100644 z-distr/src/main/resources/distr/modules/utility-service/Dockerfile diff --git a/pom.xml b/pom.xml index a70f4b92f..270dfddac 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,11 @@ ${folder_root_clearing}/clearing-parent/imdg ${folder_root_clearing}/clearing-parent/dbf-exporter ${folder_root_clearing}/clearing-parent/dbf-importer + ${folder_root_clearing}/clearing-parent/account-service + ${folder_root_clearing}/clearing-parent/balance-service + ${folder_root_clearing}/clearing-parent/company-service + ${folder_root_clearing}/clearing-parent/reports-service + ${folder_root_clearing}/clearing-parent/utility-service 3.12.4 1.7.33 diff --git a/z-distr/pom.xml b/z-distr/pom.xml index 820f787cb..92a874b5a 100644 --- a/z-distr/pom.xml +++ b/z-distr/pom.xml @@ -191,6 +191,101 @@ + + copy-account-service-bin + prepare-package + + copy + + + + + ${folder_root_account-service}/target/account-service.jar + ${folder.clearing.distr.modules}/account-service/account-service.jar + + + ${folder_root_account-service}/src/main/resources/application.properties + ${folder.clearing.distr.modules}/account-service/application.properties + + + + + + copy-balance-service-bin + prepare-package + + copy + + + + + ${folder_root_balance-service}/target/balance-service.jar + ${folder.clearing.distr.modules}/balance-service/balance-service.jar + + + ${folder_root_balance-service}/src/main/resources/application.properties + ${folder.clearing.distr.modules}/balance-service/application.properties + + + + + + copy-company-service-bin + prepare-package + + copy + + + + + ${folder_root_company-service}/target/company-service.jar + ${folder.clearing.distr.modules}/company-service/company-service.jar + + + ${folder_root_company-service}/src/main/resources/application.properties + ${folder.clearing.distr.modules}/company-service/application.properties + + + + + + copy-reports-service-bin + prepare-package + + copy + + + + + ${folder_root_reports-service}/target/reports-service.jar + ${folder.clearing.distr.modules}/reports-service/reports-service.jar + + + ${folder_root_reports-service}/src/main/resources/application.properties + ${folder.clearing.distr.modules}/reports-service/application.properties + + + + + + copy-utility-service-bin + prepare-package + + copy + + + + + ${folder_root_utility-service}/target/utility-service.jar + ${folder.clearing.distr.modules}/utility-service/utility-service.jar + + + ${folder_root_utility-service}/src/main/resources/application.properties + ${folder.clearing.distr.modules}/utility-service/application.properties + + + + diff --git a/z-distr/src/main/resources/distr/bin/account-service.sh b/z-distr/src/main/resources/distr/bin/account-service.sh new file mode 100644 index 000000000..ee667c56e --- /dev/null +++ b/z-distr/src/main/resources/distr/bin/account-service.sh @@ -0,0 +1,3 @@ +#!/bin/sh +docker build -t account-service:1.0.0 ../modules/account-service/ +docker run -p 8050:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs account-service:1.0.0 & \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/balance-service.sh b/z-distr/src/main/resources/distr/bin/balance-service.sh new file mode 100644 index 000000000..3896fbc84 --- /dev/null +++ b/z-distr/src/main/resources/distr/bin/balance-service.sh @@ -0,0 +1,3 @@ +#!/bin/sh +docker build -t balance-service:1.0.0 ../modules/balance-service/ +docker run -p 8040:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs balance-service:1.0.0 & \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/company-service.sh b/z-distr/src/main/resources/distr/bin/company-service.sh new file mode 100644 index 000000000..1a165f555 --- /dev/null +++ b/z-distr/src/main/resources/distr/bin/company-service.sh @@ -0,0 +1,3 @@ +#!/bin/sh +docker build -t company-service:1.0.0 ../modules/company-service/ +docker run -p 8030:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs company-service:1.0.0 & \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/report-service.sh b/z-distr/src/main/resources/distr/bin/report-service.sh new file mode 100644 index 000000000..bf7afc234 --- /dev/null +++ b/z-distr/src/main/resources/distr/bin/report-service.sh @@ -0,0 +1,3 @@ +#!/bin/sh +docker build -t reports-service:1.0.0 ../modules/reports-service/ +docker run -p 8020:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs reports-service:1.0.0 & \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/utility-service.sh b/z-distr/src/main/resources/distr/bin/utility-service.sh new file mode 100644 index 000000000..09beaefc2 --- /dev/null +++ b/z-distr/src/main/resources/distr/bin/utility-service.sh @@ -0,0 +1,3 @@ +#!/bin/sh +docker build -t utility-service:1.0.0 ../modules/utility-service/ +docker run -p 8010:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs utility-service:1.0.0 & \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/account-service/Dockerfile b/z-distr/src/main/resources/distr/modules/account-service/Dockerfile new file mode 100644 index 000000000..7d00d41ce --- /dev/null +++ b/z-distr/src/main/resources/distr/modules/account-service/Dockerfile @@ -0,0 +1,6 @@ +FROM debian:stable-20220125-jdk17 + +ADD account-service.jar /opt/clearing/bin/account-service.jar +ADD application.properties /opt/clearing/bin/account-service.properties +USER root +ENTRYPOINT java -jar /opt/clearing/bin/account-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=account-service.properties \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/balance-service/Dockerfile b/z-distr/src/main/resources/distr/modules/balance-service/Dockerfile new file mode 100644 index 000000000..ba09f0936 --- /dev/null +++ b/z-distr/src/main/resources/distr/modules/balance-service/Dockerfile @@ -0,0 +1,6 @@ +FROM debian:stable-20220125-jdk17 + +ADD balance-service.jar /opt/clearing/bin/balance-service.jar +ADD application.properties /opt/clearing/bin/balance-service.properties +USER root +ENTRYPOINT java -jar /opt/clearing/bin/balance-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=balance-service.properties \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/company-service/Dockerfile b/z-distr/src/main/resources/distr/modules/company-service/Dockerfile new file mode 100644 index 000000000..bcc0c5d4f --- /dev/null +++ b/z-distr/src/main/resources/distr/modules/company-service/Dockerfile @@ -0,0 +1,6 @@ +FROM debian:stable-20220125-jdk17 + +ADD company-service.jar /opt/clearing/bin/company-service.jar +ADD application.properties /opt/clearing/bin/company-service.properties +USER root +ENTRYPOINT java -jar /opt/clearing/bin/company-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=company-service.properties \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/reports-service/Dockerfile b/z-distr/src/main/resources/distr/modules/reports-service/Dockerfile new file mode 100644 index 000000000..fd11df416 --- /dev/null +++ b/z-distr/src/main/resources/distr/modules/reports-service/Dockerfile @@ -0,0 +1,6 @@ +FROM debian:stable-20220125-jdk17 + +ADD reports-service.jar /opt/clearing/bin/reports-service.jar +ADD application.properties /opt/clearing/bin/reports-service.properties +USER root +ENTRYPOINT java -jar /opt/clearing/bin/reports-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=reports-service.properties \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/utility-service/Dockerfile b/z-distr/src/main/resources/distr/modules/utility-service/Dockerfile new file mode 100644 index 000000000..b2d10def1 --- /dev/null +++ b/z-distr/src/main/resources/distr/modules/utility-service/Dockerfile @@ -0,0 +1,6 @@ +FROM debian:stable-20220125-jdk17 + +ADD utility-service.jar /opt/clearing/bin/utility-service.jar +ADD application.properties /opt/clearing/bin/utility-service.properties +USER root +ENTRYPOINT java -jar /opt/clearing/bin/utility-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=utility-service.properties \ No newline at end of file From c28ad05c6e39241813fcff399d83dbfd01a1ce45 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 27 Sep 2022 10:34:16 +0300 Subject: [PATCH 03/41] refactoring imdg settings --- .../imdg/config/DbConnectionConfig.java | 73 +++++++++++++++++++ .../imdg/config/HazelcastConfiguration.java | 7 +- .../DatabaseSettings.java} | 4 +- .../HazelcastServerSettings.java} | 8 +- .../config/{ => element}/ImdgSettings.java | 27 ++++--- .../main/resources/distr/bin/backend-api.sh | 2 +- 6 files changed, 98 insertions(+), 23 deletions(-) create mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java rename clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/{DatabaseConnectionElement.java => element/DatabaseSettings.java} (86%) rename clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/{HazelcastServerElement.java => element/HazelcastServerSettings.java} (83%) rename clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/{ => element}/ImdgSettings.java (57%) diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java new file mode 100644 index 000000000..ef8328659 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java @@ -0,0 +1,73 @@ +package ru.spcex.clearing.imdg.config; + +import com.mchange.v2.c3p0.ComboPooledDataSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; +import ru.spcex.clearing.imdg.config.element.DatabaseSettings; +import ru.spcex.clearing.imdg.config.element.ImdgSettings; +import ru.spcex.clearing.imdg.error.ModuleInitializeException; + +import javax.sql.DataSource; +import java.sql.Connection; + +@SuppressWarnings("UnnecessaryLocalVariable") +@Configuration +public class DbConnectionConfig { + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + private final DatabaseSettings settings; + + public DbConnectionConfig(ImdgSettings settings) { + this.settings = settings.getDatabase(); + } + + @Bean + public DataSource dataSource() { + DataSource result; + String login = settings.getLogin(); + String password = settings.getPassword(); + String logTimeoutPart = ""; + String dbPath = settings.getUrl(); + int timeoutSec = 30; + + ComboPooledDataSource cpds = new ComboPooledDataSource(); + try { + cpds.setDriverClass("org.postgresql.Driver"); + } catch (Exception ue) { + throw new RuntimeException(ue); + } + cpds.setJdbcUrl(dbPath); + cpds.setUser(login); + cpds.setPassword(password); + cpds.setInitialPoolSize(10); + cpds.setMinPoolSize(10); + cpds.setMaxPoolSize(30); + int numHelperThreads = Runtime.getRuntime().availableProcessors() * 2; + cpds.setNumHelperThreads(numHelperThreads); + cpds.setCheckoutTimeout(timeoutSec * 1000); + logTimeoutPart = String.format(" (timeout=%ds)", timeoutSec); + result = cpds; + + String OPERATION_DATABASE_CONNECTION_CHECK = String.format("Database [%s] connection check", dbPath); + try { + Connection conn = result.getConnection(); + conn.close(); + log.info("{}: success", OPERATION_DATABASE_CONNECTION_CHECK); + return result; + } catch (Throwable e) { + String msg = String.format("%s%s: failed: %s -> %s", + OPERATION_DATABASE_CONNECTION_CHECK, logTimeoutPart, e.getClass().getSimpleName(), e.getMessage()); + log.error(msg); + throw new ModuleInitializeException(msg, e); + } + } + + @Bean + public JdbcTemplate jdbcTemplate(DataSource dataSource) { + JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); + return jdbcTemplate; + } +} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java index 896cebed2..01f53add1 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java @@ -6,6 +6,8 @@ import com.hazelcast.core.HazelcastInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.imdg.config.element.HazelcastServerSettings; +import ru.spcex.clearing.imdg.config.element.ImdgSettings; import java.util.List; @@ -13,10 +15,11 @@ import java.util.List; public class HazelcastConfiguration { private final PoolMapConfigs poolMapConfigs; - private final HazelcastServerElement hzSettings; + private final HazelcastServerSettings hzSettings; @Autowired - public HazelcastConfiguration(PoolMapConfigs poolMapConfigs, ImdgSettings imdgSettings) { + public HazelcastConfiguration(PoolMapConfigs poolMapConfigs, + ImdgSettings imdgSettings) { this.poolMapConfigs = poolMapConfigs; this.hzSettings = imdgSettings.getHazelcast(); } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DatabaseConnectionElement.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/DatabaseSettings.java similarity index 86% rename from clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DatabaseConnectionElement.java rename to clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/DatabaseSettings.java index 274839a2c..670bfde03 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DatabaseConnectionElement.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/DatabaseSettings.java @@ -1,6 +1,6 @@ -package ru.spcex.clearing.imdg.config; +package ru.spcex.clearing.imdg.config.element; -public class DatabaseConnectionElement { +public class DatabaseSettings { private String login; private String password; private String url; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastServerElement.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java similarity index 83% rename from clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastServerElement.java rename to clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java index db267c74e..897d9a600 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastServerElement.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java @@ -1,12 +1,12 @@ -package ru.spcex.clearing.imdg.config; +package ru.spcex.clearing.imdg.config.element; import java.util.List; -public class HazelcastServerElement { +public class HazelcastServerSettings { private int listenPort = 5071; - private String login = "dev"; - private String password = "dev-pass"; + private String login; + private String password; private List clusterMembers; public int getListenPort() { diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ImdgSettings.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java similarity index 57% rename from clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ImdgSettings.java rename to clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java index a178af9fb..95eae7658 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ImdgSettings.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.imdg.config; +package ru.spcex.clearing.imdg.config.element; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; @@ -8,23 +8,22 @@ import org.springframework.stereotype.Component; @PropertySource("file:${spring.config.location}/application.properties") @ConfigurationProperties("imdg") public class ImdgSettings { + private HazelcastServerSettings hazelcast; + private DatabaseSettings database; - private HazelcastServerElement hazelcast; - private DatabaseConnectionElement database; - - public DatabaseConnectionElement getDatabase() { - return database; - } - - public void setDatabase(DatabaseConnectionElement database) { - this.database = database; - } - - public HazelcastServerElement getHazelcast() { + public HazelcastServerSettings getHazelcast() { return hazelcast; } - public void setHazelcast(HazelcastServerElement hazelcast) { + public void setHazelcast(HazelcastServerSettings hazelcast) { this.hazelcast = hazelcast; } + + public DatabaseSettings getDatabase() { + return database; + } + + public void setDatabase(DatabaseSettings database) { + this.database = database; + } } diff --git a/z-distr/src/main/resources/distr/bin/backend-api.sh b/z-distr/src/main/resources/distr/bin/backend-api.sh index 8bbec107f..b6ed297ea 100644 --- a/z-distr/src/main/resources/distr/bin/backend-api.sh +++ b/z-distr/src/main/resources/distr/bin/backend-api.sh @@ -1,3 +1,3 @@ #!/bin/sh docker build -t backend-api:1.0.0 ../modules/backend-api/ -docker run -p 8090:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs backend-api:1.0.0 & \ No newline at end of file +docker run -d -p 8090:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs backend-api:1.0.0 \ No newline at end of file From 77782ee5f590fd176a69ad1577e9bb1d68b06098 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 27 Sep 2022 12:10:33 +0300 Subject: [PATCH 04/41] fix distibs --- z-distr/src/main/resources/distr/bin/account-service.sh | 4 ++-- z-distr/src/main/resources/distr/bin/backend-api.sh | 4 ++-- z-distr/src/main/resources/distr/bin/balance-service.sh | 4 ++-- z-distr/src/main/resources/distr/bin/company-service.sh | 4 ++-- z-distr/src/main/resources/distr/bin/dbf-exporter.sh | 4 ++-- z-distr/src/main/resources/distr/bin/dbf-importer.sh | 4 ++-- z-distr/src/main/resources/distr/bin/deploy.sh | 2 +- z-distr/src/main/resources/distr/bin/os.sh | 2 +- z-distr/src/main/resources/distr/bin/report-service.sh | 4 ++-- z-distr/src/main/resources/distr/bin/securities-service.sh | 4 ++-- z-distr/src/main/resources/distr/bin/utility-service.sh | 4 ++-- .../main/resources/distr/modules/account-service/Dockerfile | 4 ++-- .../main/resources/distr/modules/balance-service/Dockerfile | 4 ++-- .../main/resources/distr/modules/company-service/Dockerfile | 4 ++-- .../main/resources/distr/modules/reports-service/Dockerfile | 4 ++-- .../main/resources/distr/modules/utility-service/Dockerfile | 4 ++-- 16 files changed, 30 insertions(+), 30 deletions(-) diff --git a/z-distr/src/main/resources/distr/bin/account-service.sh b/z-distr/src/main/resources/distr/bin/account-service.sh index ee667c56e..7ec2c2bd8 100644 --- a/z-distr/src/main/resources/distr/bin/account-service.sh +++ b/z-distr/src/main/resources/distr/bin/account-service.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/bash docker build -t account-service:1.0.0 ../modules/account-service/ -docker run -p 8050:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs account-service:1.0.0 & \ No newline at end of file +docker run -d -p 8055:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs account-service:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/backend-api.sh b/z-distr/src/main/resources/distr/bin/backend-api.sh index b6ed297ea..292b7f616 100644 --- a/z-distr/src/main/resources/distr/bin/backend-api.sh +++ b/z-distr/src/main/resources/distr/bin/backend-api.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/bash docker build -t backend-api:1.0.0 ../modules/backend-api/ -docker run -d -p 8090:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs backend-api:1.0.0 \ No newline at end of file +docker run -d -p 8095:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs backend-api:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/balance-service.sh b/z-distr/src/main/resources/distr/bin/balance-service.sh index 3896fbc84..543801d68 100644 --- a/z-distr/src/main/resources/distr/bin/balance-service.sh +++ b/z-distr/src/main/resources/distr/bin/balance-service.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/bash docker build -t balance-service:1.0.0 ../modules/balance-service/ -docker run -p 8040:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs balance-service:1.0.0 & \ No newline at end of file +docker run -d -p 8040:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs balance-service:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/company-service.sh b/z-distr/src/main/resources/distr/bin/company-service.sh index 1a165f555..4005003fc 100644 --- a/z-distr/src/main/resources/distr/bin/company-service.sh +++ b/z-distr/src/main/resources/distr/bin/company-service.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/bash docker build -t company-service:1.0.0 ../modules/company-service/ -docker run -p 8030:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs company-service:1.0.0 & \ No newline at end of file +docker run -d -p 8030:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs company-service:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/dbf-exporter.sh b/z-distr/src/main/resources/distr/bin/dbf-exporter.sh index a8c5b380c..c00a1c3c0 100644 --- a/z-distr/src/main/resources/distr/bin/dbf-exporter.sh +++ b/z-distr/src/main/resources/distr/bin/dbf-exporter.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/bash docker build -t dbf-exporter:1.0.0 ../modules/dbf-exporter/ -docker run -p 8070:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs dbf-exporter:1.0.0 & \ No newline at end of file +docker run -d -p 8065:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs dbf-exporter:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/dbf-importer.sh b/z-distr/src/main/resources/distr/bin/dbf-importer.sh index 909b00cdd..f7ca2bf5b 100644 --- a/z-distr/src/main/resources/distr/bin/dbf-importer.sh +++ b/z-distr/src/main/resources/distr/bin/dbf-importer.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/bash docker build -t dbf-importer:1.0.0 ../modules/dbf-importer/ -docker run -p 8060:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs dbf-importer:1.0.0 & \ No newline at end of file +docker run -d -p 8060:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs dbf-importer:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/deploy.sh b/z-distr/src/main/resources/distr/bin/deploy.sh index 2ed33c187..260812a4d 100644 --- a/z-distr/src/main/resources/distr/bin/deploy.sh +++ b/z-distr/src/main/resources/distr/bin/deploy.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash ./os.sh sleep 60 ./backend-api.sh & diff --git a/z-distr/src/main/resources/distr/bin/os.sh b/z-distr/src/main/resources/distr/bin/os.sh index 72c4b51ad..417525c9a 100644 --- a/z-distr/src/main/resources/distr/bin/os.sh +++ b/z-distr/src/main/resources/distr/bin/os.sh @@ -1,2 +1,2 @@ -#!/bin/sh +#!/bin/bash docker build -t debian:stable-20220125-jdk17 ../modules/os/ \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/report-service.sh b/z-distr/src/main/resources/distr/bin/report-service.sh index bf7afc234..0d587301d 100644 --- a/z-distr/src/main/resources/distr/bin/report-service.sh +++ b/z-distr/src/main/resources/distr/bin/report-service.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/bash docker build -t reports-service:1.0.0 ../modules/reports-service/ -docker run -p 8020:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs reports-service:1.0.0 & \ No newline at end of file +docker run -d -p 8020:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs reports-service:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/securities-service.sh b/z-distr/src/main/resources/distr/bin/securities-service.sh index f12309928..48629c6f1 100644 --- a/z-distr/src/main/resources/distr/bin/securities-service.sh +++ b/z-distr/src/main/resources/distr/bin/securities-service.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/bash docker build -t securities-service:1.0.0 ../modules/securities-service/ -docker run -v /opt/clearing/logs:/opt/clearing/bin/logs securities-service:1.0.0 & \ No newline at end of file +docker run -d -p 8010:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs securities-service:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/utility-service.sh b/z-distr/src/main/resources/distr/bin/utility-service.sh index 09beaefc2..cc1434fbc 100644 --- a/z-distr/src/main/resources/distr/bin/utility-service.sh +++ b/z-distr/src/main/resources/distr/bin/utility-service.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/bin/bash docker build -t utility-service:1.0.0 ../modules/utility-service/ -docker run -p 8010:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs utility-service:1.0.0 & \ No newline at end of file +docker run -d -p 8015:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs utility-service:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/account-service/Dockerfile b/z-distr/src/main/resources/distr/modules/account-service/Dockerfile index 7d00d41ce..c9d49599c 100644 --- a/z-distr/src/main/resources/distr/modules/account-service/Dockerfile +++ b/z-distr/src/main/resources/distr/modules/account-service/Dockerfile @@ -1,6 +1,6 @@ FROM debian:stable-20220125-jdk17 ADD account-service.jar /opt/clearing/bin/account-service.jar -ADD application.properties /opt/clearing/bin/account-service.properties +ADD application.properties /opt/clearing/bin/application.properties USER root -ENTRYPOINT java -jar /opt/clearing/bin/account-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=account-service.properties \ No newline at end of file +ENTRYPOINT java -jar /opt/clearing/bin/account-service.jar --spring.config.location=/opt/clearing/bin/ \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/balance-service/Dockerfile b/z-distr/src/main/resources/distr/modules/balance-service/Dockerfile index ba09f0936..d06190e49 100644 --- a/z-distr/src/main/resources/distr/modules/balance-service/Dockerfile +++ b/z-distr/src/main/resources/distr/modules/balance-service/Dockerfile @@ -1,6 +1,6 @@ FROM debian:stable-20220125-jdk17 ADD balance-service.jar /opt/clearing/bin/balance-service.jar -ADD application.properties /opt/clearing/bin/balance-service.properties +ADD application.properties /opt/clearing/bin/application.properties USER root -ENTRYPOINT java -jar /opt/clearing/bin/balance-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=balance-service.properties \ No newline at end of file +ENTRYPOINT java -jar /opt/clearing/bin/balance-service.jar --spring.config.location=/opt/clearing/bin/ \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/company-service/Dockerfile b/z-distr/src/main/resources/distr/modules/company-service/Dockerfile index bcc0c5d4f..51b04e98c 100644 --- a/z-distr/src/main/resources/distr/modules/company-service/Dockerfile +++ b/z-distr/src/main/resources/distr/modules/company-service/Dockerfile @@ -1,6 +1,6 @@ FROM debian:stable-20220125-jdk17 ADD company-service.jar /opt/clearing/bin/company-service.jar -ADD application.properties /opt/clearing/bin/company-service.properties +ADD application.properties /opt/clearing/bin/application.properties USER root -ENTRYPOINT java -jar /opt/clearing/bin/company-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=company-service.properties \ No newline at end of file +ENTRYPOINT java -jar /opt/clearing/bin/company-service.jar --spring.config.location=/opt/clearing/bin/ \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/reports-service/Dockerfile b/z-distr/src/main/resources/distr/modules/reports-service/Dockerfile index fd11df416..b533fe630 100644 --- a/z-distr/src/main/resources/distr/modules/reports-service/Dockerfile +++ b/z-distr/src/main/resources/distr/modules/reports-service/Dockerfile @@ -1,6 +1,6 @@ FROM debian:stable-20220125-jdk17 ADD reports-service.jar /opt/clearing/bin/reports-service.jar -ADD application.properties /opt/clearing/bin/reports-service.properties +ADD application.properties /opt/clearing/bin/application.properties USER root -ENTRYPOINT java -jar /opt/clearing/bin/reports-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=reports-service.properties \ No newline at end of file +ENTRYPOINT java -jar /opt/clearing/bin/reports-service.jar --spring.config.location=/opt/clearing/bin/ \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/modules/utility-service/Dockerfile b/z-distr/src/main/resources/distr/modules/utility-service/Dockerfile index b2d10def1..e2eb6d7f0 100644 --- a/z-distr/src/main/resources/distr/modules/utility-service/Dockerfile +++ b/z-distr/src/main/resources/distr/modules/utility-service/Dockerfile @@ -1,6 +1,6 @@ FROM debian:stable-20220125-jdk17 ADD utility-service.jar /opt/clearing/bin/utility-service.jar -ADD application.properties /opt/clearing/bin/utility-service.properties +ADD application.properties /opt/clearing/bin/application.properties USER root -ENTRYPOINT java -jar /opt/clearing/bin/utility-service.jar --spring.config.location=/opt/clearing/bin/ --spring.config.name=utility-service.properties \ No newline at end of file +ENTRYPOINT java -jar /opt/clearing/bin/utility-service.jar --spring.config.location=/opt/clearing/bin/ \ No newline at end of file From 983b59b508edef7af9d5120117179d8a4f134fcf Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 27 Sep 2022 12:39:42 +0300 Subject: [PATCH 05/41] fix distibs --- .../src/main/resources/application.properties | 2 +- .../src/main/resources/application.properties | 10 +++------- z-distr/src/main/resources/distr/bin/dbf-exporter.sh | 2 +- z-distr/src/main/resources/distr/bin/dbf-importer.sh | 2 +- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/clearing-parent/dbf-exporter/src/main/resources/application.properties b/clearing-parent/dbf-exporter/src/main/resources/application.properties index 5fc2e1ad8..01e541e56 100644 --- a/clearing-parent/dbf-exporter/src/main/resources/application.properties +++ b/clearing-parent/dbf-exporter/src/main/resources/application.properties @@ -9,4 +9,4 @@ hazelcast.password=dev-pass dbf.encoding=cp866 dbf.threads-count=10 -dbf.out-dir=D:\\dbf\\out +dbf.out-dir=/opt/clearing/file/exporter/ diff --git a/clearing-parent/dbf-importer/src/main/resources/application.properties b/clearing-parent/dbf-importer/src/main/resources/application.properties index 3316a6c6e..df400cde1 100644 --- a/clearing-parent/dbf-importer/src/main/resources/application.properties +++ b/clearing-parent/dbf-importer/src/main/resources/application.properties @@ -1,17 +1,13 @@ server.port=8080 server.servlet.context-path=/importer spring.main.web-application-type=servlet -db.jdbc-url=jdbc:postgresql://10.200.200.133:5432/postgres -db.driver=org.postgresql.Driver -db.login=clearing -db.password=Aa111111 dbf.check-src-dir-cron=* * * * 1 ? dbf.encoding-source=cp866 dbf.insert-batch-size=100 dbf.delete-src-files=false -dbf.src-dir=D:\\dbf\\ -dbf.out-dir=D:\\dbf\\out +dbf.src-dir=/opt/clearing/file/importer/ +dbf.out-dir=/opt/clearing/file/importer/loaded/ dbf.threads-count=10 -import-dbf-service.hazelcast.cluster-members=127.0.0.1 +import-dbf-service.hazelcast.cluster-members=127.0.0.1:5701 import-dbf-service.hazelcast.login=dev import-dbf-service.hazelcast.password=dev-pass \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/dbf-exporter.sh b/z-distr/src/main/resources/distr/bin/dbf-exporter.sh index c00a1c3c0..203ad8b5f 100644 --- a/z-distr/src/main/resources/distr/bin/dbf-exporter.sh +++ b/z-distr/src/main/resources/distr/bin/dbf-exporter.sh @@ -1,3 +1,3 @@ #!/bin/bash docker build -t dbf-exporter:1.0.0 ../modules/dbf-exporter/ -docker run -d -p 8065:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs dbf-exporter:1.0.0 \ No newline at end of file +docker run -d -p 8065:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs -v /opt/clearing/file/exporter:/opt/clearing/file/exporter/ dbf-exporter:1.0.0 \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/bin/dbf-importer.sh b/z-distr/src/main/resources/distr/bin/dbf-importer.sh index f7ca2bf5b..b23914c28 100644 --- a/z-distr/src/main/resources/distr/bin/dbf-importer.sh +++ b/z-distr/src/main/resources/distr/bin/dbf-importer.sh @@ -1,3 +1,3 @@ #!/bin/bash docker build -t dbf-importer:1.0.0 ../modules/dbf-importer/ -docker run -d -p 8060:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs dbf-importer:1.0.0 \ No newline at end of file +docker run -d -p 8060:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs -v /opt/clearing/file/importer/:/opt/clearing/file/importer -v /opt/clearing/file/importer/loaded:/opt/clearing/file/importer/loaded dbf-importer:1.0.0 \ No newline at end of file From 4ad0fc2a945e62e48511b598a5c9bbb97644bd4b Mon Sep 17 00:00:00 2001 From: ialbert Date: Tue, 27 Sep 2022 16:48:18 +0300 Subject: [PATCH 06/41] SameSite=None --- .../clearing/backendapi/config/WebConfig.java | 6 ++++++ .../src/main/resources/application.properties | 4 ++++ .../platform/enumeration/CurrencyCode.java | 18 ++++++++++++++++++ .../platform/enumeration/InOutSDfType.java | 18 ++++++++++++++++++ .../platform/enumeration/OperationStatus.java | 18 ++++++++++++++++++ .../platform/enumeration/StatementType.java | 18 ++++++++++++++++++ 6 files changed, 82 insertions(+) create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CurrencyCode.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/OperationStatus.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/StatementType.java diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/WebConfig.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/WebConfig.java index 005fa63aa..1cc5893df 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/WebConfig.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/WebConfig.java @@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.boot.web.servlet.server.CookieSameSiteSupplier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; @@ -75,4 +76,9 @@ public class WebConfig implements WebMvcConfigurer { public RequestContextListener requestContextListener() { return new RequestContextListener(); } + + @Bean + public CookieSameSiteSupplier applicationCookieSameSiteSupplier() { + return CookieSameSiteSupplier.ofNone(); + } } diff --git a/clearing-parent/backend-api/src/main/resources/application.properties b/clearing-parent/backend-api/src/main/resources/application.properties index 8c83a2cef..32e6e67c6 100644 --- a/clearing-parent/backend-api/src/main/resources/application.properties +++ b/clearing-parent/backend-api/src/main/resources/application.properties @@ -1,5 +1,9 @@ server.port=8080 server.servlet.context-path=/backend-api +server.ssl.key-store-type=PKCS12 +server.ssl.key-store=classpath:keystore/client.p12 +server.ssl.key-store-password=Aa123456 +server.ssl.enabled=true spring.main.web-application-type=servlet backend-api.example-setting=test diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CurrencyCode.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CurrencyCode.java new file mode 100644 index 000000000..7c6fb4daa --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/CurrencyCode.java @@ -0,0 +1,18 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum CurrencyCode implements IEnumKey { + RUB("RUB"); + + private final String key; + + CurrencyCode(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java new file mode 100644 index 000000000..c6b103761 --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java @@ -0,0 +1,18 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum InOutSDfType implements IEnumKey { + type1("0102"); + + private final String key; + + InOutSDfType(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/OperationStatus.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/OperationStatus.java new file mode 100644 index 000000000..be1766ce3 --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/OperationStatus.java @@ -0,0 +1,18 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum OperationStatus implements IEnumKey { + Pending("PEND"); + + private final String key; + + OperationStatus(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/StatementType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/StatementType.java new file mode 100644 index 000000000..b351b4c9a --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/StatementType.java @@ -0,0 +1,18 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum StatementType implements IEnumKey { + full("FULL"); + + private final String key; + + StatementType(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} From db38a4230a951050a68a16f8492aac2991a0a691 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 28 Sep 2022 18:18:45 +0300 Subject: [PATCH 07/41] http://jira.mfd.msk:8088/browse/CLS-36 --- .../clearing/account/config/KafkaConfig.java | 32 ++- .../settings/AccountServiceSettings.java | 20 +- .../account/service/AccountService.java | 75 +++++++ .../balance/config/ValidationConfig.java | 3 + .../balance/service/StatementService.java | 205 +++++++++++++++--- .../validation/Sdf01ValidationRule.java | 19 +- .../balance/validation/ValidationStored.java | 2 +- .../platform/enumeration/OperationStatus.java | 2 +- .../clearing/imdg/IMDGDistributedNames.java | 2 + .../platform/messaging/domain/Consts.java | 3 +- .../domain/cud/account/AccountNewRequest.java | 14 -- .../account/sdf01/AccountSdf01Request.java | 29 +++ .../sdf01/AccountSdf01RequestPart.java | 36 +++ .../AccountSdf01ToStatementRequestPart.java | 36 +++ .../domain/cud/balance/StatementRequest.java | 35 ++- .../cud/balance/StatementRequestType.java | 6 + 16 files changed, 454 insertions(+), 65 deletions(-) create mode 100644 clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java delete mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/AccountNewRequest.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/sdf01/AccountSdf01Request.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/sdf01/AccountSdf01RequestPart.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/AccountSdf01ToStatementRequestPart.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequestType.java diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/KafkaConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/KafkaConfig.java index 34973fffa..f0a86b0e6 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/KafkaConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/KafkaConfig.java @@ -1,18 +1,46 @@ package ru.spcex.clearing.account.config; import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.spcex.clearing.account.config.settings.AccountServiceSettings; import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; +import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory; +import ru.spcex.clearing.platform.messaging.service.RequestInfo; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; @Configuration public class KafkaConfig { @Autowired @Bean - public Consumer createProducer(AccountServiceSettings settings) { - return KafkaConsumerFactory.consumer(settings.getKafka()); + public Consumer createConsumer(AccountServiceSettings settings) { + return KafkaConsumerFactory.consumer(settings.getKafkaConsumer()); + } + + @Autowired + @Bean + public Producer createProducer(AccountServiceSettings settings) { + return KafkaProducerFactory.producer(settings.getKafkaProducer()); + } + + @Autowired + @Bean + public KafkaSender kafkaSender(Producer kafkaProducer, ImdgProvider imdgProvider) { + ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator(); + return KafkaSender + .setup() + .producer(kafkaProducer) + .idGenerator(imdgIdGenerator::nextId) + .imdgProvider(s -> { + Imdg imdg = imdgProvider.getImdg(s, RequestInfo.class); + return imdg::insert; + }) + .build(); } } diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/settings/AccountServiceSettings.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/settings/AccountServiceSettings.java index f6f1166bb..1848ace41 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/settings/AccountServiceSettings.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/settings/AccountServiceSettings.java @@ -4,6 +4,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings; +import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings; import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; @Component @@ -11,7 +12,8 @@ import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; @ConfigurationProperties("account-service") public class AccountServiceSettings { private HazelcastClientParams hazelcast; - private KafkaConsumerSettings kafka; + private KafkaConsumerSettings kafkaConsumer; + private KafkaProducerSettings kafkaProducer; public HazelcastClientParams getHazelcast() { return hazelcast; @@ -21,11 +23,19 @@ public class AccountServiceSettings { this.hazelcast = hazelcast; } - public KafkaConsumerSettings getKafka() { - return kafka; + public KafkaConsumerSettings getKafkaConsumer() { + return kafkaConsumer; } - public void setKafka(KafkaConsumerSettings kafka) { - this.kafka = kafka; + public void setKafkaConsumer(KafkaConsumerSettings kafkaConsumer) { + this.kafkaConsumer = kafkaConsumer; + } + + public KafkaProducerSettings getKafkaProducer() { + return kafkaProducer; + } + + public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { + this.kafkaProducer = kafkaProducer; } } diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java new file mode 100644 index 000000000..5a55e3809 --- /dev/null +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java @@ -0,0 +1,75 @@ +package ru.spcex.clearing.account.service; + +import org.apache.kafka.clients.consumer.Consumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.account.Account; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01Request; +import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01RequestPart; +import ru.spcex.clearing.platform.messaging.domain.cud.balance.AccountSdf01ToStatementRequestPart; +import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class AccountService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg accountMap; + private final KafkaSender kafkaSender; + + @Autowired + public AccountService(Consumer kafkaQueue, ImdgProvider imdgProvider, KafkaSender kafkaSender) { + super(kafkaQueue); + this.accountMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); + this.kafkaSender = kafkaSender; + } + + @Override + public void afterPropertiesSet() { + callback(AccountSdf01Request.class) + .setConsumer(this::accountNew) + .forDestination(Consts.ACCOUNT_NEW, callbacks::put); + init(); + } + + private void accountNew(BaseRequest userRequest) { + AccountSdf01Request req = userRequest.getRequestPayload(); + log.debug("AccountSdf01Request received"); + List accountToStatement = new ArrayList<>(); + for (AccountSdf01RequestPart accountReq : req.getAccounts()) { + Account account = new Account(); + account.setAccount(accountReq.getAccount()); + //fixme account.setCompany(); + accountMap.insert(account); + AccountSdf01ToStatementRequestPart responsePart = responsePart(accountReq.getSdf01Id()); + accountToStatement.add(responsePart); + } + sendStatementRequestBack(accountToStatement); + log.debug("successfully processed, grouping id={}, processed number={}", req.getGroupingSdf01Id(), accountToStatement.size()); + } + + private AccountSdf01ToStatementRequestPart responsePart(Long sdf01Id) { + AccountSdf01ToStatementRequestPart responsePart = new AccountSdf01ToStatementRequestPart(); + responsePart.setSdf01Id(sdf01Id); + responsePart.setErrorCode(null); + responsePart.setErrorText(null); + return responsePart; + } + + private void sendStatementRequestBack(List results) { + StatementRequest request = new StatementRequest(); + request.setAccountCreationResults(results); + kafkaSender.sendRequestToQueue(Consts.STATEMENT_PROCESS, request); + } +} diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ValidationConfig.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ValidationConfig.java index d8ec3a972..dcdd3693d 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ValidationConfig.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ValidationConfig.java @@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.sdf.SDf01; import ru.spcex.clearing.balance.validation.Sdf01ValidationRule; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -26,7 +27,9 @@ public class ValidationConfig { context.setValidatedObject(sDf01); BiConsumer> addImdg = (s, aClass) -> context.addImdg(s, imdgProvider.getImdg(s, aClass)); addImdg.accept(IMDGDistributedNames.Map_Account, Account.class); + addImdg.accept(IMDGDistributedNames.Map_Company, Company.class); return new ValidatorImpl<>(context, + Sdf01ValidationRule.CompanyPresent, Sdf01ValidationRule.AccountPresent, Sdf01ValidationRule.CurrencyCode, Sdf01ValidationRule.CurrentDateOnly, diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java index afc945838..4ef7a6482 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java @@ -10,35 +10,46 @@ import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.sdf.SDf01; +import ru.clearing.classes.statics.data.sdf.SDf02; import ru.clearing.classes.statics.data.statement.Statement; import ru.spcex.clearing.balance.errors.BalanceError; import ru.spcex.clearing.balance.validation.ValidationStored; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; -import ru.spcex.clearing.platform.messaging.domain.cud.account.AccountNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01Request; +import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01RequestPart; import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.enumeration.CurrencyCode; +import ru.spcex.platform.enumeration.InOutSDfType; +import ru.spcex.platform.enumeration.OperationStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.time.TimeUtil; import ru.spcex.platform.utils.validation.IValidator; -import java.util.Map; -import java.util.Optional; +import java.time.Instant; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.*; import java.util.function.Function; +import java.util.stream.Collectors; @Service public class StatementService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); + private final static DateTimeFormatter datFormatter = DateTimeFormatter.ofPattern("dd.MM.yy"); private final ImdgProvider imdgProvider; private final KafkaSender kafkaReqProducer; private final LoggingService errorLogger; private final Imdg sdf01Imdg; - private final Imdg companyImdg; - private final Imdg accountImdg; + private final Imdg sdf02Imdg; + private final Imdg accountBalanceImdg; private final Imdg statementImdg; private final Function sDf01Validator; @@ -48,9 +59,9 @@ public class StatementService extends QueueConsumer implements InitializingBean super(kafkaQueue); this.imdgProvider = imdgProvider; this.sdf01Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf01, SDf01.class); - this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); - this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class); + this.sdf02Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class);; this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); + this.accountBalanceImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class); this.kafkaReqProducer = kafkaReqProducer; this.errorLogger = errorLogger; this.sDf01Validator = sDf01Validator; @@ -60,46 +71,170 @@ public class StatementService extends QueueConsumer implements InitializingBean public void afterPropertiesSet() throws Exception { callback(StatementRequest.class) .setConsumer(this::process) - .forDestination(Consts.DESTINATION_SDF02_NEW, callbacks::put); + .forDestination(Consts.STATEMENT_PROCESS, callbacks::put); init(); } private void process(BaseRequest systemRequest) { - StatementRequest sdfInfo = systemRequest.getRequestPayload(); - SDf01 sdf01 = sdf01Imdg.getSingleObjectByID(sdfInfo.getSdf01Id()); - Company company = companyImdg.getSingleObjectByFieldValues(Map.of("tradingCode", sdf01.getDeal())); - if (company == null) { - errorLogger.logError("sdf01.id={}", new EnumMessage(BalanceError.CompanyNotFound), sdfInfo.getSdf01Id()); - return; - } - IValidator validator = sDf01Validator.apply(sdf01); - Optional error = validator.tillFirstError(); - if (BalanceError.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) { - kafkaReqProducer.sendRequestToQueue(Consts.ACCOUNT_NEW, createAccountRequest(sdf01.getAccount())); - log.info("account not found - send request for creation"); - return; - } - if (error.isPresent()) { - errorLogger.logError("sdf01.id={}", error.get(), sdf01.getId()); - return; - } - Statement statement = statementImdg.getSingleObjectByFieldValues(Map.of("account", sdf01.getAccount())); - - if (statement == null) { - createFlow(sdfInfo, validator.getStored(ValidationStored.Sdf01Account)); + StatementRequest statementRequest = systemRequest.getRequestPayload(); + Collection sdf01Group; + if (statementRequest.getAccountCreationResults().size() == 0) { + sdf01Group = sdf01Imdg.getCollectionObjectsByFieldValues(Map.of("generationId", statementRequest.getSdf01GroupId())); } else { -// updateFlow(statement); + sdf01Group = statementRequest.getAccountCreationResults() + .stream() + .filter(part -> part.getErrorCode() == null) //fixme эти случае должны попадать в ошибочный sdf02 + .map(part -> sdf01Imdg.getSingleObjectByID(part.getSdf01Id())) + .collect(Collectors.toList()); } + sdf01Group = sdf01Group + .stream() + .sorted(Comparator.comparing(SpcexObjectBase::getId)) + .collect(Collectors.toList()); + List accountRequests = new ArrayList<>(); + for (SDf01 sdf01 : sdf01Group) { + IValidator validator = sDf01Validator.apply(sdf01); + Optional error = validator.tillFirstError(); + Company company = validator.getStored(ValidationStored.Sdf01Company); + if (statementRequest.getAccountCreationResults().size() == 0 + && BalanceError.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) { + //на данном шаге company существует -> getId ok + //формируем пакетный запрос на добавление account + //ответ придет в этот же метод, process + accountRequests.add(createAccountRequestPart(sdf01.getId(), sdf01.getAccount(), company.getId())); + log.info("account {} for sdf01.id={} not found - send request for creation", sdf01.getAccount(), sdf01.getId()); + } else if (BalanceError.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) { + log.error("fatal error: resumed processing after generating accounts, but no account found for sdf01.id={}", sdf01.getId()); + continue; + } + if (error.isPresent()) { + errorLogger.logError("sdf01.id={}", error.get(), sdf01.getId()); + sdf02Imdg.insert(createErrorSdf02(sdf01, error.get())); + continue; + } + Statement statement = statementImdg.getSingleObjectByFieldValues(Map.of("account", sdf01.getAccount())); + if (statement == null) { + statement = createFlow(sdf01, + company, + validator.getStored(ValidationStored.Sdf01Account)); + } else { + updateFlow(statement, sdf01, + validator.getStored(ValidationStored.Sdf01Account)); + } + SDf02 sdf02New = createSuccessSdf02(sdf01); + sdf02Imdg.insert(sdf02New); + statement.setOutSDfId(sdf02New.getId()); + AccountBalance accountBalance = createSuccessAccountBalance(); + accountBalanceImdg.insert(accountBalance); + //fixme possible error from accountBalanceCreation -> other status + errorCode, errorText + statement.setStatus(OperationStatus.Executed.getKey()); + statementImdg.update(statement); + if (accountRequests.size() > 0) { + kafkaReqProducer.sendRequestToQueue(Consts.ACCOUNT_NEW, createAccountsRequest(sdf01.getGenerationId(), accountRequests)); + } + } } - private void createFlow(StatementRequest sdfInfo, Account storedObject) { - + private Statement createFlow(SDf01 sdf01, Company company, Account account) { + Statement statement = new Statement(); + statement.setAddresseeId(company.getId()); + statement.setSenderId(2L);// fixme справочник + statement.setCreated(Instant.now()); + statement.setClearingDate(TimeUtil.today()); + statement.setStatementTypeId(0L); //fixme справочник + statement.setAccountId(account.getId()); + statement.setAccount(0L); //fixme + statement.setInOutDirection(0L); //fixme + statement.setSettlementDate(TimeUtil.localDateToInstant(LocalDate.parse(sdf01.getDat(), datFormatter))); + statement.setAmount(null); //fixme sdf01.getRemainder() + statement.setCashMovementCurrencyCode(CurrencyCode.RUB.getKey()); + statement.setStatus(OperationStatus.Pending.getKey()); + statement.setInSDfId(sdf01.getId()); + statement.setInOutSDfType(InOutSDfType.type1.getKey()); + statementImdg.insert(statement); + return statement; } - private AccountNewRequest createAccountRequest(String account) { - AccountNewRequest req = new AccountNewRequest(); + private void updateFlow(Statement statement, SDf01 sdf01, Account account) { + statement.setUpdated(Instant.now()); + statement.setStatementTypeId(0L); //fixme справочник + statement.setAccountId(account.getId()); + statement.setAccount(0L); //fixme + statement.setInOutDirection(0L); //fixme + statement.setSettlementDate(TimeUtil.localDateToInstant(LocalDate.parse(sdf01.getDat(), datFormatter))); + statement.setAmount(null); //fixme sdf01.getRemainder() + statement.setCashMovementCurrencyCode(CurrencyCode.RUB.getKey()); + statementImdg.update(statement); + } + + private AccountSdf01RequestPart createAccountRequestPart(Long sdf01Id, String account, Long companyId) { + AccountSdf01RequestPart req = new AccountSdf01RequestPart(); req.setAccount(account); + req.setCompanyId(companyId); + req.setSdf01Id(sdf01Id); return req; } + + private AccountSdf01Request createAccountsRequest(Long sdf01GroupingId, List accountRequests) { + AccountSdf01Request r = new AccountSdf01Request(); + r.setGroupingSdf01Id(sdf01GroupingId); + r.setAccounts(accountRequests); + return r; + } + + private SDf02 createErrorSdf02(SDf01 sdf01, EnumMessage error) { + SDf02 sDf02 = new SDf02(); + sDf02.setCurr_code(sdf01.getCurr_code()); + sDf02.setAccount(sdf01.getAccount()); + sDf02.setRemainder(sdf01.getRemainder()); + sDf02.setDeal(sdf01.getDeal()); + sDf02.setAcc_code(sdf01.getAcc_code()); + sDf02.setDat(sdf01.getDat()); + sDf02.setMarket(sdf01.getMarket()); + sDf02.setAcc_name(sdf01.getAcc_name()); + sDf02.setAcc_type(sdf01.getAcc_type()); + sDf02.setSumengage(sdf01.getSumengage()); + sDf02.setSumunblock(sdf01.getSumunblock()); + sDf02.setFile_type(sdf01.getFile_type()); + sDf02.setInSDf01Id(sdf01.getId()); + String errorId = error.getSubject().getId().toString(); + sDf02.setResult(errorId.substring(errorId.length() - 3)); + return sDf02; + } + + private SDf02 createSuccessSdf02(SDf01 sdf01) { + SDf02 sDf02 = new SDf02(); + sDf02.setCurr_code(sdf01.getCurr_code()); + sDf02.setAccount(sdf01.getAccount()); + sDf02.setRemainder(sdf01.getRemainder()); + sDf02.setDeal(sdf01.getDeal()); + sDf02.setAcc_code(sdf01.getAcc_code()); + sDf02.setDat(sdf01.getDat()); + sDf02.setMarket(sdf01.getMarket()); + sDf02.setAcc_name(sdf01.getAcc_name()); + sDf02.setAcc_type(sdf01.getAcc_type()); + sDf02.setSumengage(sdf01.getSumengage()); + sDf02.setSumunblock(sdf01.getSumunblock()); + sDf02.setFile_type(sdf01.getFile_type()); + sDf02.setInSDf01Id(sdf01.getId()); + sDf02.setResult("OK!"); + return sDf02; + } + + private AccountBalance createSuccessAccountBalance() { + return new AccountBalance(); + } + + private static class AccountBalance extends SpcexObjectBase { + private String message = "AccountBalance"; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + } } diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/Sdf01ValidationRule.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/Sdf01ValidationRule.java index b5ed4842f..78ebb937d 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/Sdf01ValidationRule.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/Sdf01ValidationRule.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.balance.validation; import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.sdf.SDf01; import ru.spcex.clearing.balance.config.ImdgValidationContext; import ru.spcex.clearing.balance.errors.BalanceError; @@ -11,10 +12,24 @@ import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Map; import java.util.Optional; public enum Sdf01ValidationRule implements IValidationRule> { + CompanyPresent() { + @Override + public Optional validate(ImdgValidationContext context) { + SDf01 sdf01 = context.getValidatedObject(); + Imdg companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); + Company company = companyImdg.getSingleObjectByFieldValues(Map.of("tradingCode", sdf01.getDeal())); + if (company == null) { + return of( BalanceError.CompanyNotFound); + } + context.storeObject(ValidationStored.Sdf01Company, company); + return empty(); + } + }, AccountPresent() { @Override public Optional validate(ImdgValidationContext context) { @@ -44,7 +59,7 @@ public enum Sdf01ValidationRule implements IValidationRule validate(ImdgValidationContext context) { SDf01 sdf01 = context.getValidatedObject(); //fixme string format??? - if (!LocalDate.now().toString().equals(sdf01.getDat())) { + if (!LocalDate.now().equals(LocalDate.parse(sdf01.getDat(), datFormatter))) { return of(BalanceError.CurrentDateOnly); } return empty(); @@ -70,6 +85,8 @@ public enum Sdf01ValidationRule implements IValidationRule accounts; + + public List getAccounts() { + return accounts; + } + + public void setAccounts(List accounts) { + this.accounts = accounts; + } + + public Long getGroupingSdf01Id() { + return groupingSdf01Id; + } + + public void setGroupingSdf01Id(Long groupingSdf01Id) { + this.groupingSdf01Id = groupingSdf01Id; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/sdf01/AccountSdf01RequestPart.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/sdf01/AccountSdf01RequestPart.java new file mode 100644 index 000000000..a48429623 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/account/sdf01/AccountSdf01RequestPart.java @@ -0,0 +1,36 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class AccountSdf01RequestPart { + @JsonProperty + private Long sdf01Id; + @JsonProperty + private String account; + @JsonProperty + private Long companyId; + + public Long getSdf01Id() { + return sdf01Id; + } + + public void setSdf01Id(Long sdf01Id) { + this.sdf01Id = sdf01Id; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/AccountSdf01ToStatementRequestPart.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/AccountSdf01ToStatementRequestPart.java new file mode 100644 index 000000000..4921c9d2e --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/AccountSdf01ToStatementRequestPart.java @@ -0,0 +1,36 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.balance; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class AccountSdf01ToStatementRequestPart { + @JsonProperty + private Long sdf01Id; + @JsonProperty + private Long errorCode; + @JsonProperty + private String errorText; + + public Long getSdf01Id() { + return sdf01Id; + } + + public void setSdf01Id(Long sdf01Id) { + this.sdf01Id = sdf01Id; + } + + public Long getErrorCode() { + return errorCode; + } + + public void setErrorCode(Long errorCode) { + this.errorCode = errorCode; + } + + public String getErrorText() { + return errorText; + } + + public void setErrorText(String errorText) { + this.errorText = errorText; + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequest.java index d1a98147a..06193017e 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequest.java @@ -2,15 +2,40 @@ package ru.spcex.clearing.platform.messaging.domain.cud.balance; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.ArrayList; +import java.util.List; + public class StatementRequest { @JsonProperty - private Long sdf01Id; + private Long sdf01GroupId; + //------------------- + //from accountBalance creation + @JsonProperty + List accountCreationResults = new ArrayList<>(); + //from sDf02 creation - public Long getSdf01Id() { - return sdf01Id; +// public StatementRequestType getType() { +// if (errorCode != null || errorText != null || status != null) { +// return StatementRequestType.accountBalanceResponse; +// } else if (inOutSDfType != null) { +// return StatementRequestType.sdf02Response; +// } else return StatementRequestType.create; +// return type; +// } + + public Long getSdf01GroupId() { + return sdf01GroupId; } - public void setSdf01Id(Long sdf01Id) { - this.sdf01Id = sdf01Id; + public void setSdf01GroupId(Long sdf01GroupId) { + this.sdf01GroupId = sdf01GroupId; + } + + public List getAccountCreationResults() { + return accountCreationResults; + } + + public void setAccountCreationResults(List accountCreationResults) { + this.accountCreationResults = accountCreationResults; } } \ No newline at end of file diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequestType.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequestType.java new file mode 100644 index 000000000..02434916b --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequestType.java @@ -0,0 +1,6 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.balance; + +public enum StatementRequestType { + create, accountBalanceResponse, sdf02Response, + batch +} From 2e46a484ffe263c76e40fa4d916b9b36459548f4 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 28 Sep 2022 18:39:02 +0300 Subject: [PATCH 08/41] http://jira.mfd.msk:8088/browse/CLS-36 --- .../balance/service/Sdf02Service.java | 2 + clearing-parent/dbf-importer/pom.xml | 4 ++ .../dbf/importer/config/KafkaConfig.java | 38 +++++++++++++++++++ .../settings/ImportDBFServiceSettings.java | 10 +++++ .../dbf/importer/logic/stages/ImportToDB.java | 20 +++++++++- .../src/main/resources/application.properties | 10 ++++- .../domain/cud/balance/StatementRequest.java | 1 - 7 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/KafkaConfig.java diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf02Service.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf02Service.java index 1b873fde7..451a98c1c 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf02Service.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/Sdf02Service.java @@ -14,6 +14,8 @@ import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +//fixme remove +@Deprecated @Service public class Sdf02Service extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); diff --git a/clearing-parent/dbf-importer/pom.xml b/clearing-parent/dbf-importer/pom.xml index 9f8772d3e..d3d50fe59 100644 --- a/clearing-parent/dbf-importer/pom.xml +++ b/clearing-parent/dbf-importer/pom.xml @@ -62,6 +62,10 @@ ru.spcex.clearing classes + + ru.spcex.platform + platform-messaging + diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/KafkaConfig.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/KafkaConfig.java new file mode 100644 index 000000000..e3d6ae042 --- /dev/null +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/KafkaConfig.java @@ -0,0 +1,38 @@ +package ru.spcex.clearing.dbf.importer.config; + +import org.apache.kafka.clients.producer.Producer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings; +import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory; +import ru.spcex.clearing.platform.messaging.service.RequestInfo; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Configuration +public class KafkaConfig { + + @Autowired + @Bean + public Producer createProducer(ImportDBFServiceSettings settings) { + return KafkaProducerFactory.producer(settings.getKafkaProducer()); + } + + @Autowired + @Bean + public KafkaSender kafkaSender(Producer kafkaProducer, ImdgProvider imdgProvider) { + ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator(); + return KafkaSender + .setup() + .producer(kafkaProducer) + .idGenerator(imdgIdGenerator::nextId) + .imdgProvider(s -> { + Imdg imdg = imdgProvider.getImdg(s, RequestInfo.class); + return imdg::insert; + }) + .build(); + } +} diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/ImportDBFServiceSettings.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/ImportDBFServiceSettings.java index 788715794..d697ec445 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/ImportDBFServiceSettings.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/ImportDBFServiceSettings.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.dbf.importer.config.settings; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; +import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings; import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; @Component @@ -10,6 +11,7 @@ import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; @ConfigurationProperties("import-dbf-service") public class ImportDBFServiceSettings { private HazelcastClientParams hazelcast; + private KafkaProducerSettings kafkaProducer; public HazelcastClientParams getHazelcast() { return hazelcast; @@ -18,4 +20,12 @@ public class ImportDBFServiceSettings { public void setHazelcast(HazelcastClientParams hazelcast) { this.hazelcast = hazelcast; } + + public KafkaProducerSettings getKafkaProducer() { + return kafkaProducer; + } + + public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { + this.kafkaProducer = kafkaProducer; + } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java index fce0faa4b..03a98e92b 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java @@ -8,6 +8,9 @@ import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable; import ru.spcex.clearing.dbf.importer.logic.data.enums.StageResult; import ru.spcex.clearing.dbf.importer.logic.data.tables.AbstractTable; import ru.spcex.clearing.dbf.importer.properties.AProperties; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; import java.io.ByteArrayInputStream; @@ -24,12 +27,15 @@ public class ImportToDB extends Stage { private final AProperties properties; private final HazelcastService hazelcastService; private final Map mappingEnumTableObjectTable; + private final KafkaSender kafka; public ImportToDB(@Qualifier("dbfImporterProperties") AProperties properties, - HazelcastService hazelcastService, @Qualifier("mapOfTable") Map mappingEnumTableObjectTable) { + HazelcastService hazelcastService, @Qualifier("mapOfTable") Map mappingEnumTableObjectTable, + KafkaSender kafka) { this.properties = properties; this.hazelcastService = hazelcastService; this.mappingEnumTableObjectTable = mappingEnumTableObjectTable; + this.kafka = kafka; } @Override @@ -43,11 +49,15 @@ public class ImportToDB extends Stage { AbstractTable table = mappingEnumTableObjectTable.get(currTable); table.setHazelcastService(hazelcastService); table.setFilename(resultContainer.getDbfFile().getName()); - table.setFileId(hazelcastService.getImdgIdGenerator().nextId()); + Long fileId = hazelcastService.getImdgIdGenerator().nextId(); + table.setFileId(fileId); for (int i = 0; i < dbfReader.getRecordCount(); i++) { Object[] entity = dbfReader.nextRecord(); table.injectEntity(table.getEntity(entity)); } + if (ETable.DF_01.equals(currTable)) { + sendStatementRequest(fileId); + } } catch (IOException exception) { log.warn(exception.getMessage()); return StageResult.ERROR; @@ -56,4 +66,10 @@ public class ImportToDB extends Stage { return StageResult.OK; } + + private void sendStatementRequest(Long fileId) { + StatementRequest statementRequest = new StatementRequest(); + statementRequest.setSdf01GroupId(fileId); + kafka.sendRequestToQueue(Consts.STATEMENT_PROCESS, statementRequest); + } } diff --git a/clearing-parent/dbf-importer/src/main/resources/application.properties b/clearing-parent/dbf-importer/src/main/resources/application.properties index df400cde1..79ce0025c 100644 --- a/clearing-parent/dbf-importer/src/main/resources/application.properties +++ b/clearing-parent/dbf-importer/src/main/resources/application.properties @@ -10,4 +10,12 @@ dbf.out-dir=/opt/clearing/file/importer/loaded/ dbf.threads-count=10 import-dbf-service.hazelcast.cluster-members=127.0.0.1:5701 import-dbf-service.hazelcast.login=dev -import-dbf-service.hazelcast.password=dev-pass \ No newline at end of file +import-dbf-service.hazelcast.password=dev-pass + + +import-dbf-service.kafka-producer.bootstrap-servers=localhost:9092 +import-dbf-service.kafka-producer.acks=all +import-dbf-service.kafka-producer.retries=0 +import-dbf-service.kafka-producer.batch-size=16384 +import-dbf-service.kafka-producer.linger-ms=1 +import-dbf-service.kafka-producer.buffer-memory=33554432 \ No newline at end of file diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequest.java index 06193017e..e2477137a 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/StatementRequest.java @@ -12,7 +12,6 @@ public class StatementRequest { //from accountBalance creation @JsonProperty List accountCreationResults = new ArrayList<>(); - //from sDf02 creation // public StatementRequestType getType() { // if (errorCode != null || errorText != null || status != null) { From 15cad890c9b9dec70a84ebb3a45578374db3eacc Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 28 Sep 2022 18:49:27 +0300 Subject: [PATCH 09/41] http://jira.mfd.msk:8088/browse/CLS-36 --- .../dbf/importer/config/KafkaConfig.java | 33 +++++++++---------- .../dbf/importer/logic/stages/ImportToDB.java | 7 ++-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/KafkaConfig.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/KafkaConfig.java index e3d6ae042..86358d7c1 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/KafkaConfig.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/KafkaConfig.java @@ -12,27 +12,26 @@ import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.util.function.Supplier; + @Configuration public class KafkaConfig { @Autowired @Bean - public Producer createProducer(ImportDBFServiceSettings settings) { - return KafkaProducerFactory.producer(settings.getKafkaProducer()); - } - - @Autowired - @Bean - public KafkaSender kafkaSender(Producer kafkaProducer, ImdgProvider imdgProvider) { - ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator(); - return KafkaSender - .setup() - .producer(kafkaProducer) - .idGenerator(imdgIdGenerator::nextId) - .imdgProvider(s -> { - Imdg imdg = imdgProvider.getImdg(s, RequestInfo.class); - return imdg::insert; - }) - .build(); + public Supplier kafkaSender(ImportDBFServiceSettings settings, ImdgProvider imdgProvider) { + return () -> { + Producer kafkaProducer = KafkaProducerFactory.producer(settings.getKafkaProducer()); + ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator(); + return KafkaSender + .setup() + .producer(kafkaProducer) + .idGenerator(imdgIdGenerator::nextId) + .imdgProvider(s -> { + Imdg imdg = imdgProvider.getImdg(s, RequestInfo.class); + return imdg::insert; + }) + .build(); + }; } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java index 03a98e92b..709fd1a9e 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.util.Map; +import java.util.function.Supplier; /** * Заливка проверенных данных в базу @@ -27,11 +28,11 @@ public class ImportToDB extends Stage { private final AProperties properties; private final HazelcastService hazelcastService; private final Map mappingEnumTableObjectTable; - private final KafkaSender kafka; + private final Supplier kafka; public ImportToDB(@Qualifier("dbfImporterProperties") AProperties properties, HazelcastService hazelcastService, @Qualifier("mapOfTable") Map mappingEnumTableObjectTable, - KafkaSender kafka) { + Supplier kafka) { this.properties = properties; this.hazelcastService = hazelcastService; this.mappingEnumTableObjectTable = mappingEnumTableObjectTable; @@ -70,6 +71,6 @@ public class ImportToDB extends Stage { private void sendStatementRequest(Long fileId) { StatementRequest statementRequest = new StatementRequest(); statementRequest.setSdf01GroupId(fileId); - kafka.sendRequestToQueue(Consts.STATEMENT_PROCESS, statementRequest); + kafka.get().sendRequestToQueue(Consts.STATEMENT_PROCESS, statementRequest); } } From 66cbf4e6b218a0661c7845e23f87c8118f58c26e Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 28 Sep 2022 19:12:03 +0300 Subject: [PATCH 10/41] http://jira.mfd.msk:8088/browse/CLS-36 --- .../clearing/account/config/KafkaConfig.java | 3 +++ .../src/main/resources/application.properties | 22 +++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/KafkaConfig.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/KafkaConfig.java index f0a86b0e6..f1cac72b8 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/KafkaConfig.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/config/KafkaConfig.java @@ -3,8 +3,10 @@ package ru.spcex.clearing.account.config; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.producer.Producer; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; import ru.spcex.clearing.account.config.settings.AccountServiceSettings; import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory; @@ -18,6 +20,7 @@ import ru.spcex.platform.imdg.api.ImdgProvider; @Configuration public class KafkaConfig { @Autowired + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Bean public Consumer createConsumer(AccountServiceSettings settings) { return KafkaConsumerFactory.consumer(settings.getKafkaConsumer()); diff --git a/clearing-parent/account-service/src/main/resources/application.properties b/clearing-parent/account-service/src/main/resources/application.properties index f2d6fe4d8..d0d9c873b 100644 --- a/clearing-parent/account-service/src/main/resources/application.properties +++ b/clearing-parent/account-service/src/main/resources/application.properties @@ -2,10 +2,18 @@ spring.main.web-application-type=none account-service.hazelcast.cluster-members=127.0.0.1 account-service.hazelcast.login=dev account-service.hazelcast.password=dev-pass -account-service.kafka.bootstrap-servers=localhost:9092 -account-service.kafka.group-id=dev-group -account-service.kafka.enable-auto-commit=false -account-service.kafka.session-timeout-ms=30000 -account-service.kafka.auto-offset-reset=latest -account-service.kafka.linger-ms=1 -account-service.kafka.buffer-memory=33554432 \ No newline at end of file + +account-service.kafka-consumer.bootstrap-servers=localhost:9092 +account-service.kafka-consumer.group-id=dev-group-account-service +account-service.kafka-consumer.enable-auto-commit=true +account-service.kafka-consumer.session-timeout-ms=30000 +account-service.kafka-consumer.auto-offset-reset=latest +account-service.kafka-consumer.linger-ms=1 +account-service.kafka-consumer.buffer-memory=33554432 + +account-service.kafka-producer.bootstrap-servers=localhost:9092 +account-service.kafka-producer.acks=all +account-service.kafka-producer.retries=0 +account-service.kafka-producer.batch-size=16384 +account-service.kafka-producer.linger-ms=1 +account-service.kafka-producer.buffer-memory=33554432 \ No newline at end of file From 2d446f5239632c54915df65a68d52c15f79f0510 Mon Sep 17 00:00:00 2001 From: etreshenkov Date: Thu, 29 Sep 2022 19:20:55 +0300 Subject: [PATCH 11/41] some refactoring --- .../balance/service/StatementService.java | 13 ++++-- ...ation.java => DBFImporterApplication.java} | 6 +-- .../importer/config/DBFImporterConfig.java | 13 +++--- .../dbf/importer/config/settings/Common.java | 32 +++++++++++++ .../dbf/importer/config/settings/Cron.java | 14 ++++++ .../settings/ImportDBFServiceSettings.java | 27 +++++++++++ .../dbf/importer/config/settings/Store.java | 32 +++++++++++++ .../logic/stages/ChangeDirOfFileStage.java | 12 ++--- .../dbf/importer/logic/stages/ImportToDB.java | 13 +++--- .../logic/stages/LoadFileFromDisk.java | 11 +++-- .../importer/logic/stages/ValidateFields.java | 12 ++--- .../dbf/importer/properties/AProperties.java | 45 ------------------- .../importer/services/DBFImporterService.java | 2 +- .../dbf/importer/services/FileChecker.java | 10 ++--- .../src/main/resources/application.properties | 20 +++++---- .../imdg/businessobject/CompanyMapStore.java | 8 ++-- .../imdg/businessobject/RelationMapStore.java | 18 ++++---- .../clearing/imdg/config/PoolMapConfigs.java | 4 +- 18 files changed, 181 insertions(+), 111 deletions(-) rename clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/{DBFLoaderApplication.java => DBFImporterApplication.java} (66%) create mode 100644 clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Common.java create mode 100644 clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Cron.java create mode 100644 clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Store.java delete mode 100644 clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/properties/AProperties.java diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java index 4ef7a6482..69307b408 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java @@ -92,6 +92,7 @@ public class StatementService extends QueueConsumer implements InitializingBean .sorted(Comparator.comparing(SpcexObjectBase::getId)) .collect(Collectors.toList()); List accountRequests = new ArrayList<>(); + Long generationIdForGroup = imdgProvider.getImdgIdGenerator().nextId(); for (SDf01 sdf01 : sdf01Group) { IValidator validator = sDf01Validator.apply(sdf01); Optional error = validator.tillFirstError(); @@ -109,7 +110,7 @@ public class StatementService extends QueueConsumer implements InitializingBean } if (error.isPresent()) { errorLogger.logError("sdf01.id={}", error.get(), sdf01.getId()); - sdf02Imdg.insert(createErrorSdf02(sdf01, error.get())); + sdf02Imdg.insert(createErrorSdf02(sdf01, error.get(), generationIdForGroup)); continue; } Statement statement = statementImdg.getSingleObjectByFieldValues(Map.of("account", sdf01.getAccount())); @@ -121,7 +122,7 @@ public class StatementService extends QueueConsumer implements InitializingBean updateFlow(statement, sdf01, validator.getStored(ValidationStored.Sdf01Account)); } - SDf02 sdf02New = createSuccessSdf02(sdf01); + SDf02 sdf02New = createSuccessSdf02(sdf01, generationIdForGroup); sdf02Imdg.insert(sdf02New); statement.setOutSDfId(sdf02New.getId()); AccountBalance accountBalance = createSuccessAccountBalance(); @@ -183,7 +184,7 @@ public class StatementService extends QueueConsumer implements InitializingBean return r; } - private SDf02 createErrorSdf02(SDf01 sdf01, EnumMessage error) { + private SDf02 createErrorSdf02(SDf01 sdf01, EnumMessage error, Long generationIdForGroup) { SDf02 sDf02 = new SDf02(); sDf02.setCurr_code(sdf01.getCurr_code()); sDf02.setAccount(sdf01.getAccount()); @@ -200,10 +201,12 @@ public class StatementService extends QueueConsumer implements InitializingBean sDf02.setInSDf01Id(sdf01.getId()); String errorId = error.getSubject().getId().toString(); sDf02.setResult(errorId.substring(errorId.length() - 3)); + sDf02.setGenerationId(generationIdForGroup); + sDf02.setGenerationTime(Instant.now()); return sDf02; } - private SDf02 createSuccessSdf02(SDf01 sdf01) { + private SDf02 createSuccessSdf02(SDf01 sdf01, Long generationIdForGroup) { SDf02 sDf02 = new SDf02(); sDf02.setCurr_code(sdf01.getCurr_code()); sDf02.setAccount(sdf01.getAccount()); @@ -218,6 +221,8 @@ public class StatementService extends QueueConsumer implements InitializingBean sDf02.setSumunblock(sdf01.getSumunblock()); sDf02.setFile_type(sdf01.getFile_type()); sDf02.setInSDf01Id(sdf01.getId()); + sDf02.setGenerationId(generationIdForGroup); + sDf02.setGenerationTime(Instant.now()); sDf02.setResult("OK!"); return sDf02; } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/DBFLoaderApplication.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/DBFImporterApplication.java similarity index 66% rename from clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/DBFLoaderApplication.java rename to clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/DBFImporterApplication.java index c90405d5f..0036c8ffb 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/DBFLoaderApplication.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/DBFImporterApplication.java @@ -5,13 +5,13 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; @SpringBootApplication -public class DBFLoaderApplication { +public class DBFImporterApplication { public static void main(String[] args) { try { - SpringApplicationBuilder builder = new SpringApplicationBuilder(DBFLoaderApplication.class); + SpringApplicationBuilder builder = new SpringApplicationBuilder(DBFImporterApplication.class); builder.run(args); } catch (Exception e) { - LoggerFactory.getLogger(DBFLoaderApplication.class).error("DBF-Loader start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage()); + LoggerFactory.getLogger(DBFImporterApplication.class).error("DBF-Loader start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage()); System.exit(-1); } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/DBFImporterConfig.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/DBFImporterConfig.java index 5bdb8c60e..cfb331986 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/DBFImporterConfig.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/DBFImporterConfig.java @@ -1,16 +1,15 @@ package ru.spcex.clearing.dbf.importer.config; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings; import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable; import ru.spcex.clearing.dbf.importer.logic.data.tables.*; import ru.spcex.clearing.dbf.importer.logic.stages.*; -import ru.spcex.clearing.dbf.importer.properties.AProperties; import java.util.HashMap; import java.util.LinkedList; @@ -21,12 +20,12 @@ import java.util.Map; @EnableConfigurationProperties @ComponentScan(basePackages = {"ru.spcex.clearing.dbf.importer"}) public class DBFImporterConfig { - private final AProperties properties; + private final ImportDBFServiceSettings settings; private final ApplicationContext context; - public DBFImporterConfig(@Qualifier("dbfImporterProperties") AProperties properties, ApplicationContext context) { - this.properties = properties; + public DBFImporterConfig(ImportDBFServiceSettings settings, ApplicationContext context) { + this.settings = settings; this.context = context; } @@ -45,8 +44,8 @@ public class DBFImporterConfig { @Bean("executor") public ThreadPoolTaskExecutor executor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setMaxPoolSize(properties.getThreadsCount()); - executor.setCorePoolSize(properties.getThreadsCount()); + executor.setMaxPoolSize(settings.getCommon().getThreadsCount()); + executor.setCorePoolSize(settings.getCommon().getThreadsCount()); executor.setThreadNamePrefix("dbf-importer-thread-"); executor.setWaitForTasksToCompleteOnShutdown(true); executor.setAwaitTerminationSeconds(300); diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Common.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Common.java new file mode 100644 index 000000000..842262fe9 --- /dev/null +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Common.java @@ -0,0 +1,32 @@ +package ru.spcex.clearing.dbf.importer.config.settings; + +public class Common { + + private String encodingSource; + private int insertBatchSize; + private int threadsCount; + + public String getEncodingSource() { + return encodingSource; + } + + public void setEncodingSource(String encodingSource) { + this.encodingSource = encodingSource; + } + + public int getInsertBatchSize() { + return insertBatchSize; + } + + public void setInsertBatchSize(int insertBatchSize) { + this.insertBatchSize = insertBatchSize; + } + + public int getThreadsCount() { + return threadsCount; + } + + public void setThreadsCount(int threadsCount) { + this.threadsCount = threadsCount; + } +} diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Cron.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Cron.java new file mode 100644 index 000000000..ca25f1dd6 --- /dev/null +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Cron.java @@ -0,0 +1,14 @@ +package ru.spcex.clearing.dbf.importer.config.settings; + +public class Cron { + + private String checkSrcDirCron; + + public String getCheckSrcDirCron() { + return checkSrcDirCron; + } + + public void setCheckSrcDirCron(String checkSrcDirCron) { + this.checkSrcDirCron = checkSrcDirCron; + } +} diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/ImportDBFServiceSettings.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/ImportDBFServiceSettings.java index d697ec445..8c4bd1fe2 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/ImportDBFServiceSettings.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/ImportDBFServiceSettings.java @@ -12,6 +12,9 @@ import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; public class ImportDBFServiceSettings { private HazelcastClientParams hazelcast; private KafkaProducerSettings kafkaProducer; + private Common common; + private Store store; + private Cron cron; public HazelcastClientParams getHazelcast() { return hazelcast; @@ -28,4 +31,28 @@ public class ImportDBFServiceSettings { public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { this.kafkaProducer = kafkaProducer; } + + public Common getCommon() { + return common; + } + + public void setCommon(Common common) { + this.common = common; + } + + public Store getStore() { + return store; + } + + public void setStore(Store store) { + this.store = store; + } + + public Cron getCron() { + return cron; + } + + public void setCron(Cron cron) { + this.cron = cron; + } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Store.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Store.java new file mode 100644 index 000000000..c4d563268 --- /dev/null +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Store.java @@ -0,0 +1,32 @@ +package ru.spcex.clearing.dbf.importer.config.settings; + +public class Store { + + private String srcDir; + private String outDir; + private boolean deleteSrcFiles = true; + + public String getSrcDir() { + return srcDir; + } + + public void setSrcDir(String srcDir) { + this.srcDir = srcDir; + } + + public String getOutDir() { + return outDir; + } + + public void setOutDir(String outDir) { + this.outDir = outDir; + } + + public boolean isDeleteSrcFiles() { + return deleteSrcFiles; + } + + public void setDeleteSrcFiles(boolean deleteSrcFiles) { + this.deleteSrcFiles = deleteSrcFiles; + } +} diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ChangeDirOfFileStage.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ChangeDirOfFileStage.java index 96bc33fbb..6c30f8b30 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ChangeDirOfFileStage.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ChangeDirOfFileStage.java @@ -2,9 +2,9 @@ package ru.spcex.clearing.dbf.importer.logic.stages; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings; import ru.spcex.clearing.dbf.importer.logic.data.ResultContainer; import ru.spcex.clearing.dbf.importer.logic.data.enums.StageResult; -import ru.spcex.clearing.dbf.importer.properties.AProperties; import ru.spcex.platform.utils.time.TimeUtil; import java.io.File; @@ -20,18 +20,18 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; public class ChangeDirOfFileStage extends Stage { private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy.MM.dd HH.mm.ss"); - private final AProperties properties; + private final ImportDBFServiceSettings settings; @Autowired - public ChangeDirOfFileStage(AProperties properties) { - this.properties = properties; + public ChangeDirOfFileStage(ImportDBFServiceSettings settings) { + this.settings = settings; } @Override public StageResult process(ResultContainer resultContainer) { - File srcDir = new File(properties.getSrcDir()); - File outDir = new File(properties.getOutDir()); + File srcDir = new File(settings.getStore().getSrcDir()); + File outDir = new File(settings.getStore().getOutDir()); File dbfFile = resultContainer.getDbfFile(); if (!srcDir.exists()) { diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java index 709fd1a9e..b3a3202ff 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ImportToDB.java @@ -3,11 +3,11 @@ package ru.spcex.clearing.dbf.importer.logic.stages; import com.linuxense.javadbf.DBFReader; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; +import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings; import ru.spcex.clearing.dbf.importer.logic.data.ResultContainer; import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable; import ru.spcex.clearing.dbf.importer.logic.data.enums.StageResult; import ru.spcex.clearing.dbf.importer.logic.data.tables.AbstractTable; -import ru.spcex.clearing.dbf.importer.properties.AProperties; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; @@ -25,15 +25,16 @@ import java.util.function.Supplier; */ @Component public class ImportToDB extends Stage { - private final AProperties properties; + private final ImportDBFServiceSettings settings; private final HazelcastService hazelcastService; private final Map mappingEnumTableObjectTable; private final Supplier kafka; - public ImportToDB(@Qualifier("dbfImporterProperties") AProperties properties, - HazelcastService hazelcastService, @Qualifier("mapOfTable") Map mappingEnumTableObjectTable, + public ImportToDB(ImportDBFServiceSettings settings, + HazelcastService hazelcastService, + @Qualifier("mapOfTable") Map mappingEnumTableObjectTable, Supplier kafka) { - this.properties = properties; + this.settings = settings; this.hazelcastService = hazelcastService; this.mappingEnumTableObjectTable = mappingEnumTableObjectTable; this.kafka = kafka; @@ -43,7 +44,7 @@ public class ImportToDB extends Stage { public StageResult process(ResultContainer resultContainer) { ETable currTable = resultContainer.getDbfTable(); byte[] source = resultContainer.getDbfSource(); - Charset sourceCharset = Charset.forName(properties.getDbfEncoding()); + Charset sourceCharset = Charset.forName(settings.getCommon().getEncodingSource()); try (InputStream is = new ByteArrayInputStream(source); DBFReader dbfReader = new DBFReader(is, sourceCharset)) { diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/LoadFileFromDisk.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/LoadFileFromDisk.java index 6453196e8..e97840025 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/LoadFileFromDisk.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/LoadFileFromDisk.java @@ -1,10 +1,9 @@ package ru.spcex.clearing.dbf.importer.logic.stages; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; +import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings; import ru.spcex.clearing.dbf.importer.logic.data.ResultContainer; import ru.spcex.clearing.dbf.importer.logic.data.enums.StageResult; -import ru.spcex.clearing.dbf.importer.properties.AProperties; import java.io.File; import java.io.IOException; @@ -15,10 +14,10 @@ import java.util.UUID; @Component public class LoadFileFromDisk extends Stage { - private final AProperties properties; + private final ImportDBFServiceSettings settings; - public LoadFileFromDisk(@Qualifier("dbfImporterProperties") AProperties properties) { - this.properties = properties; + public LoadFileFromDisk(ImportDBFServiceSettings settings) { + this.settings = settings; } @Override @@ -32,7 +31,7 @@ public class LoadFileFromDisk extends Stage { log.debug("uuid {}. Read all bytes from source file {}", taskUuid, resultContainer.getDbfFile().getName()); fileBytes = Files.readAllBytes(Paths.get(dbfFile.getAbsolutePath())); if (fileBytes.length == 0) throw new IOException("Empty file"); - if (properties.isDeleteSrcFiles()) Files.delete(dbfFile.toPath()); + if (settings.getStore().isDeleteSrcFiles()) Files.delete(dbfFile.toPath()); } catch (IOException e) { log.error(String.format("uuid %s. Can't read file %s", taskUuid, resultContainer.getDbfFile().getName()), e); return StageResult.ERROR; diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ValidateFields.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ValidateFields.java index eb0aa7026..217206ccd 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ValidateFields.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ValidateFields.java @@ -2,10 +2,10 @@ package ru.spcex.clearing.dbf.importer.logic.stages; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; +import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings; import ru.spcex.clearing.dbf.importer.exceptions.ConfigException; import ru.spcex.clearing.dbf.importer.logic.data.ResultContainer; import ru.spcex.clearing.dbf.importer.logic.data.enums.StageResult; -import ru.spcex.clearing.dbf.importer.properties.AProperties; import java.nio.charset.Charset; @@ -14,11 +14,11 @@ import java.nio.charset.Charset; */ @Component public class ValidateFields extends Stage implements InitializingBean { - private final AProperties properties; + private final ImportDBFServiceSettings settings; private Charset dbfCharset; - public ValidateFields(AProperties properties) { - this.properties = properties; + public ValidateFields(ImportDBFServiceSettings settings) { + this.settings = settings; } @Override @@ -36,9 +36,9 @@ public class ValidateFields extends Stage implements InitializingBean { private void initDBFCharset() { try { - dbfCharset = Charset.forName(properties.getDbfEncoding()); + dbfCharset = Charset.forName(settings.getCommon().getEncodingSource()); } catch (Exception e) { - throw new ConfigException("Unknown encoding from properties: " + properties.getDbfEncoding(), e); + throw new ConfigException("Unknown encoding from properties: " + settings.getCommon().getEncodingSource(), e); } } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/properties/AProperties.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/properties/AProperties.java deleted file mode 100644 index bc7d774e7..000000000 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/properties/AProperties.java +++ /dev/null @@ -1,45 +0,0 @@ -package ru.spcex.clearing.dbf.importer.properties; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -@Component("dbfImporterProperties") -public class AProperties { - - @Value("${dbf.src-dir}") - private String srcDir; - @Value("${dbf.out-dir}") - private String outDir; - @Value("${dbf.delete-src-files}") - private boolean deleteSrcFiles = true; - @Value("${dbf.encoding-source}") - private String dbfEncoding; - @Value("${dbf.insert-batch-size}") - private int insertBatchSize; - @Value("${dbf.threads-count}") - private int threadsCount; - - public String getOutDir() { - return outDir; - } - - public String getSrcDir() { - return srcDir; - } - - public boolean isDeleteSrcFiles() { - return deleteSrcFiles; - } - - public String getDbfEncoding() { - return dbfEncoding; - } - - public int getInsertBatchSize() { - return insertBatchSize; - } - - public int getThreadsCount() { - return threadsCount; - } -} diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/services/DBFImporterService.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/services/DBFImporterService.java index 92ab1e2d9..cc6bae1a1 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/services/DBFImporterService.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/services/DBFImporterService.java @@ -28,7 +28,7 @@ public class DBFImporterService { this.processor = processor; } - @Scheduled(cron = "${dbf.check-src-dir-cron}") + @Scheduled(cron = "${import-dbf-service.scheduler.check-src-dir-cron}") public void run() { Map> newFiles = fileChecker.checkNewFiles(); for (Map.Entry> newFilesEntry : newFiles.entrySet()) { diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/services/FileChecker.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/services/FileChecker.java index a468e4d80..785523c3e 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/services/FileChecker.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/services/FileChecker.java @@ -1,24 +1,24 @@ package ru.spcex.clearing.dbf.importer.services; import org.springframework.stereotype.Service; +import ru.spcex.clearing.dbf.importer.config.settings.ImportDBFServiceSettings; import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable; -import ru.spcex.clearing.dbf.importer.properties.AProperties; import java.io.File; import java.util.*; @Service("fileChecker") public class FileChecker { - private final AProperties properties; + private final ImportDBFServiceSettings settings; - public FileChecker(AProperties properties) { - this.properties = properties; + public FileChecker(ImportDBFServiceSettings settings) { + this.settings = settings; } public Map> checkNewFiles() { Map> newFiles = new EnumMap<>(ETable.class); - String srcDir = properties.getSrcDir(); + String srcDir = settings.getStore().getSrcDir(); List dbfFiles = lsDBF(srcDir); if (dbfFiles.isEmpty()) return newFiles; diff --git a/clearing-parent/dbf-importer/src/main/resources/application.properties b/clearing-parent/dbf-importer/src/main/resources/application.properties index 79ce0025c..edfc4a166 100644 --- a/clearing-parent/dbf-importer/src/main/resources/application.properties +++ b/clearing-parent/dbf-importer/src/main/resources/application.properties @@ -1,14 +1,18 @@ server.port=8080 server.servlet.context-path=/importer spring.main.web-application-type=servlet -dbf.check-src-dir-cron=* * * * 1 ? -dbf.encoding-source=cp866 -dbf.insert-batch-size=100 -dbf.delete-src-files=false -dbf.src-dir=/opt/clearing/file/importer/ -dbf.out-dir=/opt/clearing/file/importer/loaded/ -dbf.threads-count=10 -import-dbf-service.hazelcast.cluster-members=127.0.0.1:5701 + +import-dbf-service.scheduler.check-src-dir-cron=* * * * 1 ? + +import-dbf-service.store.delete-src-files=false +import-dbf-service.store.src-dir=/opt/clearing/file/importer/ +import-dbf-service.store.out-dir=/opt/clearing/file/importer/loaded/ + +import-dbf-service.common.encoding-source=cp866 +import-dbf-service.common.insert-batch-size=100 +import-dbf-service.common.threads-count=10 + +import-dbf-service.hazelcast.cluster-members=10.200.200.181:5071 import-dbf-service.hazelcast.login=dev import-dbf-service.hazelcast.password=dev-pass diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java index 3d465867a..62ed7e51e 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java @@ -47,14 +47,16 @@ public class CompanyMapStore extends BusinessObjectMapStore { return namedParameterJdbcTemplate.query("select * from " + getTableName() + " where id in (:ids)", paramMap, (resultSet, i) -> { Company company = new Company(); - fillBusinessObjectFields(company, resultSet); + company.setId(resultSet.getObject("ID", Long.class)); + company.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); + company.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); company.setTradingCode(resultSet.getObject("TRADING_CODE", String.class)); company.setClearingCode(resultSet.getObject("CLEARING_CODE", String.class)); company.setRegistrationCode(resultSet.getObject("REGISTRATION_CODE", String.class)); company.setWorkflowStatus(resultSet.getObject("WORKFLOW_STATUS", String.class)); company.setShortName(resultSet.getObject("SHORT_NAME", String.class)); company.setFullName(resultSet.getObject("FULL_NAME", String.class)); - company.setProfile(getCompanyInfo(company.getId())); +// company.setProfile(getCompanyInfo(company.getId())); return company; }); } @@ -89,7 +91,7 @@ public class CompanyMapStore extends BusinessObjectMapStore { } } batchInsertUpdate(insertStatement, batchArgs); - batchInsertUpdate(insertCompanyInfoStatement, batchCompanyInfoArgs); +// batchInsertUpdate(insertCompanyInfoStatement, batchCompanyInfoArgs); } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java index 2a58c9f55..75a5e9c9c 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java @@ -30,7 +30,7 @@ public class RelationMapStore extends TemplateMapStore { @Override public String[] getFields() { return new String[]{ - "ID", "CREATED_AT", "UPDATED_AT", "CONSUMER_ID", "SUPPLIER_ID", "SERVICE_STATUS", "SERVICE", "SERVICE_PRODUCT", "COMMENT" + "ID", "CREATED_AT", "UPDATED_AT", "CONSUMER_ID", "SUPPLIER_ID", "SERVICE_STATUS", "SERVICE", "SERVICE_PRODUCT", "COMMENT" }; } @@ -38,14 +38,14 @@ public class RelationMapStore extends TemplateMapStore { public Relation objectReader(ResultSet resultSet) throws SQLException { Relation object = new Relation(); object.setId(resultSet.getObject("ID", Long.class)); - object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); - object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); - object.setConsumerId(resultSet.getObject("CONSUMER_ID", Long.class)); - object.setSupplierId(resultSet.getObject("SUPPLIER_ID", Long.class)); - object.setServiceStatus(resultSet.getObject("SERVICE_STATUS", String.class)); - object.setService(resultSet.getObject("SERVICE", Long.class)); - object.setServiceProduct(resultSet.getObject("SERVICE_PRODUCT", Long.class)); - object.setComment(resultSet.getObject("COMMENT", String.class)); + object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); + object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); + object.setConsumerId(resultSet.getObject("CONSUMER_ID", Long.class)); + object.setSupplierId(resultSet.getObject("SUPPLIER_ID", Long.class)); + object.setServiceStatus(resultSet.getObject("SERVICE_STATUS", String.class)); + object.setService(resultSet.getObject("SERVICE", Long.class)); + object.setServiceProduct(resultSet.getObject("SERVICE_PRODUCT", Long.class)); + object.setComment(resultSet.getObject("COMMENT", String.class)); return object; } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java index e98acf225..8b563b73c 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java @@ -211,8 +211,8 @@ public class PoolMapConfigs { private CompanyMapStore companyMapStore; public MapConfig map_Company() { - return makeDefaultMapConfig(IMDGDistributedNames.Map_Company, companyMapStore) - .addMapIndexConfig(makeMapIndexConfig("companyId")); + return makeDefaultMapConfig(IMDGDistributedNames.Map_Company, companyMapStore); +// .addMapIndexConfig(makeMapIndexConfig("companyId")); } // @Autowired From ee92e1198625e94f365ad16de208e6876555cd0d Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 28 Sep 2022 06:55:50 +0300 Subject: [PATCH 12/41] some exporter refactoring --- .../src/main/resources/application.properties | 2 +- .../src/main/resources/application.properties | 2 +- .../src/main/resources/application.properties | 2 +- ...ontroller.java => ExporterController.java} | 22 ++++--------------- .../dbf/exporter/logic/data/IFilter.java | 8 ------- .../exporter/logic/data/ResultContainer.java | 12 +--------- .../logic/stages/ExportFromHazelcast.java | 3 --- .../exporter/logic/stages/PrepareDBFFile.java | 4 ++-- .../exporter/services/DBFExportService.java | 11 +++------- .../src/main/resources/application.properties | 2 +- .../controller/ImporterController.java | 7 ------ .../src/main/resources/application.properties | 2 +- .../src/main/resources/application.properties | 2 +- 13 files changed, 16 insertions(+), 63 deletions(-) rename clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/{DefaultController.java => ExporterController.java} (57%) delete mode 100644 clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/IFilter.java diff --git a/clearing-parent/account-service/src/main/resources/application.properties b/clearing-parent/account-service/src/main/resources/application.properties index d0d9c873b..5857cfeb4 100644 --- a/clearing-parent/account-service/src/main/resources/application.properties +++ b/clearing-parent/account-service/src/main/resources/application.properties @@ -1,5 +1,5 @@ spring.main.web-application-type=none -account-service.hazelcast.cluster-members=127.0.0.1 +account-service.hazelcast.cluster-members=127.0.0.1:5071 account-service.hazelcast.login=dev account-service.hazelcast.password=dev-pass diff --git a/clearing-parent/balance-service/src/main/resources/application.properties b/clearing-parent/balance-service/src/main/resources/application.properties index 509e8cd92..d7ca974d0 100644 --- a/clearing-parent/balance-service/src/main/resources/application.properties +++ b/clearing-parent/balance-service/src/main/resources/application.properties @@ -1,5 +1,5 @@ spring.main.web-application-type=none -balance-service.hazelcast.cluster-members=127.0.0.1 +balance-service.hazelcast.cluster-members=127.0.0.1:5071 balance-service.hazelcast.login=dev balance-service.hazelcast.password=dev-pass diff --git a/clearing-parent/company-service/src/main/resources/application.properties b/clearing-parent/company-service/src/main/resources/application.properties index 2d6a2cfe0..cf9021f82 100644 --- a/clearing-parent/company-service/src/main/resources/application.properties +++ b/clearing-parent/company-service/src/main/resources/application.properties @@ -1,5 +1,5 @@ spring.main.web-application-type=none -company-service.hazelcast.cluster-members=127.0.0.1 +company-service.hazelcast.cluster-members=127.0.0.1:5071 company-service.hazelcast.login=dev company-service.hazelcast.password=dev-pass company-service.kafka.bootstrap-servers=localhost:9092 diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/DefaultController.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/ExporterController.java similarity index 57% rename from clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/DefaultController.java rename to clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/ExporterController.java index 0cd525aa0..a82bd0f32 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/DefaultController.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/ExporterController.java @@ -10,37 +10,23 @@ 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.dbf.exporter.logic.data.IFilter; -import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table; import ru.spcex.clearing.dbf.exporter.services.DBFExportService; -import java.util.EnumMap; -import java.util.Map; - @Controller("/") -public class DefaultController implements InitializingBean { +public class ExporterController implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final DBFExportService dbfExportService; - public DefaultController(@Qualifier("dbfExportService") DBFExportService dbfExportService) { + public ExporterController(@Qualifier("dbfExportService") DBFExportService dbfExportService) { this.dbfExportService = dbfExportService; } - @RequestMapping(method = RequestMethod.GET, path = "/test", produces = MediaType.TEXT_PLAIN_VALUE) - @ResponseBody - public String processGet() { - log.info("Call test method for exporter controller"); - return "exporter controller test method"; - } - @RequestMapping(method = RequestMethod.GET, path = "/export", produces = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public String exportTables() { log.info("Call export method for exporter controller"); - Map tablesForExport = new EnumMap<>(Table.class); - for (Table table : Table.values()) tablesForExport.put(table, null); - dbfExportService.run(tablesForExport); - return "export done, see log"; + dbfExportService.run(); + return "export done"; } @Override diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/IFilter.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/IFilter.java deleted file mode 100644 index 56c45b249..000000000 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/IFilter.java +++ /dev/null @@ -1,8 +0,0 @@ -package ru.spcex.clearing.dbf.exporter.logic.data; - -/** - * Фильтр записей для экспорта - */ -public interface IFilter { - -} diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java index 9513b0c4f..507a379e6 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java @@ -11,15 +11,13 @@ import java.util.UUID; public class ResultContainer { private UUID uuid; private Table tableForExport; - private IFilter filter; private File fileForExport; protected ResultContainer() {} - public static ResultContainer createNewTask(Table tableForExport, IFilter filter) { + public static ResultContainer createNewTask(Table tableForExport) { ResultContainer container = new ResultContainer(); container.tableForExport = tableForExport; - container.filter = filter; container.uuid = UUID.randomUUID(); return container; } @@ -32,14 +30,6 @@ public class ResultContainer { this.tableForExport = tableForExport; } - public IFilter getFilter() { - return filter; - } - - public void setFilter(IFilter filter) { - this.filter = filter; - } - public File getFileForExport() { return fileForExport; } diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java index 5ee1f3e07..01be79565 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java @@ -7,7 +7,6 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.sdf.*; import ru.spcex.clearing.dbf.exporter.exceptions.ConfigException; -import ru.spcex.clearing.dbf.exporter.logic.data.IFilter; import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer; import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult; import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table; @@ -63,8 +62,6 @@ public class ExportFromHazelcast extends Stage implements InitializingBean { Objects.requireNonNull(resultContainer.getFileForExport()); Table table = resultContainer.getTableForExport(); - IFilter filter = resultContainer.getFilter(); - Imdg map = imdgProvider.getImdg(table.getHazelcastMapName(), table.getEntityClass()); File dbfFile = resultContainer.getFileForExport(); boolean writeOk = false; diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java index b4dcea1f2..a1a099489 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java @@ -24,8 +24,8 @@ import java.util.Objects; public class PrepareDBFFile extends Stage implements InitializingBean { private static final String SECTION = "U"; private static final String CODE_OF_MEMBER = null; - private static DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm"); - private static DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd"); + private static final DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm"); + private static final DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd"); private final AProperties properties; private String outDir; diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/DBFExportService.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/DBFExportService.java index fd1bc1a8f..51c0eb6d7 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/DBFExportService.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/DBFExportService.java @@ -3,13 +3,10 @@ package ru.spcex.clearing.dbf.exporter.services; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; -import ru.spcex.clearing.dbf.exporter.logic.data.IFilter; import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer; import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table; import ru.spcex.clearing.dbf.exporter.logic.stages.Processor; -import java.util.Map; - @Service("dbfExportService") public class DBFExportService { private final ThreadPoolTaskExecutor executor; @@ -21,11 +18,9 @@ public class DBFExportService { this.processor = processor; } - public void run(Map tablesForExport) { - for (Map.Entry tableForExport : tablesForExport.entrySet()) { - Table table = tableForExport.getKey(); - IFilter filter = tableForExport.getValue(); - executor.submit(() -> processor.process(ResultContainer.createNewTask(table, filter))); + public void run() { + for (Table tableForExport : Table.values()) { + executor.submit(() -> processor.process(ResultContainer.createNewTask(tableForExport))); } } diff --git a/clearing-parent/dbf-exporter/src/main/resources/application.properties b/clearing-parent/dbf-exporter/src/main/resources/application.properties index 01e541e56..0a57267ef 100644 --- a/clearing-parent/dbf-exporter/src/main/resources/application.properties +++ b/clearing-parent/dbf-exporter/src/main/resources/application.properties @@ -2,7 +2,7 @@ server.port=8080 server.servlet.context-path=/exporter spring.main.web-application-type=servlet -hazelcast.cluster-members=127.0.0.1:5701 +hazelcast.cluster-members=127.0.0.1:5071 hazelcast.login=dev hazelcast.password=dev-pass diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/controller/ImporterController.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/controller/ImporterController.java index 5dcfe1a97..faccf5252 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/controller/ImporterController.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/controller/ImporterController.java @@ -21,13 +21,6 @@ public class ImporterController implements InitializingBean { this.importerService = importerService; } - @RequestMapping(method = RequestMethod.GET, path = "/test", produces = MediaType.TEXT_PLAIN_VALUE) - @ResponseBody - public String processGet() { - log.info("Call test method for importer controller"); - return "importer controller test method"; - } - @RequestMapping(method = RequestMethod.GET, path = "/import", produces = MediaType.TEXT_PLAIN_VALUE) @ResponseBody public String checkFolder() { diff --git a/clearing-parent/securities-service/src/main/resources/application.properties b/clearing-parent/securities-service/src/main/resources/application.properties index 65e23fde1..80153f863 100644 --- a/clearing-parent/securities-service/src/main/resources/application.properties +++ b/clearing-parent/securities-service/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.main.web-application-type=none -securities-service.hazelcast.cluster-members=127.0.0.1 +securities-service.hazelcast.cluster-members=127.0.0.1:5071 securities-service.hazelcast.login=dev securities-service.hazelcast.password=dev-pass diff --git a/clearing-parent/utility-service/src/main/resources/application.properties b/clearing-parent/utility-service/src/main/resources/application.properties index aab233b1f..2b0952cfc 100644 --- a/clearing-parent/utility-service/src/main/resources/application.properties +++ b/clearing-parent/utility-service/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.main.web-application-type=none -utility-service.hazelcast.cluster-members=127.0.0.1 +utility-service.hazelcast.cluster-members=127.0.0.1:5071 utility-service.hazelcast.login=dev utility-service.hazelcast.password=dev-pass From f4100e394d2f41bd473edad5f955bee66ed76127 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 30 Sep 2022 12:30:03 +0300 Subject: [PATCH 13/41] add consumer to export service --- clearing-parent/dbf-exporter/pom.xml | 4 + .../exporter/config/DBFExporterConfig.java | 28 +++---- .../dbf/exporter/config/KafkaConfig.java | 21 ++++++ .../dbf/exporter/config/settings/Common.java | 32 ++++++++ .../dbf/exporter/config/settings/Cron.java | 14 ++++ .../settings/ExportDBFServiceSettings.java | 58 +++++++++++++++ .../dbf/exporter/config/settings/Store.java | 14 ++++ .../logic/stages/ExportFromHazelcast.java | 12 +-- .../exporter/logic/stages/PrepareDBFFile.java | 11 ++- .../dbf/exporter/properties/AProperties.java | 74 ------------------- .../dbf/exporter/services/CommandService.java | 33 +++++++++ .../src/main/resources/application.properties | 19 +++-- .../cud/balance/ExportToFileRequest.java | 26 +++++++ 13 files changed, 236 insertions(+), 110 deletions(-) create mode 100644 clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/KafkaConfig.java create mode 100644 clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Common.java create mode 100644 clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Cron.java create mode 100644 clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/ExportDBFServiceSettings.java create mode 100644 clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Store.java delete mode 100644 clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/properties/AProperties.java create mode 100644 clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/ExportToFileRequest.java diff --git a/clearing-parent/dbf-exporter/pom.xml b/clearing-parent/dbf-exporter/pom.xml index 5fd93f86d..fc2108169 100644 --- a/clearing-parent/dbf-exporter/pom.xml +++ b/clearing-parent/dbf-exporter/pom.xml @@ -41,6 +41,10 @@ ru.spcex.platform platform-imdg-api-hazelcast-impl + + ru.spcex.platform + platform-messaging + ru.spcex.clearing classes diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java index ba9acb1ef..10261ad81 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java @@ -7,10 +7,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings; import ru.spcex.clearing.dbf.exporter.logic.stages.ExportFromHazelcast; import ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile; import ru.spcex.clearing.dbf.exporter.logic.stages.Stage; -import ru.spcex.clearing.dbf.exporter.properties.AProperties; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; @@ -22,13 +22,6 @@ import java.util.List; @EnableConfigurationProperties @ComponentScan(basePackages = {"ru.spcex.clearing.dbf.exporter"}) public class DBFExporterConfig { - private final AProperties properties; - private final ApplicationContext context; - - public DBFExporterConfig(@Qualifier("dbfExporterProperties") AProperties properties, ApplicationContext context) { - this.properties = properties; - this.context = context; - } @Bean("taskExecutorHazelcastClientInitializer") public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() { @@ -43,17 +36,16 @@ public class DBFExporterConfig { @Bean("imdgProvider") public ImdgProvider imdgProvider(@Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer, @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter, - AProperties properties) { + ExportDBFServiceSettings settings) { HazelcastClientParams params = new HazelcastClientParams(); - params.setClusterMembers(properties.getHazelcastClusterMembers()); - params.setLogin(properties.getHazelcastLogin()); - params.setPassword(properties.getHazelcastPassword()); -// params.setInstanceName("dbf-exporter"); + params.setClusterMembers(settings.getHazelcast().getClusterMembers()); + params.setLogin(settings.getHazelcast().getLogin()); + params.setPassword(settings.getHazelcast().getPassword()); return new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter, params); } @Bean("pipeline") - public List pipeline() { + public List pipeline(ApplicationContext context) { List pipeline = new LinkedList<>(); pipeline.add(context.getBean(PrepareDBFFile.class)); @@ -63,11 +55,11 @@ public class DBFExporterConfig { } @Bean("executor") - public ThreadPoolTaskExecutor executor() { + public ThreadPoolTaskExecutor executor(ExportDBFServiceSettings settings) { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - executor.setMaxPoolSize(properties.getThreadsCount()); - executor.setCorePoolSize(properties.getThreadsCount()); - executor.setThreadNamePrefix("dbf-exporter-thread-"); + executor.setMaxPoolSize(settings.getCommon().getThreadsCount()); + executor.setCorePoolSize(settings.getCommon().getThreadsCount()); + executor.setThreadNamePrefix("dbf-exporter"); executor.setWaitForTasksToCompleteOnShutdown(true); executor.setAwaitTerminationSeconds(300); executor.initialize(); diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/KafkaConfig.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/KafkaConfig.java new file mode 100644 index 000000000..73840d3e5 --- /dev/null +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/KafkaConfig.java @@ -0,0 +1,21 @@ +package ru.spcex.clearing.dbf.exporter.config; + +import org.apache.kafka.clients.consumer.Consumer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings; +import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; + +@Configuration +public class KafkaConfig { + + @Autowired + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + @Bean + public Consumer createConsumer(ExportDBFServiceSettings settings) { + return KafkaConsumerFactory.consumer(settings.getKafkaConsumer()); + } +} diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Common.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Common.java new file mode 100644 index 000000000..1d2fbf854 --- /dev/null +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Common.java @@ -0,0 +1,32 @@ +package ru.spcex.clearing.dbf.exporter.config.settings; + +public class Common { + + private String encoding; + private int insertBatchSize; + private int threadsCount; + + public String getEncoding() { + return encoding; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public int getInsertBatchSize() { + return insertBatchSize; + } + + public void setInsertBatchSize(int insertBatchSize) { + this.insertBatchSize = insertBatchSize; + } + + public int getThreadsCount() { + return threadsCount; + } + + public void setThreadsCount(int threadsCount) { + this.threadsCount = threadsCount; + } +} diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Cron.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Cron.java new file mode 100644 index 000000000..ff7f8bda8 --- /dev/null +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Cron.java @@ -0,0 +1,14 @@ +package ru.spcex.clearing.dbf.exporter.config.settings; + +public class Cron { + + private String checkSrcDirCron; + + public String getCheckSrcDirCron() { + return checkSrcDirCron; + } + + public void setCheckSrcDirCron(String checkSrcDirCron) { + this.checkSrcDirCron = checkSrcDirCron; + } +} diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/ExportDBFServiceSettings.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/ExportDBFServiceSettings.java new file mode 100644 index 000000000..8166f7931 --- /dev/null +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/ExportDBFServiceSettings.java @@ -0,0 +1,58 @@ +package ru.spcex.clearing.dbf.exporter.config.settings; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; +import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings; +import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; + +@Component +@PropertySource("file:${spring.config.location}/application.properties") +@ConfigurationProperties("export-dbf-service") +public class ExportDBFServiceSettings { + private HazelcastClientParams hazelcast; + private KafkaConsumerSettings kafkaConsumer; + private Common common; + private Store store; + private Cron cron; + + public HazelcastClientParams getHazelcast() { + return hazelcast; + } + + public void setHazelcast(HazelcastClientParams hazelcast) { + this.hazelcast = hazelcast; + } + + public KafkaConsumerSettings getKafkaConsumer() { + return kafkaConsumer; + } + + public void setKafkaConsumer(KafkaConsumerSettings kafkaConsumer) { + this.kafkaConsumer = kafkaConsumer; + } + + public Common getCommon() { + return common; + } + + public void setCommon(Common common) { + this.common = common; + } + + public Store getStore() { + return store; + } + + public void setStore(Store store) { + this.store = store; + } + + public Cron getCron() { + return cron; + } + + public void setCron(Cron cron) { + this.cron = cron; + } +} diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Store.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Store.java new file mode 100644 index 000000000..e1430418a --- /dev/null +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/settings/Store.java @@ -0,0 +1,14 @@ +package ru.spcex.clearing.dbf.exporter.config.settings; + +public class Store { + + private String outDir; + + public String getOutDir() { + return outDir; + } + + public void setOutDir(String outDir) { + this.outDir = outDir; + } +} diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java index 01be79565..f6318249d 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java @@ -6,11 +6,11 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.sdf.*; +import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings; import ru.spcex.clearing.dbf.exporter.exceptions.ConfigException; import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer; import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult; import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table; -import ru.spcex.clearing.dbf.exporter.properties.AProperties; import ru.spcex.clearing.dbf.exporter.services.converters.*; import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.imdg.api.Imdg; @@ -28,7 +28,7 @@ import java.util.Objects; */ @Component public class ExportFromHazelcast extends Stage implements InitializingBean { - private final AProperties properties; + private final ExportDBFServiceSettings settings; private final ImdgProvider imdgProvider; private final S_DF02_Converter s_df02_converter; @@ -40,14 +40,14 @@ public class ExportFromHazelcast extends Stage implements InitializingBean { private final Map dbfFieldsForTable = new HashMap<>(); private Charset dbfCharset; - public ExportFromHazelcast(@Qualifier("dbfExporterProperties") AProperties properties, + public ExportFromHazelcast(ExportDBFServiceSettings settings, @Qualifier("imdgProvider") ImdgProvider imdgProvider, S_DF02_Converter s_df02_converter, S_DF08_Converter s_df08_converter, S_DF18_Converter s_df18_converter, S_DF10_Converter s_df10_converter, S_DF17_Converter s_df17_converter) { - this.properties = properties; + this.settings = settings; this.imdgProvider = imdgProvider; this.s_df02_converter = s_df02_converter; this.s_df08_converter = s_df08_converter; @@ -123,9 +123,9 @@ public class ExportFromHazelcast extends Stage implements InitializingBean { private void initDBFCharset() { try { - dbfCharset = Charset.forName(properties.getDbfEncoding()); + dbfCharset = Charset.forName(settings.getCommon().getEncoding()); } catch (Exception e) { - throw new ConfigException("В properties файле содержится неизвестная кодировка: " + properties.getDbfEncoding(), e); + throw new ConfigException("В properties файле содержится неизвестная кодировка: " + settings.getCommon().getEncoding(), e); } } diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java index a1a099489..a0743322c 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java @@ -1,12 +1,11 @@ package ru.spcex.clearing.dbf.exporter.logic.stages; import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; +import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings; import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer; import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult; import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table; -import ru.spcex.clearing.dbf.exporter.properties.AProperties; import java.io.File; import java.io.IOException; @@ -26,11 +25,11 @@ public class PrepareDBFFile extends Stage implements InitializingBean { private static final String CODE_OF_MEMBER = null; private static final DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm"); private static final DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd"); - private final AProperties properties; + private final ExportDBFServiceSettings settings; private String outDir; - public PrepareDBFFile(@Qualifier("dbfExporterProperties") AProperties properties) { - this.properties = properties; + public PrepareDBFFile(ExportDBFServiceSettings settings) { + this.settings = settings; } @Override @@ -54,7 +53,7 @@ public class PrepareDBFFile extends Stage implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { - String outDirPath = properties.getOutDir(); + String outDirPath = settings.getStore().getOutDir(); File outDirFile = new File(outDirPath); if (outDirFile.exists() && !outDirFile.isDirectory()) throw new IOException("Output directory " + outDirPath + " is file."); diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/properties/AProperties.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/properties/AProperties.java deleted file mode 100644 index 46ee82324..000000000 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/properties/AProperties.java +++ /dev/null @@ -1,74 +0,0 @@ -package ru.spcex.clearing.dbf.exporter.properties; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -@Component("dbfExporterProperties") -public class AProperties { - - @Value("${hazelcast.cluster-members}") - private String hazelcastClusterMembers; - - @Value("${hazelcast.login}") - private String hazelcastLogin; - - @Value("${hazelcast.password}") - private String hazelcastPassword; - - @Value("${dbf.out-dir}") - private String outDir; - - @Value("${dbf.encoding}") - private String dbfEncoding; - - @Value("${dbf.threads-count}") - private int threadsCount; - - public String getHazelcastClusterMembers() { - return hazelcastClusterMembers; - } - - public void setHazelcastClusterMembers(String hazelcastClusterMembers) { - this.hazelcastClusterMembers = hazelcastClusterMembers; - } - - public String getHazelcastLogin() { - return hazelcastLogin; - } - - public void setHazelcastLogin(String hazelcastLogin) { - this.hazelcastLogin = hazelcastLogin; - } - - public String getHazelcastPassword() { - return hazelcastPassword; - } - - public void setHazelcastPassword(String hazelcastPassword) { - this.hazelcastPassword = hazelcastPassword; - } - - public String getOutDir() { - return outDir; - } - - public void setOutDir(String outDir) { - this.outDir = outDir; - } - - public String getDbfEncoding() { - return dbfEncoding; - } - - public void setDbfEncoding(String dbfEncoding) { - this.dbfEncoding = dbfEncoding; - } - - public int getThreadsCount() { - return threadsCount; - } - - public void setThreadsCount(int threadsCount) { - this.threadsCount = threadsCount; - } -} diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java new file mode 100644 index 000000000..87fdc1fa1 --- /dev/null +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java @@ -0,0 +1,33 @@ +package ru.spcex.clearing.dbf.exporter.services; + +import org.apache.kafka.clients.consumer.Consumer; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Service +public class CommandService extends QueueConsumer implements InitializingBean { + + private final ImdgProvider imdgProvider; + + public CommandService(Consumer kafkaQueue, ImdgProvider imdgProvider) { + super(kafkaQueue); + this.imdgProvider = imdgProvider; + } + + @Override + public void afterPropertiesSet() throws Exception { + callback(ExportToFileRequest.class) + .setConsumer(this::process) + .forDestination(Consts.STATEMENT_PROCESS, callbacks::put); + init(); + } + + private void process(BaseRequest systemRequest) { + + } +} diff --git a/clearing-parent/dbf-exporter/src/main/resources/application.properties b/clearing-parent/dbf-exporter/src/main/resources/application.properties index 0a57267ef..deda8d69c 100644 --- a/clearing-parent/dbf-exporter/src/main/resources/application.properties +++ b/clearing-parent/dbf-exporter/src/main/resources/application.properties @@ -2,11 +2,18 @@ server.port=8080 server.servlet.context-path=/exporter spring.main.web-application-type=servlet -hazelcast.cluster-members=127.0.0.1:5071 -hazelcast.login=dev -hazelcast.password=dev-pass +export-dbf-service.hazelcast.cluster-members=10.200.200.181:5071 +export-dbf-service.hazelcast.login=dev +export-dbf-service.hazelcast.password=dev-pass -dbf.encoding=cp866 -dbf.threads-count=10 +export-dbf-service.common.encoding=cp866 +export-dbf-service.common.threads-count=10 -dbf.out-dir=/opt/clearing/file/exporter/ +export-dbf-service.store.out-dir=/opt/clearing/file/exporter/ + +import-dbf-service.kafka-consumer.bootstrap-servers=localhost:9092 +import-dbf-service.kafka-consumer.acks=all +import-dbf-service.kafka-consumer.retries=0 +import-dbf-service.kafka-consumer.batch-size=16384 +import-dbf-service.kafka-consumer.linger-ms=1 +import-dbf-service.kafka-consumer.buffer-memory=33554432 \ No newline at end of file diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/ExportToFileRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/ExportToFileRequest.java new file mode 100644 index 000000000..5b196e20d --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/balance/ExportToFileRequest.java @@ -0,0 +1,26 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.balance; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ExportToFileRequest { + @JsonProperty + private Long sdfGroupId; + @JsonProperty + private String nameOfTable; + + public Long getSdfGroupId() { + return sdfGroupId; + } + + public void setSdfGroupId(Long sdfGroupId) { + this.sdfGroupId = sdfGroupId; + } + + public String getNameOfTable() { + return nameOfTable; + } + + public void setNameOfTable(String nameOfTable) { + this.nameOfTable = nameOfTable; + } +} \ No newline at end of file From 0b2e5a13fb7bafba54387290a66838b8a853a748 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 30 Sep 2022 13:08:13 +0300 Subject: [PATCH 14/41] export by request --- .../exporter/logic/data/ResultContainer.java | 9 ++++++++ .../logic/stages/ExportFromHazelcast.java | 14 ++++++++---- .../dbf/exporter/services/CommandService.java | 22 +++++++++++++++++-- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java index 507a379e6..0ad0d79fd 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java @@ -12,6 +12,7 @@ public class ResultContainer { private UUID uuid; private Table tableForExport; private File fileForExport; + private Long groupId; protected ResultContainer() {} @@ -45,4 +46,12 @@ public class ResultContainer { public void setUuid(UUID uuid) { this.uuid = uuid; } + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } } diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java index f6318249d..57899ab4a 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java @@ -68,12 +68,18 @@ public class ExportFromHazelcast extends Stage implements InitializingBean { boolean emptyMap = true; try (DBFWriter dbfWriter = new DBFWriter(dbfFile, dbfCharset)) { dbfWriter.setFields(dbfFieldsForTable.get(table)); - Collection allValues = map.getAllValues(); - if (allValues.isEmpty()) { + Collection tableRows; + if (resultContainer.getGroupId() != null) { + Map queryParams = Map.of("generationId", resultContainer.getGroupId()); + tableRows = map.getCollectionObjectsByFieldValues(queryParams); + } else { + tableRows = map.getAllValues(); + } + if (tableRows.isEmpty()) { log.info("uuid {}. Map {} is empty.", resultContainer.getUuid(), resultContainer.getTableForExport().getHazelcastMapName()); return StageResult.COMPLETE; } - for (SpcexObjectBase value : allValues) { + for (SpcexObjectBase value : tableRows) { Object[] values; if (value instanceof SDf02 sDf02Value) values = s_df02_converter.toObjectArray(sDf02Value); else if (value instanceof SDf08 sDf08Value) values = s_df08_converter.toObjectArray(sDf08Value); @@ -84,7 +90,7 @@ public class ExportFromHazelcast extends Stage implements InitializingBean { dbfWriter.addRecord(values); } writeOk = true; - emptyMap = allValues.isEmpty(); + emptyMap = tableRows.isEmpty(); } catch (Exception e) { log.error(String.format("uuid %s. Can't export table %s to file %s. Table was skipped.", resultContainer.getUuid(), table, dbfFile), e); return StageResult.ERROR; diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java index 87fdc1fa1..1f79f2ba0 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java @@ -3,20 +3,30 @@ package ru.spcex.clearing.dbf.exporter.services; import org.apache.kafka.clients.consumer.Consumer; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Service; +import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer; +import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table; +import ru.spcex.clearing.dbf.exporter.logic.stages.Processor; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.util.Arrays; +import java.util.Optional; + @Service public class CommandService extends QueueConsumer implements InitializingBean { private final ImdgProvider imdgProvider; + private final Processor processor; - public CommandService(Consumer kafkaQueue, ImdgProvider imdgProvider) { + public CommandService(Consumer kafkaQueue, + ImdgProvider imdgProvider, + Processor processor) { super(kafkaQueue); this.imdgProvider = imdgProvider; + this.processor = processor; } @Override @@ -28,6 +38,14 @@ public class CommandService extends QueueConsumer implements InitializingBean { } private void process(BaseRequest systemRequest) { - + ExportToFileRequest request = systemRequest.getRequestPayload(); + Optional tableForExport = Arrays.stream(Table.values()). + filter(table -> table.getFilePrefix().equalsIgnoreCase(request.getNameOfTable())).findFirst(); + if (tableForExport.isEmpty()) { + throw new IllegalStateException("Unsupported table prefix"); + } + ResultContainer resultContainer = ResultContainer.createNewTask(tableForExport.get()); + resultContainer.setGroupId(request.getSdfGroupId()); + processor.process(resultContainer); } } From 14a009b06644f076a5748620130d3e64ab8289cf Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 30 Sep 2022 13:10:35 +0300 Subject: [PATCH 15/41] export by request --- .../ru/spcex/clearing/dbf/exporter/services/CommandService.java | 2 +- .../ru/spcex/clearing/platform/messaging/domain/Consts.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java index 1f79f2ba0..5dd0ac22d 100644 --- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java +++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java @@ -33,7 +33,7 @@ public class CommandService extends QueueConsumer implements InitializingBean { public void afterPropertiesSet() throws Exception { callback(ExportToFileRequest.class) .setConsumer(this::process) - .forDestination(Consts.STATEMENT_PROCESS, callbacks::put); + .forDestination(Consts.EXPORT_PROCESS, callbacks::put); init(); } diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index 2d3dad869..2360f8d2f 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -28,6 +28,7 @@ public interface Consts { //todo String STATEMENT_PROCESS = "statement-process"; + String EXPORT_PROCESS = "export-process"; String ACCOUNT_NEW = "account-new"; String BALANCE_ACCOUNT_NEW = "balance-account-new"; From 3014515e0081bcf89d020af7d58b120952b31f1b Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 30 Sep 2022 13:42:39 +0300 Subject: [PATCH 16/41] balance-service put sdf02 request to kafka --- .../ru/spcex/clearing/account/service/AccountService.java | 5 +++-- .../ru/spcex/clearing/balance/service/StatementService.java | 5 +++++ .../src/main/resources/application.properties | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java index 5a55e3809..57bea0fa9 100644 --- a/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java +++ b/clearing-parent/account-service/src/main/java/ru/spcex/clearing/account/service/AccountService.java @@ -55,7 +55,7 @@ public class AccountService extends QueueConsumer implements InitializingBean { AccountSdf01ToStatementRequestPart responsePart = responsePart(accountReq.getSdf01Id()); accountToStatement.add(responsePart); } - sendStatementRequestBack(accountToStatement); + sendStatementRequestBack(req.getGroupingSdf01Id(), accountToStatement); log.debug("successfully processed, grouping id={}, processed number={}", req.getGroupingSdf01Id(), accountToStatement.size()); } @@ -67,8 +67,9 @@ public class AccountService extends QueueConsumer implements InitializingBean { return responsePart; } - private void sendStatementRequestBack(List results) { + private void sendStatementRequestBack(Long groupingSdf01Id, List results) { StatementRequest request = new StatementRequest(); + request.setSdf01GroupId(groupingSdf01Id); request.setAccountCreationResults(results); kafkaSender.sendRequestToQueue(Consts.STATEMENT_PROCESS, request); } diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java index 69307b408..b4aeae21a 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java @@ -19,6 +19,7 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01Request; import ru.spcex.clearing.platform.messaging.domain.cud.account.sdf01.AccountSdf01RequestPart; +import ru.spcex.clearing.platform.messaging.domain.cud.balance.ExportToFileRequest; import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; @@ -133,6 +134,10 @@ public class StatementService extends QueueConsumer implements InitializingBean if (accountRequests.size() > 0) { kafkaReqProducer.sendRequestToQueue(Consts.ACCOUNT_NEW, createAccountsRequest(sdf01.getGenerationId(), accountRequests)); + } else { + ExportToFileRequest exportRequest = new ExportToFileRequest(); + exportRequest.setSdfGroupId(statementRequest.getSdf01GroupId()); + exportRequest.setNameOfTable("DF-02"); } } } diff --git a/clearing-parent/balance-service/src/main/resources/application.properties b/clearing-parent/balance-service/src/main/resources/application.properties index d7ca974d0..b865b73a3 100644 --- a/clearing-parent/balance-service/src/main/resources/application.properties +++ b/clearing-parent/balance-service/src/main/resources/application.properties @@ -4,7 +4,7 @@ balance-service.hazelcast.login=dev balance-service.hazelcast.password=dev-pass balance-service.kafka-consumer.bootstrap-servers=localhost:9092 -balance-service.kafka-consumer.group-id=dev-group +balance-service.kafka-consumer.group-id=dev-group-balance-service balance-service.kafka-consumer.enable-auto-commit=false balance-service.kafka-consumer.session-timeout-ms=30000 balance-service.kafka-consumer.auto-offset-reset=latest From 95cb6c0effe20210b62d93ffe11c874ec0600901 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 30 Sep 2022 13:55:38 +0300 Subject: [PATCH 17/41] send to export anyway --- .../spcex/clearing/balance/service/StatementService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java index b4aeae21a..fba4befe3 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java @@ -134,12 +134,12 @@ public class StatementService extends QueueConsumer implements InitializingBean if (accountRequests.size() > 0) { kafkaReqProducer.sendRequestToQueue(Consts.ACCOUNT_NEW, createAccountsRequest(sdf01.getGenerationId(), accountRequests)); - } else { - ExportToFileRequest exportRequest = new ExportToFileRequest(); - exportRequest.setSdfGroupId(statementRequest.getSdf01GroupId()); - exportRequest.setNameOfTable("DF-02"); } } + ExportToFileRequest exportRequest = new ExportToFileRequest(); + exportRequest.setSdfGroupId(statementRequest.getSdf01GroupId()); + exportRequest.setNameOfTable("DF-02"); + kafkaReqProducer.sendRequestToQueue(Consts.EXPORT_PROCESS, exportRequest); } private Statement createFlow(SDf01 sdf01, Company company, Account account) { From b6e53e7dba39b46afb8c0000ca043f32c06a42b8 Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 3 Oct 2022 09:56:46 +0300 Subject: [PATCH 18/41] http://jira.mfd.msk:8088/browse/CLS-65 --- .../utility/service/UserSettingService.java | 56 +++++++++++++++++++ .../platform/messaging/domain/Consts.java | 1 + .../utilities/UserSettingsUpdateRequest.java | 36 ++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserSettingService.java create mode 100644 platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/UserSettingsUpdateRequest.java diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserSettingService.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserSettingService.java new file mode 100644 index 000000000..726580197 --- /dev/null +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserSettingService.java @@ -0,0 +1,56 @@ +package ru.spcex.clearing.utility.service; + +import org.apache.kafka.clients.consumer.Consumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.user.UserSettings; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.UserSettingsUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.util.Map; + +@Service +public class UserSettingService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg userSettingsMap; + + @Autowired + public UserSettingService(Consumer kafkaQueue, ImdgProvider imdgProvider) { + super(kafkaQueue); + this.userSettingsMap = imdgProvider.getImdg(IMDGDistributedNames.Map_UserSettings, UserSettings.class); + } + + @Override + public void afterPropertiesSet() { + callback(UserSettingsUpdateRequest.class) + .setConsumer(this::updateUserSettings) + .forDestination(Consts.USER_SETTINGS_UPDATE, callbacks::put); + init(); + } + + private void updateUserSettings(BaseRequest userRequest) { + UserSettingsUpdateRequest req = userRequest.getRequestPayload(); + log.debug("UserSettingsUpdateRequest received userId = {}", req.getUserId()); + UserSettings settings = userSettingsMap.getSingleObjectByFieldValues(Map.of("userId", req.getUserId())); + if (settings != null) { + log.debug("found user settings for userId={}, id={}", req.getUserId(), settings.getId()); + settings.setVersion(req.getVersion()); + settings.setJson(req.getJson()); + userSettingsMap.update(settings); + } else { + settings = new UserSettings(); + settings.setUserId(req.getUserId()); + settings.setVersion(req.getVersion()); + settings.setJson(req.getJson()); + userSettingsMap.insert(settings); + } + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java index 2360f8d2f..212900ad1 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/Consts.java @@ -25,6 +25,7 @@ public interface Consts { String USER_AUTH_SUCCESS = "user-auth-success"; String USER_LOGOUT_SUCCESS = "user-logout-success"; + String USER_SETTINGS_UPDATE = "user-settings-update"; //todo String STATEMENT_PROCESS = "statement-process"; diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/UserSettingsUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/UserSettingsUpdateRequest.java new file mode 100644 index 000000000..cc22c7766 --- /dev/null +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/UserSettingsUpdateRequest.java @@ -0,0 +1,36 @@ +package ru.spcex.clearing.platform.messaging.domain.cud.utilities; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class UserSettingsUpdateRequest { + @JsonProperty + public Long userId; + @JsonProperty + public String version; + @JsonProperty + public String json; + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getJson() { + return json; + } + + public void setJson(String json) { + this.json = json; + } +} From fefd935e4537aece18165159d1a9c639352defc4 Mon Sep 17 00:00:00 2001 From: aalehin Date: Mon, 3 Oct 2022 11:37:00 +0300 Subject: [PATCH 19/41] http://jira.mfd.msk:8088/browse/CLS-21 --- fix-up --- .../clearing/company/config/KafkaConfig.java | 2 +- .../company/service/CompanyService.java | 2 +- .../clearing/imdg/IMDGDistributedNames.java | 17 ++++++----------- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java index 5815678c4..6ce4bca40 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java @@ -14,7 +14,7 @@ public class KafkaConfig { @Autowired @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Bean - public Consumer createProducer(CompanyServiceSettings settings) { + public Consumer createConsumer(CompanyServiceSettings settings) { return KafkaConsumerFactory.consumer(settings.getKafka()); } } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java index 5a96460ac..32857ac80 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java @@ -24,7 +24,7 @@ public class CompanyService extends QueueConsumer implements InitializingBean { public CompanyService(Consumer kafkaQueue, ImdgProvider imdgProvider) { super(kafkaQueue); - this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyInfo, Company.class); } @Override diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java index 91361002c..ea63c6480 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java @@ -4,14 +4,11 @@ package ru.spcex.clearing.imdg; * Список имён распределённых объектов */ public final class IMDGDistributedNames { - private IMDGDistributedNames() { - } - public static final String Map_Company = "Map_Company"; public static final String Map_CompanyHistory = "Map_CompanyHistory"; public static final String Map_CompanyRoleSet = "Map_CompanyRoleSet"; public static final String Map_CompanySymbols = "Map_CompanySymbols"; - // public static final String Map_CompanyInfo = "Map_CompanyInfo"; интегрировано в Map_Company + public static final String Map_CompanyInfo = "Map_CompanyInfo"; public static final String Map_Contact = "Map_Contact"; public static final String Map_ProfileDocument = "Map_ProfileDocument"; public static final String Map_Account = "Map_Account"; @@ -43,7 +40,6 @@ public final class IMDGDistributedNames { public static final String Map_Timetable = "Map_Timetable"; public static final String Map_InDocumentJournal = "Map_InDocumentJournal"; public static final String Map_OutDocumentJournal = "Map_OutDocumentJournal"; - public static final String Map_SDf01 = "Map_SDf01"; public static final String Map_SDf02 = "Map_SDf02"; public static final String Map_SDf03 = "Map_SDf03"; @@ -58,10 +54,9 @@ public final class IMDGDistributedNames { public static final String Map_SDf09 = "Map_SDf09"; public static final String Map_SDf12 = "Map_SDf12"; public static final String Map_SDf18 = "Map_SDf18"; - -// public static final String Map_InterestStatusDictionary = "Map_InterestStatusDictionary"; future + // public static final String Map_InterestStatusDictionary = "Map_InterestStatusDictionary"; future public static final String Map_AllowedDictionary = "Map_AllowedDictionary"; -// public static final String Map_ClearingMemberCategoryDictionary = "Map_ClearingMemberCategoryDictionary"; future + // public static final String Map_ClearingMemberCategoryDictionary = "Map_ClearingMemberCategoryDictionary"; future public static final String Map_CompanyRoleDictionary = "Map_CompanyRoleDictionary"; public static final String Map_CompanySymbolDictionary = "Map_CompanySymbolDictionary"; public static final String Map_ContactTypeDictionary = "Map_ContactTypeDictionary"; @@ -103,11 +98,11 @@ public final class IMDGDistributedNames { public static final String Map_UserSettings = "Map_UserSettings"; public static final String Map_UserRoleSession = "Map_UserRoleSession"; public static final String Map_AccountStatusDictionary = "Map_AccountStatusDictionary"; - public static final String Map_KeyRate = "Map_KeyRate"; public static final String Map_MoneyMarketSecurity = "Map_MoneyMarketSecurity"; - public static final String Map_AccountBalance = "Map_AccountBalance"; - public static final String MAP_SEQUENCE_NAME = "MAP_SEQUENCE_NAME"; // todo вынести idGenerator отдельно и завернуть в метод, чтобы не напрямую обращаться. + + private IMDGDistributedNames() { + } } From 7788fd6175023b0bab235b50cd9adbd668b9f47b Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 3 Oct 2022 15:31:16 +0300 Subject: [PATCH 20/41] http://jira.mfd.msk:8088/browse/CLS-64 --- .../queue/QueueExceptionHandler.java | 2 +- .../user/UserSettingsSessionController.java | 38 --------- .../utilities/UserSettingsController.java | 77 +++++++++++++++++++ .../utilities/UserSettingsUpdateAction.java | 54 +++++++++++++ .../backendapi/security/KeycloakUtils.java | 20 +++++ .../utilities/UserSettingsUpdateRequest.java | 3 +- 6 files changed, 154 insertions(+), 40 deletions(-) delete mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/user/UserSettingsSessionController.java create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/utilities/UserSettingsController.java create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/utilities/UserSettingsUpdateAction.java create mode 100644 clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/KeycloakUtils.java diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/QueueExceptionHandler.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/QueueExceptionHandler.java index f2c2036a9..5b6503559 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/QueueExceptionHandler.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/QueueExceptionHandler.java @@ -55,7 +55,7 @@ public class QueueExceptionHandler extends ResponseEntityExceptionHandler { UnrecognizedPropertyException jacksonException = (UnrecognizedPropertyException) ex.getCause(); message = new EnumMessage(BackEndError.UnknownJsonProperty, jacksonException.getPropertyName()); } catch (ClassCastException e) { - log.error(ExceptionUtils.getStackTrace(e)); + log.error(ExceptionUtils.getStackTrace(ex)); message = new EnumMessage(BackEndError.FailedToReadHttpMessage); } errorResponse.setCode(message.getSubject().getId()); diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/user/UserSettingsSessionController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/user/UserSettingsSessionController.java deleted file mode 100644 index 549d04aee..000000000 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/user/UserSettingsSessionController.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.spcex.clearing.backendapi.controller.queue.user; - -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import org.springframework.beans.factory.annotation.Autowired; -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.clearing.classes.statics.data.user.UserSettings; -import ru.spcex.clearing.backendapi.controller.response.entity.user.UserSettingsBackendGetAll; -import ru.spcex.clearing.backendapi.service.IStateLoader; -import ru.spcex.clearing.imdg.IMDGDistributedNames; - -import java.util.Collection; - -@Controller -@RequestMapping("/user-settings") -public class UserSettingsSessionController { - private final IStateLoader stateLoader; - - @Autowired - public UserSettingsSessionController(IStateLoader stateLoader) { - this.stateLoader = stateLoader; - } - - @ApiOperation(value = "get all user settings.") - @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = UserSettingsBackendGetAll.class)}) - @RequestMapping(method = RequestMethod.GET) - @ResponseBody - public UserSettingsBackendGetAll getAll() { - Collection all = stateLoader.getAll(IMDGDistributedNames.Map_UserSettings, UserSettings.class); - var response = new UserSettingsBackendGetAll(); - response.fromEntity(all); - return response; - } -} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/utilities/UserSettingsController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/utilities/UserSettingsController.java new file mode 100644 index 000000000..1fa83bc05 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/utilities/UserSettingsController.java @@ -0,0 +1,77 @@ +package ru.spcex.clearing.backendapi.controller.queue.utilities; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Controller; +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.user.User; +import ru.clearing.classes.statics.data.user.UserSettings; +import ru.spcex.clearing.backendapi.controller.queue.AbstractQueueController; +import ru.spcex.clearing.backendapi.controller.request.cud.utilities.UserSettingsUpdateAction; +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.user.UserSettingsBackendGetAll; +import ru.spcex.clearing.backendapi.security.KeycloakUtils; +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; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import java.util.Collection; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +@Controller +//todo ask Lesha Ushenin +@RequestMapping("/utilities/user-settings") +public class UserSettingsController extends AbstractQueueController { + private final IStateLoader stateLoader; + private final Imdg userImdg; + + @Autowired + public UserSettingsController(IOperator operator, IStateLoader stateLoader, ImdgProvider imdgProvider) { + super(operator); + this.stateLoader = stateLoader; + this.userImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_User, User.class); + } + + @ApiOperation(value = "get all user settings.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = UserSettingsBackendGetAll.class)}) + @RequestMapping(method = RequestMethod.GET) + @ResponseBody + public UserSettingsBackendGetAll getAll() { + Collection all = stateLoader.getAll(IMDGDistributedNames.Map_UserSettings, UserSettings.class); + var response = new UserSettingsBackendGetAll(); + response.fromEntity(all); + return response; + } + + @ApiOperation(value = "update user settings.") + @ApiResponses(value = {@ApiResponse(code = 200, message = "OK", response = CudResponse.class), @ApiResponse(code = 400, message = "Ошибка валидации", response = BasicSpcexResponse.class)}) + @RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public CudResponse update( + @ApiParam(value = "Новые значения полей объекта.", required = true) + @RequestBody UserSettingsUpdateAction userSettingsUpdateAction) throws ExecutionException, InterruptedException { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String username = KeycloakUtils.getUserNameFromAuthentication(authentication); + User user = userImdg.getSingleObjectByFieldValues(Map.of("identifier", username)); + if (user == null) { + throw new IllegalStateException("cannot obtain userId from logged in user " + username); + } + userSettingsUpdateAction.setUserId(user.getId()); + return processRequest(Consts.USER_SETTINGS_UPDATE, userSettingsUpdateAction); + } + +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/utilities/UserSettingsUpdateAction.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/utilities/UserSettingsUpdateAction.java new file mode 100644 index 000000000..cc4bbf384 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/request/cud/utilities/UserSettingsUpdateAction.java @@ -0,0 +1,54 @@ +package ru.spcex.clearing.backendapi.controller.request.cud.utilities; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.JsonNode; +import io.swagger.annotations.ApiModelProperty; +import ru.spcex.clearing.backendapi.domain.actions.IAction; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.UserSettingsUpdateRequest; + +public class UserSettingsUpdateAction implements IAction { + @ApiModelProperty(hidden = true) + @JsonProperty + public Long userId; + + @JsonProperty + public String version; + public String json; + + @JsonProperty("json") + public void unpackRawJson(JsonNode json) { + this.json = json.toString(); + } + + @ApiModelProperty(hidden = true) + @Override + public ActionType getActionType() { + return ActionType.UPDATE; + } + + @Override + public UserSettingsUpdateRequest toRequest() { + var req = new UserSettingsUpdateRequest(); + req.setVersion(version); + req.setJson(json); + req.setUserId(userId); + return req; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/KeycloakUtils.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/KeycloakUtils.java new file mode 100644 index 000000000..52bc02e40 --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/KeycloakUtils.java @@ -0,0 +1,20 @@ +package ru.spcex.clearing.backendapi.security; + +import org.keycloak.KeycloakPrincipal; +import org.keycloak.adapters.spi.KeycloakAccount; +import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; +import org.springframework.security.core.Authentication; + +public class KeycloakUtils { + /** + * Достать username из Keycloak имплементации Authentication + */ + public static String getUserNameFromAuthentication(Authentication authentication) { + KeycloakAuthenticationToken auth = (KeycloakAuthenticationToken) authentication; + KeycloakAccount details = (KeycloakAccount) auth.getDetails(); + return ((KeycloakPrincipal) details.getPrincipal()) + .getKeycloakSecurityContext() + .getToken() + .getPreferredUsername(); + } +} diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/UserSettingsUpdateRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/UserSettingsUpdateRequest.java index cc22c7766..8eb9093fe 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/UserSettingsUpdateRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/UserSettingsUpdateRequest.java @@ -1,13 +1,14 @@ package ru.spcex.clearing.platform.messaging.domain.cud.utilities; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonRawValue; public class UserSettingsUpdateRequest { @JsonProperty public Long userId; @JsonProperty public String version; - @JsonProperty + @JsonRawValue public String json; public Long getUserId() { From 6120849cd2fc054537927ed4976946f2227221a7 Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 3 Oct 2022 15:32:31 +0300 Subject: [PATCH 21/41] http://jira.mfd.msk:8088/browse/CLS-64 --- .../controller/queue/utilities/UserSettingsController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/utilities/UserSettingsController.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/utilities/UserSettingsController.java index 1fa83bc05..7a52b494b 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/utilities/UserSettingsController.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/queue/utilities/UserSettingsController.java @@ -33,7 +33,6 @@ import java.util.Map; import java.util.concurrent.ExecutionException; @Controller -//todo ask Lesha Ushenin @RequestMapping("/utilities/user-settings") public class UserSettingsController extends AbstractQueueController { private final IStateLoader stateLoader; From b0d3e4ac5a9917498c047e6346ad4b89ed79e62f Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 3 Oct 2022 15:33:51 +0300 Subject: [PATCH 22/41] http://jira.mfd.msk:8088/browse/CLS-65 --- .../spcex/clearing/utility/service/UserSettingService.java | 5 ++++- .../src/main/resources/application.properties | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserSettingService.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserSettingService.java index 726580197..f34af7255 100644 --- a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserSettingService.java +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/UserSettingService.java @@ -41,16 +41,19 @@ public class UserSettingService extends QueueConsumer implements InitializingBea log.debug("UserSettingsUpdateRequest received userId = {}", req.getUserId()); UserSettings settings = userSettingsMap.getSingleObjectByFieldValues(Map.of("userId", req.getUserId())); if (settings != null) { - log.debug("found user settings for userId={}, id={}", req.getUserId(), settings.getId()); + log.debug("found user settings for userId={}, id={}...", req.getUserId(), settings.getId()); settings.setVersion(req.getVersion()); settings.setJson(req.getJson()); userSettingsMap.update(settings); + log.debug("updated user settings for userId={}, id={}", req.getUserId(), settings.getId()); } else { + log.debug("creating user settings for userId={}...", req.getUserId()); settings = new UserSettings(); settings.setUserId(req.getUserId()); settings.setVersion(req.getVersion()); settings.setJson(req.getJson()); userSettingsMap.insert(settings); + log.debug("created user settings for userId={}, id={}", req.getUserId(), settings.getId()); } } } diff --git a/clearing-parent/utility-service/src/main/resources/application.properties b/clearing-parent/utility-service/src/main/resources/application.properties index 2b0952cfc..fbc306eab 100644 --- a/clearing-parent/utility-service/src/main/resources/application.properties +++ b/clearing-parent/utility-service/src/main/resources/application.properties @@ -1,12 +1,12 @@ spring.main.web-application-type=none -utility-service.hazelcast.cluster-members=127.0.0.1:5071 +utility-service.hazelcast.cluster-members=127.0.0.1:5701 utility-service.hazelcast.login=dev utility-service.hazelcast.password=dev-pass utility-service.kafka.bootstrap-servers=localhost:9092 utility-service.kafka.group-id=dev-group-utility-service -utility-service.kafka.enable-auto-commit=false +utility-service.kafka.enable-auto-commit=true utility-service.kafka.session-timeout-ms=30000 utility-service.kafka.auto-offset-reset=latest utility-service.kafka.linger-ms=1 From 9f0f0363568ade5ea0d258e6151e1c94f2ed48ab Mon Sep 17 00:00:00 2001 From: aalehin Date: Mon, 3 Oct 2022 16:25:10 +0300 Subject: [PATCH 23/41] http://jira.mfd.msk:8088/browse/CLS-21 --- fix-up --- .../ru/spcex/clearing/company/service/CompanyInfoService.java | 2 +- .../java/ru/spcex/clearing/company/service/CompanyService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java index 72b9437e3..887df0c1e 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java @@ -24,7 +24,7 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea public CompanyInfoService(Consumer kafkaQueue, ImdgProvider imdgProvider) { super(kafkaQueue); - this.companyInfoMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, CompanyInfo.class); + this.companyInfoMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyInfo, CompanyInfo.class); } @Override diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java index 32857ac80..5a96460ac 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java @@ -24,7 +24,7 @@ public class CompanyService extends QueueConsumer implements InitializingBean { public CompanyService(Consumer kafkaQueue, ImdgProvider imdgProvider) { super(kafkaQueue); - this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyInfo, Company.class); + this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); } @Override From 7caa7768286c8462e04dc3bfceefb040f1ed4bb6 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 4 Oct 2022 11:43:27 +0300 Subject: [PATCH 24/41] fix bugs --- .../ru/spcex/clearing/balance/service/StatementService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java index fba4befe3..d4799947c 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java @@ -137,7 +137,7 @@ public class StatementService extends QueueConsumer implements InitializingBean } } ExportToFileRequest exportRequest = new ExportToFileRequest(); - exportRequest.setSdfGroupId(statementRequest.getSdf01GroupId()); + exportRequest.setSdfGroupId(generationIdForGroup); exportRequest.setNameOfTable("DF-02"); kafkaReqProducer.sendRequestToQueue(Consts.EXPORT_PROCESS, exportRequest); } From f953edc11d993abd6408daf65b86ab28f6fea375 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 4 Oct 2022 12:42:47 +0300 Subject: [PATCH 25/41] add kafka consumer --- .../src/main/resources/application.properties | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/clearing-parent/dbf-exporter/src/main/resources/application.properties b/clearing-parent/dbf-exporter/src/main/resources/application.properties index deda8d69c..44e7a9fa7 100644 --- a/clearing-parent/dbf-exporter/src/main/resources/application.properties +++ b/clearing-parent/dbf-exporter/src/main/resources/application.properties @@ -11,9 +11,10 @@ export-dbf-service.common.threads-count=10 export-dbf-service.store.out-dir=/opt/clearing/file/exporter/ -import-dbf-service.kafka-consumer.bootstrap-servers=localhost:9092 -import-dbf-service.kafka-consumer.acks=all -import-dbf-service.kafka-consumer.retries=0 -import-dbf-service.kafka-consumer.batch-size=16384 -import-dbf-service.kafka-consumer.linger-ms=1 -import-dbf-service.kafka-consumer.buffer-memory=33554432 \ No newline at end of file +export-dbf-service.kafka-consumer.bootstrap-servers=localhost:9092 +export-dbf-service.kafka-consumer.group-id=dev-group-balance-service +export-dbf-service.kafka-consumer.enable-auto-commit=false +export-dbf-service.kafka-consumer.session-timeout-ms=30000 +export-dbf-service.kafka-consumer.auto-offset-reset=latest +export-dbf-service.kafka-consumer.linger-ms=1 +export-dbf-service.kafka-consumer.buffer-memory=33554432 From b34f22439b853b2ae0bbd98b3199de24a815ec78 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Fri, 30 Sep 2022 13:51:25 +0300 Subject: [PATCH 26/41] some refactoring --- .../java/ru/spcex/clearing/imdg/IMDGApplication.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java index cb7c276d5..18f22bce6 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java @@ -22,10 +22,13 @@ import java.util.List; public class IMDGApplication { public static void main(String[] args) { - try { - SpringApplicationBuilder builder = new SpringApplicationBuilder(IMDGApplication.class); - ConfigurableApplicationContext configurableApplicationContext = builder.run(args); + SpringApplicationBuilder builder = new SpringApplicationBuilder(IMDGApplication.class); + ConfigurableApplicationContext configurableApplicationContext = builder.run(args); + tmpLogUncompletedMapStores(configurableApplicationContext); + } + public static void tmpLogUncompletedMapStores(ConfigurableApplicationContext configurableApplicationContext) { + try { //Поиск таблиц которым нужно добавить mapStore и вывод результата в консоль List nameTables = new ArrayList<>(); Connection jdbcConnection = DriverManager.getConnection("jdbc:postgresql://10.200.200.133:5432/postgres", "clearing", "Aa111111"); @@ -60,7 +63,8 @@ public class IMDGApplication { System.out.println("** Результата поиска таблиц которым нужно добавить mapStore **"); nameTables.forEach(System.out::println); System.out.println("**************************************************************"); - } catch (Throwable e) { + } catch ( + Throwable e) { LoggerFactory.getLogger(IMDGApplication.class).error("STORAGE start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage()); System.exit(-1); } From b123014b577019676703f2b3e9c67be81ba89777 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 4 Oct 2022 12:50:42 +0300 Subject: [PATCH 27/41] delete method for mapstore revision --- .../spcex/clearing/imdg/IMDGApplication.java | 61 +------------------ 1 file changed, 1 insertion(+), 60 deletions(-) diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java index 18f22bce6..26544a2ba 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java @@ -1,73 +1,14 @@ package ru.spcex.clearing.imdg; -import com.hazelcast.config.MapStoreConfig; -import com.hazelcast.core.HazelcastInstance; -import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.ConfigurableApplicationContext; -import ru.spcex.clearing.imdg.base.BusinessObjectMapStore; -import ru.spcex.clearing.imdg.base.DictionaryMapStore; -import ru.spcex.clearing.imdg.base.TemplateEventMapStore; -import ru.spcex.clearing.imdg.base.TemplateMapStore; - -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.util.ArrayList; -import java.util.List; @SpringBootApplication public class IMDGApplication { public static void main(String[] args) { SpringApplicationBuilder builder = new SpringApplicationBuilder(IMDGApplication.class); - ConfigurableApplicationContext configurableApplicationContext = builder.run(args); - tmpLogUncompletedMapStores(configurableApplicationContext); - } - - public static void tmpLogUncompletedMapStores(ConfigurableApplicationContext configurableApplicationContext) { - try { - //Поиск таблиц которым нужно добавить mapStore и вывод результата в консоль - List nameTables = new ArrayList<>(); - Connection jdbcConnection = DriverManager.getConnection("jdbc:postgresql://10.200.200.133:5432/postgres", "clearing", "Aa111111"); - DatabaseMetaData md = jdbcConnection.getMetaData(); - ResultSet rs = md.getTables(null, "clearing", "%", new String[]{"TABLE"}); - while (rs.next()) { - nameTables.add(rs.getString(3)); - } - - HazelcastInstance hazelcastInstance = configurableApplicationContext.getBean(HazelcastInstance.class); - hazelcastInstance.getMap(""); - for (String mapName : hazelcastInstance.getConfig().getMapConfigs().keySet()) { - MapStoreConfig mapStoreConfig = hazelcastInstance.getConfig().getMapConfig(mapName).getMapStoreConfig(); - Object mapStore = mapStoreConfig.getImplementation(); - String tableName; - if (mapStore instanceof TemplateMapStore) { - tableName = ((TemplateMapStore) mapStore).getTableName(); - } else if (mapStore instanceof DictionaryMapStore) { - tableName = ((DictionaryMapStore) mapStore).getTableName(); - } else if (mapStore instanceof TemplateEventMapStore) { - tableName = ((TemplateEventMapStore) mapStore).getTableName(); - } else if (mapStore instanceof BusinessObjectMapStore) { - tableName = ((BusinessObjectMapStore) mapStore).getTableName(); - } else if (mapName.equals("default")) { - continue; - } else { - System.out.println(mapStore == null ? "Не получилось сопоставить mapStore: is null" : "Не получилось сопоставить: " + mapStore.getClass() + " с таблицей"); - continue; - } - nameTables.remove(tableName.toLowerCase()); - } - System.out.println("** Результата поиска таблиц которым нужно добавить mapStore **"); - nameTables.forEach(System.out::println); - System.out.println("**************************************************************"); - } catch ( - Throwable e) { - LoggerFactory.getLogger(IMDGApplication.class).error("STORAGE start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage()); - System.exit(-1); - } + builder.run(args); } } From 02c1936ecbf78c858cd9c4971af245b4ba6a5cf3 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 4 Oct 2022 13:29:14 +0300 Subject: [PATCH 28/41] =?UTF-8?q?DDL,=20meta=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=2004.10.2022,=20http://jir?= =?UTF-8?q?a.mfd.msk:8088/browse/CLS-47=20http://jira.mfd.msk:8088/browse/?= =?UTF-8?q?CLS-58?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend-api/src/main/resources/data.xml | 204 +++--- .../backend-api/src/main/resources/meta.xml | 484 +++++++++---- .../db-scripts/src/main/resources/db/DATA.sql | 236 ++++--- .../db-scripts/src/main/resources/db/DDL.sql | 658 +++++++++++++++--- 4 files changed, 1173 insertions(+), 409 deletions(-) diff --git a/clearing-parent/backend-api/src/main/resources/data.xml b/clearing-parent/backend-api/src/main/resources/data.xml index da29f9695..4b7da1df1 100644 --- a/clearing-parent/backend-api/src/main/resources/data.xml +++ b/clearing-parent/backend-api/src/main/resources/data.xml @@ -1,22 +1,29 @@ - - - - + - + + + + + + + + + + + @@ -31,8 +38,9 @@ - - + + + @@ -44,7 +52,7 @@ - + @@ -54,14 +62,15 @@ - - - - - - - - + + + + + + + + + @@ -83,7 +92,6 @@ - @@ -135,97 +143,119 @@ - + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/clearing-parent/backend-api/src/main/resources/meta.xml b/clearing-parent/backend-api/src/main/resources/meta.xml index d0ff64de3..9c62bb341 100644 --- a/clearing-parent/backend-api/src/main/resources/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta.xml @@ -39,12 +39,17 @@ - + - + + + + + + @@ -104,11 +109,11 @@ - + - + @@ -215,14 +220,29 @@ - + + + + + + + + + + + + + + + + - + @@ -233,22 +253,22 @@ - + - + - + - + @@ -258,14 +278,14 @@ - + - + @@ -364,12 +384,16 @@ - + - - - + + + + + + + @@ -425,15 +449,15 @@ - + - + - + @@ -481,6 +505,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + @@ -516,10 +575,10 @@ - + - + @@ -547,7 +606,7 @@ - + @@ -558,7 +617,7 @@ - + @@ -570,7 +629,7 @@ - + @@ -673,8 +732,8 @@ - - + + @@ -691,57 +750,97 @@ + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - + + - + - + - + + @@ -795,12 +894,58 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -826,20 +971,20 @@ - + - - - - - - - + + + + + + + - + @@ -847,7 +992,7 @@ - + @@ -866,7 +1011,7 @@ - + @@ -895,15 +1040,15 @@ - + - - + + - + @@ -921,8 +1066,8 @@ - - + + @@ -932,18 +1077,18 @@ - + - + - + - + @@ -951,16 +1096,16 @@ - + - + - + @@ -984,7 +1129,7 @@ - + @@ -997,7 +1142,7 @@ - + @@ -1009,7 +1154,7 @@ - + @@ -1027,7 +1172,7 @@ - + @@ -1166,7 +1311,7 @@ - + @@ -1194,7 +1339,7 @@ - + @@ -1265,12 +1410,12 @@ - + - + @@ -1302,19 +1447,19 @@ - + - - - - - - + + + + + + @@ -1322,7 +1467,6 @@ - @@ -1331,7 +1475,7 @@ - + @@ -1345,7 +1489,7 @@ - + @@ -1354,12 +1498,57 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1390,77 +1579,102 @@ - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql index 311bd602b..47425d6e6 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql @@ -2,13 +2,7 @@ -- DATA version: 0.0.0.0 /* Dictionaries */ -INSERT INTO COURIER_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'POST', 'Почтой'); - -INSERT INTO COURIER_TYPE_DICTIONARY(ID, CODE, NAME) values (2, 'CAB', 'Личный кабинет с ЭЦП'); - -INSERT INTO COURIER_TYPE_DICTIONARY(ID, CODE, NAME) values (3, 'ORIG', 'Оригинал на бумаге'); - -INSERT INTO COURIER_TYPE_DICTIONARY(ID, CODE, NAME) values (3, 'STHS', 'Модуль обмена с Расчетной Организацией'); +INSERT INTO COURIER_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'STHS', 'ЭДО с Расчетной Организацией'); INSERT INTO TERM_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'S', 'Срочный'); @@ -18,12 +12,24 @@ INSERT INTO TERM_TYPE_DICTIONARY(ID, CODE, NAME) values (3, 'V', 'До вост INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (1, 'GBAL', 'Зачисление остатков'); -INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (2, '', ''); +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (2, 'GBLC', 'Подтверждение зачисления остатков'); INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (3, 'ABLK', 'Блокировка счета'); INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (4, 'GALB', 'Запрос остатков по всем счетам'); +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (5, 'ADBL', 'Дозачисление/списание остатков'); + +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (6, 'ADBC', 'Подтверждение дозачисления/списания остатков'); + +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (7, 'CORD', 'Формирование сводного платежного поручения'); + +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (8, 'CORC', 'Получение подтверждения переводов'); + +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (34, 'GBLD', 'Поступление средств'); + +INSERT INTO TASK_DICTIONARY(ID, CODE, NAME) values (35, 'GBDC', 'Подтверждение поступления средств'); + INSERT INTO TASK_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Активна'); INSERT INTO TASK_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'BLKD', 'Не активна'); @@ -34,6 +40,14 @@ INSERT INTO TRADING_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'TRAD', 'Тор INSERT INTO TRADING_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'NTRD', 'Неторговый'); +INSERT INTO TRANSACTION_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'STLD', 'Рассчитан'); + +INSERT INTO TRANSACTION_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'SENT', 'Отправлен в ПРЦ'); + +INSERT INTO TRANSACTION_STATUS_DICTIONARY(ID, CODE, NAME) values (3, 'OK', 'Обработан ПРЦ'); + +INSERT INTO TRANSACTION_STATUS_DICTIONARY(ID, CODE, NAME) values (4, 'FAIL', 'Ошибка ПРЦ'); + INSERT INTO SOURCE_DICTIONARY(ID, CODE, NAME) values (1, 'TIMT', 'Расписание'); INSERT INTO SOURCE_DICTIONARY(ID, CODE, NAME) values (2, 'SCHD', 'Планировщик'); @@ -62,9 +76,11 @@ INSERT INTO WORKFLOW_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Ак INSERT INTO WORKFLOW_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'BLKD', 'Не активен'); -INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (1, 'SELL', 'Привлечь'); +INSERT INTO ACCOUNT_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Активен'); -INSERT INTO MONEY_FLOW_SIDE_DICTIONARY(ID, CODE, NAME) values (2, 'BUY', 'Разместить'); +INSERT INTO ACCOUNT_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'BLKD', 'Заблокирован'); + +INSERT INTO ACCOUNT_STATUS_DICTIONARY(ID, CODE, NAME) values (3, 'CLOS', 'Закрыт'); INSERT INTO BALANCE_ACCOUNT_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'ACNT', 'Остатки по счетам'); @@ -88,7 +104,7 @@ INSERT INTO SERVICE_STATUS_DICTIONARY(ID, CODE, NAME) values (3, 'SSPD', 'При INSERT INTO SERVICE_STATUS_DICTIONARY(ID, CODE, NAME) values (4, 'CLOS', 'Закрыт'); -INSERT INTO SERVICE_STATUS_DICTIONARY(ID, CODE, NAME) values (4, 'ROPN', 'Возобновлен'); +INSERT INTO SERVICE_STATUS_DICTIONARY(ID, CODE, NAME) values (5, 'ROPN', 'Возобновлен'); INSERT INTO STATEMENT_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'FULL', 'Установка суммы'); @@ -108,21 +124,23 @@ INSERT INTO SERVICE_DICTIONARY(ID, CODE, NAME) values (1, 'MKR', 'Денежны INSERT INTO SERVICE_PRODUCT_DICTIONARY(ID, CODE, NAME) values (1, 'PRNT', 'Расчет обязательств с процентом'); -INSERT INTO SERVICE_PRODUCT_DICTIONARY(ID, CODE, NAME) values (2, 'ZERO', 'Расчет обязательств без процента'); +INSERT INTO SERVICE_PRODUCT_DICTIONARY(ID, CODE, NAME) values (2, 'ZERO', 'Расчет обязательств без процента (по умолчанию)'); -INSERT INTO CLEARING_CATEGORY_DICTIONARY(ID, CODE, NAME) values (1, 'C', 'Категория «Ц» - Банк России'); +INSERT INTO SECTOR_DICTIONARY(ID, CODE, NAME) values (1, 'MKR', 'Секция Денежного рынка МКР'); -INSERT INTO CLEARING_CATEGORY_DICTIONARY(ID, CODE, NAME) values (2, 'B', 'Категория «Б» - Кредитная организация ДР'); +INSERT INTO CLEARING_MEMBER_CATEGORY_DICTIONARY(ID, CODE, NAME) values (1, 'C', 'Категория «Ц» - Банк России'); -INSERT INTO CLEARING_CATEGORY_DICTIONARY(ID, CODE, NAME) values (3, 'F', 'Категория «Ф» - Участник рынка РЦБ'); +INSERT INTO CLEARING_MEMBER_CATEGORY_DICTIONARY(ID, CODE, NAME) values (2, 'B', 'Категория «Б» - Кредитная организация ДР'); -INSERT INTO CLEARING_CATEGORY_DICTIONARY(ID, CODE, NAME) values (4, 'I', 'Категория «И» - Инициатор по ТБС'); +INSERT INTO CLEARING_MEMBER_CATEGORY_DICTIONARY(ID, CODE, NAME) values (3, 'F', 'Категория «Ф» - Участник рынка РЦБ'); -INSERT INTO CLEARING_CATEGORY_DICTIONARY(ID, CODE, NAME) values (5, 'V', 'Категория «В» - Инициатор по ТКС'); +INSERT INTO CLEARING_MEMBER_CATEGORY_DICTIONARY(ID, CODE, NAME) values (4, 'I', 'Категория «И» - Инициатор по ТБС'); -INSERT INTO CLEARING_CATEGORY_DICTIONARY(ID, CODE, NAME) values (6, 'T', 'Категория «Т» - Участник товарного рынка'); +INSERT INTO CLEARING_MEMBER_CATEGORY_DICTIONARY(ID, CODE, NAME) values (5, 'V', 'Категория «В» - Инициатор по ТКС'); -INSERT INTO CLEARING_CATEGORY_DICTIONARY(ID, CODE, NAME) values (7, 'K', 'Категория «К» - Участник клиринга - Контроллер'); +INSERT INTO CLEARING_MEMBER_CATEGORY_DICTIONARY(ID, CODE, NAME) values (6, 'T', 'Категория «Т» - Участник товарного рынка'); + +INSERT INTO CLEARING_MEMBER_CATEGORY_DICTIONARY(ID, CODE, NAME) values (7, 'K', 'Категория «К» - Участник клиринга - Контроллер'); INSERT INTO MANAGEMENT_JOURNAL_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'CRPA', 'Корпоративное событие, связанное с допуском'); @@ -268,147 +286,187 @@ INSERT INTO RESULT_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'NACK', 'Неу INSERT INTO RESULT_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'ACK', 'Успешно'); -INSERT INTO IN_OUT_S_DF_TYPE_DICTIONARY(ID, CODE, NAME) values (1, '0102', 'Входящий DF-01/Исходящий DF-02'); +INSERT INTO IN_OUT_S_DF_TYPE_DICTIONARY(ID, CODE, NAME) values (1, '0102', 'Входящий ДФ-01/Исходящий ДФ-02'); + +INSERT INTO IN_OUT_S_DF_TYPE_DICTIONARY(ID, CODE, NAME) values (2, '1617', 'Входящий ДФ-16/Исходящий ДФ-17'); + +INSERT INTO IN_OUT_S_DF_TYPE_DICTIONARY(ID, CODE, NAME) values (3, '0910', 'Входящий ДФ-09/Исходящий ДФ-10'); + +INSERT INTO SESSION_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACTV', 'Сессия активна'); + +INSERT INTO SESSION_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'CLRN', 'Идет клиринг'); + +INSERT INTO OBJECT_TYPE_DICTIONARY(ID, CODE, NAME) values (1, 'STMT', 'STATEMENT'); + +INSERT INTO NOTIFICATION_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'ACPT', 'Принято'); + +INSERT INTO NOTIFICATION_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'CNCL', 'Отменено'); INSERT INTO CURRENCY_CODE_DICTIONARY(ID, CODE, NAME) values (643, 'RUB', 'Российский рубль'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1000, '1 000', 'Общая ошибка модуля securities_services.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1000, '1000', 'Общая ошибка модуля securities_services.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1001, '1 001', 'Нет прав на проведение данной операции.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1001, '1001', 'Нет прав на проведение данной операции.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1002, '1 002', 'Не заданы обязательные поля.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1002, '1002', 'Не заданы обязательные поля.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1003, '1 003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1003, '1003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1004, '1 004', 'Неверное значение поля %s.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1004, '1004', 'Неверное значение поля %s.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1005, '1 005', 'Такая запись уже существует.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1005, '1005', 'Такая запись уже существует.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1006, '1 006', 'Запись не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1006, '1006', 'Запись не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1007, '1 007', 'Пользователь не найден.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1007, '1007', 'Пользователь не найден.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1008, '1 008', 'Пользователь неактивен.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1008, '1008', 'Пользователь неактивен.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1010, '1 010', 'Такой Инструмент уже существует.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1010, '1010', 'Такой Инструмент уже существует.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1011, '1 011', 'Инструмент не найден.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1011, '1011', 'Инструмент не найден.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1012, '1 012', 'Инструмент неактивен.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1012, '1012', 'Инструмент неактивен.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2000, '2 000', 'Общая ошибка модуля utility_service'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2000, '2000', 'Общая ошибка модуля utility_service'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2001, '2 001', 'Нет прав на проведение данной операции.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2001, '2001', 'Нет прав на проведение данной операции.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2002, '2 002', 'Не заданы обязательные поля.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2002, '2002', 'Не заданы обязательные поля.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2003, '2 003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2003, '2003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2004, '2 004', 'Неверное значение поля %s.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2004, '2004', 'Неверное значение поля %s.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2005, '2 005', 'Такая запись уже существует.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2005, '2005', 'Такая запись уже существует.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2006, '2 006', 'Запись не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (2006, '2006', 'Запись не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3000, '3 000', 'Общая ошибка модуля company_services'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3000, '3000', 'Общая ошибка модуля company_services'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3001, '3 001', 'Нет прав на проведение данной операции.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3001, '3001', 'Нет прав на проведение данной операции.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3002, '3 002', 'Не заданы обязательные поля.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3002, '3002', 'Не заданы обязательные поля.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3003, '3 003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3003, '3003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3004, '3 004', 'Неверное значение поля %s.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3004, '3004', 'Неверное значение поля %s.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3005, '3 005', 'Такая запись уже существует.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3005, '3005', 'Такая запись уже существует.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3006, '3 006', 'Запись не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3006, '3006', 'Запись не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3010, '3 010', 'Такая Компания уже существует'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3010, '3010', 'Такая Компания уже существует'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3011, '3 011', 'Компания не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3011, '3011', 'Компания не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3012, '3 012', 'Компания неактивна.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3012, '3012', 'Компания неактивна.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3013, '3 013', 'Профиль Компании не найден.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3013, '3013', 'Профиль Компании не найден.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3014, '3 014', 'Реквизит Компании не найден.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3014, '3014', 'Реквизит Компании не найден.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3015, '3 015', 'Контакт Компании не найден.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3015, '3015', 'Контакт Компании не найден.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3016, '3 016', 'Категория Компании не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3016, '3016', 'Категория Компании не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3017, '3 017', 'Компании уже присвоена Категория %s.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (3017, '3017', 'Компании уже присвоена Категория %s.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (4000, '4 000', 'Общая ошибка модуля report_serivces'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (4000, '4000', 'Общая ошибка модуля report_serivces'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5000, '5 000', 'Общая ошибка модуля account_services'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5000, '5000', 'Общая ошибка модуля account_services'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5001, '5 001', 'Нет прав на проведение данной операции.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5001, '5001', 'Нет прав на проведение данной операции.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5002, '5 002', 'Не заданы обязательные поля.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5002, '5002', 'Не заданы обязательные поля.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5003, '5 003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5003, '5003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5004, '5 004', 'Неверное значение поля %s.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5004, '5004', 'Неверное значение поля %s.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5005, '5 005', 'Такая запись уже существует.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5005, '5005', 'Такая запись уже существует.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5006, '5 006', 'Запись не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5006, '5006', 'Запись не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5010, '5 010', 'Счет %s уже существует.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5010, '5010', 'Счет %s уже существует.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5011, '5 011', 'Счет %s не найден.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5011, '5011', 'Счет %s не найден.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5012, '5 012', 'Счет %s неактивен.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5012, '5012', 'Счет %s неактивен.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5200, '5 200', 'Общая ошибка модуля balance_services'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5013, '5013', 'Компания не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5211, '5 211', 'Компания не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5014, '5014', 'Компания неактивна.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5212, '5 212', 'Компания неактивна.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5200, '5200', 'Общая ошибка модуля balance_services'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5213, '5 213', 'Валюта не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5210, '5210', 'Клиринговая сессия неактивна.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5214, '5 214', 'Загрузка остатков возможна только на текущую дату.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5211, '5211', 'Компания не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5215, '5 215', 'Загрузка остатков возможна только по рынку МКР.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5212, '5212', 'Компания неактивна.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5216, '5 216', 'Загрузка остатков возможна только по собственным счетам.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5213, '5213', 'Валюта не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5217, '5 217', 'Счет %s не найден.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5214, '5214', 'Загрузка остатков возможна только на текущую дату.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5218, '5 218', 'Счет %s неактивен.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5215, '5215', 'Загрузка остатков возможна только по рынку МКР.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5400, '5 400', 'Общая ошибка модуля проведения расчетов'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5216, '5216', 'Загрузка остатков возможна только по собственным счетам.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5600, '5 600', 'Общая ошибка модуля dbf-loader'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5217, '5217', 'Счет %s не найден.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5800, '5 800', 'Общая ошибка модуля dbf-export'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5218, '5218', 'Счет %s неактивен.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (6000, '6 000', 'Общая ошибка модуля api-lk-company'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5219, '5219', 'Дозачисления/списания возможны только по рынку МКР.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7000, '7 000', 'Общая ошибка модуля scheduler_service'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5220, '5220', 'Сумма списания превышает сумму средств на счете.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7001, '7 001', 'Нет прав на проведение данной операции.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5221, '5221', 'Поступление средств возможно только по рынку МКР.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7002, '7 002', 'Не заданы обязательные поля.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5400, '5400', 'Общая ошибка модуля проведения расчетов'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7003, '7 003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5600, '5600', 'Общая ошибка модуля dbf-loader'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7004, '7 004', 'Неверное значение поля %s.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5800, '5800', 'Общая ошибка модуля dbf-export'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7005, '7 005', 'Такая запись уже существует.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (6000, '6000', 'Общая ошибка модуля api-lk-company'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7006, '7 006', 'Запись не найдена.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7000, '7000', 'Общая ошибка модуля scheduler_service'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7010, '7 010', 'Невозможно добавить задачу на прошедшую дату.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7001, '7001', 'Нет прав на проведение данной операции.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7011, '7 011', 'Невозможно добавить задачу на прошедшее время.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7002, '7002', 'Не заданы обязательные поля.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7012, '7 012', 'Указанный в задаче нструмент не найден.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7003, '7003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); -INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7013, '7 013', 'Указанный инструмент неактивен.'); +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7004, '7004', 'Неверное значение поля %s.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7005, '7005', 'Такая запись уже существует.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7006, '7006', 'Запись не найдена.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7010, '7010', 'Невозможно добавить задачу на прошедшую дату.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7011, '7011', 'Невозможно добавить задачу на прошедшее время.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7012, '7012', 'Указанный в задаче нструмент не найден.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (7013, '7013', 'Указанный инструмент неактивен.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (8000, '8000', 'Общая ошибка модуля utility_service'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (8001, '8001', 'Нет прав на проведение данной операции.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (8002, '8002', 'Не заданы обязательные поля.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (8003, '8003', 'Запись с указанным идентификатором в справочнике %s не найдена.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (8004, '8004', 'Неверное значение поля %s.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (8005, '8005', 'Такая запись уже существует.'); + +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (8006, '8006', 'Запись не найдена.'); /* Business objects */ diff --git a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql index 24c27681f..e4588f8ce 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql @@ -81,6 +81,16 @@ COMMENT ON COLUMN TRADING_STATUS_DICTIONARY.CODE IS 'Код'; COMMENT ON COLUMN TRADING_STATUS_DICTIONARY.NAME IS 'Торговый статус'; +-- transactionStatus - Справочник статусов транзакций +CREATE TABLE IF NOT EXISTS TRANSACTION_STATUS_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(50)); +COMMENT ON TABLE TRANSACTION_STATUS_DICTIONARY IS 'Справочник статусов транзакций'; + +COMMENT ON COLUMN TRANSACTION_STATUS_DICTIONARY.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN TRANSACTION_STATUS_DICTIONARY.CODE IS 'Код'; + +COMMENT ON COLUMN TRANSACTION_STATUS_DICTIONARY.NAME IS 'Статус транзакции'; + -- source - Справочник источников CREATE TABLE IF NOT EXISTS SOURCE_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(50)); COMMENT ON TABLE SOURCE_DICTIONARY IS 'Справочник источников'; @@ -201,15 +211,15 @@ COMMENT ON COLUMN COUNTRY_CODE_DICTIONARY.CODE IS 'Код'; COMMENT ON COLUMN COUNTRY_CODE_DICTIONARY.NAME IS 'Наименование'; --- clearingCategory - Справочник категорий участника клиринга -CREATE TABLE IF NOT EXISTS CLEARING_CATEGORY_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255)); -COMMENT ON TABLE CLEARING_CATEGORY_DICTIONARY IS 'Справочник категорий участника клиринга'; +-- clearingMemberCategory - Справочник категорий участника клиринга +CREATE TABLE IF NOT EXISTS CLEARING_MEMBER_CATEGORY_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255)); +COMMENT ON TABLE CLEARING_MEMBER_CATEGORY_DICTIONARY IS 'Справочник категорий участника клиринга'; -COMMENT ON COLUMN CLEARING_CATEGORY_DICTIONARY.ID IS 'Идентификатор записи'; +COMMENT ON COLUMN CLEARING_MEMBER_CATEGORY_DICTIONARY.ID IS 'Идентификатор записи'; -COMMENT ON COLUMN CLEARING_CATEGORY_DICTIONARY.CODE IS 'Код'; +COMMENT ON COLUMN CLEARING_MEMBER_CATEGORY_DICTIONARY.CODE IS 'Код'; -COMMENT ON COLUMN CLEARING_CATEGORY_DICTIONARY.NAME IS 'Наименование'; +COMMENT ON COLUMN CLEARING_MEMBER_CATEGORY_DICTIONARY.NAME IS 'Наименование'; -- contactType - Справочник типов контактов Компании CREATE TABLE IF NOT EXISTS CONTACT_TYPE_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255)); @@ -433,35 +443,65 @@ COMMENT ON COLUMN IN_OUT_S_DF_TYPE_DICTIONARY.CODE IS 'Код'; COMMENT ON COLUMN IN_OUT_S_DF_TYPE_DICTIONARY.NAME IS 'Тип записи'; +-- sessionStatus - Справочник статусов клиринговой сессии +CREATE TABLE IF NOT EXISTS SESSION_STATUS_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(50)); +COMMENT ON TABLE SESSION_STATUS_DICTIONARY IS 'Справочник статусов клиринговой сессии'; + +COMMENT ON COLUMN SESSION_STATUS_DICTIONARY.ID IS 'Идентификатор'; + +COMMENT ON COLUMN SESSION_STATUS_DICTIONARY.CODE IS 'Код'; + +COMMENT ON COLUMN SESSION_STATUS_DICTIONARY.NAME IS 'Наименование'; + +-- objectType - Справочник типов объектов +CREATE TABLE IF NOT EXISTS OBJECT_TYPE_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(50)); +COMMENT ON TABLE OBJECT_TYPE_DICTIONARY IS 'Справочник типов объектов'; + +COMMENT ON COLUMN OBJECT_TYPE_DICTIONARY.ID IS 'Идентификатор'; + +COMMENT ON COLUMN OBJECT_TYPE_DICTIONARY.CODE IS 'Код'; + +COMMENT ON COLUMN OBJECT_TYPE_DICTIONARY.NAME IS 'Наименование'; + +-- notificationStatus - Справочник статусов сообщений +CREATE TABLE IF NOT EXISTS NOTIFICATION_STATUS_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(50)); +COMMENT ON TABLE NOTIFICATION_STATUS_DICTIONARY IS 'Справочник статусов сообщений'; + +COMMENT ON COLUMN NOTIFICATION_STATUS_DICTIONARY.ID IS 'Идентификатор'; + +COMMENT ON COLUMN NOTIFICATION_STATUS_DICTIONARY.CODE IS 'Код'; + +COMMENT ON COLUMN NOTIFICATION_STATUS_DICTIONARY.NAME IS 'Наименование'; + /* Business objects */ --- user - Пользователь -CREATE TABLE IF NOT EXISTS USER_CLR(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, IDENTIFIER varchar(250)); -COMMENT ON TABLE USER_CLR IS 'Пользователь'; +-- userCls - Пользователь +CREATE TABLE IF NOT EXISTS USER_CLS(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, IDENTIFIER varchar(250)); +COMMENT ON TABLE USER_CLS IS 'Пользователь'; -COMMENT ON COLUMN USER_CLR.ID IS 'Идентификатор'; +COMMENT ON COLUMN USER_CLS.ID IS 'Идентификатор'; -COMMENT ON COLUMN USER_CLR.CREATED_AT IS 'Создано'; +COMMENT ON COLUMN USER_CLS.CREATED_AT IS 'Создано'; -COMMENT ON COLUMN USER_CLR.UPDATED_AT IS 'Изменено'; +COMMENT ON COLUMN USER_CLS.UPDATED_AT IS 'Изменено'; -COMMENT ON COLUMN USER_CLR.IDENTIFIER IS 'Внешний идентификатор'; +COMMENT ON COLUMN USER_CLS.IDENTIFIER IS 'Внешний идентификатор'; --- History log of user - Пользователь -CREATE TABLE IF NOT EXISTS USER_CLR_HISTORY(USER_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, IDENTIFIER varchar(250)); -COMMENT ON TABLE USER_CLR_HISTORY IS 'История изменений таблицы user'; -COMMENT ON COLUMN USER_CLR_HISTORY.USER_ID IS 'Идентификатор записи в таблице USER'; -COMMENT ON COLUMN USER_CLR_HISTORY.EVENT_TIME IS 'Дата и время изменения'; -COMMENT ON COLUMN USER_CLR_HISTORY.EVENT_USER_ID IS 'Инициатор изменения'; +-- History log of userCls - Пользователь +CREATE TABLE IF NOT EXISTS USER_CLS_HISTORY(USER_CLS_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, IDENTIFIER varchar(250)); +COMMENT ON TABLE USER_CLS_HISTORY IS 'История изменений таблицы userCls'; +COMMENT ON COLUMN USER_CLS_HISTORY.USER_CLS_ID IS 'Идентификатор записи в таблице USER_CLS'; +COMMENT ON COLUMN USER_CLS_HISTORY.EVENT_TIME IS 'Дата и время изменения'; +COMMENT ON COLUMN USER_CLS_HISTORY.EVENT_USER_ID IS 'Инициатор изменения'; -COMMENT ON COLUMN USER_CLR_HISTORY.ID IS 'Идентификатор'; +COMMENT ON COLUMN USER_CLS_HISTORY.ID IS 'Идентификатор'; -COMMENT ON COLUMN USER_CLR_HISTORY.CREATED_AT IS 'Создано'; +COMMENT ON COLUMN USER_CLS_HISTORY.CREATED_AT IS 'Создано'; -COMMENT ON COLUMN USER_CLR_HISTORY.UPDATED_AT IS 'Изменено'; +COMMENT ON COLUMN USER_CLS_HISTORY.UPDATED_AT IS 'Изменено'; -COMMENT ON COLUMN USER_CLR_HISTORY.IDENTIFIER IS 'Внешний идентификатор'; +COMMENT ON COLUMN USER_CLS_HISTORY.IDENTIFIER IS 'Внешний идентификатор'; -- userRoleSession - Набор ролей CREATE TABLE IF NOT EXISTS USER_ROLE_SESSION(ID bigint PRIMARY KEY, USER_ID bigint, USER_ROLE char(4), COMPANY_ID bigint, STATUS char(4)); @@ -469,7 +509,7 @@ COMMENT ON TABLE USER_ROLE_SESSION IS 'Набор ролей'; COMMENT ON COLUMN USER_ROLE_SESSION.ID IS 'Идентификатор записи'; -COMMENT ON COLUMN USER_ROLE_SESSION.USER_ID IS 'Идентификатор пользователя (linked to user)'; +COMMENT ON COLUMN USER_ROLE_SESSION.USER_ID IS 'Идентификатор пользователя (linked to userCls)'; COMMENT ON COLUMN USER_ROLE_SESSION.USER_ROLE IS 'Идентификатор роли (linked to userRole)'; @@ -483,14 +523,14 @@ COMMENT ON TABLE USER_SETTINGS IS 'Настройки пользователя'; COMMENT ON COLUMN USER_SETTINGS.ID IS 'Идентификатор'; -COMMENT ON COLUMN USER_SETTINGS.USER_ID IS 'Пользователь (linked to user)'; +COMMENT ON COLUMN USER_SETTINGS.USER_ID IS 'Пользователь (linked to userCls)'; COMMENT ON COLUMN USER_SETTINGS.VERSION IS 'Версия настроек пользователя'; COMMENT ON COLUMN USER_SETTINGS.JSON IS 'Данные конфигурации'; -- userConnect - Активность пользователей в системе -CREATE TABLE IF NOT EXISTS USER_CONNECT(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, USER_ID bigint, CONNECTION_TIME timestamp, DISCONNECTION_TIME timestamp, SERVER_I_P varchar(250), CLIENT_I_P varchar(250), CONNECTION_STATE char(4), CLEARING_DATE date, ERROR_CODE char(4), ERROR_TEXT char(4)); +CREATE TABLE IF NOT EXISTS USER_CONNECT(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, USER_ID bigint, CONNECTION_TIME timestamp, DISCONNECTION_TIME timestamp, SERVER_I_P varchar(250), CLIENT_I_P varchar(250), CONNECTION_STATE char(4), CLEARING_DATE date, ERROR_CODE bigint, ERROR_TEXT char(4)); COMMENT ON TABLE USER_CONNECT IS 'Активность пользователей в системе'; COMMENT ON COLUMN USER_CONNECT.ID IS 'Идентификатор'; @@ -499,7 +539,7 @@ COMMENT ON COLUMN USER_CONNECT.CREATED_AT IS 'Создано'; COMMENT ON COLUMN USER_CONNECT.UPDATED_AT IS 'Изменено'; -COMMENT ON COLUMN USER_CONNECT.USER_ID IS 'Пользователь (linked to user)'; +COMMENT ON COLUMN USER_CONNECT.USER_ID IS 'Пользователь (linked to userCls)'; COMMENT ON COLUMN USER_CONNECT.CONNECTION_TIME IS 'Последнее соединение'; @@ -519,7 +559,7 @@ COMMENT ON COLUMN USER_CONNECT.ERROR_TEXT IS 'Полный текст ошибк -- History log of userConnect - Активность пользователей в системе -CREATE TABLE IF NOT EXISTS USER_CONNECT_HISTORY(USER_CONNECT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, USER_ID bigint, CONNECTION_TIME timestamp, DISCONNECTION_TIME timestamp, SERVER_I_P varchar(250), CLIENT_I_P varchar(250), CONNECTION_STATE char(4), CLEARING_DATE date, ERROR_CODE char(4), ERROR_TEXT char(4)); +CREATE TABLE IF NOT EXISTS USER_CONNECT_HISTORY(USER_CONNECT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, USER_ID bigint, CONNECTION_TIME timestamp, DISCONNECTION_TIME timestamp, SERVER_I_P varchar(250), CLIENT_I_P varchar(250), CONNECTION_STATE char(4), CLEARING_DATE date, ERROR_CODE bigint, ERROR_TEXT char(4)); COMMENT ON TABLE USER_CONNECT_HISTORY IS 'История изменений таблицы userConnect'; COMMENT ON COLUMN USER_CONNECT_HISTORY.USER_CONNECT_ID IS 'Идентификатор записи в таблице USER_CONNECT'; COMMENT ON COLUMN USER_CONNECT_HISTORY.EVENT_TIME IS 'Дата и время изменения'; @@ -531,7 +571,7 @@ COMMENT ON COLUMN USER_CONNECT_HISTORY.CREATED_AT IS 'Создано'; COMMENT ON COLUMN USER_CONNECT_HISTORY.UPDATED_AT IS 'Изменено'; -COMMENT ON COLUMN USER_CONNECT_HISTORY.USER_ID IS 'Пользователь (linked to user)'; +COMMENT ON COLUMN USER_CONNECT_HISTORY.USER_ID IS 'Пользователь (linked to userCls)'; COMMENT ON COLUMN USER_CONNECT_HISTORY.CONNECTION_TIME IS 'Последнее соединение'; @@ -635,7 +675,7 @@ COMMENT ON COLUMN TASK_RUNNER.CREATED_AT IS 'Создано'; COMMENT ON COLUMN TASK_RUNNER.UPDATED_AT IS 'Изменено'; -COMMENT ON COLUMN TASK_RUNNER.SENDER_ID IS 'Отправитель (linked to user)'; +COMMENT ON COLUMN TASK_RUNNER.SENDER_ID IS 'Отправитель (linked to userCls)'; COMMENT ON COLUMN TASK_RUNNER.TASK IS 'Задача (linked to task)'; @@ -745,7 +785,7 @@ COMMENT ON COLUMN CLEARING_MEMBER_CATEGORY.ID IS 'Идентификатор з COMMENT ON COLUMN CLEARING_MEMBER_CATEGORY.COMPANY_ID IS 'Идентификатор Компании (linked to company)'; -COMMENT ON COLUMN CLEARING_MEMBER_CATEGORY.CLEARING_MEMBER_CATEGORY IS 'Идентификатор категории участника клиринга (linked to clearingCategory)'; +COMMENT ON COLUMN CLEARING_MEMBER_CATEGORY.CLEARING_MEMBER_CATEGORY IS 'Идентификатор категории участника клиринга (linked to clearingMemberCategory)'; -- contact - Контакты Компании CREATE TABLE IF NOT EXISTS CONTACT(ID bigint PRIMARY KEY, COMPANY_ID bigint, CONTACT_TYPE char(4), CONTACT_VALUE varchar(255)); @@ -801,6 +841,76 @@ COMMENT ON COLUMN COMPANY_SYMBOLS.COMPANY_SYMBOL IS 'Идентификатор COMMENT ON COLUMN COMPANY_SYMBOLS.COMPANY_SYMBOL_VALUE IS 'Значение справочника'; +-- clearmemberRegistry - Реестр участников клиринга +CREATE TABLE IF NOT EXISTS CLEARMEMBER_REGISTRY(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), FULL_NAME varchar(255), SHORT_NAME varchar(255), CATEGORY_LIST char(4), CORPORATION_SOLE char(4), ACCOUNT varchar(50), BANK bigint, BANK_NAME varchar(255), INN varchar(255), BIC varchar(255), OGRN varchar(255), CPP varchar(255), OCPO varchar(255), CONTRACT_NUMBER varchar(255), CONTRACT_DATE date, REGISTRATION_DATE date, SYSTEM_DATE date, ACCESS_DATE timestamp, SUSPENTION_DATE timestamp, REOPENING_DATE timestamp, CLOSE_DATE timestamp, EXCLUSION_DATE timestamp, ADDRESS varchar(255), EMAIL varchar(255)); +COMMENT ON TABLE CLEARMEMBER_REGISTRY IS 'Реестр участников клиринга'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.CREATED_AT IS 'Дата и время создания записи'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.UPDATED_AT IS 'Дата и время изменения записи'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.TRADING_CODE IS 'Код участника торгов'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.CLEARING_CODE IS 'Код участника клиринга'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.FULL_NAME IS 'Полное наименование участника клиринга'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.SHORT_NAME IS 'Краткое наименование участника клиринга'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.CATEGORY_LIST IS 'Идентификатор категории участника клиринга (linked to clearingCategory)'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.CORPORATION_SOLE IS 'Идентификатор единоличного исполнительного органа (linked to corporationSoleType)'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.ACCOUNT IS 'Cчета'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.BANK IS 'Банк (linked to bankAccount)'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.BANK_NAME IS 'Наименование банка'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.INN IS 'Идентификационный номер налогоплательщика (ИНН)'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.BIC IS 'Банковский идентификационный код (БИК)'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.OGRN IS 'Основной государственный регистрационный номер'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.CPP IS 'Код причины постановки (КПП)'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.OCPO IS 'Код в Общероссийском классификаторе предприятий'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.CONTRACT_NUMBER IS 'Номер договора'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.CONTRACT_DATE IS 'Дата выдачи'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.REGISTRATION_DATE IS 'Дата регистрации'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.SYSTEM_DATE IS 'Системная дата'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.ACCESS_DATE IS 'Дата допуска к КО'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.SUSPENTION_DATE IS 'Дата приостановления'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.REOPENING_DATE IS 'Дата возобновления'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.CLOSE_DATE IS 'Дата прекращения'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.EXCLUSION_DATE IS 'Дата исключения из реестра'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.ADDRESS IS 'Адрес местонахождения'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY.EMAIL IS 'Электронная почта'; + +-- clearmemberRegistryChange - Журнал изменений информации участников клиринга +CREATE TABLE IF NOT EXISTS CLEARMEMBER_REGISTRY_CHANGE(DATE timestamp, CLEARING_CODE varchar(255), COMMENT varchar(255)); +COMMENT ON TABLE CLEARMEMBER_REGISTRY_CHANGE IS 'Журнал изменений информации участников клиринга'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY_CHANGE.DATE IS 'Дата и время изменения записи'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY_CHANGE.CLEARING_CODE IS 'Код участника клиринга'; + +COMMENT ON COLUMN CLEARMEMBER_REGISTRY_CHANGE.COMMENT IS 'Комментарий'; + -- keyRate - Ключевая ставка ЦБ CREATE TABLE IF NOT EXISTS KEY_RATE(ID bigint PRIMARY KEY, RATE numeric(72,18), START_DATE date, END_DATE date, DOCUMENT varchar(255), WORKFLOW_STATUS char(4)); COMMENT ON TABLE KEY_RATE IS 'Ключевая ставка ЦБ'; @@ -828,7 +938,7 @@ COMMENT ON COLUMN COMPANY_ROLE_SET.COMPANY_ID IS 'Идентификатор с COMMENT ON COLUMN COMPANY_ROLE_SET.ROLE_ID IS 'Значение справочника (linked to companyRole)'; -- account - Счета -CREATE TABLE IF NOT EXISTS ACCOUNT(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT varchar(12), ACCOUNT_TYPE char(4), RELATION_ID bigint, STATUS char(4), PROCESSING_SIGN char(4)); +CREATE TABLE IF NOT EXISTS ACCOUNT(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT varchar(50), ACCOUNT_TYPE char(4), RELATION_ID bigint, ACCOUNT_STATUS char(4), PROCESSING_SIGN char(4)); COMMENT ON TABLE ACCOUNT IS 'Счета'; COMMENT ON COLUMN ACCOUNT.ID IS 'Идентификатор'; @@ -843,13 +953,13 @@ COMMENT ON COLUMN ACCOUNT.ACCOUNT_TYPE IS 'Идентификатор типа COMMENT ON COLUMN ACCOUNT.RELATION_ID IS 'Идентификатор договорных отношений (linked to relation)'; -COMMENT ON COLUMN ACCOUNT.STATUS IS 'Идентификатор статуса (linked to accountStatus)'; +COMMENT ON COLUMN ACCOUNT.ACCOUNT_STATUS IS 'Идентификатор статуса (linked to accountStatus)'; COMMENT ON COLUMN ACCOUNT.PROCESSING_SIGN IS 'Признак обработки счета (linked to allowed)'; -- History log of account - Счета -CREATE TABLE IF NOT EXISTS ACCOUNT_HISTORY(ACCOUNT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT varchar(12), ACCOUNT_TYPE char(4), RELATION_ID bigint, STATUS char(4), PROCESSING_SIGN char(4)); +CREATE TABLE IF NOT EXISTS ACCOUNT_HISTORY(ACCOUNT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT varchar(50), ACCOUNT_TYPE char(4), RELATION_ID bigint, ACCOUNT_STATUS char(4), PROCESSING_SIGN char(4)); COMMENT ON TABLE ACCOUNT_HISTORY IS 'История изменений таблицы account'; COMMENT ON COLUMN ACCOUNT_HISTORY.ACCOUNT_ID IS 'Идентификатор записи в таблице ACCOUNT'; COMMENT ON COLUMN ACCOUNT_HISTORY.EVENT_TIME IS 'Дата и время изменения'; @@ -867,7 +977,7 @@ COMMENT ON COLUMN ACCOUNT_HISTORY.ACCOUNT_TYPE IS 'Идентификатор т COMMENT ON COLUMN ACCOUNT_HISTORY.RELATION_ID IS 'Идентификатор договорных отношений (linked to relation)'; -COMMENT ON COLUMN ACCOUNT_HISTORY.STATUS IS 'Идентификатор статуса (linked to accountStatus)'; +COMMENT ON COLUMN ACCOUNT_HISTORY.ACCOUNT_STATUS IS 'Идентификатор статуса (linked to accountStatus)'; COMMENT ON COLUMN ACCOUNT_HISTORY.PROCESSING_SIGN IS 'Признак обработки счета (linked to allowed)'; @@ -920,7 +1030,7 @@ COMMENT ON COLUMN RELATION_HISTORY.SERVICE_PRODUCT IS 'Идентификато COMMENT ON COLUMN RELATION_HISTORY.COMMENT IS 'Текст причины'; -- bankAccount - Банковские реквизиты для перечисления денежных средств -CREATE TABLE IF NOT EXISTS BANK_ACCOUNT(ID bigint PRIMARY KEY, ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY char(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN char(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(12)); +CREATE TABLE IF NOT EXISTS BANK_ACCOUNT(ID bigint PRIMARY KEY, ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY char(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN char(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50)); COMMENT ON TABLE BANK_ACCOUNT IS 'Банковские реквизиты для перечисления денежных средств'; COMMENT ON COLUMN BANK_ACCOUNT.ID IS 'Идентификатор записи'; @@ -949,11 +1059,11 @@ COMMENT ON COLUMN BANK_ACCOUNT.TAXPAYER_IDENTIFICATION_NUMBER IS 'Идентиф COMMENT ON COLUMN BANK_ACCOUNT.TAX_REGISTRATION_REASON_CODE IS 'Код причины постановки (КПП)'; -COMMENT ON COLUMN BANK_ACCOUNT.ACCOUNT IS 'Номер счета (linked to account)'; +COMMENT ON COLUMN BANK_ACCOUNT.ACCOUNT IS 'Номер счета'; -- History log of bankAccount - Банковские реквизиты для перечисления денежных средств -CREATE TABLE IF NOT EXISTS BANK_ACCOUNT_HISTORY(BANK_ACCOUNT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY char(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN char(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(12)); +CREATE TABLE IF NOT EXISTS BANK_ACCOUNT_HISTORY(BANK_ACCOUNT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, ACCOUNT_ID bigint, BANK_IDENTIFICATION_CODE varchar(255), BANK_NAME varchar(255), CORRESPONDENT_ACCOUNT varchar(255), CORRESPONDENT_ACCOUNT_NAME varchar(255), CURRENCY char(4), DESTINATION varchar(255), IBAN varchar(255), INTERNATIONAL_TRANSFER_SIGN char(4), SWIFT_CODE varchar(255), TAXPAYER_IDENTIFICATION_NUMBER varchar(255), TAX_REGISTRATION_REASON_CODE varchar(255), ACCOUNT varchar(50)); 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.EVENT_TIME IS 'Дата и время изменения'; @@ -985,7 +1095,7 @@ COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.TAXPAYER_IDENTIFICATION_NUMBER IS 'Иде COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.TAX_REGISTRATION_REASON_CODE IS 'Код причины постановки (КПП)'; -COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ACCOUNT IS 'Номер счета (linked to account)'; +COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ACCOUNT IS 'Номер счета'; -- informationAccount - Информационные счета CREATE TABLE IF NOT EXISTS INFORMATION_ACCOUNT(ID bigint PRIMARY KEY, ACCOUNT_ID bigint, CLEARING_ACCOUNT_ID bigint); @@ -1275,7 +1385,7 @@ COMMENT ON COLUMN MARKET_HISTORY.SETTLEMENT_CURRENCY IS 'Валютный код COMMENT ON COLUMN MARKET_HISTORY.SECTOR IS 'Идентификатор секции (linked to sector)'; -- accountBalance - Информация об остатках ден. средств -CREATE TABLE IF NOT EXISTS ACCOUNT_BALANCE(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, OPEN_BALANCE_AMOUNT numeric(72,18), START_BALANCE_AMOUNT numeric(72,18), CLOSE_BALANCE_AMOUNT numeric(72,18), TRADE_BALANCE_AMOUNT numeric(72,18), FREE_BALANCE_AMOUNT numeric(72,18), CHANGE_BALANCE_AMOUNT numeric(72,18), CREDIT_AMOUNT numeric(72,18), DEBIT_AMOUNT numeric(72,18), BALANCE_AMOUNT numeric(72,18), BALANCE_ACCOUNT_TYPE char(4), CLEARING_DATE date, CURRENCY_CODE char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255)); +CREATE TABLE IF NOT EXISTS ACCOUNT_BALANCE(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE char(4), ACCOUNT varchar(50), OPEN_BALANCE_AMOUNT numeric(72,18), START_BALANCE_AMOUNT numeric(72,18), CLOSE_BALANCE_AMOUNT numeric(72,18), TRADE_BALANCE_AMOUNT numeric(72,18), FREE_BALANCE_AMOUNT numeric(72,18), CHANGE_BALANCE_AMOUNT numeric(72,18), CREDIT_AMOUNT numeric(72,18), DEBIT_AMOUNT numeric(72,18), BALANCE_AMOUNT numeric(72,18), BALANCE_ACCOUNT_TYPE char(4), CLEARING_DATE date, CURRENCY_CODE char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255)); COMMENT ON TABLE ACCOUNT_BALANCE IS 'Информация об остатках ден. средств'; COMMENT ON COLUMN ACCOUNT_BALANCE.ID IS 'Идентификатор записи'; @@ -1290,7 +1400,7 @@ COMMENT ON COLUMN ACCOUNT_BALANCE.ACCOUNT_ID IS 'Идентификатор сч COMMENT ON COLUMN ACCOUNT_BALANCE.ACCOUNT_TYPE IS 'Тип счета (linked to account)'; -COMMENT ON COLUMN ACCOUNT_BALANCE.ACCOUNT IS 'Счет (linked to account)'; +COMMENT ON COLUMN ACCOUNT_BALANCE.ACCOUNT IS 'Счет'; COMMENT ON COLUMN ACCOUNT_BALANCE.OPEN_BALANCE_AMOUNT IS 'Начальная сумма после расчетной организации'; @@ -1324,7 +1434,7 @@ COMMENT ON COLUMN ACCOUNT_BALANCE.FULL_NAME IS 'Полное наименова -- History log of accountBalance - Информация об остатках ден. средств -CREATE TABLE IF NOT EXISTS ACCOUNT_BALANCE_HISTORY(ACCOUNT_BALANCE_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, OPEN_BALANCE_AMOUNT numeric(72,18), START_BALANCE_AMOUNT numeric(72,18), CLOSE_BALANCE_AMOUNT numeric(72,18), TRADE_BALANCE_AMOUNT numeric(72,18), FREE_BALANCE_AMOUNT numeric(72,18), CHANGE_BALANCE_AMOUNT numeric(72,18), CREDIT_AMOUNT numeric(72,18), DEBIT_AMOUNT numeric(72,18), BALANCE_AMOUNT numeric(72,18), BALANCE_ACCOUNT_TYPE char(4), CLEARING_DATE date, CURRENCY_CODE char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255)); +CREATE TABLE IF NOT EXISTS ACCOUNT_BALANCE_HISTORY(ACCOUNT_BALANCE_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE char(4), ACCOUNT varchar(50), OPEN_BALANCE_AMOUNT numeric(72,18), START_BALANCE_AMOUNT numeric(72,18), CLOSE_BALANCE_AMOUNT numeric(72,18), TRADE_BALANCE_AMOUNT numeric(72,18), FREE_BALANCE_AMOUNT numeric(72,18), CHANGE_BALANCE_AMOUNT numeric(72,18), CREDIT_AMOUNT numeric(72,18), DEBIT_AMOUNT numeric(72,18), BALANCE_AMOUNT numeric(72,18), BALANCE_ACCOUNT_TYPE char(4), CLEARING_DATE date, CURRENCY_CODE char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255)); COMMENT ON TABLE ACCOUNT_BALANCE_HISTORY IS 'История изменений таблицы accountBalance'; COMMENT ON COLUMN ACCOUNT_BALANCE_HISTORY.ACCOUNT_BALANCE_ID IS 'Идентификатор записи в таблице ACCOUNT_BALANCE'; COMMENT ON COLUMN ACCOUNT_BALANCE_HISTORY.EVENT_TIME IS 'Дата и время изменения'; @@ -1342,7 +1452,7 @@ COMMENT ON COLUMN ACCOUNT_BALANCE_HISTORY.ACCOUNT_ID IS 'Идентификат COMMENT ON COLUMN ACCOUNT_BALANCE_HISTORY.ACCOUNT_TYPE IS 'Тип счета (linked to account)'; -COMMENT ON COLUMN ACCOUNT_BALANCE_HISTORY.ACCOUNT IS 'Счет (linked to account)'; +COMMENT ON COLUMN ACCOUNT_BALANCE_HISTORY.ACCOUNT IS 'Счет'; COMMENT ON COLUMN ACCOUNT_BALANCE_HISTORY.OPEN_BALANCE_AMOUNT IS 'Начальная сумма после расчетной организации'; @@ -1374,21 +1484,59 @@ COMMENT ON COLUMN ACCOUNT_BALANCE_HISTORY.SHORT_NAME IS 'Короткое наи COMMENT ON COLUMN ACCOUNT_BALANCE_HISTORY.FULL_NAME IS 'Полное наименование Участника (linked to company)'; +-- balanceRegistry - Реестр остатков денежных средств +CREATE TABLE IF NOT EXISTS BALANCE_REGISTRY(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, S_DF01_DATE timestamp, CURRENCY_CODE char(4), SET_HOUSE_NAME varchar(255), ACCOUNT varchar(50), INFO_ACCOUNT varchar(50), REMAINDER_SUM numeric(72,18), BLOCKED_SUM numeric(72,18), UNBLOCKED_SUM numeric(72,18), INN varchar(255), MARKET bigint, MARKET_NAME varchar(255), FULL_NAME varchar(255), TYPE_REMAINS char(4), DOC_NUMBER varchar(255)); +COMMENT ON TABLE BALANCE_REGISTRY IS 'Реестр остатков денежных средств'; + +COMMENT ON COLUMN BALANCE_REGISTRY.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN BALANCE_REGISTRY.CREATED_AT IS 'Дата и время создания записи'; + +COMMENT ON COLUMN BALANCE_REGISTRY.UPDATED_AT IS 'Дата и время изменения записи'; + +COMMENT ON COLUMN BALANCE_REGISTRY.S_DF01_DATE IS 'Дата создания записи в S_DF01'; + +COMMENT ON COLUMN BALANCE_REGISTRY.CURRENCY_CODE IS 'Код валюты (linked to currencyCode)'; + +COMMENT ON COLUMN BALANCE_REGISTRY.SET_HOUSE_NAME IS 'Наименование РО'; + +COMMENT ON COLUMN BALANCE_REGISTRY.ACCOUNT IS 'Номер торгового/клирингового счета'; + +COMMENT ON COLUMN BALANCE_REGISTRY.INFO_ACCOUNT IS 'Номер счета внутреннего учета СПВБ'; + +COMMENT ON COLUMN BALANCE_REGISTRY.REMAINDER_SUM IS 'Остаток денежных средст'; + +COMMENT ON COLUMN BALANCE_REGISTRY.BLOCKED_SUM IS 'Сумма блокированных денежных средств'; + +COMMENT ON COLUMN BALANCE_REGISTRY.UNBLOCKED_SUM IS 'Сумма свободных денежных средств'; + +COMMENT ON COLUMN BALANCE_REGISTRY.INN IS 'Идентификационный номер налогоплательщика (ИНН)'; + +COMMENT ON COLUMN BALANCE_REGISTRY.MARKET IS 'Сегмент рынка (linked to market)'; + +COMMENT ON COLUMN BALANCE_REGISTRY.MARKET_NAME IS 'Наименование сегмента рынка'; + +COMMENT ON COLUMN BALANCE_REGISTRY.FULL_NAME IS 'Наименование Участника Клиринга'; + +COMMENT ON COLUMN BALANCE_REGISTRY.TYPE_REMAINS IS 'Тип остатка'; + +COMMENT ON COLUMN BALANCE_REGISTRY.DOC_NUMBER IS 'Номер документа'; + -- managementJournal - Журнал монитора и контроля -CREATE TABLE IF NOT EXISTS MANAGEMENT_JOURNAL(ID bigint PRIMARY KEY, COMPANY_ID bigint, USER_ID bigint, MANAGEMENT_JOURNAL_TYPE_ID bigint, MANAGEMENT_JOURNAL_PURPOSE_ID bigint, STATUS char(4), TEXT varchar(4096), CHANGE_ACCESS_SIGN char(4), CHANGE_DATA_SIGN char(4), EVENT_DATE timestamp, UPDATED_AT timestamp, CREATED_AT timestamp); +CREATE TABLE IF NOT EXISTS MANAGEMENT_JOURNAL(ID bigint PRIMARY KEY, COMPANY_ID bigint, USER_ID bigint, MANAGEMENT_JOURNAL_TYPE char(4), MANAGEMENT_JOURNAL_PURPOSE char(4), MANAGEMENT_JOURNAL_STATUS char(4), TEXT varchar(4096), CHANGE_ACCESS_SIGN char(4), CHANGE_DATA_SIGN char(4), EVENT_DATE timestamp, UPDATED_AT timestamp, CREATED_AT timestamp); COMMENT ON TABLE MANAGEMENT_JOURNAL IS 'Журнал монитора и контроля'; COMMENT ON COLUMN MANAGEMENT_JOURNAL.ID IS 'Идентификатор'; COMMENT ON COLUMN MANAGEMENT_JOURNAL.COMPANY_ID IS 'Участник (linked to company)'; -COMMENT ON COLUMN MANAGEMENT_JOURNAL.USER_ID IS 'Автор сообщения (linked to user)'; +COMMENT ON COLUMN MANAGEMENT_JOURNAL.USER_ID IS 'Автор сообщения (linked to userCls)'; -COMMENT ON COLUMN MANAGEMENT_JOURNAL.MANAGEMENT_JOURNAL_TYPE_ID IS 'Тип мониторинга (linked to managementJournalType)'; +COMMENT ON COLUMN MANAGEMENT_JOURNAL.MANAGEMENT_JOURNAL_TYPE IS 'Тип мониторинга (linked to managementJournalType)'; -COMMENT ON COLUMN MANAGEMENT_JOURNAL.MANAGEMENT_JOURNAL_PURPOSE_ID IS 'Цель мониторинга (linked to managementJournalPurpose)'; +COMMENT ON COLUMN MANAGEMENT_JOURNAL.MANAGEMENT_JOURNAL_PURPOSE IS 'Цель мониторинга (linked to managementJournalPurpose)'; -COMMENT ON COLUMN MANAGEMENT_JOURNAL.STATUS IS 'Статус (linked to managementJournalStatus)'; +COMMENT ON COLUMN MANAGEMENT_JOURNAL.MANAGEMENT_JOURNAL_STATUS IS 'Статус (linked to managementJournalStatus)'; COMMENT ON COLUMN MANAGEMENT_JOURNAL.TEXT IS 'Сообщение'; @@ -1403,7 +1551,7 @@ COMMENT ON COLUMN MANAGEMENT_JOURNAL.UPDATED_AT IS 'Изменено'; COMMENT ON COLUMN MANAGEMENT_JOURNAL.CREATED_AT IS 'Создано'; -- inDocumentJournal - Журнал входящих документов -CREATE TABLE IF NOT EXISTS IN_DOCUMENT_JOURNAL(ID bigint PRIMARY KEY, REGISTRATION_DATE date, REGISTRATION_TIME time, REGISTRATION_NUMBER bigint, DOCUMENT_NAME varchar(255), SENDER_ID bigint, QUANTITY bigint, CLEARING_CODE varchar(255), COURIER_TYPE char(4), EMAIL_DATE date, AMOUNT numeric(72,2), DOSSIER_NUMBER bigint, COMMENT varchar(255), RECEIPT_DATE date); +CREATE TABLE IF NOT EXISTS IN_DOCUMENT_JOURNAL(ID bigint PRIMARY KEY, REGISTRATION_DATE date, REGISTRATION_TIME time, REGISTRATION_NUMBER bigint, DOCUMENT_NAME varchar(255), SENDER varchar(255), QUANTITY bigint, CLEARING_CODE varchar(255), COURIER_TYPE char(4), EMAIL_DATE date, AMOUNT numeric(72,2), DOSSIER_NUMBER varchar(50), COMMENT varchar(255), RECEIPT_DATE date, RESULT_STATUS char(4)); COMMENT ON TABLE IN_DOCUMENT_JOURNAL IS 'Журнал входящих документов'; COMMENT ON COLUMN IN_DOCUMENT_JOURNAL.ID IS 'Идентификатор'; @@ -1416,7 +1564,7 @@ COMMENT ON COLUMN IN_DOCUMENT_JOURNAL.REGISTRATION_NUMBER IS 'Регистаци COMMENT ON COLUMN IN_DOCUMENT_JOURNAL.DOCUMENT_NAME IS 'Наименование документа'; -COMMENT ON COLUMN IN_DOCUMENT_JOURNAL.SENDER_ID IS 'Полное наименование отправителя (linked to company)'; +COMMENT ON COLUMN IN_DOCUMENT_JOURNAL.SENDER IS 'Полное наименование отправителя'; COMMENT ON COLUMN IN_DOCUMENT_JOURNAL.QUANTITY IS 'Количествово экземпляров'; @@ -1434,8 +1582,10 @@ COMMENT ON COLUMN IN_DOCUMENT_JOURNAL.COMMENT IS 'Комментарий'; COMMENT ON COLUMN IN_DOCUMENT_JOURNAL.RECEIPT_DATE IS 'Дата получения оригинала'; +COMMENT ON COLUMN IN_DOCUMENT_JOURNAL.RESULT_STATUS IS 'Статус загрузки документа (linked to resultStatus)'; + -- outDocumentJournal - Журнал исходящих документов -CREATE TABLE IF NOT EXISTS OUT_DOCUMENT_JOURNAL(ID bigint PRIMARY KEY, REGISTRATION_DATE date, REGISTRATION_TIME time, REGISTRATION_NUMBER bigint, DOCUMENT_NAME varchar(255), ADDRESSEE_ID bigint, QUANTITY bigint, CLEARING_CODE varchar(255), COURIER_TYPE char(4), EMAIL_DATE date, AMOUNT numeric(72,2), DOSSIER_NUMBER bigint, POST_DATE date); +CREATE TABLE IF NOT EXISTS OUT_DOCUMENT_JOURNAL(ID bigint PRIMARY KEY, REGISTRATION_DATE date, REGISTRATION_TIME time, REGISTRATION_NUMBER bigint, DOCUMENT_NAME varchar(255), ADDRESSEE varchar(255), QUANTITY bigint, CLEARING_CODE varchar(255), COURIER_TYPE char(4), EMAIL_DATE date, AMOUNT numeric(72,2), DOSSIER_NUMBER varchar(50), POST_DATE date, RESULT_STATUS char(4)); COMMENT ON TABLE OUT_DOCUMENT_JOURNAL IS 'Журнал исходящих документов'; COMMENT ON COLUMN OUT_DOCUMENT_JOURNAL.ID IS 'Идентификатор'; @@ -1448,7 +1598,7 @@ COMMENT ON COLUMN OUT_DOCUMENT_JOURNAL.REGISTRATION_NUMBER IS 'Регистац COMMENT ON COLUMN OUT_DOCUMENT_JOURNAL.DOCUMENT_NAME IS 'Наименование документа'; -COMMENT ON COLUMN OUT_DOCUMENT_JOURNAL.ADDRESSEE_ID IS 'Полное наименование получателя (linked to company)'; +COMMENT ON COLUMN OUT_DOCUMENT_JOURNAL.ADDRESSEE IS 'Полное наименование получателя'; COMMENT ON COLUMN OUT_DOCUMENT_JOURNAL.QUANTITY IS 'Количествово экземпляров'; @@ -1464,6 +1614,8 @@ COMMENT ON COLUMN OUT_DOCUMENT_JOURNAL.DOSSIER_NUMBER IS 'Номер дела'; COMMENT ON COLUMN OUT_DOCUMENT_JOURNAL.POST_DATE IS 'Дата почтового отправления'; +COMMENT ON COLUMN OUT_DOCUMENT_JOURNAL.RESULT_STATUS IS 'Статус выгрузки документа (linked to resultStatus)'; + -- executionDeposit - Сделки CREATE TABLE IF NOT EXISTS EXECUTION_DEPOSIT(ID bigint PRIMARY KEY, EXCHANGE_EXECUTION_ID bigint, EXCHANGE_EXECUTION_TIME date, CREATED_AT time, UPDATED_AT time, TRADING_DATE date, ACCOUNT_ID bigint, MARKET char(4), PRICE numeric(72,18), AMOUNT bigint, SIDE_ID bigint, SETTLEMENT_CURRENCY_ID bigint, COMPANY_ID bigint, DURATION bigint, FIRST_LEG_SETTLEMENT_DATE date, SECOND_LEG_SETTLEMENT_DATE date, SECOND_LEG_AMOUNT date, INTEREST_AMOUNT date, SYMBOL_NAME varchar(50), SYMBOL_CODE varchar(20), SECURITIES_DEPOSIT_ID bigint, COUNTER_PARTY_ID bigint, SESSION_ID bigint, COVERAGE_STATUS_ID bigint); COMMENT ON TABLE EXECUTION_DEPOSIT IS 'Сделки'; @@ -1564,6 +1716,98 @@ COMMENT ON COLUMN EXECUTION_DEPOSIT_REGISTER.COVERAGE_STATUS_ID IS 'Cтатус COMMENT ON COLUMN EXECUTION_DEPOSIT_REGISTER.SESSION_ID IS 'Сессия (linked to moneyMarketSession)'; +-- admittedDeal - Реестр сделок, допущенных к клирингу +CREATE TABLE IF NOT EXISTS ADMITTED_DEAL(COMPANY_FULL_NAME varchar(255), EXECUTION_DEPOSIT_REGISTER_TRADING_DATE timestamp, EXCHANGE_EXECUTION_ID varchar(255), EXCHANGE_EXECUTION_TIME time, SECURITY_ID bigint, SECURITY_NAME varchar(255), SELLER_FULL_NAME varchar(255), SELLER_CLEARING_CODE varchar(255), SELLER_ACCOUNT varchar, BUYER_FULL_NAME varchar(255), BUYER_CLEARING_CODE varchar(255), BUYER_ACCOUNT varchar, EXECUTION_DEPOSIT_REGISTER_AMOUNT numeric(72,18)); +COMMENT ON TABLE ADMITTED_DEAL IS 'Реестр сделок, допущенных к клирингу'; + +COMMENT ON COLUMN ADMITTED_DEAL.COMPANY_FULL_NAME IS 'Наименование биржи'; + +COMMENT ON COLUMN ADMITTED_DEAL.EXECUTION_DEPOSIT_REGISTER_TRADING_DATE IS 'Дата заключения сделки'; + +COMMENT ON COLUMN ADMITTED_DEAL.EXCHANGE_EXECUTION_ID IS 'Номер сделки'; + +COMMENT ON COLUMN ADMITTED_DEAL.EXCHANGE_EXECUTION_TIME IS 'Время заключения сделки'; + +COMMENT ON COLUMN ADMITTED_DEAL.SECURITY_ID IS 'Биржевой код инструмента (linked to security)'; + +COMMENT ON COLUMN ADMITTED_DEAL.SECURITY_NAME IS 'Наименование инструмента'; + +COMMENT ON COLUMN ADMITTED_DEAL.SELLER_FULL_NAME IS 'Наименование продавца'; + +COMMENT ON COLUMN ADMITTED_DEAL.SELLER_CLEARING_CODE IS 'Код продавца'; + +COMMENT ON COLUMN ADMITTED_DEAL.SELLER_ACCOUNT IS 'Счет продавца'; + +COMMENT ON COLUMN ADMITTED_DEAL.BUYER_FULL_NAME IS 'Наименование продавца'; + +COMMENT ON COLUMN ADMITTED_DEAL.BUYER_CLEARING_CODE IS 'Код продавца'; + +COMMENT ON COLUMN ADMITTED_DEAL.BUYER_ACCOUNT IS 'Счет продавца'; + +COMMENT ON COLUMN ADMITTED_DEAL.EXECUTION_DEPOSIT_REGISTER_AMOUNT IS 'Сумма сделки'; + +-- dealPassedControl - Реестр сделок, прошедших процедуру контроля обеспечения +CREATE TABLE IF NOT EXISTS DEAL_PASSED_CONTROL(COMPANY_FULL_NAME varchar(255), EXECUTION_DEPOSIT_REGISTER_TRADING_DATE timestamp, EXCHANGE_EXECUTION_ID varchar(255), EXCHANGE_EXECUTION_TIME time, SECURITY_ID bigint, SECURITY_NAME varchar(255), SELLER_FULL_NAME varchar(255), SELLER_CLEARING_CODE varchar(255), SELLER_ACCOUNT varchar, BUYER_FULL_NAME varchar(255), BUYER_CLEARING_CODE varchar(255), BUYER_ACCOUNT varchar, EXECUTION_DEPOSIT_REGISTER_AMOUNT numeric(72,18)); +COMMENT ON TABLE DEAL_PASSED_CONTROL IS 'Реестр сделок, прошедших процедуру контроля обеспечения'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.COMPANY_FULL_NAME IS 'Наименование биржи'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.EXECUTION_DEPOSIT_REGISTER_TRADING_DATE IS 'Дата заключения сделки'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.EXCHANGE_EXECUTION_ID IS 'Номер сделки'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.EXCHANGE_EXECUTION_TIME IS 'Время заключения сделки'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.SECURITY_ID IS 'Биржевой код инструмента (linked to security)'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.SECURITY_NAME IS 'Наименование инструмента'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.SELLER_FULL_NAME IS 'Наименование продавца'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.SELLER_CLEARING_CODE IS 'Код продавца'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.SELLER_ACCOUNT IS 'Счет продавца'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.BUYER_FULL_NAME IS 'Наименование продавца'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.BUYER_CLEARING_CODE IS 'Код продавца'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.BUYER_ACCOUNT IS 'Счет продавца'; + +COMMENT ON COLUMN DEAL_PASSED_CONTROL.EXECUTION_DEPOSIT_REGISTER_AMOUNT IS 'Сумма сделки'; + +-- dealUnPassedControl - Реестр сделок, не прошедших процедуру контроля обеспечения +CREATE TABLE IF NOT EXISTS DEAL_UN_PASSED_CONTROL(COMPANY_FULL_NAME varchar(255), EXECUTION_DEPOSIT_REGISTER_TRADING_DATE timestamp, EXCHANGE_EXECUTION_ID varchar(255), EXCHANGE_EXECUTION_TIME time, SECURITY_ID bigint, SECURITY_NAME varchar(255), SELLER_FULL_NAME varchar(255), SELLER_CLEARING_CODE varchar(255), SELLER_ACCOUNT varchar, BUYER_FULL_NAME varchar(255), BUYER_CLEARING_CODE varchar(255), BUYER_ACCOUNT varchar, EXECUTION_DEPOSIT_REGISTER_AMOUNT numeric(72,18), RESULT varchar(3)); +COMMENT ON TABLE DEAL_UN_PASSED_CONTROL IS 'Реестр сделок, не прошедших процедуру контроля обеспечения'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.COMPANY_FULL_NAME IS 'Наименование биржи'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.EXECUTION_DEPOSIT_REGISTER_TRADING_DATE IS 'Дата заключения сделки'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.EXCHANGE_EXECUTION_ID IS 'Номер сделки'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.EXCHANGE_EXECUTION_TIME IS 'Время заключения сделки'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.SECURITY_ID IS 'Биржевой код инструмента (linked to security)'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.SECURITY_NAME IS 'Наименование инструмента'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.SELLER_FULL_NAME IS 'Наименование продавца'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.SELLER_CLEARING_CODE IS 'Код продавца'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.SELLER_ACCOUNT IS 'Счет продавца'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.BUYER_FULL_NAME IS 'Наименование продавца'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.BUYER_CLEARING_CODE IS 'Код продавца'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.BUYER_ACCOUNT IS 'Счет продавца'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.EXECUTION_DEPOSIT_REGISTER_AMOUNT IS 'Сумма сделки'; + +COMMENT ON COLUMN DEAL_UN_PASSED_CONTROL.RESULT IS 'Результат клиринга'; + -- reportRegister - Реестр отчетов CREATE TABLE IF NOT EXISTS REPORT_REGISTER(ID bigint PRIMARY KEY, CREATED_AT time, UPDATED_AT time, CLEARING_DATE date, COMPANY_FULL_NAME varchar(255), CLEARING_CODE varchar(255), SESSION_ID bigint, COMMENT varchar(255), NAME varchar(255), QUANTITY bigint); COMMENT ON TABLE REPORT_REGISTER IS 'Реестр отчетов'; @@ -1576,7 +1820,7 @@ COMMENT ON COLUMN REPORT_REGISTER.UPDATED_AT IS 'Время изменения'; COMMENT ON COLUMN REPORT_REGISTER.CLEARING_DATE IS 'Дата клиринга'; -COMMENT ON COLUMN REPORT_REGISTER.COMPANY_FULL_NAME IS 'Идентификатор участника'; +COMMENT ON COLUMN REPORT_REGISTER.COMPANY_FULL_NAME IS 'Наименование участника'; COMMENT ON COLUMN REPORT_REGISTER.CLEARING_CODE IS 'Код клиринга'; @@ -1626,36 +1870,36 @@ COMMENT ON COLUMN CONTRACT_REGISTER.CLOSE_DATE IS 'Дата расторжени COMMENT ON COLUMN CONTRACT_REGISTER.COMMENT IS 'Место'; --- paymentRegister - Реестра распоряжений -CREATE TABLE IF NOT EXISTS PAYMENT_REGISTER(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, CREDIT_LEG_ACCOUNT_ID bigint, CREDIT_LEG_AMOUNT bigint, CREDIT_LEG_CURRENCY_CODE char(4), CREDIT_LEG_DIRECTION bigint, DEBIT_LEG_ACCOUNT bigint, SENDER_ID bigint, ADDRESSEE_ID bigint, DOCUMENT_NUMBER varchar(255)); -COMMENT ON TABLE PAYMENT_REGISTER IS 'Реестра распоряжений'; +-- orderRegistry - Реестра распоряжений +CREATE TABLE IF NOT EXISTS ORDER_REGISTRY(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, CREDIT_LEG_ACCOUNT varchar, CREDIT_LEG_AMOUNT numeric(72,18), CREDIT_LEG_CURRENCY_CODE char(4), CREDIT_LEG_DIRECTION bigint, DEBIT_LEG_ACCOUNT varchar, SENDER varchar(255), ADDRESSEE varchar(255), DOCUMENT_NUMBER varchar(255)); +COMMENT ON TABLE ORDER_REGISTRY IS 'Реестра распоряжений'; -COMMENT ON COLUMN PAYMENT_REGISTER.ID IS 'Идентификатор записи'; +COMMENT ON COLUMN ORDER_REGISTRY.ID IS 'Идентификатор записи'; -COMMENT ON COLUMN PAYMENT_REGISTER.CREATED_AT IS 'Дата и время создания записи'; +COMMENT ON COLUMN ORDER_REGISTRY.CREATED_AT IS 'Дата и время создания записи'; -COMMENT ON COLUMN PAYMENT_REGISTER.UPDATED_AT IS 'Дата и время изменения записи'; +COMMENT ON COLUMN ORDER_REGISTRY.UPDATED_AT IS 'Дата и время изменения записи'; -COMMENT ON COLUMN PAYMENT_REGISTER.CLEARING_DATE IS 'Дата расчета'; +COMMENT ON COLUMN ORDER_REGISTRY.CLEARING_DATE IS 'Дата расчета'; -COMMENT ON COLUMN PAYMENT_REGISTER.CREDIT_LEG_ACCOUNT_ID IS 'Идентификатор счета отправителя (linked to account)'; +COMMENT ON COLUMN ORDER_REGISTRY.CREDIT_LEG_ACCOUNT IS 'Счет отправителя'; -COMMENT ON COLUMN PAYMENT_REGISTER.CREDIT_LEG_AMOUNT IS 'Сумма отправителя'; +COMMENT ON COLUMN ORDER_REGISTRY.CREDIT_LEG_AMOUNT IS 'Сумма отправителя'; -COMMENT ON COLUMN PAYMENT_REGISTER.CREDIT_LEG_CURRENCY_CODE IS 'Код валюты отправителя (linked to currency)'; +COMMENT ON COLUMN ORDER_REGISTRY.CREDIT_LEG_CURRENCY_CODE IS 'Код валюты отправителя (linked to currency)'; -COMMENT ON COLUMN PAYMENT_REGISTER.CREDIT_LEG_DIRECTION IS 'Направление отправителя (linked to inOutDirection)'; +COMMENT ON COLUMN ORDER_REGISTRY.CREDIT_LEG_DIRECTION IS 'Направление отправителя (linked to inOutDirection)'; -COMMENT ON COLUMN PAYMENT_REGISTER.DEBIT_LEG_ACCOUNT IS 'Счет получателя (linked to Account)'; +COMMENT ON COLUMN ORDER_REGISTRY.DEBIT_LEG_ACCOUNT IS 'Счет получателя'; -COMMENT ON COLUMN PAYMENT_REGISTER.SENDER_ID IS 'Идентификатор участника отправителя (linked to company)'; +COMMENT ON COLUMN ORDER_REGISTRY.SENDER IS 'Отправитель'; -COMMENT ON COLUMN PAYMENT_REGISTER.ADDRESSEE_ID IS 'Идентификатор участника получателя (linked to company)'; +COMMENT ON COLUMN ORDER_REGISTRY.ADDRESSEE IS 'Получатель'; -COMMENT ON COLUMN PAYMENT_REGISTER.DOCUMENT_NUMBER IS 'Номер документа в сторонней системе'; +COMMENT ON COLUMN ORDER_REGISTRY.DOCUMENT_NUMBER IS 'Номер документа в сторонней системе'; -- liabilitiesClaimsMoney - Требования и обязательства денежных средств -CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_MONEY(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_AMOUNT numeric(72,2), REFUND_INTEREST numeric(72,2), ACCRUED_INTEREST numeric(72,2), CLAIMS_AMOUNT numeric(72,2), SETTLEMENT_DATE date, TRADING_DATE date, CURRENCY char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255)); +CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_MONEY(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT varchar(50), LIABILITIES_AMOUNT numeric(72,2), REFUND_INTEREST numeric(72,2), ACCRUED_INTEREST numeric(72,2), CLAIMS_AMOUNT numeric(72,2), SETTLEMENT_DATE date, TRADING_DATE date, CURRENCY char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255)); COMMENT ON TABLE LIABILITIES_CLAIMS_MONEY IS 'Требования и обязательства денежных средств'; COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ID IS 'Идентификатор записи'; @@ -1670,7 +1914,7 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCOUNT_ID IS 'Идентификат COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCOUNT_TYPE IS 'Тип счета (linked to account)'; -COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCOUNT IS 'Счет (linked to account)'; +COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCOUNT IS 'Счет'; COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.LIABILITIES_AMOUNT IS 'Регистр «Обязательства по денежным средствам, сформированные по результатам собственных сделок Участника клиринга», исключая проценты'; @@ -1693,7 +1937,7 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.SHORT_NAME IS 'Короткое на COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.FULL_NAME IS 'Полное наименование Участника (linked to company)'; -- liabilitiesClaimsAssets - Требования и обязательства финансовых активов -CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_ASSETS(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_QUANTITY numeric(72,18), CLAIMS_QUANTITY numeric(72,18), CURRENCY char(4), SETTLEMENT_DATE date, TRADING_DATE date, REFUND_DATE date, PRICE numeric(72,18), SECURITY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), CONTRACT varchar(255), COMMENT varchar(255), FULL_NAME varchar(255), PARENT_ID bigint, LIABILITIES_CLAIMS_MONEY_ID bigint, INTEREST_STATUS bigint, CLEARING_STATUS bigint, PAYMENT_ID bigint, REFUND_PAYMENT_ID bigint); +CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_ASSETS(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT varchar(50), LIABILITIES_QUANTITY numeric(72,18), CLAIMS_QUANTITY numeric(72,18), CURRENCY char(4), SETTLEMENT_DATE date, TRADING_DATE date, REFUND_DATE date, PRICE numeric(72,18), SECURITY_ID bigint, TRADING_CODE varchar(255), CLEARING_CODE varchar(255), SHORT_NAME varchar(255), CONTRACT varchar(255), COMMENT varchar(255), FULL_NAME varchar(255), PARENT_ID bigint, LIABILITIES_CLAIMS_MONEY_ID bigint, INTEREST_STATUS bigint, CLEARING_STATUS bigint, PAYMENT_ID bigint, REFUND_PAYMENT_ID bigint); COMMENT ON TABLE LIABILITIES_CLAIMS_ASSETS IS 'Требования и обязательства финансовых активов'; COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.ID IS 'Идентификатор записи'; @@ -1708,7 +1952,7 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.ACCOUNT_ID IS 'Идентифика COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.ACCOUNT_TYPE IS 'Тип счета (linked to account)'; -COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.ACCOUNT IS 'Счет (linked to account)'; +COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.ACCOUNT IS 'Счет'; COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.LIABILITIES_QUANTITY IS 'Сумма обязательств'; @@ -1751,7 +1995,7 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.PAYMENT_ID IS 'Платеж'; COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.REFUND_PAYMENT_ID IS 'Обратный платежа'; -- statement - Денежные средства от расчетной организации -CREATE TABLE IF NOT EXISTS STATEMENT(ID bigint PRIMARY KEY, ADDRESSEE_ID bigint, SENDER_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, STATEMENT_TYPE_ID bigint, COMMENT varchar(255), ACCOUNT_ID bigint, ACCOUNT bigint, IN_OUT_DIRECTION bigint, SETTLEMENT_DATE date, AMOUNT numeric(72,2), CASH_MOVEMENT_CURRENCY_CODE char(4), STATUS char(4), ERROR_CODE char(4), ERROR_TEXT char(4), IN_S_DF_ID bigint, OUT_S_DF_ID bigint, IN_OUT_S_DF_TYPE char(4)); +CREATE TABLE IF NOT EXISTS STATEMENT(ID bigint PRIMARY KEY, ADDRESSEE_ID bigint, SENDER_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, STATEMENT_TYPE char(4), COMMENT varchar(255), ACCOUNT_ID bigint, ACCOUNT varchar(50), IN_OUT_DIRECTION char(4), SETTLEMENT_DATE date, AMOUNT numeric(72,2), CASH_MOVEMENT_CURRENCY_CODE char(4), OPERATION_STATUS char(4), ERROR_CODE char(4), ERROR_TEXT char(4), IN_S_DF_ID bigint, OUT_S_DF_ID bigint, IN_OUT_S_DF_TYPE char(4)); COMMENT ON TABLE STATEMENT IS 'Денежные средства от расчетной организации'; COMMENT ON COLUMN STATEMENT.ID IS 'Идентификатор записи'; @@ -1766,13 +2010,13 @@ COMMENT ON COLUMN STATEMENT.UPDATED_AT IS 'Дата и время изменен COMMENT ON COLUMN STATEMENT.CLEARING_DATE IS 'Дата расчета'; -COMMENT ON COLUMN STATEMENT.STATEMENT_TYPE_ID IS 'Тип поступления средств (linked to statementType)'; +COMMENT ON COLUMN STATEMENT.STATEMENT_TYPE IS 'Тип поступления средств (linked to statementType)'; COMMENT ON COLUMN STATEMENT.COMMENT IS 'Комментарий'; COMMENT ON COLUMN STATEMENT.ACCOUNT_ID IS 'Идентификатор счета (linked to account)'; -COMMENT ON COLUMN STATEMENT.ACCOUNT IS 'Счет (linked to account)'; +COMMENT ON COLUMN STATEMENT.ACCOUNT IS 'Счет'; COMMENT ON COLUMN STATEMENT.IN_OUT_DIRECTION IS 'Направление (linked to inOutDirection)'; @@ -1782,7 +2026,7 @@ COMMENT ON COLUMN STATEMENT.AMOUNT IS 'Объем'; COMMENT ON COLUMN STATEMENT.CASH_MOVEMENT_CURRENCY_CODE IS 'Код валюты (linked to currency)'; -COMMENT ON COLUMN STATEMENT.STATUS IS 'Cтатус обработки (linked to operationStatus)'; +COMMENT ON COLUMN STATEMENT.OPERATION_STATUS IS 'Cтатус обработки (linked to operationStatus)'; COMMENT ON COLUMN STATEMENT.ERROR_CODE IS 'Код ошибки (linked to errorCode)'; @@ -1795,7 +2039,7 @@ COMMENT ON COLUMN STATEMENT.OUT_S_DF_ID IS 'Идентификатор запи COMMENT ON COLUMN STATEMENT.IN_OUT_S_DF_TYPE IS 'Типы входящей и исходящей записей (linked to inOutSDfType)'; -- tradeSettlement - Проводки на базе сделок торговой системы -CREATE TABLE IF NOT EXISTS TRADE_SETTLEMENT(ID bigint PRIMARY KEY, ADDRESSEE_ID bigint, SENDER_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, AMOUNT numeric(72,2), CURRENCY_CODE char(4), IN_OUT_DIRECTION bigint, ACCOUNT_ID bigint, ACCOUNT bigint, STATUS char(4)); +CREATE TABLE IF NOT EXISTS TRADE_SETTLEMENT(ID bigint PRIMARY KEY, ADDRESSEE_ID bigint, SENDER_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, AMOUNT numeric(72,2), CURRENCY_CODE char(4), IN_OUT_DIRECTION bigint, ACCOUNT_ID bigint, ACCOUNT varchar(50), OPERATION_STATUS char(4)); COMMENT ON TABLE TRADE_SETTLEMENT IS 'Проводки на базе сделок торговой системы'; COMMENT ON COLUMN TRADE_SETTLEMENT.ID IS 'Идентификатор записи'; @@ -1818,12 +2062,12 @@ COMMENT ON COLUMN TRADE_SETTLEMENT.IN_OUT_DIRECTION IS 'Направление ( COMMENT ON COLUMN TRADE_SETTLEMENT.ACCOUNT_ID IS 'Идентификатор счета (linked to account)'; -COMMENT ON COLUMN TRADE_SETTLEMENT.ACCOUNT IS 'Счет (linked to account)'; +COMMENT ON COLUMN TRADE_SETTLEMENT.ACCOUNT IS 'Счет'; -COMMENT ON COLUMN TRADE_SETTLEMENT.STATUS IS 'Cтатус обработки (linked to operationStatus)'; +COMMENT ON COLUMN TRADE_SETTLEMENT.OPERATION_STATUS IS 'Cтатус обработки (linked to operationStatus)'; -- operation - Проводки -CREATE TABLE IF NOT EXISTS OPERATION(ID bigint PRIMARY KEY, ADDRESSEE_ID bigint, SENDER_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, OPERATION_TYPE_ID bigint, STATUS char(4)); +CREATE TABLE IF NOT EXISTS OPERATION(ID bigint PRIMARY KEY, ADDRESSEE_ID bigint, SENDER_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, OPERATION_TYPE_ID bigint, OPERATION_STATUS char(4)); COMMENT ON TABLE OPERATION IS 'Проводки'; COMMENT ON COLUMN OPERATION.ID IS 'Идентификатор записи'; @@ -1840,10 +2084,10 @@ COMMENT ON COLUMN OPERATION.CLEARING_DATE IS 'Дата расчета'; COMMENT ON COLUMN OPERATION.OPERATION_TYPE_ID IS 'Тип проводки (linked to operationType)'; -COMMENT ON COLUMN OPERATION.STATUS IS 'Cтатус обработки (linked to operationStatus)'; +COMMENT ON COLUMN OPERATION.OPERATION_STATUS IS 'Cтатус обработки (linked to operationStatus)'; -- paymentInstruction - Информация о денежных средствах -CREATE TABLE IF NOT EXISTS PAYMENT_INSTRUCTION(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SENDER_ID bigint, ADDRESSEE_ID bigint, ADRESSEE_B_I_C varchar(255), PAYEE_BANK_NAME bigint, PAYEE_B_I_C varchar(255), ADDRESSEE_BANK_NAME bigint, PAYMENT_DATE timestamp, _PAYMENT_PURPOSE varchar(255), SETTLEMENT_DATE date, CREDIT_LEG_AMOUNT bigint, DEBIT_LEG_AMOUNT bigint, CREDIT_LEG_ACCOUNT_ID bigint, CREDIT_CS_ACCOUNT varchar(255), CREDIT_LEG_ACCOUNT bigint, DEBIT_LEG_ACCOUNT_ID bigint, DEBIT_CS_ACCOUNT varchar(255), DEBIT_LEG_ACCOUNT bigint, CREDIT_LEG_DIRECTION bigint, DEBIT_LEG_DIRECTION bigint, CREDIT_LEG_CURRENCY_CODE char(4), DEBIT_LEG_CURRENCY_CODE char(4), CLEARING_DATE date, TRANSACTION_STATUS_ID bigint, DOCUMENT_NUMBER varchar(255)); +CREATE TABLE IF NOT EXISTS PAYMENT_INSTRUCTION(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, SENDER_ID bigint, ADDRESSEE_ID bigint, ADRESSEE_B_I_C varchar(255), PAYEE_BANK_NAME varchar(255), PAYEE_B_I_C varchar(255), ADDRESSEE_BANK_NAME varchar(255), PAYMENT_DATE timestamp, _PAYMENT_PURPOSE varchar(255), SETTLEMENT_DATE date, CREDIT_LEG_AMOUNT bigint, DEBIT_LEG_AMOUNT bigint, CREDIT_LEG_ACCOUNT_ID bigint, CREDIT_CS_ACCOUNT varchar(255), CREDIT_LEG_ACCOUNT varchar(50), DEBIT_LEG_ACCOUNT_ID bigint, DEBIT_CS_ACCOUNT varchar(255), DEBIT_LEG_ACCOUNT varchar(50), CREDIT_LEG_DIRECTION bigint, DEBIT_LEG_DIRECTION bigint, CREDIT_LEG_CURRENCY_CODE char(4), DEBIT_LEG_CURRENCY_CODE char(4), CLEARING_DATE date, TRANSACTION_STATUS char(4), DOCUMENT_NUMBER varchar(255)); COMMENT ON TABLE PAYMENT_INSTRUCTION IS 'Информация о денежных средствах'; COMMENT ON COLUMN PAYMENT_INSTRUCTION.ID IS 'Идентификатор записи'; @@ -1858,11 +2102,11 @@ COMMENT ON COLUMN PAYMENT_INSTRUCTION.ADDRESSEE_ID IS 'Идентификато COMMENT ON COLUMN PAYMENT_INSTRUCTION.ADRESSEE_B_I_C IS 'Банковский идентификационный код (БИК) получателя'; -COMMENT ON COLUMN PAYMENT_INSTRUCTION.PAYEE_BANK_NAME IS 'Банк отправителя (linked to bankAccount)'; +COMMENT ON COLUMN PAYMENT_INSTRUCTION.PAYEE_BANK_NAME IS 'Банк отправителя'; COMMENT ON COLUMN PAYMENT_INSTRUCTION.PAYEE_B_I_C IS 'Банковский идентификационный код (БИК) отправителя'; -COMMENT ON COLUMN PAYMENT_INSTRUCTION.ADDRESSEE_BANK_NAME IS 'Банк получателя (linked to bankAccount)'; +COMMENT ON COLUMN PAYMENT_INSTRUCTION.ADDRESSEE_BANK_NAME IS 'Банк получателя'; COMMENT ON COLUMN PAYMENT_INSTRUCTION.PAYMENT_DATE IS 'Дата и время платежа'; @@ -1896,7 +2140,7 @@ COMMENT ON COLUMN PAYMENT_INSTRUCTION.DEBIT_LEG_CURRENCY_CODE IS 'Код вал COMMENT ON COLUMN PAYMENT_INSTRUCTION.CLEARING_DATE IS 'Дата расчета'; -COMMENT ON COLUMN PAYMENT_INSTRUCTION.TRANSACTION_STATUS_ID IS 'Cтатус транзакции (linked to transactionStatus)'; +COMMENT ON COLUMN PAYMENT_INSTRUCTION.TRANSACTION_STATUS IS 'Cтатус транзакции (linked to transactionStatus)'; COMMENT ON COLUMN PAYMENT_INSTRUCTION.DOCUMENT_NUMBER IS 'Номер документа в сторонней системе'; @@ -1944,7 +2188,7 @@ COMMENT ON COLUMN CHARGE_TARIFF.ID IS 'Идентификатор'; COMMENT ON COLUMN CHARGE_TARIFF.MARKET IS 'Секция (linked to market)'; -COMMENT ON COLUMN CHARGE_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; +COMMENT ON COLUMN CHARGE_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingMemberCategory)'; COMMENT ON COLUMN CHARGE_TARIFF.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)'; @@ -1972,7 +2216,7 @@ COMMENT ON COLUMN CHARGE_TARIFF_HISTORY.ID IS 'Идентификатор'; COMMENT ON COLUMN CHARGE_TARIFF_HISTORY.MARKET IS 'Секция (linked to market)'; -COMMENT ON COLUMN CHARGE_TARIFF_HISTORY.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; +COMMENT ON COLUMN CHARGE_TARIFF_HISTORY.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingMemberCategory)'; COMMENT ON COLUMN CHARGE_TARIFF_HISTORY.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)'; @@ -1998,7 +2242,7 @@ COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.COMPANY_ID IS 'Участник (link COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.MARKET IS 'Секция (linked to market)'; -COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingMemberCategory)'; COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)'; @@ -2028,7 +2272,7 @@ COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_HISTORY.COMPANY_ID IS 'Участни COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_HISTORY.MARKET IS 'Секция (linked to market)'; -COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_HISTORY.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_HISTORY.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingMemberCategory)'; COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_HISTORY.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)'; @@ -2052,7 +2296,7 @@ COMMENT ON COLUMN COMPANY_TARIFF.ID IS 'Идентификатор'; COMMENT ON COLUMN COMPANY_TARIFF.MARKET IS 'Секция (linked to market)'; -COMMENT ON COLUMN COMPANY_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; +COMMENT ON COLUMN COMPANY_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingMemberCategory)'; COMMENT ON COLUMN COMPANY_TARIFF.FULL_NAME IS 'Полное наименование Участника (linked to company)'; @@ -2088,7 +2332,7 @@ COMMENT ON COLUMN ERROR_TEXT.ERROR_CODE IS 'Код ошибки (linked to error COMMENT ON COLUMN ERROR_TEXT.TEXT IS 'Полный текст ошибки'; -COMMENT ON COLUMN ERROR_TEXT.USER_ID IS 'Автор сообщения (linked to user)'; +COMMENT ON COLUMN ERROR_TEXT.USER_ID IS 'Автор сообщения (linked to userCls)'; COMMENT ON COLUMN ERROR_TEXT.CLEARING_DATE IS 'Текущая дата'; @@ -2555,7 +2799,7 @@ COMMENT ON COLUMN S_DF11.GENERATION_TIME IS 'Дата и время создан COMMENT ON COLUMN S_DF11.GENERATION_ID IS 'Идентификатор взаимодействия'; -- sDf12 - ДФ-12 Из ПРЦ в КС Информация о блокировке/разблокировке/закрытии ТБС УК -CREATE TABLE IF NOT EXISTS S_DF12(ID bigint PRIMARY KEY, ACCOUNT varchar(25), DEAL varchar(4), STATUS numeric(72,18), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint); +CREATE TABLE IF NOT EXISTS S_DF12(ID bigint PRIMARY KEY, ACCOUNT varchar(25), DEAL varchar(4), STATUS bigint, FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint); COMMENT ON TABLE S_DF12 IS 'ДФ-12 Из ПРЦ в КС Информация о блокировке/разблокировке/закрытии ТБС УК'; COMMENT ON COLUMN S_DF12.ID IS 'Идентификатор записи'; @@ -2572,16 +2816,112 @@ COMMENT ON COLUMN S_DF12.GENERATION_TIME IS 'Дата и время обрабо COMMENT ON COLUMN S_DF12.GENERATION_ID IS 'Идентификатор взаимодействия'; --- sDf13 - ДФ 013 таблица находится на стадии разработки +-- sDf13 - ДФ-13 Вывод свободных средств для инициаторов категории В с клирингового счета 30414/7 - платежное поручение АО СПВБ на вывод средств из РО +CREATE TABLE IF NOT EXISTS S_DF13(ID bigint PRIMARY KEY, SEG_TYPE varchar(1), DOC_TYPE varchar, DOCNM_REF varchar(16), DOCNMPREV varchar(16), PRIORITY varchar(1), 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), OP_TYPE varchar(2), OP_ORDER varchar(1), RBANKNAM4 varchar(35), RBANKNAM5 varchar(35), PAY_DATE varchar, EXT_DATE varchar, PAY_VAL varchar(12), SUM_DEB varchar, SCLIENTN1 varchar(35), INN_DEB varchar(12), KPP_DEB varchar(9), SCLIENTN4 varchar(35), SC_CODE varchar(12), ACC_DEB varchar(35), RCLIENTN1 varchar(35), INN_CRED varchar(12), KPP_CRED varchar(9), RCLIENTN4 varchar(35), ACC_KR_1 varchar(35), ACC_KR_2 varchar(35), SP_CODE varchar(2), SPECIF_1 varchar(35), SPECIF_2 varchar(35), SPECIF_3 varchar(35), SPECIF_4 varchar(35), SPECIF_5 varchar(35), SPECIF_6 varchar(35), SEND_TYPE varchar(10), SERVDATE varchar(8), DOC_RESULT varchar(2), GENERATION_TIME timestamp, GENERATION_ID bigint); +COMMENT ON TABLE S_DF13 IS 'ДФ-13 Вывод свободных средств для инициаторов категории В с клирингового счета 30414/7 - платежное поручение АО СПВБ на вывод средств из РО'; + +COMMENT ON COLUMN S_DF13.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN S_DF13.SEG_TYPE IS 'Код инициатора в КС'; + +COMMENT ON COLUMN S_DF13.DOC_TYPE IS 'Тип документа'; + +COMMENT ON COLUMN S_DF13.DOCNM_REF IS 'Ссылочный номер документа у отправителя'; + +COMMENT ON COLUMN S_DF13.DOCNMPREV IS 'Ссылка на предшестввующий документ'; + +COMMENT ON COLUMN S_DF13.PRIORITY IS 'Приоритет скорости отправления сообщения'; + +COMMENT ON COLUMN S_DF13.SBANKCODE IS 'Код банка-плательщика'; + +COMMENT ON COLUMN S_DF13.C_ACC_DEB IS 'Кор счет банка - плательщика в системе - акт.'; + +COMMENT ON COLUMN S_DF13.SBANKNAM1 IS 'Наименование банка-плательщика'; + +COMMENT ON COLUMN S_DF13.SBANKNAM2 IS ''; + +COMMENT ON COLUMN S_DF13.SBANKNAM3 IS ''; + +COMMENT ON COLUMN S_DF13.SBANKNAM4 IS ''; + +COMMENT ON COLUMN S_DF13.SBANKNAM5 IS ''; + +COMMENT ON COLUMN S_DF13.RBANKCODE IS 'Код банка-получателя'; + +COMMENT ON COLUMN S_DF13.C_ACC_CRED IS 'Кор счет банка - получателя в системе - акт. '; + +COMMENT ON COLUMN S_DF13.RBANKNAM1 IS 'Наименование банка-получателя'; + +COMMENT ON COLUMN S_DF13.OP_TYPE IS 'Вид операции'; + +COMMENT ON COLUMN S_DF13.OP_ORDER IS 'Очередность платежа'; + +COMMENT ON COLUMN S_DF13.RBANKNAM4 IS ''; + +COMMENT ON COLUMN S_DF13.RBANKNAM5 IS ''; + +COMMENT ON COLUMN S_DF13.PAY_DATE IS 'Платеж-дата'; + +COMMENT ON COLUMN S_DF13.EXT_DATE IS 'Дата по выписке'; + +COMMENT ON COLUMN S_DF13.PAY_VAL IS 'Валюта платежа'; + +COMMENT ON COLUMN S_DF13.SUM_DEB IS 'Сумма дебет '; + +COMMENT ON COLUMN S_DF13.SCLIENTN1 IS 'Наименование клиента-плательщика'; + +COMMENT ON COLUMN S_DF13.INN_DEB IS 'ИНН клиента-плательщика'; + +COMMENT ON COLUMN S_DF13.KPP_DEB IS 'КПП клиента-плательщика'; + +COMMENT ON COLUMN S_DF13.SCLIENTN4 IS ''; + +COMMENT ON COLUMN S_DF13.SC_CODE IS 'Код клиента-плательщика'; + +COMMENT ON COLUMN S_DF13.ACC_DEB IS 'Счет клиента-плательщика(дебет)'; + +COMMENT ON COLUMN S_DF13.RCLIENTN1 IS 'Наименование клиента-получателя'; + +COMMENT ON COLUMN S_DF13.INN_CRED IS 'ИНН клиента-получателя'; + +COMMENT ON COLUMN S_DF13.KPP_CRED IS 'КПП клиента-получателя'; + +COMMENT ON COLUMN S_DF13.RCLIENTN4 IS ''; + +COMMENT ON COLUMN S_DF13.ACC_KR_1 IS 'Счет получателя'; + +COMMENT ON COLUMN S_DF13.ACC_KR_2 IS ''; + +COMMENT ON COLUMN S_DF13.SP_CODE IS 'Код назначения платежа'; + +COMMENT ON COLUMN S_DF13.SPECIF_1 IS 'Назначение платежа'; + +COMMENT ON COLUMN S_DF13.SPECIF_2 IS 'Назначение платежа'; + +COMMENT ON COLUMN S_DF13.SPECIF_3 IS 'Назначение платежа'; + +COMMENT ON COLUMN S_DF13.SPECIF_4 IS 'Назначение платежа'; + +COMMENT ON COLUMN S_DF13.SPECIF_5 IS 'Назначение платежа'; + +COMMENT ON COLUMN S_DF13.SPECIF_6 IS 'Назначение платежа'; + +COMMENT ON COLUMN S_DF13.SEND_TYPE IS 'Вид платежа'; + +COMMENT ON COLUMN S_DF13.SERVDATE IS 'Дата получения товара, оказания услуг в плат. поручении'; + +COMMENT ON COLUMN S_DF13.DOC_RESULT IS ''; + +COMMENT ON COLUMN S_DF13.GENERATION_TIME IS 'Дата и время создания записи'; + +COMMENT ON COLUMN S_DF13.GENERATION_ID IS 'Идентификатор взаимодействия'; -- sDf16 - ДФ-16 Формат запроса по возврату депозита или дозачисление/списание денежных средств -CREATE TABLE IF NOT EXISTS S_DF16(ID bigint PRIMARY KEY, DATE timestamp, ACCOUNT varchar(20), SUM numeric(72,18), MARKET varchar(1), TYPE varchar(1), _I_N_N numeric(72,18), _B_I_C numeric(72,18), _S_P_E_C varchar(255), NUMBER numeric(72,18), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint); +CREATE TABLE IF NOT EXISTS S_DF16(ID bigint PRIMARY KEY, ACCOUNT varchar(20), SUM numeric(72,18), MARKET varchar(1), TYPE varchar(1), _I_N_N numeric(72,18), _B_I_C numeric(72,18), _S_P_E_C varchar(255), NUMBER numeric(72,18), FILE_NAME varchar(255), GENERATION_TIME timestamp, GENERATION_ID bigint); COMMENT ON TABLE S_DF16 IS 'ДФ-16 Формат запроса по возврату депозита или дозачисление/списание денежных средств'; COMMENT ON COLUMN S_DF16.ID IS 'Идентификатор записи'; -COMMENT ON COLUMN S_DF16.DATE IS 'Дата обработки записи'; - COMMENT ON COLUMN S_DF16.ACCOUNT IS 'Номер счета участника торгов'; COMMENT ON COLUMN S_DF16.SUM IS 'Сумма платежного документа (операции)'; @@ -2605,7 +2945,7 @@ COMMENT ON COLUMN S_DF16.GENERATION_TIME IS 'Дата и время обрабо COMMENT ON COLUMN S_DF16.GENERATION_ID IS 'Идентификатор взаимодействия'; -- sDf17 - ДФ-17 Формат ответа на запрос по возврату депозита или дозачисление/списание денежных средств -CREATE TABLE IF NOT EXISTS S_DF17(ID bigint PRIMARY KEY, ACCOUNT varchar(20), SUM numeric(72,18), MARKET varchar(1), TYPE varchar(1), _I_N_N numeric(72,18), _B_I_C numeric(72,18), _S_P_E_C varchar(255), NUMBER numeric(72,18), RESULT varchar(3), GENERATION_TIME timestamp, GENERATION_ID bigint, IN_S_DF16_ID bigint); +CREATE TABLE IF NOT EXISTS S_DF17(ID bigint PRIMARY KEY, ACCOUNT varchar(20), SUM numeric(72,18), MARKET varchar(1), TYPE varchar(1), _I_N_N numeric(72,18), _B_I_C numeric(72,18), _S_P_E_C varchar(255), NUMBER numeric(72,18), RESULT numeric(72,18), GENERATION_TIME timestamp, GENERATION_ID bigint, IN_S_DF16_ID bigint); COMMENT ON TABLE S_DF17 IS 'ДФ-17 Формат ответа на запрос по возврату депозита или дозачисление/списание денежных средств'; COMMENT ON COLUMN S_DF17.ID IS 'Идентификатор записи'; @@ -2635,7 +2975,7 @@ COMMENT ON COLUMN S_DF17.GENERATION_ID IS 'Идентификатор взаим COMMENT ON COLUMN S_DF17.IN_S_DF16_ID IS 'Идентификатор соответствующей записи из таблицы-источника'; -- sDf18 - ДФ-18 Из КС в ПРЦ Квитанция о получении информации о состоянии счета (блокировка/разблокировка/закрытие) -CREATE TABLE IF NOT EXISTS S_DF18(ID bigint PRIMARY KEY, ACCOUNT varchar(25), DEAL varchar(4), STATUS numeric(72,18), RESULT numeric(72,18), GENERATION_TIME timestamp, GENERATION_ID bigint, IN_S_DF12_ID bigint); +CREATE TABLE IF NOT EXISTS S_DF18(ID bigint PRIMARY KEY, ACCOUNT varchar(25), DEAL varchar(4), STATUS bigint, RESULT numeric(72,18), GENERATION_TIME timestamp, GENERATION_ID bigint, IN_S_DF12_ID bigint); COMMENT ON TABLE S_DF18 IS 'ДФ-18 Из КС в ПРЦ Квитанция о получении информации о состоянии счета (блокировка/разблокировка/закрытие)'; COMMENT ON COLUMN S_DF18.ID IS 'Идентификатор записи'; @@ -2654,6 +2994,128 @@ COMMENT ON COLUMN S_DF18.GENERATION_ID IS 'Идентификатор взаим COMMENT ON COLUMN S_DF18.IN_S_DF12_ID IS 'Идентификатор соответствующей записи из таблицы-источника'; +-- trade_arqa - Выгрузка сделок из торговой системы +CREATE TABLE IF NOT EXISTS TRADE_ARQA(TRADE_NUM numeric(72,18), SEC_CODE varchar(255), TRADE_DATE_TIME timestamp, SETTLE_DATE date, PRICE numeric(72,18), VALUE numeric(72,18), QTY numeric(72,18), ACCRUEDINT numeric(72,18), FIRM_ID varchar(255), CLIENT_CODE varchar(255), EXCHANGE_COMMISSION numeric(72,18), CLASS_CODE varchar(255), OPERATION varchar(255), ISSUE_ACCOUNT varchar(255), MONEY_ACCOUNT varchar(255), TRADE_TYPE char(4), DAYS_TO_MAT_DATE numeric(72,18), COLLATERAL char(4), SETTLE_CODE varchar(255)); +COMMENT ON TABLE TRADE_ARQA IS 'Выгрузка сделок из торговой системы'; + +COMMENT ON COLUMN TRADE_ARQA.TRADE_NUM IS 'Номер сделки'; + +COMMENT ON COLUMN TRADE_ARQA.SEC_CODE IS 'Код ценной бумаги'; + +COMMENT ON COLUMN TRADE_ARQA.TRADE_DATE_TIME IS 'Дата-время сделки'; + +COMMENT ON COLUMN TRADE_ARQA.SETTLE_DATE IS 'Плановая дата исполнения сделки'; + +COMMENT ON COLUMN TRADE_ARQA.PRICE IS 'Цена сделки'; + +COMMENT ON COLUMN TRADE_ARQA.VALUE IS 'Сумма сделки'; + +COMMENT ON COLUMN TRADE_ARQA.QTY IS 'Количество лотов по сделке'; + +COMMENT ON COLUMN TRADE_ARQA.ACCRUEDINT IS 'НКД за 1 ценную бумагу'; + +COMMENT ON COLUMN TRADE_ARQA.FIRM_ID IS 'ID клиента в КС'; + +COMMENT ON COLUMN TRADE_ARQA.CLIENT_CODE IS 'Код участника торгов = Код участника клиринга = Код участника расчетов'; + +COMMENT ON COLUMN TRADE_ARQA.EXCHANGE_COMMISSION IS 'Комиссия по сделке'; + +COMMENT ON COLUMN TRADE_ARQA.CLASS_CODE IS 'Код класса сделки из новой ТС'; + +COMMENT ON COLUMN TRADE_ARQA.OPERATION IS 'Тип плеча (Купля/Продажа)'; + +COMMENT ON COLUMN TRADE_ARQA.ISSUE_ACCOUNT IS 'Счет для учета ценной бумаги'; + +COMMENT ON COLUMN TRADE_ARQA.MONEY_ACCOUNT IS 'Счет для учета денежных средств'; + +COMMENT ON COLUMN TRADE_ARQA.TRADE_TYPE IS 'Первичное размещение/торги'; + +COMMENT ON COLUMN TRADE_ARQA.DAYS_TO_MAT_DATE IS 'Количество дней до погашения'; + +COMMENT ON COLUMN TRADE_ARQA.COLLATERAL IS 'Признак залога (не используется)'; + +COMMENT ON COLUMN TRADE_ARQA.SETTLE_CODE IS 'Код периода сделки из новой ТС'; + +-- notification - Сообщения +CREATE TABLE IF NOT EXISTS NOTIFICATION(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SENDER_ID bigint, ADDRESSEE_ID bigint, OBJECT_TYPE char(4), OBJECT_ID timestamp, NOTIFICATION_STATUS char(4)); +COMMENT ON TABLE NOTIFICATION IS 'Сообщения'; + +COMMENT ON COLUMN NOTIFICATION.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN NOTIFICATION.CREATED_AT IS 'Дата и время создания записи'; + +COMMENT ON COLUMN NOTIFICATION.UPDATED_AT IS 'Дата и время изменения записи'; + +COMMENT ON COLUMN NOTIFICATION.CLEARING_DATE IS 'Дата'; + +COMMENT ON COLUMN NOTIFICATION.SENDER_ID IS 'Идентификатор участника отправителя (linked to company)'; + +COMMENT ON COLUMN NOTIFICATION.ADDRESSEE_ID IS 'Идентификатор участника получателя (linked to company)'; + +COMMENT ON COLUMN NOTIFICATION.OBJECT_TYPE IS 'Тип объекта (linked to objectType)'; + +COMMENT ON COLUMN NOTIFICATION.OBJECT_ID IS 'Идентификатор объекта'; + +COMMENT ON COLUMN NOTIFICATION.NOTIFICATION_STATUS IS 'Статус сообщения (linked to notificationStatus)'; + + +-- History log of notification - Сообщения +CREATE TABLE IF NOT EXISTS NOTIFICATION_HISTORY(NOTIFICATION_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SENDER_ID bigint, ADDRESSEE_ID bigint, OBJECT_TYPE char(4), OBJECT_ID timestamp, NOTIFICATION_STATUS char(4)); +COMMENT ON TABLE NOTIFICATION_HISTORY IS 'История изменений таблицы notification'; +COMMENT ON COLUMN NOTIFICATION_HISTORY.NOTIFICATION_ID IS 'Идентификатор записи в таблице NOTIFICATION'; +COMMENT ON COLUMN NOTIFICATION_HISTORY.EVENT_TIME IS 'Дата и время изменения'; +COMMENT ON COLUMN NOTIFICATION_HISTORY.EVENT_USER_ID IS 'Инициатор изменения'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.CREATED_AT IS 'Дата и время создания записи'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.UPDATED_AT IS 'Дата и время изменения записи'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.CLEARING_DATE IS 'Дата'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.SENDER_ID IS 'Идентификатор участника отправителя (linked to company)'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.ADDRESSEE_ID IS 'Идентификатор участника получателя (linked to company)'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.OBJECT_TYPE IS 'Тип объекта (linked to objectType)'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.OBJECT_ID IS 'Идентификатор объекта'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.NOTIFICATION_STATUS IS 'Статус сообщения (linked to notificationStatus)'; + +-- session - Клиринговая сессия +CREATE TABLE IF NOT EXISTS SESSION(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SESSION_STATUS char(4)); +COMMENT ON TABLE SESSION IS 'Клиринговая сессия'; + +COMMENT ON COLUMN SESSION.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN SESSION.CREATED_AT IS 'Дата и время создания записи'; + +COMMENT ON COLUMN SESSION.UPDATED_AT IS 'Дата и время изменения записи'; + +COMMENT ON COLUMN SESSION.CLEARING_DATE IS 'Дата'; + +COMMENT ON COLUMN SESSION.SESSION_STATUS IS 'Статус клиринговой сессии (linked to sessionStatus)'; + + +-- History log of session - Клиринговая сессия +CREATE TABLE IF NOT EXISTS SESSION_HISTORY(SESSION_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SESSION_STATUS char(4)); +COMMENT ON TABLE SESSION_HISTORY IS 'История изменений таблицы session'; +COMMENT ON COLUMN SESSION_HISTORY.SESSION_ID IS 'Идентификатор записи в таблице SESSION'; +COMMENT ON COLUMN SESSION_HISTORY.EVENT_TIME IS 'Дата и время изменения'; +COMMENT ON COLUMN SESSION_HISTORY.EVENT_USER_ID IS 'Инициатор изменения'; + +COMMENT ON COLUMN SESSION_HISTORY.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN SESSION_HISTORY.CREATED_AT IS 'Дата и время создания записи'; + +COMMENT ON COLUMN SESSION_HISTORY.UPDATED_AT IS 'Дата и время изменения записи'; + +COMMENT ON COLUMN SESSION_HISTORY.CLEARING_DATE IS 'Дата'; + +COMMENT ON COLUMN SESSION_HISTORY.SESSION_STATUS IS 'Статус клиринговой сессии (linked to sessionStatus)'; + /* views */ -- Data types From dd2cdaf45ca19018d40fb6b1927b4b00fe80de14 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 4 Oct 2022 15:12:14 +0300 Subject: [PATCH 29/41] =?UTF-8?q?IMDG=20http://jira.mfd.msk:8088/browse/CL?= =?UTF-8?q?S-47,=20http://jira.mfd.msk:8088/browse/CLS-58=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BD=D0=B5=D0=BA=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20=D0=BC=D0=B0=D0=BF=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D1=8B=20=D0=B8=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D1=8B,=20=D0=B2=20=D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B8=D0=B8=20=D1=81=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B9=20(=D0=BD=D0=B5=20=D0=B2=D1=81=D0=B5).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../classes/statics/data/sdf/SDf12.java | 6 +- .../classes/statics/data/sdf/SDf13.java | 14 ++- .../classes/statics/data/sdf/SDf16.java | 20 +--- .../classes/statics/data/sdf/SDf17.java | 62 ++++++------ .../classes/statics/data/sdf/SDf18.java | 6 +- .../company/service/CompanyInfoService.java | 14 ++- .../logic/data/tables/SDf12Table.java | 2 +- .../logic/data/tables/SDf16Table.java | 2 +- .../imdg/config/HazelcastConfiguration.java | 7 +- .../clearing/imdg/config/PoolMapConfigs.java | 15 +-- .../clearing/imdg/object/SDf12MapStore.java | 2 +- .../clearing/imdg/object/SDf13MapStore.java | 94 ++++++++++--------- .../clearing/imdg/object/SDf16MapStore.java | 6 +- .../clearing/imdg/object/SDf17MapStore.java | 6 +- .../clearing/imdg/object/SDf18MapStore.java | 2 +- 15 files changed, 124 insertions(+), 134 deletions(-) diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf12.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf12.java index 42f1a00f6..5102a038a 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf12.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf12.java @@ -16,7 +16,7 @@ public class SDf12 extends SpcexObjectBase { private String account; private String deal; - private BigDecimal status; + private Long status; private String fileName; private Instant generationTime; private Long generationId; @@ -37,11 +37,11 @@ public class SDf12 extends SpcexObjectBase { this.deal = value; } - public BigDecimal getStatus() { + public Long getStatus() { return status; } - public void setStatus(BigDecimal value) { + public void setStatus(Long value) { this.status = value; } diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf13.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf13.java index c52ebf7bb..0f88d7aa9 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf13.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf13.java @@ -6,9 +6,8 @@ import ru.spcex.platform.classes.base.SpcexObjectBase; import java.time.Instant; /** - * ДФ 013 - Вывод свободных средств для инициаторов категории В - * с клирингового счета 30414/7 - платежное поручение АО СПВБ на вывод средств из РО. - * + * ДФ-13 Вывод свободных средств для инициаторов категории В с клирингового счета 30414/7 - платежное поручение АО СПВБ на вывод средств из РО + *

* DB table: S_DF13 **/ public class SDf13 extends SpcexObjectBase { @@ -44,6 +43,7 @@ public class SDf13 extends SpcexObjectBase { private String sc_code; private String acc_deb; private String rclientn1; + private String inn_cred; private String kpp_cred; private String rclientn4; private String acc_kr_1; @@ -301,6 +301,14 @@ public class SDf13 extends SpcexObjectBase { this.rclientn1 = rclientn1; } + public String getInn_cred() { + return inn_cred; + } + + public void setInn_cred(String inn_cred) { + this.inn_cred = inn_cred; + } + public String getKpp_cred() { return kpp_cred; } diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf16.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf16.java index e1c291584..755552aca 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf16.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf16.java @@ -7,14 +7,13 @@ import java.math.BigDecimal; import java.time.Instant; /** - * ДФ 16 - Ответ КС на запрос на дозачисление/списание денежных средств + * ДФ-16 Формат запроса по возврату депозита или дозачисление/списание денежных средств *

* DB table: S_DF16 **/ public class SDf16 extends SpcexObjectBase { private static final long serialVersionUID = ConstSerializable.serialVersionUID; - private Instant date; private String account; private BigDecimal sum; private String market; @@ -23,19 +22,10 @@ public class SDf16 extends SpcexObjectBase { private BigDecimal BIC; private String SPEC; private BigDecimal number; - private String resultCode; private String fileName; private Instant generationTime; private Long generationId; - public Instant getDate() { - return date; - } - - public void setDate(Instant value) { - this.date = value; - } - public String getAccount() { return account; } @@ -100,14 +90,6 @@ public class SDf16 extends SpcexObjectBase { this.number = value; } - public String getResultCode() { - return resultCode; - } - - public void setResultCode(String value) { - this.resultCode = value; - } - public String getFileName() { return fileName; } diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf17.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf17.java index e952baa38..39a18eb66 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf17.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf17.java @@ -8,7 +8,7 @@ import java.time.Instant; /** * ДФ-17 Формат ответа на запрос по возврату депозита или дозачисление/списание денежных средств - * + *

* DB table: S_DF17 **/ public class SDf17 extends SpcexObjectBase { @@ -22,105 +22,105 @@ public class SDf17 extends SpcexObjectBase { private BigDecimal BIC; private String SPEC; private BigDecimal number; - private String result; + private BigDecimal result; private Instant generationTime; private Long generationId; - private Long in_s_df16_id; - + private Long inSDf16Id; public String getAccount() { return account; } - public void setAccount(String account) { - this.account = account; + public void setAccount(String value) { + this.account = value; } public BigDecimal getSum() { return sum; } - public void setSum(BigDecimal sum) { - this.sum = sum; + public void setSum(BigDecimal value) { + this.sum = value; } public String getMarket() { return market; } - public void setMarket(String market) { - this.market = market; + public void setMarket(String value) { + this.market = value; } public String getType() { return type; } - public void setType(String type) { - this.type = type; + public void setType(String value) { + this.type = value; } public BigDecimal getINN() { return INN; } - public void setINN(BigDecimal INN) { - this.INN = INN; + public void setINN(BigDecimal value) { + this.INN = value; } public BigDecimal getBIC() { return BIC; } - public void setBIC(BigDecimal BIC) { - this.BIC = BIC; + public void setBIC(BigDecimal value) { + this.BIC = value; } public String getSPEC() { return SPEC; } - public void setSPEC(String SPEC) { - this.SPEC = SPEC; + public void setSPEC(String value) { + this.SPEC = value; } public BigDecimal getNumber() { return number; } - public void setNumber(BigDecimal number) { - this.number = number; + public void setNumber(BigDecimal value) { + this.number = value; } - public String getResult() { + public BigDecimal getResult() { return result; } - public void setResult(String result) { - this.result = result; + public void setResult(BigDecimal value) { + this.result = value; } public Instant getGenerationTime() { return generationTime; } - public void setGenerationTime(Instant generationTime) { - this.generationTime = generationTime; + public void setGenerationTime(Instant value) { + this.generationTime = value; } public Long getGenerationId() { return generationId; } - public void setGenerationId(Long generationId) { - this.generationId = generationId; + public void setGenerationId(Long value) { + this.generationId = value; } - public Long getIn_s_df16_id() { - return in_s_df16_id; + public Long getInSDf16Id() { + return inSDf16Id; } - public void setIn_s_df16_id(Long in_s_df16_id) { - this.in_s_df16_id = in_s_df16_id; + public void setInSDf16Id(Long value) { + this.inSDf16Id = value; } + } \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf18.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf18.java index 3bd48ccdf..c388f3c4b 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf18.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf18.java @@ -16,7 +16,7 @@ public class SDf18 extends SpcexObjectBase { private String account; private String deal; - private BigDecimal status; + private Long status; private BigDecimal result; private Instant generationTime; private Long generationId; @@ -38,11 +38,11 @@ public class SDf18 extends SpcexObjectBase { this.deal = value; } - public BigDecimal getStatus() { + public Long getStatus() { return status; } - public void setStatus(BigDecimal value) { + public void setStatus(Long value) { this.status = value; } diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java index 887df0c1e..85775c9bb 100644 --- a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java @@ -6,6 +6,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.profile.CompanyInfo; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; @@ -18,13 +19,15 @@ import ru.spcex.platform.imdg.api.ImdgProvider; @Service public class CompanyInfoService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); - private final Imdg companyInfoMap; +// private final Imdg companyInfoMap; + private final Imdg companyMap; @Autowired public CompanyInfoService(Consumer kafkaQueue, ImdgProvider imdgProvider) { super(kafkaQueue); - this.companyInfoMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyInfo, CompanyInfo.class); +// this.companyInfoMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanyInfo, CompanyInfo.class); + this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); } @Override @@ -38,7 +41,9 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea public void companyInfoUpdate(BaseRequest userRequest) { CompanyInfoUpdateRequest req = userRequest.getRequestPayload(); log.debug("CompanyInfoUpdateRequest received"); - CompanyInfo companyInfo = companyInfoMap.getSingleObjectByID(req.getId()); +// CompanyInfo companyInfo = companyInfoMap.getSingleObjectByID(req.getId()); + Company company = companyMap.getSingleObjectByID(req.getId()); + CompanyInfo companyInfo = company == null ? null : company.getProfile(); companyInfo.setCorporationSoleType(req.getCorporationSoleType()); companyInfo.setCountryCode(req.getCountryCode()); @@ -51,7 +56,8 @@ public class CompanyInfoService extends QueueConsumer implements InitializingBea companyInfo.setFullNameEng(req.getFullNameEng()); companyInfo.setShortName(req.getShortName()); companyInfo.setFullName(req.getFullName()); - companyInfoMap.update(companyInfo); +// companyInfoMap.update(companyInfo); + companyMap.update(company); log.debug("successfully processed, id {}", companyInfo.getId()); } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf12Table.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf12Table.java index 0fec7223c..f14dcbb46 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf12Table.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf12Table.java @@ -22,7 +22,7 @@ public class SDf12Table extends AbstractTable { SDf12 result = new SDf12(); result.setAccount((String) entity[0]); result.setDeal((String) entity[1]); - result.setStatus((BigDecimal) entity[2]); + result.setStatus((Long) entity[2]); result.setFileName(filename); result.setGenerationTime(Instant.now()); result.setGenerationId(fileId); diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf16Table.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf16Table.java index 06a263f40..9be1b54e6 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf16Table.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf16Table.java @@ -21,7 +21,7 @@ public class SDf16Table extends AbstractTable { @Override public SDf16 getEntity(Object[] entity) { SDf16 result = new SDf16(); - result.setDate(TimeUtil.strToInstant((String) entity[0])); +// result.setDate(TimeUtil.strToInstant((String) entity[0])); result.setAccount((String) entity[1]); result.setSum((BigDecimal) entity[2]); result.setMarket((String) entity[3]); diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java index 01f53add1..cf408f0ce 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java @@ -62,12 +62,7 @@ public class HazelcastConfiguration { config.addMapConfig(poolMapConfigs.map_OrganizationTypeDictionary()); config.addMapConfig(poolMapConfigs.map_WorkflowStatusDictionary()); -// config.addMapConfig(poolMapConfigs.map_CompanyRoleSet()); todo протестировать автоконфигуратор конфигурации мапсторов - config.addMapConfig(poolMapConfigs.map_CompanySymbols()); - config.addMapConfig(poolMapConfigs.map_ProfileDocument()); - config.addMapConfig(poolMapConfigs.map_Contact()); - config.addMapConfig(poolMapConfigs.map_Company()); -// config.addMapConfig(poolMapConfigs.map_CompanyUpdate()); + config.addMapConfig(poolMapConfigs.map_Company()); //todo убедиться, что CompanyMapStore extends BusinessObjectMapStore теперь будет TemplateMapStore. // Автоподключение мап List autoMapCfg = poolMapConfigs.autoconfiguratorOfMapstorages(); diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java index 9f2178bdd..7b2d9d7c2 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java @@ -132,14 +132,15 @@ public class PoolMapConfigs { -// @Autowired todo эксперимент с мапстором, см. ниже autoconfiguratorOfMapstorage. -// private CompanyRoleSetMapStore companyRoleSetMapStore; -// -// public MapConfig map_CompanyRoleSet() { -// return makeDefaultMapConfig(IMDGDistributedNames.Map_CompanyRoleSet, companyRoleSetMapStore) -// .addMapIndexConfig(makeMapIndexConfig("companyId")); -// } + @Autowired + private CompanyMapStore companyMapStore; + public MapConfig map_Company() { + return makeDefaultMapConfig(IMDGDistributedNames.Map_Company, companyMapStore); + } + + + // Автоконфигурируемые мапсторы: @Autowired private List> listOfAutopluginStores; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf12MapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf12MapStore.java index 46c8663b4..0fa7ad736 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf12MapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf12MapStore.java @@ -42,7 +42,7 @@ public class SDf12MapStore extends TemplateMapStore { object.setId(resultSet.getObject("ID", Long.class)); object.setAccount(resultSet.getObject("ACCOUNT", String.class)); object.setDeal(resultSet.getObject("DEAL", String.class)); - object.setStatus(resultSet.getObject("STATUS", BigDecimal.class)); + object.setStatus(resultSet.getObject("STATUS", Long.class)); object.setFileName(resultSet.getObject("FILE_NAME", String.class)); object.setGenerationTime(getInstantFromTimestamp(resultSet, "GENERATION_TIME")); object.setGenerationId(resultSet.getObject("GENERATION_ID", Long.class)); diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf13MapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf13MapStore.java index 42925b4aa..01b9b80bf 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf13MapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf13MapStore.java @@ -29,13 +29,13 @@ public class SDf13MapStore extends TemplateMapStore { @Override public String[] getFields() { - return new String[] { + return new String[]{ "ID", "SEG_TYPE", "DOC_TYPE", "DOCNM_REF", "DOCNMPREV", "PRIORITY", "SBANKCODE", "C_ACC_DEB", "SBANKNAM1", "SBANKNAM2", "SBANKNAM3", "SBANKNAM4", "SBANKNAM5", "RBANKCODE", "C_ACC_CRED", "RBANKNAM1", "OP_TYPE", "OP_ORDER", "RBANKNAM4", "RBANKNAM5", "PAY_DATE", "EXT_DATE", "PAY_VAL", "SUM_DEB", "SCLIENTN1", "INN_DEB", - "KPP_DEB", "SCLIENTN4", "SC_CODE", "ACC_DEB", "RCLIENTN1", "KPP_CRED", "RCLIENTN4", - "ACC_KR_1", "ACC_KR_2", "SP_CODE", "SPECIF_1", "SPECIF_2", "SPECIF_3", "SPECIF_4", "SPECIF_5", - "SPECIF_6", "SEND_TYPE", "SERVDATE", "DOC_RESULT", "GENERATION_TIME", "GENERATION_ID" + "KPP_DEB", "SCLIENTN4", "SC_CODE", "ACC_DEB", "RCLIENTN1", "INN_CRED", "KPP_CRED", "RCLIENTN4", "ACC_KR_1", + "ACC_KR_2", "SP_CODE", "SPECIF_1", "SPECIF_2", "SPECIF_3", "SPECIF_4", "SPECIF_5", "SPECIF_6", "SEND_TYPE", + "SERVDATE", "DOC_RESULT", "GENERATION_TIME", "GENERATION_ID" }; } @@ -73,6 +73,7 @@ public class SDf13MapStore extends TemplateMapStore { object.setSc_code(resultSet.getObject("SC_CODE", String.class)); object.setAcc_deb(resultSet.getObject("ACC_DEB", String.class)); object.setRclientn1(resultSet.getObject("RCLIENTN1", String.class)); + object.setInn_cred(resultSet.getObject("INN_CRED", String.class)); object.setKpp_cred(resultSet.getObject("KPP_CRED", String.class)); object.setRclientn4(resultSet.getObject("RCLIENTN4", String.class)); object.setAcc_kr_1(resultSet.getObject("ACC_KR_1", String.class)); @@ -97,49 +98,50 @@ public class SDf13MapStore extends TemplateMapStore { Object[] args = new Object[]{ object.getId(), object.getSeg_type(), - object.getDoc_type(), - object.getDocnm_ref(), + object.getDoc_type(), + object.getDocnm_ref(), object.getDocnmprev(), - object.getPriority(), - object.getSbankcode(), - object.getC_acc_deb(), - object.getSbanknam1(), - object.getSbanknam2(), - object.getSbanknam3(), - object.getSbanknam4(), - object.getSbanknam5(), - object.getRbankcode(), - object.getC_acc_cred(), - object.getRbanknam1(), - object.getOp_type(), - object.getOp_order(), - object.getRbanknam4(), - object.getRbanknam5(), - object.getPay_date(), - object.getExt_date(), - object.getPay_val(), - object.getSum_deb(), - object.getSclientn1(), - object.getInn_deb(), - object.getKpp_deb(), - object.getSclientn4(), - object.getSc_code(), - object.getAcc_deb(), - object.getRclientn1(), - object.getKpp_cred(), - object.getRclientn4(), - object.getAcc_kr_1(), - object.getAcc_kr_2(), - object.getSp_code(), - object.getSpecif_1(), - object.getSpecif_2(), - object.getSpecif_3(), - object.getSpecif_4(), - object.getSpecif_5(), - object.getSpecif_6(), - object.getSend_type(), - object.getServdate(), - object.getDoc_result(), + object.getPriority(), + object.getSbankcode(), + object.getC_acc_deb(), + object.getSbanknam1(), + object.getSbanknam2(), + object.getSbanknam3(), + object.getSbanknam4(), + object.getSbanknam5(), + object.getRbankcode(), + object.getC_acc_cred(), + object.getRbanknam1(), + object.getOp_type(), + object.getOp_order(), + object.getRbanknam4(), + object.getRbanknam5(), + object.getPay_date(), + object.getExt_date(), + object.getPay_val(), + object.getSum_deb(), + object.getSclientn1(), + object.getInn_deb(), + object.getKpp_deb(), + object.getSclientn4(), + object.getSc_code(), + object.getAcc_deb(), + object.getRclientn1(), + object.getInn_cred(), + object.getKpp_cred(), + object.getRclientn4(), + object.getAcc_kr_1(), + object.getAcc_kr_2(), + object.getSp_code(), + object.getSpecif_1(), + object.getSpecif_2(), + object.getSpecif_3(), + object.getSpecif_4(), + object.getSpecif_5(), + object.getSpecif_6(), + object.getSend_type(), + object.getServdate(), + object.getDoc_result(), TimeUtil.toDateFromInstant(object.getGenerationTime()), object.getGenerationId() }; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf16MapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf16MapStore.java index edd7bf445..69fa4b308 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf16MapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf16MapStore.java @@ -31,7 +31,7 @@ public class SDf16MapStore extends TemplateMapStore { @Override public String[] getFields() { return new String[]{ - "ID", "DATE", "ACCOUNT", "SUM", "MARKET", "TYPE", "_I_N_N", "_B_I_C", "_S_P_E_C", "NUMBER", "RESULT_CODE", "FILE_NAME", "GENERATION_TIME", "GENERATION_ID" + "ID", "ACCOUNT", "SUM", "MARKET", "TYPE", "_I_N_N", "_B_I_C", "_S_P_E_C", "NUMBER", "FILE_NAME", "GENERATION_TIME", "GENERATION_ID" }; } @@ -39,7 +39,6 @@ public class SDf16MapStore extends TemplateMapStore { public SDf16 objectReader(ResultSet resultSet) throws SQLException { SDf16 object = new SDf16(); object.setId(resultSet.getObject("ID", Long.class)); - object.setDate(getInstantFromTimestamp(resultSet, "DATE")); object.setAccount(resultSet.getObject("ACCOUNT", String.class)); object.setSum(resultSet.getObject("SUM", BigDecimal.class)); object.setMarket(resultSet.getObject("MARKET", String.class)); @@ -48,7 +47,6 @@ public class SDf16MapStore extends TemplateMapStore { object.setBIC(resultSet.getObject("_B_I_C", BigDecimal.class)); object.setSPEC(resultSet.getObject("_S_P_E_C", String.class)); object.setNumber(resultSet.getObject("NUMBER", BigDecimal.class)); - object.setResultCode(resultSet.getObject("RESULT_CODE", String.class)); object.setFileName(resultSet.getObject("FILE_NAME", String.class)); object.setGenerationTime(getInstantFromTimestamp(resultSet, "GENERATION_TIME")); object.setGenerationId(resultSet.getObject("GENERATION_ID", Long.class)); @@ -59,7 +57,6 @@ public class SDf16MapStore extends TemplateMapStore { public Object[] objectToField(SDf16 object) { Object[] args = new Object[]{ object.getId(), - TimeUtil.toDateFromInstant(object.getDate()), object.getAccount(), object.getSum(), object.getMarket(), @@ -68,7 +65,6 @@ public class SDf16MapStore extends TemplateMapStore { object.getBIC(), object.getSPEC(), object.getNumber(), - object.getResultCode(), object.getFileName(), TimeUtil.toDateFromInstant(object.getGenerationTime()), object.getGenerationId() diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf17MapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf17MapStore.java index 369505d65..ad1f57bea 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf17MapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf17MapStore.java @@ -47,10 +47,10 @@ public class SDf17MapStore extends TemplateMapStore { object.setBIC(resultSet.getObject("_B_I_C", BigDecimal.class)); object.setSPEC(resultSet.getObject("_S_P_E_C", String.class)); object.setNumber(resultSet.getObject("NUMBER", BigDecimal.class)); - object.setResult(resultSet.getObject("RESULT_CODE", String.class)); + object.setResult(resultSet.getObject("RESULT", BigDecimal.class)); object.setGenerationTime(getInstantFromTimestamp(resultSet, "GENERATION_TIME")); object.setGenerationId(resultSet.getObject("GENERATION_ID", Long.class)); - object.setIn_s_df16_id(resultSet.getObject("IN_S_DF16_ID", Long.class)); + object.setInSDf16Id(resultSet.getObject("IN_S_DF16_ID", Long.class)); return object; } @@ -69,7 +69,7 @@ public class SDf17MapStore extends TemplateMapStore { object.getResult(), TimeUtil.toDateFromInstant(object.getGenerationTime()), object.getGenerationId(), - object.getIn_s_df16_id() + object.getInSDf16Id() }; return args; } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf18MapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf18MapStore.java index a7ab87623..7a785dc1c 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf18MapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf18MapStore.java @@ -41,7 +41,7 @@ public class SDf18MapStore extends TemplateMapStore { object.setId(resultSet.getObject("ID", Long.class)); object.setAccount(resultSet.getObject("ACCOUNT", String.class)); object.setDeal(resultSet.getObject("DEAL", String.class)); - object.setStatus(resultSet.getObject("STATUS", BigDecimal.class)); + object.setStatus(resultSet.getObject("STATUS", Long.class)); object.setResult(resultSet.getObject("RESULT", BigDecimal.class)); object.setGenerationTime(getInstantFromTimestamp(resultSet, "GENERATION_TIME")); object.setGenerationId(resultSet.getObject("GENERATION_ID", Long.class)); From ae3cc78586a8b1a7e1d82a893f6426e95139842b Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 4 Oct 2022 15:20:09 +0300 Subject: [PATCH 30/41] IMDG http://jira.mfd.msk:8088/browse/CLS-47 --- .../ru/clearing/classes/statics/data/user/UserConnect.java | 6 +++--- .../clearing/imdg/businessobject/UserConnectMapStore.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/UserConnect.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/UserConnect.java index 15b140f1b..cfd1d4e25 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/UserConnect.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/UserConnect.java @@ -21,7 +21,7 @@ public class UserConnect extends BusinessObject { private String clientIP; private String connectionState; private Instant clearingDate; - private String errorCode; + private Long errorCode; private String errorText; public Long getUserId() { @@ -80,11 +80,11 @@ public class UserConnect extends BusinessObject { this.clearingDate = value; } - public String getErrorCode() { + public Long getErrorCode() { return errorCode; } - public void setErrorCode(String value) { + public void setErrorCode(Long value) { this.errorCode = value; } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/UserConnectMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/UserConnectMapStore.java index 2f97b89f9..433ef6a97 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/UserConnectMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/UserConnectMapStore.java @@ -47,7 +47,7 @@ public class UserConnectMapStore extends TemplateMapStore { object.setClientIP(resultSet.getObject("CLIENT_I_P", String.class)); object.setConnectionState(resultSet.getObject("CONNECTION_STATE", String.class)); object.setClearingDate(getInstantFromTimestamp(resultSet, "CLEARING_DATE")); - object.setErrorCode(resultSet.getObject("ERROR_CODE", String.class)); + object.setErrorCode(resultSet.getObject("ERROR_CODE", Long.class)); object.setErrorText(resultSet.getObject("ERROR_TEXT", String.class)); return object; } From 871332dc53b06de38c03d4e7536fb3bbc5a0d048 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 5 Oct 2022 11:11:30 +0300 Subject: [PATCH 31/41] http://jira.mfd.msk:8088/browse/CLS-34 --- .../balance/service/StatementService.java | 15 +++++-------- .../statics/data/statement/Statement.java | 22 +++++++++---------- .../businessobject/StatementMapStore.java | 8 +++---- .../platform/enumeration/InOutDirection.java | 18 +++++++++++++++ 4 files changed, 39 insertions(+), 24 deletions(-) create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutDirection.java diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java index d4799947c..a9d54f0f1 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java @@ -24,9 +24,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; import ru.spcex.platform.classes.base.SpcexObjectBase; -import ru.spcex.platform.enumeration.CurrencyCode; -import ru.spcex.platform.enumeration.InOutSDfType; -import ru.spcex.platform.enumeration.OperationStatus; +import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.EnumMessage; @@ -148,10 +146,10 @@ public class StatementService extends QueueConsumer implements InitializingBean statement.setSenderId(2L);// fixme справочник statement.setCreated(Instant.now()); statement.setClearingDate(TimeUtil.today()); - statement.setStatementTypeId(0L); //fixme справочник + statement.setStatementType(StatementType.full.getKey()); //fixme справочник statement.setAccountId(account.getId()); - statement.setAccount(0L); //fixme - statement.setInOutDirection(0L); //fixme + statement.setAccount(sdf01.getAccount()); //fixme + statement.setInOutDirection(InOutDirection.in.getKey()); //fixme statement.setSettlementDate(TimeUtil.localDateToInstant(LocalDate.parse(sdf01.getDat(), datFormatter))); statement.setAmount(null); //fixme sdf01.getRemainder() statement.setCashMovementCurrencyCode(CurrencyCode.RUB.getKey()); @@ -164,10 +162,9 @@ public class StatementService extends QueueConsumer implements InitializingBean private void updateFlow(Statement statement, SDf01 sdf01, Account account) { statement.setUpdated(Instant.now()); - statement.setStatementTypeId(0L); //fixme справочник statement.setAccountId(account.getId()); - statement.setAccount(0L); //fixme - statement.setInOutDirection(0L); //fixme + statement.setAccount(sdf01.getAccount()); //fixme + statement.setInOutDirection(InOutDirection.in.getKey()); //fixme statement.setSettlementDate(TimeUtil.localDateToInstant(LocalDate.parse(sdf01.getDat(), datFormatter))); statement.setAmount(null); //fixme sdf01.getRemainder() statement.setCashMovementCurrencyCode(CurrencyCode.RUB.getKey()); diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/statement/Statement.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/statement/Statement.java index 92a9019cf..2dee323e7 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/statement/Statement.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/statement/Statement.java @@ -17,11 +17,11 @@ public class Statement extends BusinessObject { private Long addresseeId; private Long senderId; private Instant clearingDate; - private Long statementTypeId; + private String statementType; private String comment; private Long accountId; - private Long account; - private Long inOutDirection; + private String account; + private String inOutDirection; private Instant settlementDate; private BigDecimal amount; private String cashMovementCurrencyCode; @@ -56,12 +56,12 @@ public class Statement extends BusinessObject { this.clearingDate = value; } - public Long getStatementTypeId() { - return statementTypeId; + public String getStatementType() { + return statementType; } - public void setStatementTypeId(Long value) { - this.statementTypeId = value; + public void setStatementType(String value) { + this.statementType = value; } public String getComment() { @@ -80,19 +80,19 @@ public class Statement extends BusinessObject { this.accountId = value; } - public Long getAccount() { + public String getAccount() { return account; } - public void setAccount(Long value) { + public void setAccount(String value) { this.account = value; } - public Long getInOutDirection() { + public String getInOutDirection() { return inOutDirection; } - public void setInOutDirection(Long value) { + public void setInOutDirection(String value) { this.inOutDirection = value; } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/StatementMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/StatementMapStore.java index 4213448be..3cc48d44b 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/StatementMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/StatementMapStore.java @@ -44,11 +44,11 @@ public class StatementMapStore extends TemplateMapStore { object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); object.setClearingDate(getInstantFromTimestamp(resultSet, "CLEARING_DATE")); - object.setStatementTypeId(resultSet.getObject("STATEMENT_TYPE_ID", Long.class)); + object.setStatementType(resultSet.getObject("STATEMENT_TYPE_ID", String.class)); object.setComment(resultSet.getObject("COMMENT", String.class)); object.setAccountId(resultSet.getObject("ACCOUNT_ID", Long.class)); - object.setAccount(resultSet.getObject("ACCOUNT", Long.class)); - object.setInOutDirection(resultSet.getObject("IN_OUT_DIRECTION", Long.class)); + object.setAccount(resultSet.getObject("ACCOUNT", String.class)); + object.setInOutDirection(resultSet.getObject("IN_OUT_DIRECTION", String.class)); object.setSettlementDate(getInstantFromTimestamp(resultSet, "SETTLEMENT_DATE")); object.setAmount(resultSet.getObject("AMOUNT", BigDecimal.class)); object.setCashMovementCurrencyCode(resultSet.getObject("CASH_MOVEMENT_CURRENCY_CODE", String.class)); @@ -70,7 +70,7 @@ public class StatementMapStore extends TemplateMapStore { TimeUtil.toDateFromInstant(object.getCreated()), TimeUtil.toDateFromInstant(object.getUpdated()), TimeUtil.toDateFromInstant(object.getClearingDate()), - object.getStatementTypeId(), + object.getStatementType(), object.getComment(), object.getAccountId(), object.getAccount(), diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutDirection.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutDirection.java new file mode 100644 index 000000000..ec91a9dbf --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutDirection.java @@ -0,0 +1,18 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumKey; + +public enum InOutDirection implements IEnumKey { + in("IN"); + + private final String key; + + InOutDirection(String key) { + this.key = key; + } + + @Override + public String getKey() { + return key; + } +} From 94fbfe9d441f111a7d26ac504a17dc0b9544f322 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 5 Oct 2022 15:49:28 +0300 Subject: [PATCH 32/41] http://jira.mfd.msk:8088/browse/CLS-41 --- .../main/java/ru/spcex/clearing/balance/errors/BalanceError.java | 1 - .../java/ru/spcex/clearing/balance/service/StatementService.java | 1 - 2 files changed, 2 deletions(-) diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/errors/BalanceError.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/errors/BalanceError.java index 6b9cad972..1a02ebb7b 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/errors/BalanceError.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/errors/BalanceError.java @@ -9,7 +9,6 @@ public enum BalanceError implements IEnumId { WrongMarket(5215L), WrongAccount(5215L), AccountNotPresent(-1L); - ; private final Long id; BalanceError(Long id) { diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java index a9d54f0f1..80a178ac5 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java @@ -105,7 +105,6 @@ public class StatementService extends QueueConsumer implements InitializingBean log.info("account {} for sdf01.id={} not found - send request for creation", sdf01.getAccount(), sdf01.getId()); } else if (BalanceError.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) { log.error("fatal error: resumed processing after generating accounts, but no account found for sdf01.id={}", sdf01.getId()); - continue; } if (error.isPresent()) { errorLogger.logError("sdf01.id={}", error.get(), sdf01.getId()); From 10fa81015185df33dcf7af3bc082014a37712420 Mon Sep 17 00:00:00 2001 From: ialbert Date: Wed, 5 Oct 2022 20:19:16 +0300 Subject: [PATCH 33/41] http://jira.mfd.msk:8088/browse/CLS-36 --- .../balance/config/ValidationConfig.java | 20 +++++ .../clearing/balance/errors/BalanceError.java | 4 +- .../service/AccountBalanceService.java | 79 +++++++++++++++++++ .../balance/service/AccountResult.java | 25 ++++++ .../balance/service/StatementService.java | 46 +++++------ .../validation/AccountBalanceValidation.java | 3 + .../AccountBalanceValidationRule.java | 55 +++++++++++++ .../validation/Sdf01ValidationRule.java | 6 +- .../balance/validation/ValidationStored.java | 2 +- .../enumeration/BalanceAccountType.java | 18 +++++ platform-parent/platform-imdg-api/pom.xml | 4 + .../validation}/ImdgValidationContext.java | 6 +- 12 files changed, 235 insertions(+), 33 deletions(-) create mode 100644 clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java create mode 100644 clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountResult.java create mode 100644 clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/AccountBalanceValidation.java create mode 100644 clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/AccountBalanceValidationRule.java create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/BalanceAccountType.java rename {clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config => platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation}/ImdgValidationContext.java (90%) diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ValidationConfig.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ValidationConfig.java index dcdd3693d..72446bfdc 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ValidationConfig.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ValidationConfig.java @@ -6,10 +6,13 @@ import org.springframework.context.annotation.Configuration; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.sdf.SDf01; +import ru.spcex.clearing.balance.validation.AccountBalanceValidation; +import ru.spcex.clearing.balance.validation.AccountBalanceValidationRule; import ru.spcex.clearing.balance.validation.Sdf01ValidationRule; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.validation.IValidator; import ru.spcex.platform.utils.validation.ValidatorImpl; @@ -38,4 +41,21 @@ public class ValidationConfig { }; } + @Autowired + @Bean("accountBalanceValidator") + public Function accountBalanceValidator(ImdgProvider imdgProvider) { + return fieldsToValidateWrapper -> { + ImdgValidationContext context = new ImdgValidationContext<>(); + context.setValidatedObject(fieldsToValidateWrapper); + BiConsumer> addImdg = (s, aClass) -> context.addImdg(s, imdgProvider.getImdg(s, aClass)); + addImdg.accept(IMDGDistributedNames.Map_Account, Account.class); + addImdg.accept(IMDGDistributedNames.Map_Company, Company.class); + return new ValidatorImpl<>(context, + AccountBalanceValidationRule.CompanyPresent, + AccountBalanceValidationRule.AccountOk); + }; + } + + + } diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/errors/BalanceError.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/errors/BalanceError.java index 1a02ebb7b..2cd8704de 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/errors/BalanceError.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/errors/BalanceError.java @@ -8,7 +8,9 @@ public enum BalanceError implements IEnumId { CurrentDateOnly(5214L), WrongMarket(5215L), WrongAccount(5215L), - AccountNotPresent(-1L); + AccountNotPresent(5217L), + AccountNotActive(5218L) + ; private final Long id; BalanceError(Long id) { diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java new file mode 100644 index 000000000..3eff4627f --- /dev/null +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java @@ -0,0 +1,79 @@ +package ru.spcex.clearing.balance.service; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.account.AccountBalance; +import ru.clearing.classes.statics.data.company.Company; +import ru.spcex.clearing.balance.validation.AccountBalanceValidation; +import ru.spcex.clearing.balance.validation.ValidationStored; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.platform.enumeration.BalanceAccountType; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidator; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; + +@Component +public class AccountBalanceService { + private final ImdgProvider imdgProvider; + private final Imdg accountBalanceImdg; + private final Function validationFactory; + + public AccountBalanceService(ImdgProvider imdgProvider, + @Qualifier("accountBalanceValidator") Function validationFactory) { + this.imdgProvider = imdgProvider; + this.validationFactory = validationFactory; + this.accountBalanceImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class); + } + + public AccountResult createAccountBalance(Long addresseeId, Long accountId, BigDecimal amount, + String cashMovementCurrencyCode) { + IValidator validator = validationFactory.apply(new AccountBalanceValidation(addresseeId, accountId)); + Optional validationError = validator + .tillFirstError(); + if (validationError.isPresent()) return new AccountResult(validationError.get()); + Account account = validator.getStored(ValidationStored.Account); + Company company = validator.getStored(ValidationStored.Company); + //которой accountBalance.accountId=statement.accountId и accountBalance.companyId=statement.companyId: + + AccountBalance accountBalance = accountBalanceImdg.getSingleObjectByFieldValues( + Map.of("accountId", accountId, "companyId", addresseeId) + ); + if (accountBalance == null) { + accountBalance = new AccountBalance(); + accountBalance.setCompanyId(addresseeId); + accountBalance.setCreated(Instant.now()); + accountBalance.setAccountId(accountId); +//fixme accountBalance.setAccountType(account.getAccountType()); + accountBalance.setAccount(account.getAccount()); + accountBalance.setOpenBalanceAmount(amount); + accountBalance.setFreeBalanceAmount(amount); + accountBalance.setBalanceAmount(amount); + accountBalance.setBalanceAccountType(BalanceAccountType.Active.getKey()); + accountBalance.setClearingDate(LocalDate.now()); + accountBalance.setCurrencyCode(cashMovementCurrencyCode); + accountBalance.setTradingCode(company.getTradingCode()); + accountBalance.setShortName(company.getShortName()); + accountBalance.setFullName(company.getFullName()); + return new AccountResult(accountBalance); + } else { + accountBalance.setUpdated(Instant.now()); + accountBalance.setAccountId(accountId); + //fixme accountBalance.setAccountType(account.getAccountType()); + accountBalance.setAccount(account.getAccount()); + accountBalance.setOpenBalanceAmount(amount); + accountBalance.setFreeBalanceAmount(amount); + accountBalance.setBalanceAmount(amount); + accountBalance.setCurrencyCode(cashMovementCurrencyCode); + return new AccountResult(accountBalance); + } + } +} diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountResult.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountResult.java new file mode 100644 index 000000000..0e38e0dde --- /dev/null +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountResult.java @@ -0,0 +1,25 @@ +package ru.spcex.clearing.balance.service; + +import ru.clearing.classes.statics.data.account.AccountBalance; +import ru.spcex.platform.utils.enumeration.EnumMessage; + +public class AccountResult { + private EnumMessage error; //if was + private AccountBalance account; + + public AccountResult(EnumMessage validationError) { + this.error = validationError; + } + + public AccountResult(AccountBalance account) { + this.account = account; + } + + public EnumMessage getError() { + return error; + } + + public AccountBalance getAccount() { + return account; + } +} diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java index 80a178ac5..0506c16f0 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java @@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.account.AccountBalance; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.sdf.SDf01; import ru.clearing.classes.statics.data.sdf.SDf02; @@ -28,6 +29,7 @@ import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.time.TimeUtil; import ru.spcex.platform.utils.validation.IValidator; @@ -51,19 +53,25 @@ public class StatementService extends QueueConsumer implements InitializingBean private final Imdg accountBalanceImdg; private final Imdg statementImdg; private final Function sDf01Validator; + private final AccountBalanceService accountBalanceService; + private final IMessageResolver errorResolver; @Autowired public StatementService(Consumer kafkaQueue, ImdgProvider imdgProvider, KafkaSender kafkaReqProducer, LoggingService errorLogger, - @Qualifier("sdf01Validator") Function sDf01Validator) { + @Qualifier("sdf01Validator") Function sDf01Validator, + AccountBalanceService accountBalanceService, + IMessageResolver errorResolver) { super(kafkaQueue); this.imdgProvider = imdgProvider; this.sdf01Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf01, SDf01.class); - this.sdf02Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class);; + this.sdf02Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class); + this.accountBalanceService = accountBalanceService; this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); this.accountBalanceImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class); this.kafkaReqProducer = kafkaReqProducer; this.errorLogger = errorLogger; this.sDf01Validator = sDf01Validator; + this.errorResolver = errorResolver; } @Override @@ -95,7 +103,7 @@ public class StatementService extends QueueConsumer implements InitializingBean for (SDf01 sdf01 : sdf01Group) { IValidator validator = sDf01Validator.apply(sdf01); Optional error = validator.tillFirstError(); - Company company = validator.getStored(ValidationStored.Sdf01Company); + Company company = validator.getStored(ValidationStored.Company); if (statementRequest.getAccountCreationResults().size() == 0 && BalanceError.AccountNotPresent.equals(error.map(EnumMessage::getSubject).orElse(null))) { //на данном шаге company существует -> getId ok @@ -115,18 +123,22 @@ public class StatementService extends QueueConsumer implements InitializingBean if (statement == null) { statement = createFlow(sdf01, company, - validator.getStored(ValidationStored.Sdf01Account)); + validator.getStored(ValidationStored.Account)); } else { updateFlow(statement, sdf01, - validator.getStored(ValidationStored.Sdf01Account)); + validator.getStored(ValidationStored.Account)); } SDf02 sdf02New = createSuccessSdf02(sdf01, generationIdForGroup); sdf02Imdg.insert(sdf02New); statement.setOutSDfId(sdf02New.getId()); - AccountBalance accountBalance = createSuccessAccountBalance(); - accountBalanceImdg.insert(accountBalance); - //fixme possible error from accountBalanceCreation -> other status + errorCode, errorText - statement.setStatus(OperationStatus.Executed.getKey()); + AccountResult accountResult = accountBalanceService.createAccountBalance(statement.getAddresseeId(), statement.getAccountId(), statement.getAmount(), statement.getCashMovementCurrencyCode()); + if (accountResult.getError() != null) { + statement.setErrorCode(accountResult.getError().getSubject().getId().toString()); + statement.setErrorText(errorResolver.resolve(accountResult.getError())); + } else { + accountBalanceImdg.insert(accountResult.getAccount()); //insert == update? + statement.setStatus(OperationStatus.Executed.getKey()); + } statementImdg.update(statement); if (accountRequests.size() > 0) { @@ -227,20 +239,4 @@ public class StatementService extends QueueConsumer implements InitializingBean sDf02.setResult("OK!"); return sDf02; } - - private AccountBalance createSuccessAccountBalance() { - return new AccountBalance(); - } - - private static class AccountBalance extends SpcexObjectBase { - private String message = "AccountBalance"; - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - } } diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/AccountBalanceValidation.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/AccountBalanceValidation.java new file mode 100644 index 000000000..5bfbbe358 --- /dev/null +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/AccountBalanceValidation.java @@ -0,0 +1,3 @@ +package ru.spcex.clearing.balance.validation; + +public record AccountBalanceValidation(Long addresseeId, Long accountId) {} diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/AccountBalanceValidationRule.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/AccountBalanceValidationRule.java new file mode 100644 index 000000000..5861ebd63 --- /dev/null +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/AccountBalanceValidationRule.java @@ -0,0 +1,55 @@ +package ru.spcex.clearing.balance.validation; + +import ru.clearing.classes.statics.data.account.Account; +import ru.clearing.classes.statics.data.company.Company; +import ru.spcex.clearing.balance.errors.BalanceError; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.Status; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; + +import java.time.format.DateTimeFormatter; +import java.util.Map; +import java.util.Optional; + +public enum AccountBalanceValidationRule implements IValidationRule> { + CompanyPresent() { + @Override + public Optional validate(ImdgValidationContext context) { + AccountBalanceValidation validatedObject = context.getValidatedObject(); + Imdg companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class); + Company company = companyImdg.getSingleObjectByID(validatedObject.addresseeId()); + if (company == null) { + return of( BalanceError.CompanyNotFound); + } + context.storeObject(ValidationStored.Company, company); + return empty(); + } + }, + AccountOk() { + @Override + public Optional validate(ImdgValidationContext context) { + AccountBalanceValidation validatedObject = context.getValidatedObject(); + Imdg accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class); + Account account = accountImdg.getSingleObjectByFieldValues(Map.of("id", validatedObject.accountId(), + "accountType", AccountType.Clrn.getKey())); + if (account == null) { + return of(BalanceError.AccountNotPresent); + } + if (!Status.Active.equalsByKey(account.getStatus())) { + return of(BalanceError.AccountNotActive, account.getId()); + } + context.storeObject(ValidationStored.Account, account); + return empty(); + } + }; + private final static DateTimeFormatter datFormatter = DateTimeFormatter.ofPattern("dd.MM.yy"); + + @Override + public String ruleName() { + return "Sdf01ValidationRule." + name(); + } +} diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/Sdf01ValidationRule.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/Sdf01ValidationRule.java index 78ebb937d..855184e0e 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/Sdf01ValidationRule.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/validation/Sdf01ValidationRule.java @@ -3,11 +3,11 @@ package ru.spcex.clearing.balance.validation; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.sdf.SDf01; -import ru.spcex.clearing.balance.config.ImdgValidationContext; import ru.spcex.clearing.balance.errors.BalanceError; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.validation.ImdgValidationContext; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.validation.IValidationRule; @@ -26,7 +26,7 @@ public enum Sdf01ValidationRule implements IValidationRuleru.spcex.platform platform-classes-base + + ru.spcex.platform + platform-utils + \ No newline at end of file diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ImdgValidationContext.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/ImdgValidationContext.java similarity index 90% rename from clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ImdgValidationContext.java rename to platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/ImdgValidationContext.java index 40a5f805e..3d853cff4 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/config/ImdgValidationContext.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/validation/ImdgValidationContext.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.balance.config; +package ru.spcex.platform.imdg.validation; import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.imdg.api.Imdg; @@ -17,11 +17,11 @@ public class ImdgValidationContext implements IValidatorContext { this.storedObjects = new HashMap<>(); } - void addImdg(String key, Imdg imdg) { + public void addImdg(String key, Imdg imdg) { imdgs.put(key, imdg); } - void setValidatedObject(T validatedObject) { + public void setValidatedObject(T validatedObject) { this.validatedObject = validatedObject; } From 63e54ae918015acc246094d50ab2603c76d1e2a2 Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 6 Oct 2022 09:37:25 +0300 Subject: [PATCH 34/41] http://jira.mfd.msk:8088/browse/CLS-36 --- .../clearing/balance/service/AccountBalanceService.java | 4 ++-- .../classes/statics/data/account/AccountBalance.java | 6 +++--- .../imdg/businessobject/AccountBalanceMapStore.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java index 3eff4627f..3e46d3f42 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/AccountBalanceService.java @@ -52,7 +52,7 @@ public class AccountBalanceService { accountBalance.setCompanyId(addresseeId); accountBalance.setCreated(Instant.now()); accountBalance.setAccountId(accountId); -//fixme accountBalance.setAccountType(account.getAccountType()); + accountBalance.setAccountType(account.getAccountType()); accountBalance.setAccount(account.getAccount()); accountBalance.setOpenBalanceAmount(amount); accountBalance.setFreeBalanceAmount(amount); @@ -67,7 +67,7 @@ public class AccountBalanceService { } else { accountBalance.setUpdated(Instant.now()); accountBalance.setAccountId(accountId); - //fixme accountBalance.setAccountType(account.getAccountType()); + accountBalance.setAccountType(account.getAccountType()); accountBalance.setAccount(account.getAccount()); accountBalance.setOpenBalanceAmount(amount); accountBalance.setFreeBalanceAmount(amount); diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalance.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalance.java index ad7611ace..c34a3fb4e 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalance.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalance.java @@ -15,7 +15,7 @@ public class AccountBalance extends BusinessObject { private static final long serialVersionUID = ConstSerializable.serialVersionUID; private Long companyId; private Long accountId; - private Long accountType; + private String accountType; private String account; private BigDecimal openBalanceAmount; private BigDecimal startBalanceAmount; @@ -49,11 +49,11 @@ public class AccountBalance extends BusinessObject { this.accountId = accountId; } - public Long getAccountType() { + public String getAccountType() { return accountType; } - public void setAccountType(Long accountType) { + public void setAccountType(String accountType) { this.accountType = accountType; } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountBalanceMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountBalanceMapStore.java index ce5fedc49..37ab57966 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountBalanceMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountBalanceMapStore.java @@ -47,7 +47,7 @@ public class AccountBalanceMapStore extends TemplateMapStore { object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); object.setAccountId(resultSet.getObject("ACCOUNT_ID", Long.class)); - object.setAccountType(resultSet.getObject("ACCOUNT_TYPE", Long.class)); + object.setAccountType(resultSet.getObject("ACCOUNT_TYPE", String.class)); object.setAccount(resultSet.getObject("ACCOUNT", String.class)); object.setOpenBalanceAmount(resultSet.getObject("OPEN_BALANCE_AMOUNT", BigDecimal.class)); object.setStartBalanceAmount(resultSet.getObject("START_BALANCE_AMOUNT", BigDecimal.class)); From 7800b5cdab6c12dba4cc90d74d725bb2c99c15f6 Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 6 Oct 2022 10:13:07 +0300 Subject: [PATCH 35/41] fix statement service --- .../balance/service/StatementService.java | 17 ++++++++-------- .../ru/spcex/platform/enumeration/Sender.java | 18 +++++++++++++++++ .../platform/utils/number/BigDecimalUtil.java | 20 +++++++++++++++++++ 3 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Sender.java create mode 100644 platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/number/BigDecimalUtil.java diff --git a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java index 0506c16f0..ddaf951a4 100644 --- a/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java +++ b/clearing-parent/balance-service/src/main/java/ru/spcex/clearing/balance/service/StatementService.java @@ -30,6 +30,7 @@ import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.number.BigDecimalUtil; import ru.spcex.platform.utils.time.TimeUtil; import ru.spcex.platform.utils.validation.IValidator; @@ -154,15 +155,15 @@ public class StatementService extends QueueConsumer implements InitializingBean private Statement createFlow(SDf01 sdf01, Company company, Account account) { Statement statement = new Statement(); statement.setAddresseeId(company.getId()); - statement.setSenderId(2L);// fixme справочник + statement.setSenderId(Sender.Prc.getId()); statement.setCreated(Instant.now()); statement.setClearingDate(TimeUtil.today()); - statement.setStatementType(StatementType.full.getKey()); //fixme справочник + statement.setStatementType(StatementType.full.getKey()); statement.setAccountId(account.getId()); - statement.setAccount(sdf01.getAccount()); //fixme - statement.setInOutDirection(InOutDirection.in.getKey()); //fixme + statement.setAccount(sdf01.getAccount()); + statement.setInOutDirection(InOutDirection.in.getKey()); statement.setSettlementDate(TimeUtil.localDateToInstant(LocalDate.parse(sdf01.getDat(), datFormatter))); - statement.setAmount(null); //fixme sdf01.getRemainder() + statement.setAmount(BigDecimalUtil.parse(sdf01.getRemainder())); statement.setCashMovementCurrencyCode(CurrencyCode.RUB.getKey()); statement.setStatus(OperationStatus.Pending.getKey()); statement.setInSDfId(sdf01.getId()); @@ -174,10 +175,10 @@ public class StatementService extends QueueConsumer implements InitializingBean private void updateFlow(Statement statement, SDf01 sdf01, Account account) { statement.setUpdated(Instant.now()); statement.setAccountId(account.getId()); - statement.setAccount(sdf01.getAccount()); //fixme - statement.setInOutDirection(InOutDirection.in.getKey()); //fixme + statement.setAccount(sdf01.getAccount()); + statement.setInOutDirection(InOutDirection.in.getKey()); statement.setSettlementDate(TimeUtil.localDateToInstant(LocalDate.parse(sdf01.getDat(), datFormatter))); - statement.setAmount(null); //fixme sdf01.getRemainder() + statement.setAmount(BigDecimalUtil.parse(sdf01.getRemainder())); statement.setCashMovementCurrencyCode(CurrencyCode.RUB.getKey()); statementImdg.update(statement); } diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Sender.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Sender.java new file mode 100644 index 000000000..f4f822c5c --- /dev/null +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/Sender.java @@ -0,0 +1,18 @@ +package ru.spcex.platform.enumeration; + +import ru.spcex.platform.utils.enumeration.IEnumId; + +public enum Sender implements IEnumId { + Prc(2L); + + private final Long key; + + Sender(Long key) { + this.key = key; + } + + @Override + public Long getId() { + return key; + } +} diff --git a/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/number/BigDecimalUtil.java b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/number/BigDecimalUtil.java new file mode 100644 index 000000000..b30f30f12 --- /dev/null +++ b/platform-parent/platform-utils/src/main/java/ru/spcex/platform/utils/number/BigDecimalUtil.java @@ -0,0 +1,20 @@ +package ru.spcex.platform.utils.number; + +import java.math.BigDecimal; + +public class BigDecimalUtil { + +// private final Pattern numberPattern = Pattern.compile("\\d+([.,]\\d+)?"); + + public static BigDecimal parse(String number) { + if (number == null) { + return null; + } + number = number.trim().replace(",", "."); + try { + return new BigDecimal(number); + } catch (Exception e) { + return null; + } + } +} From d7a70d18111a2b09b9dbc6daa1f3658b5837d45a Mon Sep 17 00:00:00 2001 From: ialbert Date: Thu, 6 Oct 2022 15:35:26 +0300 Subject: [PATCH 36/41] http://jira.mfd.msk:8088/browse/CLS-50 --- .../data/journal/InDocumentJournal.java | 24 ++++++++++++------- .../data/journal/OutDocumentJournal.java | 24 ++++++++++++------- .../object/InDocumentJournalMapStore.java | 12 ++++++---- .../object/OutDocumentJournalMapStore.java | 12 ++++++---- 4 files changed, 46 insertions(+), 26 deletions(-) diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/journal/InDocumentJournal.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/journal/InDocumentJournal.java index cb797dcdf..ef4d8adc9 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/journal/InDocumentJournal.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/journal/InDocumentJournal.java @@ -18,15 +18,16 @@ public class InDocumentJournal extends SpcexObjectBase { private Instant registrationTime; private Long registrationNumber; private String documentName; - private Long senderId; + private String sender; private Long quantity; private String clearingCode; private String courierType; private Instant emailDate; private BigDecimal amount; - private Long dossierNumber; + private String dossierNumber; private String comment; private Instant receiptDate; + private String resultStatus; public Instant getRegistrationDate() { return registrationDate; @@ -60,12 +61,12 @@ public class InDocumentJournal extends SpcexObjectBase { this.documentName = value; } - public Long getSenderId() { - return senderId; + public String getSender() { + return sender; } - public void setSenderId(Long value) { - this.senderId = value; + public void setSender(String value) { + this.sender = value; } public Long getQuantity() { @@ -108,11 +109,11 @@ public class InDocumentJournal extends SpcexObjectBase { this.amount = value; } - public Long getDossierNumber() { + public String getDossierNumber() { return dossierNumber; } - public void setDossierNumber(Long value) { + public void setDossierNumber(String value) { this.dossierNumber = value; } @@ -132,4 +133,11 @@ public class InDocumentJournal extends SpcexObjectBase { this.receiptDate = value; } + public String getResultStatus() { + return resultStatus; + } + + public void setResultStatus(String resultStatus) { + this.resultStatus = resultStatus; + } } \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/journal/OutDocumentJournal.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/journal/OutDocumentJournal.java index 711dce5e9..ff2738907 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/journal/OutDocumentJournal.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/journal/OutDocumentJournal.java @@ -18,14 +18,15 @@ public class OutDocumentJournal extends SpcexObjectBase { private Instant registrationTime; private Long registrationNumber; private String documentName; - private Long addresseeId; + private String addressee; private Long quantity; private String clearingCode; private String courierType; private Instant emailDate; private BigDecimal amount; - private Long dossierNumber; + private String dossierNumber; private Instant postDate; + private String resultStatus; public Instant getRegistrationDate() { return registrationDate; @@ -59,12 +60,12 @@ public class OutDocumentJournal extends SpcexObjectBase { this.documentName = value; } - public Long getAddresseeId() { - return addresseeId; + public String getAddressee() { + return addressee; } - public void setAddresseeId(Long value) { - this.addresseeId = value; + public void setAddressee(String value) { + this.addressee = value; } public Long getQuantity() { @@ -107,11 +108,11 @@ public class OutDocumentJournal extends SpcexObjectBase { this.amount = value; } - public Long getDossierNumber() { + public String getDossierNumber() { return dossierNumber; } - public void setDossierNumber(Long value) { + public void setDossierNumber(String value) { this.dossierNumber = value; } @@ -123,4 +124,11 @@ public class OutDocumentJournal extends SpcexObjectBase { this.postDate = value; } + public String getResultStatus() { + return resultStatus; + } + + public void setResultStatus(String resultStatus) { + this.resultStatus = resultStatus; + } } \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/InDocumentJournalMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/InDocumentJournalMapStore.java index 00b977451..ce1858fd3 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/InDocumentJournalMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/InDocumentJournalMapStore.java @@ -31,7 +31,7 @@ public class InDocumentJournalMapStore extends TemplateMapStore Date: Mon, 10 Oct 2022 10:08:21 +0300 Subject: [PATCH 37/41] company-service settings fix --- .../company-service/src/main/resources/application.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clearing-parent/company-service/src/main/resources/application.properties b/clearing-parent/company-service/src/main/resources/application.properties index cf9021f82..62bd5e046 100644 --- a/clearing-parent/company-service/src/main/resources/application.properties +++ b/clearing-parent/company-service/src/main/resources/application.properties @@ -3,8 +3,8 @@ company-service.hazelcast.cluster-members=127.0.0.1:5071 company-service.hazelcast.login=dev company-service.hazelcast.password=dev-pass company-service.kafka.bootstrap-servers=localhost:9092 -company-service.kafka.group-id=dev-group -company-service.kafka.enable-auto-commit=false +company-service.kafka.group-id=dev-group-company-service +company-service.kafka.enable-auto-commit=true company-service.kafka.session-timeout-ms=30000 company-service.kafka.auto-offset-reset=latest company-service.kafka.linger-ms=1 From 5beea2d551d2695a443ca968389c5a9dd4609acf Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 10 Oct 2022 14:48:30 +0300 Subject: [PATCH 38/41] http://jira.mfd.msk:8088/browse/CLS-75 company controller nlp fix --- .../entity/company/CompanyBackendGetAll.java | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendGetAll.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendGetAll.java index d7f4fab4f..59ee43b96 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendGetAll.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendGetAll.java @@ -53,23 +53,25 @@ public class CompanyBackendGetAll extends BasicSpcexResponse { singleItem.setUpdated(company.getUpdated()); CompanyBackendGetFields.CompanyInfoFields companyInfoFields = new CompanyBackendGetFields.CompanyInfoFields(); CompanyInfo profile = company.getProfile(); - companyInfoFields.setId(profile.getId()); - companyInfoFields.setCompanyId(profile.getCompanyId()); - companyInfoFields.setCorporationSoleType(profile.getCorporationSoleType()); - companyInfoFields.setCountryCode(profile.getCountryCode()); - companyInfoFields.setDescription(profile.getDescription()); - companyInfoFields.setProfessionalSign(profile.getProfessionalSign()); - companyInfoFields.setLegalKind(profile.getLegalKind()); - companyInfoFields.setOrganizationType(profile.getOrganizationType()); - companyInfoFields.setResidence(profile.getResidence()); - companyInfoFields.setShortName(profile.getShortName()); - companyInfoFields.setFullName(profile.getFullName()); - companyInfoFields.setShortNameEng(profile.getShortNameEng()); - companyInfoFields.setFullNameEng(profile.getFullNameEng()); - companyInfoFields.setTradingCode(profile.getTradingCode()); - companyInfoFields.setClearingCode(profile.getClearingCode()); - companyInfoFields.setRegistrationCode(profile.getRegistrationCode()); - singleItem.setProfile(companyInfoFields); + if (profile != null) { + companyInfoFields.setId(profile.getId()); + companyInfoFields.setCompanyId(profile.getCompanyId()); + companyInfoFields.setCorporationSoleType(profile.getCorporationSoleType()); + companyInfoFields.setCountryCode(profile.getCountryCode()); + companyInfoFields.setDescription(profile.getDescription()); + companyInfoFields.setProfessionalSign(profile.getProfessionalSign()); + companyInfoFields.setLegalKind(profile.getLegalKind()); + companyInfoFields.setOrganizationType(profile.getOrganizationType()); + companyInfoFields.setResidence(profile.getResidence()); + companyInfoFields.setShortName(profile.getShortName()); + companyInfoFields.setFullName(profile.getFullName()); + companyInfoFields.setShortNameEng(profile.getShortNameEng()); + companyInfoFields.setFullNameEng(profile.getFullNameEng()); + companyInfoFields.setTradingCode(profile.getTradingCode()); + companyInfoFields.setClearingCode(profile.getClearingCode()); + companyInfoFields.setRegistrationCode(profile.getRegistrationCode()); + singleItem.setProfile(companyInfoFields); + } payload.getItems().add(singleItem); } } From dae87c4e9b172beb7008e5a1bce80733cfa713f2 Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 10 Oct 2022 15:48:45 +0300 Subject: [PATCH 39/41] company map store profile load fix --- .../ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java index 23a7caef6..4037eba48 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java @@ -56,7 +56,7 @@ public class CompanyMapStore extends BusinessObjectMapStore { company.setWorkflowStatus(resultSet.getObject("WORKFLOW_STATUS", String.class)); company.setShortName(resultSet.getObject("SHORT_NAME", String.class)); company.setFullName(resultSet.getObject("FULL_NAME", String.class)); -// company.setProfile(getCompanyInfo(company.getId())); + company.setProfile(getCompanyInfo(company.getId())); return company; }); } From 177b0f8602aef9adb22a5e6e789b9d791682dc0b Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 10 Oct 2022 16:09:30 +0300 Subject: [PATCH 40/41] company map store profile store fix --- .../ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java index 4037eba48..28fcd3a1d 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java @@ -91,7 +91,7 @@ public class CompanyMapStore extends BusinessObjectMapStore { } } batchInsertUpdate(insertStatement, batchArgs); -// batchInsertUpdate(insertCompanyInfoStatement, batchCompanyInfoArgs); + batchInsertUpdate(insertCompanyInfoStatement, batchCompanyInfoArgs); } From cdd322d62804bf55e6fd0562e9ef7e7ec35d0def Mon Sep 17 00:00:00 2001 From: ialbert Date: Mon, 10 Oct 2022 17:54:31 +0300 Subject: [PATCH 41/41] hazelcast port setting changed to default --- .../account-service/src/main/resources/application.properties | 2 +- .../balance-service/src/main/resources/application.properties | 2 +- .../company-service/src/main/resources/application.properties | 2 +- .../dbf-exporter/src/main/resources/application.properties | 2 +- .../dbf-importer/src/main/resources/application.properties | 2 +- .../clearing/imdg/config/element/HazelcastServerSettings.java | 2 +- .../src/main/resources/application.properties | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/clearing-parent/account-service/src/main/resources/application.properties b/clearing-parent/account-service/src/main/resources/application.properties index 5857cfeb4..b778da132 100644 --- a/clearing-parent/account-service/src/main/resources/application.properties +++ b/clearing-parent/account-service/src/main/resources/application.properties @@ -1,5 +1,5 @@ spring.main.web-application-type=none -account-service.hazelcast.cluster-members=127.0.0.1:5071 +account-service.hazelcast.cluster-members=127.0.0.1:5701 account-service.hazelcast.login=dev account-service.hazelcast.password=dev-pass diff --git a/clearing-parent/balance-service/src/main/resources/application.properties b/clearing-parent/balance-service/src/main/resources/application.properties index b865b73a3..46ac587bd 100644 --- a/clearing-parent/balance-service/src/main/resources/application.properties +++ b/clearing-parent/balance-service/src/main/resources/application.properties @@ -1,5 +1,5 @@ spring.main.web-application-type=none -balance-service.hazelcast.cluster-members=127.0.0.1:5071 +balance-service.hazelcast.cluster-members=127.0.0.1:5701 balance-service.hazelcast.login=dev balance-service.hazelcast.password=dev-pass diff --git a/clearing-parent/company-service/src/main/resources/application.properties b/clearing-parent/company-service/src/main/resources/application.properties index 62bd5e046..292578a7e 100644 --- a/clearing-parent/company-service/src/main/resources/application.properties +++ b/clearing-parent/company-service/src/main/resources/application.properties @@ -1,5 +1,5 @@ spring.main.web-application-type=none -company-service.hazelcast.cluster-members=127.0.0.1:5071 +company-service.hazelcast.cluster-members=127.0.0.1:5701 company-service.hazelcast.login=dev company-service.hazelcast.password=dev-pass company-service.kafka.bootstrap-servers=localhost:9092 diff --git a/clearing-parent/dbf-exporter/src/main/resources/application.properties b/clearing-parent/dbf-exporter/src/main/resources/application.properties index 44e7a9fa7..e0f15cb7a 100644 --- a/clearing-parent/dbf-exporter/src/main/resources/application.properties +++ b/clearing-parent/dbf-exporter/src/main/resources/application.properties @@ -2,7 +2,7 @@ server.port=8080 server.servlet.context-path=/exporter spring.main.web-application-type=servlet -export-dbf-service.hazelcast.cluster-members=10.200.200.181:5071 +export-dbf-service.hazelcast.cluster-members=10.200.200.181:5701 export-dbf-service.hazelcast.login=dev export-dbf-service.hazelcast.password=dev-pass diff --git a/clearing-parent/dbf-importer/src/main/resources/application.properties b/clearing-parent/dbf-importer/src/main/resources/application.properties index edfc4a166..4c0438d76 100644 --- a/clearing-parent/dbf-importer/src/main/resources/application.properties +++ b/clearing-parent/dbf-importer/src/main/resources/application.properties @@ -12,7 +12,7 @@ import-dbf-service.common.encoding-source=cp866 import-dbf-service.common.insert-batch-size=100 import-dbf-service.common.threads-count=10 -import-dbf-service.hazelcast.cluster-members=10.200.200.181:5071 +import-dbf-service.hazelcast.cluster-members=10.200.200.181:5701 import-dbf-service.hazelcast.login=dev import-dbf-service.hazelcast.password=dev-pass diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java index 897d9a600..b0daa2dd6 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java @@ -4,7 +4,7 @@ import java.util.List; public class HazelcastServerSettings { - private int listenPort = 5071; + private int listenPort = 5701; private String login; private String password; private List clusterMembers; diff --git a/clearing-parent/securities-service/src/main/resources/application.properties b/clearing-parent/securities-service/src/main/resources/application.properties index 80153f863..ee89c6710 100644 --- a/clearing-parent/securities-service/src/main/resources/application.properties +++ b/clearing-parent/securities-service/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.main.web-application-type=none -securities-service.hazelcast.cluster-members=127.0.0.1:5071 +securities-service.hazelcast.cluster-members=127.0.0.1:5701 securities-service.hazelcast.login=dev securities-service.hazelcast.password=dev-pass