directDB
This commit is contained in:
parent
cb971d6b2b
commit
18a74ee7b8
6 changed files with 279 additions and 0 deletions
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
package ru.spcex.clearing.reports.db_direct;public class DBRegistryParams {
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue