diff --git a/clearing-parent/reports-service/pom.xml b/clearing-parent/reports-service/pom.xml
index e0761fe35..3eb65f449 100644
--- a/clearing-parent/reports-service/pom.xml
+++ b/clearing-parent/reports-service/pom.xml
@@ -51,6 +51,12 @@
1.4.19
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
org.apache.poi
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBMap.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBMap.java
new file mode 100644
index 000000000..26703f40b
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBMap.java
@@ -0,0 +1,73 @@
+package ru.spcex.clearing.reports.db_direct;
+
+import java.util.Collection;
+import java.util.Map;
+import org.springframework.jdbc.core.JdbcTemplate;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
+
+public class DBMap implements Imdg {
+ private final Map fieldMatcherMap;
+ private final String tableName;
+ private final JdbcTemplate jdbcTemplate;
+ private final Class clazz;
+
+ public DBMap(Map fieldMatcherMap,
+ String tableName,
+ JdbcTemplate jdbcTemplate, Class clazz) {
+ this.fieldMatcherMap = fieldMatcherMap;
+ this.tableName = tableName;
+ this.jdbcTemplate = jdbcTemplate;
+ this.clazz = clazz;
+ }
+
+ @Override
+ public T getSingleObjectByID(Long id) {
+ return jdbcTemplate.queryForObject("select * from %s where ID = %d".formatted(tableName, id), clazz);
+ }
+
+ @SuppressWarnings("sql")
+ @Override
+ public Collection getCollectionObjectsByPredicate(ImdgPredicate predicate) {
+ String sql = predicate.toString();
+ return jdbcTemplate.queryForList("select * from %s where (%s)".formatted(tableName, sql), clazz);
+ }
+
+ @Override
+ public T getFirstObjectByPredicate(ImdgPredicate predicate) {
+ String sql = predicate.toString();
+ return jdbcTemplate.queryForObject("select * from %s where (%s) limit 1".formatted(tableName, sql), clazz);
+ }
+
+ @Override
+ public ImdgPredicateBuilder predicateBuilder() {
+ return new DBPredicateBuilder(fieldMatcherMap);
+ }
+
+
+
+
+
+
+
+ @Deprecated
+ @Override
+ public Collection getCollectionObjectsBySQL(String paramString) {
+ return Imdg.super.getCollectionObjectsBySQL(paramString);
+ }
+
+ @Deprecated
+ @Override
+ public T getFirstObjectByFieldValues(Map> conditions) {
+ return Imdg.super.getFirstObjectByFieldValues(conditions);
+ }
+
+ @Deprecated
+ @Override
+ public Collection getCollectionObjectsByFieldValues(Map> conditions) {
+ return Imdg.super.getCollectionObjectsByFieldValues(conditions);
+ }
+
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBPredicate.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBPredicate.java
new file mode 100644
index 000000000..6e1bba168
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBPredicate.java
@@ -0,0 +1,16 @@
+package ru.spcex.clearing.reports.db_direct;
+
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+
+public class DBPredicate implements ImdgPredicate {
+ private final String predicate;
+
+ public DBPredicate(String predicate) {
+ this.predicate = predicate;
+ }
+
+ @Override
+ public String toString() {
+ return predicate;
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBPredicateBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBPredicateBuilder.java
new file mode 100644
index 000000000..417ef84c7
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBPredicateBuilder.java
@@ -0,0 +1,114 @@
+package ru.spcex.clearing.reports.db_direct;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.stream.Collectors;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast;
+
+public class DBPredicateBuilder extends ImdgPredicateBuilderHazelcast {
+ private final Map fieldMatcherMap;
+
+ public DBPredicateBuilder(Map fieldMatcherMap) {
+ this.fieldMatcherMap = fieldMatcherMap;
+ }
+
+ private String replaced(String key) {
+ return fieldMatcherMap.get(key);
+ }
+
+ @Override
+ public ImdgPredicate equals(String key, Object value) {
+ return new DBPredicate(" (%s = %s) ".formatted(replaced(key), value.toString()));
+ }
+
+ @Override
+ public ImdgPredicate greatEqual(String key, Comparable value) {
+ return new DBPredicate(" (%s >= %s) ".formatted(replaced(key), value.toString()));
+ }
+
+ @Override
+ public ImdgPredicate lessEqual(String key, Comparable value) {
+ return new DBPredicate(" (%s <= %s) ".formatted(replaced(key), value.toString()));
+ }
+
+ @Override
+ public ImdgPredicate greater(String key, Comparable value) {
+ return new DBPredicate(" (%s > %s) ".formatted(replaced(key), value.toString()));
+ }
+
+ @Override
+ public ImdgPredicate less(String key, Comparable value) {
+ return new DBPredicate(" (%s < %s) ".formatted(replaced(key), value.toString()));
+ }
+
+ @Override
+ public ImdgPredicate notNull(String key) {
+ return new DBPredicate(" (%s is not null) ".formatted(replaced(key)));
+ }
+
+ @Override
+ public ImdgPredicate isNull(String key) {
+ return new DBPredicate(" (%s is null) ".formatted(replaced(key)));
+ }
+
+ @Override
+ public ImdgPredicate in(String key, Comparable... values) {
+ return new DBPredicate(
+ " (%s in (%s) ".formatted(
+ replaced(key),
+ Arrays.stream(values)
+ .map(" '%s' "::formatted)
+ .collect(Collectors.joining(","))
+ )
+ );
+ }
+
+ @Override
+ public ImdgPredicate ilike(String key, String pattern) {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
+ @Override
+ public ImdgPredicate not(ImdgPredicate param) {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
+ @Override
+ public ImdgPredicate and(ImdgPredicate paramA, ImdgPredicate paramB) {
+ return new DBPredicate(" ((%s) and (%s)) ".formatted(paramA.toString(), paramB.toString()));
+ }
+
+ @Override
+ public ImdgPredicate and(ImdgPredicate... param) {
+ return new DBPredicate(
+ " (%s) ".formatted(
+ Arrays.stream(param)
+ .map(predicate -> " (%s) ")
+ .collect(Collectors.joining(" and "))
+ )
+ );
+ }
+
+ @Override
+ public ImdgPredicate or(ImdgPredicate paramA, ImdgPredicate paramB) {
+ return new DBPredicate(" ((%s) or (%s)) ".formatted(paramA.toString(), paramB.toString()));
+ }
+
+ @Override
+ public ImdgPredicate or(ImdgPredicate... param) {
+ return new DBPredicate(
+ " (%s) ".formatted(
+ Arrays.stream(param)
+ .map(predicate -> " (%s) ")
+ .collect(Collectors.joining(" or "))
+ )
+ );
+ }
+
+ @Override
+ public ImdgPredicate sql(String sql) {
+ return new DBPredicate(sql);
+ }
+
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBProvider.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBProvider.java
new file mode 100644
index 000000000..e2ddb8c63
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBProvider.java
@@ -0,0 +1,68 @@
+package ru.spcex.clearing.reports.db_direct;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.springframework.jdbc.core.JdbcTemplate;
+import ru.clearing.classes.statics.data.account.Account;
+import ru.clearing.classes.statics.data.account.AccountSymbols;
+import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
+import ru.clearing.classes.statics.data.company.Company;
+import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
+import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
+import ru.clearing.classes.statics.data.execution.ExecutionFond;
+import ru.clearing.classes.statics.data.misc.Session;
+import ru.clearing.classes.statics.data.profile.ProfileDocument;
+import ru.clearing.classes.statics.data.registry.Registry;
+import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
+import ru.clearing.classes.statics.data.security.CurrencyPairSecurity;
+import ru.clearing.platform.dictionary.CurrencyPairDictionary;
+import ru.clearing.platform.dictionary.RegistryCodeDictionary;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.ImdgId;
+import ru.spcex.platform.imdg.api.ImdgProvider;
+import ru.spcex.platform.imdg.api.ImdgTransaction;
+
+public class DBProvider implements ImdgProvider {
+ private final Map, Map> fieldsMatcherForTable;
+ private final Map, String> tableNameForClass;
+ private final JdbcTemplate jdbcTemplate;
+
+ public DBProvider(Map, Map> fieldsMatcherForTable, JdbcTemplate jdbcTemplate) {
+ this.fieldsMatcherForTable = fieldsMatcherForTable;
+ this.jdbcTemplate = jdbcTemplate;
+ this.tableNameForClass = new HashMap<>();
+ this.tableNameForClass.put(Account.class, "ACCOUNT");
+ this.tableNameForClass.put(ExecutionFond.class, "EXECUTION_FOND");
+ this.tableNameForClass.put(ExecutionDeposit.class, "EXECUTION_DEPOSIT");
+ this.tableNameForClass.put(Company.class, "COMPANY");
+ this.tableNameForClass.put(Registry.class, "REGISTRY");
+ this.tableNameForClass.put(Session.class, "SESSION");
+ this.tableNameForClass.put(CurrencyPairDictionary.class, "CURRENCY_PAIR_DICTIONARY");
+ this.tableNameForClass.put(CurrencyPairSecurity.class, "CURRENCY_PAIR_SECURITY");
+ this.tableNameForClass.put(RegistryCodeDictionary.class, "REGISTRY_CODE_DICTIONARY");
+ this.tableNameForClass.put(ClearingMemberCategory.class, "CLEARING_MEMBER_CATEGORY");
+ this.tableNameForClass.put(AccountSymbols.class, "ACCOUNT_SYMBOLS");
+ this.tableNameForClass.put(ProfileDocument.class, "PROFILE_DOCUMENT");
+ this.tableNameForClass.put(ExecutionCurrency.class, "EXECUTION_CURRENCY");
+ this.tableNameForClass.put(TradingClearingRegistry.class, "TRADING_CLEARING_REGISTRY");
+ }
+
+ @Override
+ public Imdg getImdg(String key, Class clazz) {
+ Map fieldsMatcherMap = fieldsMatcherForTable.get(clazz);
+ String tableName = tableNameForClass.get(clazz);
+ return new DBMap<>(fieldsMatcherMap, tableName, jdbcTemplate, clazz);
+ }
+
+ @Override
+ public ImdgId getImdgIdGenerator() {
+ throw new UnsupportedOperationException("not implemented for direct DB provider");
+ }
+
+ @Override
+ public ImdgTransaction newTransaction() {
+ throw new UnsupportedOperationException("not implemented for direct DB provider");
+ }
+
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBRegistryParams.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBRegistryParams.java
new file mode 100644
index 000000000..14dc63210
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBRegistryParams.java
@@ -0,0 +1,2 @@
+package ru.spcex.clearing.reports.db_direct;public class DBRegistryParams {
+}