This commit is contained in:
akulikov 2024-08-05 11:52:09 +03:00
parent cb971d6b2b
commit 18a74ee7b8
6 changed files with 279 additions and 0 deletions

View file

@ -51,6 +51,12 @@
<version>1.4.19</version>
</dependency>
<!-- JDBC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- DOC -->
<dependency>
<groupId>org.apache.poi</groupId>

View file

@ -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<T extends SpcexObjectBase> implements Imdg<T> {
private final Map<String, String> fieldMatcherMap;
private final String tableName;
private final JdbcTemplate jdbcTemplate;
private final Class<T> clazz;
public DBMap(Map<String, String> fieldMatcherMap,
String tableName,
JdbcTemplate jdbcTemplate, Class<T> 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<T> 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<T> getCollectionObjectsBySQL(String paramString) {
return Imdg.super.getCollectionObjectsBySQL(paramString);
}
@Deprecated
@Override
public T getFirstObjectByFieldValues(Map<String, ? extends Comparable<?>> conditions) {
return Imdg.super.getFirstObjectByFieldValues(conditions);
}
@Deprecated
@Override
public Collection<T> getCollectionObjectsByFieldValues(Map<String, ? extends Comparable<?>> conditions) {
return Imdg.super.getCollectionObjectsByFieldValues(conditions);
}
}

View file

@ -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;
}
}

View file

@ -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<String, String> fieldMatcherMap;
public DBPredicateBuilder(Map<String, String> 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);
}
}

View file

@ -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<Class<?>, Map<String, String>> fieldsMatcherForTable;
private final Map<Class<?>, String> tableNameForClass;
private final JdbcTemplate jdbcTemplate;
public DBProvider(Map<Class<?>, Map<String, String>> 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 <T extends SpcexObjectBase> Imdg<T> getImdg(String key, Class<T> clazz) {
Map<String, String> 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");
}
}

View file

@ -0,0 +1,2 @@
package ru.spcex.clearing.reports.db_direct;public class DBRegistryParams {
}