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 { +}