diff --git a/clearing-parent/reports-service/readme.md b/clearing-parent/reports-service/readme.md
index 4ab9323ef..3aca42cba 100644
--- a/clearing-parent/reports-service/readme.md
+++ b/clearing-parent/reports-service/readme.md
@@ -4,7 +4,7 @@ report-service
Сервис для генерации отчётов.
-Формат xml, docx.
+Формат xml, docx, csv.
Параметры запуска
@@ -12,6 +12,7 @@ report-service
--spring.config.location= путь к папке с файлом настроек application.properties
--console - признак, что надо запуститься не как сервис, слушающий очередь kafka, а как утилита для генерации отчётов за текущий день/месяц и выключиться.
+-Dspring.profiles.active=dev - позволяет выгружать данные из БД в обход IMDG (нужны соответствующие настройки подключения)
По умолчанию запускается в режиме сервиса.
@@ -48,6 +49,8 @@ DAILY - все ежедневные
reports-service.kafka-consumer - группа настроек для подключения к очереди kafka
+ reports-service.direct-db - группа настроек для подключения к базе (если нужно получать данные напрямую из БД в обход IMDG)
+
и другие настройки.
Рабочие папки
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java
index 0492bb849..52594c333 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/ReportsServiceApplication.java
@@ -4,10 +4,12 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
-@SpringBootApplication
+//@SpringBootApplication
+@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
public class ReportsServiceApplication {
public static void main(String[] args) {
try {
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java
index 53a3b4243..2e71182e7 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/CSVReportBuilder.java
@@ -1,20 +1,5 @@
package ru.spcex.clearing.reports.builders;
-import com.opencsv.CSVWriter;
-import com.opencsv.ICSVWriter;
-import com.opencsv.bean.*;
-import com.opencsv.exceptions.CsvBadConverterException;
-import com.opencsv.exceptions.CsvChainedException;
-import com.opencsv.exceptions.CsvFieldAssignmentException;
-import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import ru.clearing.classes.statics.data.misc.Session;
-import ru.spcex.platform.enumeration.ReportBuilderType;
-import ru.spcex.platform.enumeration.ReportKeys;
-import ru.spcex.platform.imdg.api.Imdg;
-
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
@@ -26,8 +11,34 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
-import java.util.*;
+import java.util.Collection;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
import java.util.stream.Collectors;
+import com.opencsv.CSVWriter;
+import com.opencsv.ICSVWriter;
+import com.opencsv.bean.AbstractCsvConverter;
+import com.opencsv.bean.BeanField;
+import com.opencsv.bean.ColumnPositionMappingStrategy;
+import com.opencsv.bean.ConverterNumber;
+import com.opencsv.bean.CsvBindByName;
+import com.opencsv.bean.CsvBindByPosition;
+import com.opencsv.bean.CsvConverter;
+import com.opencsv.bean.CsvNumber;
+import com.opencsv.bean.StatefulBeanToCsv;
+import com.opencsv.bean.StatefulBeanToCsvBuilder;
+import com.opencsv.exceptions.CsvBadConverterException;
+import com.opencsv.exceptions.CsvChainedException;
+import com.opencsv.exceptions.CsvFieldAssignmentException;
+import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import ru.clearing.classes.statics.data.misc.Session;
+import ru.spcex.platform.enumeration.ReportBuilderType;
+import ru.spcex.platform.enumeration.ReportKeys;
+import ru.spcex.platform.imdg.api.Imdg;
/**
* Класс для построения отчетов в формате CSV
@@ -136,10 +147,8 @@ public abstract class CSVReportBuilder {
}
protected List getSessionIdsForCurrentDate(Imdg sessionImdg) {
- Collection sessionForCurrentDay = sessionImdg.getCollectionObjectsByFieldValues(
- Map.of(
- "clearingDate", LocalDate.now()
- )
+ Collection sessionForCurrentDay = sessionImdg.getCollectionObjectsByPredicate(
+ sessionImdg.predicateBuilder().equals("clearingDate", LocalDate.now())
);
Set sessionIds = sessionForCurrentDay.stream().map(Session::getId).collect(Collectors.toSet());
return sessionIds.stream().toList();
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java
index 09f2b6b67..ad9fb91aa 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSCommissionTradesReportBuilder.java
@@ -1,5 +1,11 @@
package ru.spcex.clearing.reports.builders.ks;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.Account;
import ru.clearing.classes.statics.data.company.Company;
@@ -10,7 +16,16 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.reports.builders.CSVReportBuilder;
import ru.spcex.clearing.reports.builders.EmptyParams;
import ru.spcex.clearing.reports.builders.bean.KSCommissionTradesReport;
-import ru.spcex.platform.enumeration.*;
+import ru.spcex.platform.enumeration.AccountType;
+import ru.spcex.platform.enumeration.MarketCode;
+import ru.spcex.platform.enumeration.RegistryStatus;
+import ru.spcex.platform.enumeration.RegistryTradingParams;
+import ru.spcex.platform.enumeration.RegistryUnit;
+import ru.spcex.platform.enumeration.ReportBuilderType;
+import ru.spcex.platform.enumeration.ReportKeys;
+import ru.spcex.platform.enumeration.Section;
+import ru.spcex.platform.enumeration.SessionType;
+import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
@@ -18,14 +33,6 @@ import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
@Component
public class KSCommissionTradesReportBuilder extends CSVReportBuilder {
protected DateTimeFormatter dateFormatter_ddMMyy = DateTimeFormatter.ofPattern("ddMMyy");
@@ -81,9 +88,9 @@ public class KSCommissionTradesReportBuilder extends CSVReportBuilder registryImdg;
private final Imdg sessionImdg;
private final Imdg accountImdg;
- private final Imdg currencyPairDictionaryImdg;
- private final Imdg currencyPairSecurityImdg;
private List rows = null;
@@ -49,8 +46,6 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
ImdgPredicate finalPredicate = pb.and(
pb.in("sessionId", sessionIds.toArray(new Long[0])),
pb.equals("clearingDate", nowDate),
- pb.sql(sql),
+ registryPredicate,
+ pb.in("registryStatus", RegistryStatus.OK.getKey(), RegistryStatus.CLRD.getKey()),
pb.or(
pb.equals("accountType", AccountType.Clrn.getKey()),
pb.equals("accountType", AccountType.Info.getKey())
@@ -106,7 +102,7 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder groupedRegistry = entry.getValue();
try {
if (groupedRegistry.isEmpty()) {
- log.warn("Empty LM_T and CM_T registries for account = {} and session_id = {}. Registries with id = [{}] was skipped",
+ log.warn("Empty TM_T and OM_T registries for account = {} and session_id = {}. Registries with id = [{}] was skipped",
pairRegistryId.getAccount(),
pairRegistryId.getSessionId(),
groupedRegistry.stream().map(r -> String.valueOf(r.getId())).collect(Collectors.joining(", "))
@@ -114,52 +110,52 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder cmtRegistries = new ArrayList<>();
- List lmtRegistries = new ArrayList<>();
+ List omtRegistries = new ArrayList<>();
+ List tmtRegistries = new ArrayList<>();
Registry registry = null;
for (Registry currRegistry : groupedRegistry) {
registry = currRegistry;
- if (RegistryDesignation.L.equalsByKey(currRegistry.getRegistryDesignation()))
- lmtRegistries.add(currRegistry);
- if (RegistryDesignation.C.equalsByKey(currRegistry.getRegistryDesignation()))
- cmtRegistries.add(currRegistry);
+ if (RegistryDesignation.T.equalsByKey(currRegistry.getRegistryDesignation()))
+ tmtRegistries.add(currRegistry);
+ if (RegistryDesignation.O.equalsByKey(currRegistry.getRegistryDesignation()))
+ omtRegistries.add(currRegistry);
}
boolean invalid = false;
- if (!cmtRegistries.isEmpty() || !lmtRegistries.isEmpty()) {
+ if (!omtRegistries.isEmpty() || !tmtRegistries.isEmpty()) {
String sourceTradingCode = null;
String sourceTkr = null;
- if (!cmtRegistries.isEmpty()) {
- Registry next = cmtRegistries.iterator().next();
+ if (!omtRegistries.isEmpty()) {
+ Registry next = omtRegistries.iterator().next();
sourceTradingCode = next.getTradingCode();
sourceTkr = next.getTradingClearingRegistry();
}
- if (!lmtRegistries.isEmpty()) {
- Registry next = lmtRegistries.iterator().next();
+ if (!tmtRegistries.isEmpty()) {
+ Registry next = tmtRegistries.iterator().next();
sourceTradingCode = next.getTradingCode();
sourceTkr = next.getTradingClearingRegistry();
}
- for (Registry currRegistry : cmtRegistries) {
+ for (Registry currRegistry : omtRegistries) {
if (!Objects.equals(sourceTradingCode, currRegistry.getTradingCode())) {
invalid = true;
- log.warn("Invalid CM_T registries set, tradingCode not equals. Registries was skipped");
+ log.warn("Invalid OM_T registries set, tradingCode not equals. Registries was skipped");
break;
}
if (!Objects.equals(sourceTkr, currRegistry.getTradingClearingRegistry())) {
invalid = true;
- log.warn("Invalid CM_T registries set, tradingClearingRegistry not equals. Registries was skipped");
+ log.warn("Invalid OM_T registries set, tradingClearingRegistry not equals. Registries was skipped");
break;
}
}
- for (Registry currRegistry : lmtRegistries) {
+ for (Registry currRegistry : tmtRegistries) {
if (!Objects.equals(sourceTradingCode, currRegistry.getTradingCode())) {
invalid = true;
- log.warn("Invalid LM_T registries set, tradingCode not equals. Registries was skipped");
+ log.warn("Invalid TM_T registries set, tradingCode not equals. Registries was skipped");
break;
}
if (!Objects.equals(sourceTkr, currRegistry.getTradingClearingRegistry())) {
invalid = true;
- log.warn("Invalid CM_T registries set, tradingClearingRegistry not equals. Registries was skipped");
+ log.warn("Invalid OM_T registries set, tradingClearingRegistry not equals. Registries was skipped");
break;
}
}
@@ -181,20 +177,22 @@ public class KSRepCashNettoReportBuilder extends CSVReportBuilder registries = registryImdg.getCollectionObjectsByPredicate(finalPredicate);
log.debug("Found {} registries by query: {}", registries.size(), finalPredicate);
@@ -121,10 +119,12 @@ public class KSRepCashRegisterSumsReportBuilder extends CSVReportBuilder sessionsForDay = sessionImdg.getCollectionObjectsByFieldValues(Map.of("clearingDate", LocalDate.now()));
+ Collection sessionsForDay = sessionImdg.getCollectionObjectsByPredicate(
+ sessionImdg.predicateBuilder().equals("clearingDate", LocalDate.now())
+ );
Long[] sessionIds = sessionsForDay.stream().map(Session::getId).toArray(Long[]::new);
- ImdgPredicate cmtPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CM_T).buildPredicate(pb);
- Collection cmtRegistries = registryImdg.getCollectionObjectsByPredicate(
+ ImdgPredicate omtPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.OM_T).buildPredicate(pb);
+ Collection omtRegistries = registryImdg.getCollectionObjectsByPredicate(
pb.and(
- cmtPredicate,
+ omtPredicate,
pb.in("sessionId", sessionIds),
pb.equals("tradingCode", registry.getTradingCode()),
pb.equals("companyId", registry.getCompanyId()),
pb.equals("account", registry.getAccount()),
- pb.equals("registryStatus", RegistryStatus.CLRD.getKey())
+ pb.in("registryStatus", RegistryStatus.OK.getKey(), RegistryStatus.CLRD.getKey())
)
);
- ImdgPredicate lmtPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.LM_T).buildPredicate(pb);
- Collection lmtRegistries = registryImdg.getCollectionObjectsByPredicate(
+ ImdgPredicate tmtPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.TM_T).buildPredicate(pb);
+ Collection tmtRegistries = registryImdg.getCollectionObjectsByPredicate(
pb.and(
- lmtPredicate,
+ tmtPredicate,
pb.in("sessionId", sessionIds),
pb.equals("tradingCode", registry.getTradingCode()),
pb.equals("companyId", registry.getCompanyId()),
pb.equals("account", registry.getAccount()),
- pb.equals("registryStatus", RegistryStatus.CLRD.getKey())
+ pb.in("registryStatus", RegistryStatus.OK.getKey(), RegistryStatus.CLRD.getKey())
)
);
Set contracts = new HashSet<>();
- BigDecimal cmtBalanceSum = BigDecimal.ZERO;
- for (Registry cmtRegistry : cmtRegistries) {
- Long counterPartyId = cmtRegistry.getCounterPartyId();
+ BigDecimal omtBalanceSum = BigDecimal.ZERO;
+ for (Registry omtRegistry : omtRegistries) {
+ Long counterPartyId = omtRegistry.getCounterPartyId();
if (counterPartyId != null) {
- Collection clearingMemberCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(
- Map.of("companyId", counterPartyId)
+ Collection clearingMemberCategory = clearingMemberCategoryImdg.getCollectionObjectsByPredicate(
+ clearingMemberCategoryImdg.predicateBuilder().equals("companyId", counterPartyId)
);
if (!clearingMemberCategory.isEmpty()) {
ClearingMemberCategory next = clearingMemberCategory.iterator().next();
ClearingCategory category = IEnumKey.getEnumByKey(ClearingCategory.class, next.getClearingMemberCategory());
- SessionType sessionType = IEnumKey.getEnumByKey(SessionType.class, cmtRegistry.getSessionType());
+ SessionType sessionType = IEnumKey.getEnumByKey(SessionType.class, omtRegistry.getSessionType());
if (category == ClearingCategory.I && sessionType == SessionType.XDEP) {
continue;
}
}
}
- BigDecimal balance = cmtRegistry.getBalance();
- cmtBalanceSum = cmtBalanceSum.add(balance);
- contracts.add(cmtRegistry.getContract());
+ BigDecimal balance = omtRegistry.getBalance();
+ omtBalanceSum = omtBalanceSum.add(balance);
+ contracts.add(omtRegistry.getContract());
}
ImdgPredicate dmxPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.DM_X).buildPredicate(pb);
Collection dmxRegistries = registryImdg.getCollectionObjectsByPredicate(
@@ -199,12 +204,12 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder {
Long counterPartyId = reg.getCounterPartyId();
if (counterPartyId != null) {
- Collection clearingMemberCategory = clearingMemberCategoryImdg.getCollectionObjectsByFieldValues(
- Map.of("companyId", counterPartyId)
+ Collection clearingMemberCategory = clearingMemberCategoryImdg.getCollectionObjectsByPredicate(
+ clearingMemberCategoryImdg.predicateBuilder().equals("companyId", counterPartyId)
);
if (!clearingMemberCategory.isEmpty()) {
ClearingMemberCategory next = clearingMemberCategory.iterator().next();
@@ -217,7 +222,7 @@ public class KSRepCashRegistersReportBuilder extends CSVReportBuilder {
private final Imdg registryImdg;
@@ -69,11 +77,12 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder sessionIds = params.getSessionId();
if (sessionIds == null || sessionIds.isEmpty()) sessionIds = getSessionIdsForCurrentDate(sessionImdg);
- String sql = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.CS_T, RegistryTradingParams.LS_T).build();
+ ImdgPredicate registryPredicate = RegistryCodeSqlBuilder.getInstance(RegistryTradingParams.OS_T, RegistryTradingParams.TS_T).buildPredicate(pb);
ImdgPredicate finalPredicate = pb.and(
pb.in("sessionId", sessionIds.toArray(new Long[0])),
pb.equals("clearingDate", nowDate),
- pb.sql(sql),
+ registryPredicate,
+ pb.in("registryStatus", RegistryStatus.OK.getKey(), RegistryStatus.CLRD.getKey()),
pb.equals("accountType", AccountType.Depo.getKey()),
pb.notNull("account")
);
@@ -87,38 +96,38 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder groupedRegistry = entry.getValue();
try {
if (groupedRegistry.isEmpty()) {
- log.warn("Empty LS_T and CS_T registries for {}",
+ log.warn("Empty TS_T and OS_T registries for {}",
pairRegistryId
);
continue;
}
- List cstRegistries = new ArrayList<>();
- List lstRegistries = new ArrayList<>();
+ List ostRegistries = new ArrayList<>();
+ List tstRegistries = new ArrayList<>();
Registry registry = null;
for (Registry currRegistry : groupedRegistry) {
registry = currRegistry;
- if (RegistryDesignation.L.equalsByKey(currRegistry.getRegistryDesignation()))
- lstRegistries.add(currRegistry);
- if (RegistryDesignation.C.equalsByKey(currRegistry.getRegistryDesignation()))
- cstRegistries.add(currRegistry);
+ if (RegistryDesignation.T.equalsByKey(currRegistry.getRegistryDesignation()))
+ tstRegistries.add(currRegistry);
+ if (RegistryDesignation.O.equalsByKey(currRegistry.getRegistryDesignation()))
+ ostRegistries.add(currRegistry);
}
boolean invalid = false;
- if (!cstRegistries.isEmpty() || !lstRegistries.isEmpty()) {
+ if (!ostRegistries.isEmpty() || !tstRegistries.isEmpty()) {
String sourceTradingCode = null;
- if (!cstRegistries.isEmpty()) sourceTradingCode = cstRegistries.iterator().next().getTradingCode();
- if (!lstRegistries.isEmpty()) sourceTradingCode = lstRegistries.iterator().next().getTradingCode();
- for (Registry currRegistry : cstRegistries) {
+ if (!ostRegistries.isEmpty()) sourceTradingCode = ostRegistries.iterator().next().getTradingCode();
+ if (!tstRegistries.isEmpty()) sourceTradingCode = tstRegistries.iterator().next().getTradingCode();
+ for (Registry currRegistry : ostRegistries) {
if (Objects.equals(sourceTradingCode, currRegistry.getTradingCode())) continue;
invalid = true;
- log.warn("Invalid CS_T registries set, tradingCode not equals. Registries was skipped");
+ log.warn("Invalid OS_T registries set, tradingCode not equals. Registries was skipped");
break;
}
- for (Registry currRegistry : lstRegistries) {
+ for (Registry currRegistry : tstRegistries) {
if (Objects.equals(sourceTradingCode, currRegistry.getTradingCode())) continue;
invalid = true;
- log.warn("Invalid LS_T registries set, tradingCode not equals. Registries was skipped");
+ log.warn("Invalid TS_T registries set, tradingCode not equals. Registries was skipped");
break;
}
if (invalid) continue;
@@ -130,7 +139,9 @@ public class KSRepDepoNettoReportBuilder extends CSVReportBuilder registryImdg;
private final Imdg companyImdg;
private final Imdg accountSymbolsImdg;
- private final Imdg currencyPairDictionaryImdg;
- private final Imdg currencyPairSecurityImdg;
private List rows = null;
@@ -48,8 +43,6 @@ public class KSRepDepoRegisterQuantitiesReportBuilder extends CSVReportBuilder {
private final Imdg registryImdg;
@@ -98,7 +101,9 @@ public class KSRepDepoRegistersReportBuilder extends CSVReportBuilder companies = companyImdg.getCollectionObjectsByFieldValues(Map.of("workflowStatus", WorkflowStatus.Active.getKey()));
+ Collection companies = companyImdg.getCollectionObjectsByPredicate(
+ companyImdg.predicateBuilder().equals("workflowStatus", WorkflowStatus.Active.getKey())
+ );
log.debug("Found {} Company", companies.size());
rows = new ArrayList<>(companies.size());
for (Company company : companies) {
try {
- CompanySymbols innCompanySymbol = companySymbolsImdg.getFirstObjectByFieldValues(
- Map.of(
- "companyId", company.getId(),
- "companySymbol", CompanySymbol.INN.getKey()
- )
+ ImdgPredicateBuilder pb = companySymbolsImdg.predicateBuilder();
+ CompanySymbols innCompanySymbol = companySymbolsImdg.getFirstObjectByPredicate(
+ pb.and(
+ pb.equals("companyId", company.getId()),
+ pb.equals("companySymbol", CompanySymbol.INN.getKey())
+ )
);
- CompanySymbols cppCompanySymbol = companySymbolsImdg.getFirstObjectByFieldValues(
- Map.of(
- "companyId", company.getId(),
- "companySymbol", CompanySymbol.CPP.getKey()
- )
+ CompanySymbols cppCompanySymbol = companySymbolsImdg.getFirstObjectByPredicate(
+ pb.and(
+ pb.equals("companyId", company.getId()),
+ pb.equals("companySymbol", CompanySymbol.CPP.getKey())
+ )
);
- ProfileDocument profileDocument = profileDocumentImdg.getFirstObjectByFieldValues(
- Map.of(
- "companyId", company.getId(),
- "documentType", DocumentTypes.cntr.getKey()
- )
+ pb = profileDocumentImdg.predicateBuilder();
+ ProfileDocument profileDocument = profileDocumentImdg.getFirstObjectByPredicate(
+ pb.and(
+ pb.equals("companyId", company.getId()),
+ pb.equals("documentType", DocumentTypes.cntr.getKey())
+ )
);
KSRepFirmDetailsReport ksRepFirmDetailsReport = new KSRepFirmDetailsReport();
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java
index 36236c6f6..3bde5b548 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/builders/ks/KSRepTradesReportBuilder.java
@@ -38,6 +38,7 @@ import ru.spcex.platform.enumeration.ReportKeys;
import ru.spcex.platform.enumeration.Side;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
import ru.spcex.platform.utils.enumeration.IEnumKey;
@@ -144,7 +145,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder registryCollection = registryImdg.getCollectionObjectsByPredicate(
pbRegistry.and(
pbRegistry.equals("groupId", groupId),
@@ -154,7 +155,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder {
@@ -55,9 +54,9 @@ public class KSSessionListReportBuilder extends CSVReportBuilder query = Map.of("clearingDate", LocalDate.now());
- Collection sessions = sessionImdg.getCollectionObjectsByFieldValues(query);
- log.debug("Found {} Session by query: {}", sessions.size(), query);
+ ImdgPredicate predicate = sessionImdg.predicateBuilder().equals("clearingDate", LocalDate.now());
+ Collection sessions = sessionImdg.getCollectionObjectsByPredicate(predicate);
+ log.debug("Found {} Session by query: {}", sessions.size(), predicate.toString());
rows = new ArrayList<>(sessions.size());
for (Session session : sessions) {
try {
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ClearingImdgConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ClearingImdgConfig.java
index 27de4b75c..ef769c6f5 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ClearingImdgConfig.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/ClearingImdgConfig.java
@@ -1,11 +1,13 @@
package ru.spcex.clearing.reports.config;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
+import java.beans.PropertyVetoException;
+import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import ru.spcex.clearing.reports.config.settings.ReportsServiceSettings;
+import ru.spcex.clearing.reports.db_direct.DBProvider;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
@@ -19,29 +21,36 @@ public class ClearingImdgConfig {
}
pool.setCorePoolSize(maxPoolSz);
pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion);
+ pool.initialize();
return pool;
}
- @Bean(name = "taskExecutorHazelcastClientInitializer")
public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() {
return createThreadPoolTaskExecutor(1, true);
}
- @Bean(name = "taskExecutorIdGeneratorAwaiter")
public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() {
return createThreadPoolTaskExecutor(1, false);
}
- @Autowired
@Bean
- public ImdgProvider imdgProvider(
- @Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
- @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
- ReportsServiceSettings settings
- ) {
- return new HazelcastService(taskExecutorHazelcastClientInitializer,
- taskExecutorIdGeneratorAwaiter,
- settings.getHazelcast());
+ public ImdgProvider imdgProvider(ReportsServiceSettings settings) throws PropertyVetoException {
+ boolean directDb = settings.getDirectDb() != null && settings.getDirectDb().getEnable() != null && settings.getDirectDb().getEnable();
+ if (!directDb) {
+ ThreadPoolTaskExecutor hazelcastClientInitializerPool = taskExecutorHazelcastClientInitializer();
+ ThreadPoolTaskExecutor idGeneratorAwaiterPool = taskExecutorIdGeneratorAwaiter();
+ return new HazelcastService(hazelcastClientInitializerPool, idGeneratorAwaiterPool, settings.getHazelcast());
+ } else {
+ ComboPooledDataSource dataSource = new ComboPooledDataSource();
+ dataSource.setDriverClass(settings.getDirectDb().getDriver());
+ dataSource.setJdbcUrl(settings.getDirectDb().getUrl());
+ dataSource.setUser(settings.getDirectDb().getLogin());
+ dataSource.setPassword(settings.getDirectDb().getPassword());
+ dataSource.setMinPoolSize(Integer.parseInt(settings.getDirectDb().getMinPoolSize()));
+ dataSource.setMaxPoolSize(Integer.parseInt(settings.getDirectDb().getMaxPoolSize()));
+ JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+ return new DBProvider(jdbcTemplate);
+ }
}
}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/KafkaConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/KafkaConfig.java
index 2ed531e19..5bcafa140 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/KafkaConfig.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/KafkaConfig.java
@@ -9,6 +9,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory;
import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory;
@@ -16,9 +17,11 @@ import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings
import ru.spcex.clearing.platform.messaging.service.RequestInfo;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.reports.config.settings.ReportsServiceSettings;
+import ru.spcex.clearing.reports.db_direct.DBProvider;
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.iml.hazelcast.service.HazelcastService;
@Configuration
public class KafkaConfig {
@@ -48,14 +51,26 @@ public class KafkaConfig {
@Autowired
@Bean
- public KafkaSender kafkaSender(KafkaTemplate kafkaTemplate, ImdgProvider imdgProvider) {
- ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator();
+ public KafkaSender kafkaSender(KafkaTemplate kafkaTemplate, ImdgProvider imdgProvider, ReportsServiceSettings settings) {
+ final ImdgProvider provider;
+ if (imdgProvider instanceof DBProvider) {
+ ThreadPoolTaskExecutor hazelcastClientInitializerPool = new ThreadPoolTaskExecutor();
+ hazelcastClientInitializerPool.setCorePoolSize(1);
+ hazelcastClientInitializerPool.setWaitForTasksToCompleteOnShutdown(true);
+ ThreadPoolTaskExecutor idGeneratorAwaiterPool = new ThreadPoolTaskExecutor();
+ idGeneratorAwaiterPool.setCorePoolSize(1);
+ idGeneratorAwaiterPool.setWaitForTasksToCompleteOnShutdown(false);
+ provider = new HazelcastService(hazelcastClientInitializerPool, idGeneratorAwaiterPool, settings.getHazelcast());
+ } else {
+ provider = imdgProvider;
+ }
+ ImdgId imdgIdGenerator = provider.getImdgIdGenerator();
return KafkaSender
.setup()
.setKafkaTemplate(kafkaTemplate)
.idGenerator(imdgIdGenerator::nextId)
.imdgProvider(s -> {
- Imdg imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RequestInfo, RequestInfo.class);
+ Imdg imdg = provider.getImdg(IMDGDistributedNames.Map_RequestInfo, RequestInfo.class);
return imdg::insert;
})
.build();
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/settings/DirectDB.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/settings/DirectDB.java
new file mode 100644
index 000000000..a373f66ee
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/settings/DirectDB.java
@@ -0,0 +1,67 @@
+package ru.spcex.clearing.reports.config.settings;
+
+public class DirectDB {
+ private String login;
+ private String password;
+ private String url;
+ private String driver;
+ private String minPoolSize;
+ private String maxPoolSize;
+ private Boolean enable;
+
+ public String getLogin() {
+ return login;
+ }
+
+ public void setLogin(String login) {
+ this.login = login;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getMinPoolSize() {
+ return minPoolSize;
+ }
+
+ public void setMinPoolSize(String minPoolSize) {
+ this.minPoolSize = minPoolSize;
+ }
+
+ public String getMaxPoolSize() {
+ return maxPoolSize;
+ }
+
+ public void setMaxPoolSize(String maxPoolSize) {
+ this.maxPoolSize = maxPoolSize;
+ }
+
+ public String getDriver() {
+ return driver;
+ }
+
+ public void setDriver(String driver) {
+ this.driver = driver;
+ }
+
+ public Boolean getEnable() {
+ return enable;
+ }
+
+ public void setEnable(Boolean enable) {
+ this.enable = enable;
+ }
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/settings/ReportsServiceSettings.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/settings/ReportsServiceSettings.java
index 160a3f9ae..69bfa7ba0 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/settings/ReportsServiceSettings.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/config/settings/ReportsServiceSettings.java
@@ -1,5 +1,6 @@
package ru.spcex.clearing.reports.config.settings;
+import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
@@ -8,8 +9,6 @@ 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;
-import java.util.List;
-
@Component
@PropertySource("file:${spring.config.location}/application.properties")
@ConfigurationProperties("reports-service")
@@ -19,6 +18,7 @@ public class ReportsServiceSettings {
private KafkaProducerSettings kafkaProducer;
private Store reportsStore;
private Store notificationsStore;
+ private DirectDB directDb;
@Value("#{'${reports-service.reports.pfx-class-codes}'.split('\\s*,\\s*')}")
private List pfxClassCodes;
@@ -71,4 +71,12 @@ public class ReportsServiceSettings {
public void setPfxClassCodes(List pfxClassCodes) {
this.pfxClassCodes = pfxClassCodes;
}
+
+ public DirectDB getDirectDb() {
+ return directDb;
+ }
+
+ public void setDirectDb(DirectDB directDb) {
+ this.directDb = directDb;
+ }
}
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..555484fef
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBMap.java
@@ -0,0 +1,165 @@
+package ru.spcex.clearing.reports.db_direct;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.sql.Date;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+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 Logger log = LoggerFactory.getLogger(getClass());
+ private final DateTimeFormatter localDateFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
+ private final DateTimeFormatter localTimeFormatter = DateTimeFormatter.ISO_LOCAL_TIME;
+ private final DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+ private final Class clazz;
+ private final Map fieldMatcherMap;
+ private final String tableName;
+ private final JdbcTemplate jdbcTemplate;
+ private final ReflectionRowMapper reflectionRowMapper;
+
+ public DBMap(Map fieldMatcherMap,
+ String tableName,
+ JdbcTemplate jdbcTemplate, Class clazz) {
+ this.fieldMatcherMap = fieldMatcherMap;
+ this.tableName = tableName;
+ this.jdbcTemplate = jdbcTemplate;
+ this.clazz = clazz;
+ reflectionRowMapper = new ReflectionRowMapper<>(clazz, fieldMatcherMap);
+ }
+
+ @Override
+ public T getSingleObjectByID(Long id) {
+ List result;
+ try {
+ result = jdbcTemplate.query("select * from %s where ID = %d limit 1".formatted(tableName, id), reflectionRowMapper);
+ } catch (Exception e) {
+ log.warn("Query error", e);
+ return null;
+ }
+ if (result.isEmpty()) return null;
+ return result.iterator().next();
+ }
+
+ @Override
+ public Collection getCollectionObjectsByPredicate(ImdgPredicate predicate) {
+ String sql = predicate.toString();
+ List result;
+ try {
+ result = jdbcTemplate.query("select * from %s where (%s)".formatted(tableName, sql), reflectionRowMapper);
+ } catch (Exception e) {
+ log.warn("Query error", e);
+ return null;
+ }
+ if (result.isEmpty()) return Collections.emptyList();
+ return result;
+ }
+
+ @Override
+ public T getFirstObjectByPredicate(ImdgPredicate predicate) {
+ String sql = predicate.toString();
+ List result;
+ try {
+ result = jdbcTemplate.query("select * from %s where (%s) limit 1".formatted(tableName, sql), reflectionRowMapper);
+ } catch (Exception e) {
+ log.warn("Query error", e);
+ return null;
+ }
+ if (result.isEmpty()) return null;
+ return result.iterator().next();
+ }
+
+ @Override
+ public ImdgPredicateBuilder predicateBuilder() {
+ return new DBPredicateBuilder(fieldMatcherMap);
+ }
+
+
+
+ /**
+ * Позволяет по матчеру (fieldMatcherMap) создать объект нужного типа (clazz) из ResultSet
+ */
+ static class ReflectionRowMapper implements RowMapper {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private final Class clazz;
+ private final Map fieldMatcherMap;
+
+ private ReflectionRowMapper(Class clazz, Map fieldMatcherMap) {
+ this.clazz = clazz;
+ this.fieldMatcherMap = fieldMatcherMap;
+ }
+
+ @Override
+ public T mapRow(ResultSet rs, int rowNum) {
+ T result;
+ try {
+ Constructor constructor = clazz.getDeclaredConstructor();
+ result = constructor.newInstance();
+ for (Map.Entry entry : fieldMatcherMap.entrySet()) {
+ String pojoName = entry.getKey();
+ String dbName = entry.getValue();
+ Field field = null;
+ Object value;
+ try {
+ try {
+ field = clazz.getDeclaredField(pojoName);
+ } catch (NoSuchFieldException ignored) {}
+ if (field == null) {
+ Class> superClass = clazz;
+ do {
+ superClass = superClass.getSuperclass();
+ if (superClass == null) break;
+ try {
+ field = superClass.getDeclaredField(pojoName);
+ } catch (NoSuchFieldException ignored) {}
+ } while (field == null);
+ }
+ if (field == null) continue;
+ value = rs.getObject(dbName);
+ } catch (SQLException e) {
+ continue;
+ }
+ setFieldWithCorrectType(field, result, value);
+ }
+ } catch (NoSuchMethodException | InvocationTargetException | InstantiationException |
+ IllegalAccessException e) {
+ log.error("ReflectionRowMapper error, check code", e);
+ throw new RuntimeException(e);
+ }
+ return result;
+ }
+
+ private void setFieldWithCorrectType(Field field, T obj, Object value) throws IllegalAccessException {
+ if (obj == null) return;
+ field.setAccessible(true);
+ if (value instanceof Date dateValue) {
+ field.set(obj, dateValue.toLocalDate());
+ } else if (value instanceof Time timeValue) {
+ field.set(obj, timeValue.toLocalTime());
+ } else if (value instanceof Timestamp timestampValue) {
+ if (field.getType() == Instant.class) {
+ field.set(obj, timestampValue.toInstant());
+ } else if (field.getType() == LocalDateTime.class) {
+ field.set(obj, timestampValue.toLocalDateTime());
+ }
+ } else field.set(obj, value);
+ }
+ }
+}
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..ab47d61ac
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBPredicateBuilder.java
@@ -0,0 +1,143 @@
+package ru.spcex.clearing.reports.db_direct;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+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 DateTimeFormatter localDateFormatter = DateTimeFormatter.ISO_LOCAL_DATE;
+ private final DateTimeFormatter localTimeFormatter = DateTimeFormatter.ISO_LOCAL_TIME;
+ private final DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+ private final Map fieldMatcherMap;
+
+ public DBPredicateBuilder(Map fieldMatcherMap) {
+ this.fieldMatcherMap = fieldMatcherMap;
+ }
+
+ private String replaceKey(String key) {
+ String result = fieldMatcherMap.get(key);
+ return result == null ? key : result;
+ }
+
+ private String replaceValue(Object object) {
+ if (object == null)
+ throw new UnsupportedOperationException("For compare 'is null' or 'is not null' use methods isNull() and notNull()");
+
+ if (object instanceof String strObj) return " '%s' ".formatted(strObj);
+ if (object instanceof Character charObj) return " '%s' ".formatted(charObj);
+ if (object instanceof LocalDate ldObj) return " '%s' ".formatted(ldObj.format(localDateFormatter));
+ if (object instanceof LocalTime ltObj) return " '%s' ".formatted(ltObj.format(localTimeFormatter));
+ if (object instanceof LocalDateTime ldtObj) return " '%s' ".formatted(ldtObj.format(localDateTimeFormatter));
+ if (object instanceof Instant instantObj) return " '%s' ".formatted(localDateTimeFormatter.withZone(ZoneId.systemDefault()).format(instantObj));
+ return " %s ".formatted(object.toString());
+ }
+
+ @Override
+ public ImdgPredicate equals(String key, Object value) {
+ if (value == null) return isNull(key);
+ return new DBPredicate(" (%s = %s) ".formatted(replaceKey(key), replaceValue(value)));
+ }
+
+ @Override
+ public ImdgPredicate greatEqual(String key, Comparable value) {
+ if (value == null) return isNull(key);
+ return new DBPredicate(" (%s >= %s) ".formatted(replaceKey(key), replaceValue(value)));
+ }
+
+ @Override
+ public ImdgPredicate lessEqual(String key, Comparable value) {
+ if (value == null) return isNull(key);
+ return new DBPredicate(" (%s <= %s) ".formatted(replaceKey(key), replaceValue(value)));
+ }
+
+ @Override
+ public ImdgPredicate greater(String key, Comparable value) {
+ return new DBPredicate(" (%s > %s) ".formatted(replaceKey(key), replaceValue(value)));
+ }
+
+ @Override
+ public ImdgPredicate less(String key, Comparable value) {
+ return new DBPredicate(" (%s < %s) ".formatted(replaceKey(key), replaceValue(value)));
+ }
+
+ @Override
+ public ImdgPredicate notNull(String key) {
+ return new DBPredicate(" (%s is not null) ".formatted(replaceKey(key)));
+ }
+
+ @Override
+ public ImdgPredicate isNull(String key) {
+ return new DBPredicate(" (%s is null) ".formatted(replaceKey(key)));
+ }
+
+ @Override
+ public ImdgPredicate in(String key, Comparable... values) {
+ if (values == null || values.length == 0) {
+ return new DBPredicate(" (false) ");
+ }
+ return new DBPredicate(
+ " (%s in (%s)) ".formatted(
+ replaceKey(key),
+ Arrays.stream(values)
+ .map(this::replaceValue)
+ .collect(Collectors.joining(","))
+ )
+ );
+ }
+
+ @Override
+ public ImdgPredicate ilike(String key, String pattern) {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
+ @Override
+ public ImdgPredicate not(ImdgPredicate param) {
+ return new DBPredicate(" (not (%s)) ".formatted(param.toString()));
+ }
+
+ @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) ".formatted(predicate.toString()))
+ .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) ".formatted(predicate.toString()))
+ .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..339a5d9ff
--- /dev/null
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/db_direct/DBProvider.java
@@ -0,0 +1,349 @@
+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.ErrorCodeDictionary;
+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 JdbcTemplate jdbcTemplate;
+ private final Map, Map> fieldsMatcherForTable = new HashMap<>();
+ private final Map, String> tableNameForClass = new HashMap<>();
+
+ public DBProvider(JdbcTemplate jdbcTemplate) {
+ initFieldsMatcherForTable();
+ initTableNames();
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ @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");
+ }
+
+ @Override
+ public void waitAvailable() {
+ // nothing to do
+ }
+
+
+ private void initFieldsMatcherForTable() {
+ Map accountMatcher = new HashMap<>();
+ accountMatcher.put("id", "id");
+ accountMatcher.put("updated", "updated_at");
+ accountMatcher.put("created", "created_at");
+ accountMatcher.put("account", "account");
+ accountMatcher.put("accountType", "account_type");
+ accountMatcher.put("relationId", "relation_id");
+ accountMatcher.put("status", "status");
+ accountMatcher.put("processingSign", "processing_sign");
+ accountMatcher.put("companyId", "companyId");
+ accountMatcher.put("currency", "currency");
+ this.fieldsMatcherForTable.put(Account.class, accountMatcher);
+
+ Map executionDepositMatcher = new HashMap<>();
+ executionDepositMatcher.put("id", "id");
+ executionDepositMatcher.put("updated", "updated_at");
+ executionDepositMatcher.put("created", "created_at");
+ executionDepositMatcher.put("exchangeExecutionId", "exchange_execution_id");
+ executionDepositMatcher.put("side", "side");
+ executionDepositMatcher.put("market", "market");
+ executionDepositMatcher.put("tradingDate", "trading_date");
+ executionDepositMatcher.put("securitySymbol", "security_symbol");
+ executionDepositMatcher.put("securityId", "security_id");
+ executionDepositMatcher.put("interestAmount", "interest_amount");
+ executionDepositMatcher.put("exchangeOrderId", "exchange_order_id");
+ executionDepositMatcher.put("price", "price");
+ executionDepositMatcher.put("lots", "lots");
+ executionDepositMatcher.put("quantity", "quantity");
+ executionDepositMatcher.put("exchangeExecutionTime", "exchange_execution_time");
+ executionDepositMatcher.put("duration", "duration");
+ executionDepositMatcher.put("tradingClearingRegistryId", "trading_clearing_registry_id");
+ executionDepositMatcher.put("companyId", "company_id");
+ executionDepositMatcher.put("counterPartyId", "counter_party_id");
+ executionDepositMatcher.put("securityFullName", "security_full_name");
+ executionDepositMatcher.put("settlementCurrency", "settlement_currency");
+ executionDepositMatcher.put("coverageStatus", "coverage_status");
+ executionDepositMatcher.put("sessionId", "session_id");
+ executionDepositMatcher.put("counterPartyTradingClearingRegistryId", "counter_party_trading_clearing_registry_id");
+ executionDepositMatcher.put("partyTradingClearingRegistry", "party_trading_clearing_registry");
+ executionDepositMatcher.put("counterPartyTradingClearingRegistry", "counter_party_trading_clearing_registry");
+ executionDepositMatcher.put("secondLegSettlementDate", "second_leg_settlement_date");
+ executionDepositMatcher.put("secondLegSettlementCode", "second_leg_settlement_code");
+ executionDepositMatcher.put("firstLegSettlementCode", "first_leg_settlement_code");
+ executionDepositMatcher.put("contract", "contract");
+ executionDepositMatcher.put("firstLegAmount", "first_leg_amount");
+ executionDepositMatcher.put("firstLegSettlementDate", "first_leg_settlement_date");
+ executionDepositMatcher.put("secondLegAmount", "second_leg_amount");
+ executionDepositMatcher.put("securityCode", "security_code");
+ this.fieldsMatcherForTable.put(ExecutionDeposit.class, executionDepositMatcher);
+
+ Map executionFondMatcher = new HashMap<>();
+ executionFondMatcher.put("id", "id");
+ executionFondMatcher.put("updated", "updated_at");
+ executionFondMatcher.put("created", "created_at");
+ executionFondMatcher.put("exchangeExecutionId", "exchange_execution_id");
+ executionFondMatcher.put("side", "side");
+ executionFondMatcher.put("market", "market");
+ executionFondMatcher.put("tradingDate", "trading_date");
+ executionFondMatcher.put("securitySymbol", "security_symbol");
+ executionFondMatcher.put("securityId", "security_id");
+ executionFondMatcher.put("interestAmount", "interest_amount");
+ executionFondMatcher.put("exchangeOrderId", "exchange_order_id");
+ executionFondMatcher.put("price", "price");
+ executionFondMatcher.put("settlementAmount", "settlement_amount");
+ executionFondMatcher.put("lots", "lots");
+ executionFondMatcher.put("quantity", "quantity");
+ executionFondMatcher.put("exchangeExecutionTime", "exchange_execution_time");
+ executionFondMatcher.put("duration", "duration");
+ executionFondMatcher.put("tradingClearingRegistryId", "trading_clearing_registry_id");
+ executionFondMatcher.put("comment", "comment");
+ executionFondMatcher.put("clientCodeId", "client_code_id");
+ executionFondMatcher.put("settlementCode", "settlement_code");
+ executionFondMatcher.put("companyId", "company_id");
+ executionFondMatcher.put("counterPartyId", "counter_party_id");
+ executionFondMatcher.put("securityFullName", "security_full_name");
+ executionFondMatcher.put("settlementDate", "settlement_date");
+ executionFondMatcher.put("settlementCurrency", "settlement_currency");
+ executionFondMatcher.put("exchangeExecutionMicroseconds", "exchange_execution_microseconds");
+ executionFondMatcher.put("coverageStatus", "coverage_status");
+ executionFondMatcher.put("sessionId", "session_id");
+ executionFondMatcher.put("counterPartyTradingClearingRegistryId", "counter_party_trading_clearing_registry_id");
+ executionFondMatcher.put("partyTradingClearingRegistry", "party_trading_clearing_registry");
+ executionFondMatcher.put("counterPartyTradingClearingRegistry", "counter_party_trading_clearing_registry");
+ this.fieldsMatcherForTable.put(ExecutionFond.class, executionFondMatcher);
+
+ Map companyMatcher = new HashMap<>();
+ companyMatcher.put("id", "id");
+ companyMatcher.put("updated", "updated_at");
+ companyMatcher.put("created", "created_at");
+ companyMatcher.put("shortName", "short_name");
+ companyMatcher.put("fullName", "full_name");
+ companyMatcher.put("tradingCode", "trading_code");
+ companyMatcher.put("clearingCode", "clearing_code");
+ companyMatcher.put("registrationCode", "registration_code");
+ companyMatcher.put("workflowStatus", "workflow_status");
+ this.fieldsMatcherForTable.put(Company.class, companyMatcher);
+
+ Map registryMatcher = new HashMap<>();
+ registryMatcher.put("id", "id");
+ registryMatcher.put("updated", "updated_at");
+ registryMatcher.put("created", "created_at");
+ registryMatcher.put("companyId", "company_id");
+ registryMatcher.put("tradingCode", "trading_code");
+ registryMatcher.put("clearingCode", "clearing_code");
+ registryMatcher.put("shortName", "short_name");
+ registryMatcher.put("fullName", "full_name");
+ registryMatcher.put("accountId", "account_id");
+ registryMatcher.put("accountType", "account_type");
+ registryMatcher.put("account", "account");
+ registryMatcher.put("registryDesignation", "registry_designation");
+ registryMatcher.put("registryInstrumentType", "registry_instrument_type");
+ registryMatcher.put("registryCapacity", "registry_capacity");
+ registryMatcher.put("registryUnit", "registry_unit");
+ registryMatcher.put("registryCode", "registry_code");
+ registryMatcher.put("tradingClearingRegistryId", "trading_clearing_registry_id");
+ registryMatcher.put("tradingClearingRegistry", "trading_clearing_registry");
+ registryMatcher.put("registryStatus", "registry_status");
+ registryMatcher.put("securityId", "security_id");
+ registryMatcher.put("securitySymbol", "security_symbol");
+ registryMatcher.put("balance", "balance");
+ registryMatcher.put("openBalance", "open_balance");
+ registryMatcher.put("closeBalance", "close_balance");
+ registryMatcher.put("credit", "credit");
+ registryMatcher.put("debit", "debit");
+ registryMatcher.put("settledCredit", "settled_credit");
+ registryMatcher.put("settledDebit", "settled_debit");
+ registryMatcher.put("checkBalance", "check_balance");
+ registryMatcher.put("diffBalance", "diff_balance");
+ registryMatcher.put("planBalance", "plan_balance");
+ registryMatcher.put("balanceDimension", "balance_dimension");
+ registryMatcher.put("settlementDate", "settlement_date");
+ registryMatcher.put("settlementCode", "settlement_code");
+ registryMatcher.put("tradingDate", "trading_date");
+ registryMatcher.put("clearingDate", "clearing_date");
+ registryMatcher.put("refundDate", "refund_date");
+ registryMatcher.put("valueDate", "value_date");
+ registryMatcher.put("price", "price");
+ registryMatcher.put("contract", "contract");
+ registryMatcher.put("counterPartyId", "counter_party_id");
+ registryMatcher.put("comment", "comment");
+ registryMatcher.put("parentId", "parent_id");
+ registryMatcher.put("groupId", "group_id");
+ registryMatcher.put("sessionId", "session_id");
+ registryMatcher.put("sessionType", "session_type");
+ registryMatcher.put("paymentId", "payment_id");
+ this.fieldsMatcherForTable.put(Registry.class, registryMatcher);
+
+ Map sessionMatcher = new HashMap<>();
+ sessionMatcher.put("id", "id");
+ sessionMatcher.put("updated", "updated_at");
+ sessionMatcher.put("created", "created_at");
+ sessionMatcher.put("clearingDate", "clearing_date");
+ sessionMatcher.put("sessionStatus", "session_status");
+ sessionMatcher.put("companyId", "company_id");
+ sessionMatcher.put("securityId", "security_id");
+ sessionMatcher.put("userId", "user_id");
+ sessionMatcher.put("section", "section");
+ sessionMatcher.put("sessionType", "session_type");
+ sessionMatcher.put("workflowStatus", "workflow_status");
+ this.fieldsMatcherForTable.put(Session.class, sessionMatcher);
+
+ Map currencyPairDictionaryMatcher = new HashMap<>();
+ currencyPairDictionaryMatcher.put("id", "id");
+ currencyPairDictionaryMatcher.put("code", "code");
+ currencyPairDictionaryMatcher.put("baseCurrencyId", "base_currency_id");
+ currencyPairDictionaryMatcher.put("quoteCurrencyId", "quote_currency_id");
+ currencyPairDictionaryMatcher.put("majorSign", "major_sign");
+ this.fieldsMatcherForTable.put(CurrencyPairDictionary.class, currencyPairDictionaryMatcher);
+
+ Map currencyPairSecurityMatcher = new HashMap<>();
+ currencyPairSecurityMatcher.put("id", "id");
+ currencyPairSecurityMatcher.put("updated", "updated_at");
+ currencyPairSecurityMatcher.put("created", "created_at");
+ currencyPairSecurityMatcher.put("baseUnitSize", "base_unit_size");
+ currencyPairSecurityMatcher.put("currencyPairId", "currency_pair_id");
+ currencyPairSecurityMatcher.put("code", "code");
+ currencyPairSecurityMatcher.put("settlementType", "settlement_type");
+ currencyPairSecurityMatcher.put("clearingOrganization", "clearing_organization");
+ currencyPairSecurityMatcher.put("settlementOrganization", "settlement_organization");
+ currencyPairSecurityMatcher.put("securityId", "security_id");
+ this.fieldsMatcherForTable.put(CurrencyPairSecurity.class, currencyPairSecurityMatcher);
+
+ Map registryCodeDictionaryMatcher = new HashMap<>();
+ registryCodeDictionaryMatcher.put("id", "id");
+ registryCodeDictionaryMatcher.put("code", "code");
+ registryCodeDictionaryMatcher.put("name", "name");
+ this.fieldsMatcherForTable.put(RegistryCodeDictionary.class, registryCodeDictionaryMatcher);
+
+ Map clearingMemberCategoryMatcher = new HashMap<>();
+ clearingMemberCategoryMatcher.put("companyId", "company_id");
+ clearingMemberCategoryMatcher.put("clearingMemberCategory", "clearing_member_category");
+ clearingMemberCategoryMatcher.put("id", "id");
+ this.fieldsMatcherForTable.put(ClearingMemberCategory.class, clearingMemberCategoryMatcher);
+
+ Map accountSymbolsMatcher = new HashMap<>();
+ accountSymbolsMatcher.put("id", "id");
+ accountSymbolsMatcher.put("accountId", "account_id");
+ accountSymbolsMatcher.put("accountSymbolValue", "account_symbol_value");
+ this.fieldsMatcherForTable.put(AccountSymbols.class, accountSymbolsMatcher);
+
+ Map profileDocumentMatcher = new HashMap<>();
+ profileDocumentMatcher.put("companyId", "company_id");
+ profileDocumentMatcher.put("documentType", "document_type");
+ profileDocumentMatcher.put("issueDate", "issue_date");
+ profileDocumentMatcher.put("issuePlace", "issue_place");
+ profileDocumentMatcher.put("issuer", "issuer");
+ profileDocumentMatcher.put("issuerCode", "issuer_code");
+ profileDocumentMatcher.put("name", "name");
+ profileDocumentMatcher.put("number", "number");
+ profileDocumentMatcher.put("place", "place");
+ profileDocumentMatcher.put("validFromDate", "valid_from_date");
+ profileDocumentMatcher.put("validToDate", "valid_to_date");
+ profileDocumentMatcher.put("link", "link");
+ profileDocumentMatcher.put("id", "id");
+ this.fieldsMatcherForTable.put(ProfileDocument.class, profileDocumentMatcher);
+
+ Map executionCurrencyMatcher = new HashMap<>();
+ executionCurrencyMatcher.put("id", "id");
+ executionCurrencyMatcher.put("updated", "updated_at");
+ executionCurrencyMatcher.put("created", "created_at");
+ executionCurrencyMatcher.put("exchangeExecutionId", "exchange_execution_id");
+ executionCurrencyMatcher.put("exchangeExecutionTime", "exchange_execution_time");
+ executionCurrencyMatcher.put("exchangeExecutionMicroseconds", "exchange_execution_microseconds");
+ executionCurrencyMatcher.put("tradingDate", "trading_date");
+ executionCurrencyMatcher.put("settlementDate", "settlement_date");
+ executionCurrencyMatcher.put("settlementCode", "settlement_code");
+ executionCurrencyMatcher.put("securityId", "security_id");
+ executionCurrencyMatcher.put("securitySymbol", "security_symbol");
+ executionCurrencyMatcher.put("securityName", "security_name");
+ executionCurrencyMatcher.put("companyId", "company_id");
+ executionCurrencyMatcher.put("partyTradingClearingRegistryId", "party_trading_clearing_registry_id");
+ executionCurrencyMatcher.put("partyTradingClearingRegistry", "party_trading_clearing_registry");
+ executionCurrencyMatcher.put("counterPartyId", "counter_party_id");
+ executionCurrencyMatcher.put("counterPartyTradingClearingRegistryId", "counter_party_trading_clearing_registry_id");
+ executionCurrencyMatcher.put("counterPartyTradingClearingRegistry", "counter_party_trading_clearing_registry");
+ executionCurrencyMatcher.put("market", "market");
+ executionCurrencyMatcher.put("price", "price");
+ executionCurrencyMatcher.put("lots", "lots");
+ executionCurrencyMatcher.put("settlementAmount", "settlement_amount");
+ executionCurrencyMatcher.put("quantity", "quantity");
+ executionCurrencyMatcher.put("side", "side");
+ executionCurrencyMatcher.put("currencyCode", "currency_code");
+ executionCurrencyMatcher.put("settlementOrganization", "settlement_organization");
+ executionCurrencyMatcher.put("coverageStatus", "coverage_status");
+ executionCurrencyMatcher.put("sessionId", "session_id");
+ executionCurrencyMatcher.put("clearingDate", "clearing_date");
+ this.fieldsMatcherForTable.put(ExecutionCurrency.class, executionCurrencyMatcher);
+
+ Map tradingClearingRegistryMatcher = new HashMap<>();
+ tradingClearingRegistryMatcher.put("id", "id");
+ tradingClearingRegistryMatcher.put("updated", "updated_at");
+ tradingClearingRegistryMatcher.put("created", "created_at");
+ tradingClearingRegistryMatcher.put("companyId", "company_id");
+ tradingClearingRegistryMatcher.put("code", "code");
+ tradingClearingRegistryMatcher.put("moneyAccountId", "money_account_id");
+ tradingClearingRegistryMatcher.put("depoAccountId", "depo_account_id");
+ tradingClearingRegistryMatcher.put("tradingClearingRegistryType", "trading_clearing_registry_type");
+ tradingClearingRegistryMatcher.put("tradingClearingRegistryLevel", "trading_clearing_registry_level");
+ tradingClearingRegistryMatcher.put("tradingClearingRegistryPurpose", "trading_clearing_registry_purpose");
+ tradingClearingRegistryMatcher.put("status", "status");
+ this.fieldsMatcherForTable.put(TradingClearingRegistry.class, tradingClearingRegistryMatcher);
+
+ Map errorCodeDictionaryMatcher = new HashMap<>();
+ errorCodeDictionaryMatcher.put("id", "id");
+ errorCodeDictionaryMatcher.put("code", "code");
+ errorCodeDictionaryMatcher.put("name", "name");
+ this.fieldsMatcherForTable.put(ErrorCodeDictionary.class, errorCodeDictionaryMatcher);
+ }
+
+ private void initTableNames() {
+ 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");
+ this.tableNameForClass.put(ErrorCodeDictionary.class, "ERROR_CODE_DICTIONARY");
+ }
+
+}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NCMPNotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NCMPNotificationBuilder.java
index b75689f9f..564f8df3d 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NCMPNotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NCMPNotificationBuilder.java
@@ -1,5 +1,11 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -9,16 +15,12 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.enumeration.AccountType;
import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@Component
public class NCMPNotificationBuilder extends NotificationBuilder {
@@ -49,27 +51,54 @@ public class NCMPNotificationBuilder extends NotificationBuilder {
return null;
}
- String profileDocumentSql = "companyId = %d AND documentType = CLRN".formatted(consumerId);
+ ImdgPredicateBuilder pb = profileDocumentImdg.predicateBuilder();
+ ImdgPredicate predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("documentType", "CLRN")
+ );
ProfileDocument profileDocument = null;
- Collection profileDocuments = profileDocumentImdg.getCollectionObjectsBySQL(profileDocumentSql);
+ Collection profileDocuments = profileDocumentImdg.getCollectionObjectsByPredicate(predicate);
if (profileDocuments.size() >= 1) {
profileDocument = profileDocuments.iterator().next();
} else {
- log.warn("ProfileDocument with sql {} not found", profileDocumentSql);
+ log.warn("ProfileDocument with sql {} not found", predicate.toString());
return null;
}
- String companySymbolsValueINN = getCompanySymbolValue("companyId = %d AND companySymbol = %s".formatted(consumerId, CompanySymbol.INN.getKey()), companySymbolsImdg);
- String companySymbolValueCLRC = getCompanySymbolValue("companyId = %d AND companySymbol = %s".formatted(consumerId, CompanySymbol.CLRC.getKey()), companySymbolsImdg);
- String companySymbolValueRGRC = getCompanySymbolValue("companyId = %d AND companySymbol = %s".formatted(consumerId, CompanySymbol.RGRC.getKey()), companySymbolsImdg);
+ pb = companySymbolsImdg.predicateBuilder();
+ String companySymbolsValueINN = getCompanySymbolValue(
+ pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.INN.getKey())
+ ),
+ companySymbolsImdg
+ );
+ String companySymbolValueCLRC = getCompanySymbolValue(
+ pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.CLRC.getKey())
+ ),
+ companySymbolsImdg
+ );
+ String companySymbolValueRGRC = getCompanySymbolValue(
+ pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.RGRC.getKey())
+ ),
+ companySymbolsImdg
+ );
- String accountSql = "companyId = %d AND accountType = INFO".formatted(consumerId);
Account account = null;
- Collection accounts = accountImdg.getCollectionObjectsBySQL(accountSql);
- if (profileDocuments.size() >= 1) {
+ pb = accountImdg.predicateBuilder();
+ predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("accountType", AccountType.Info.getKey())
+ );
+ Collection accounts = accountImdg.getCollectionObjectsByPredicate(predicate);
+ if (!profileDocuments.isEmpty()) {
account = accounts.iterator().next();
} else {
- log.warn("Account with sql {} not found", accountSql);
+ log.warn("Account with sql {} not found", predicate.toString());
return null;
}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NTCRNotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NTCRNotificationBuilder.java
index 8b79e1cf0..9ea136aa7 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NTCRNotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NTCRNotificationBuilder.java
@@ -1,5 +1,11 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -11,13 +17,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.Map;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@Component
public class NTCRNotificationBuilder extends NotificationBuilder {
@@ -59,7 +59,15 @@ public class NTCRNotificationBuilder extends NotificationBuilder {
return null;
}
- String companySymbolValueCLRC = getCompanySymbolValue("companyId = %d AND companySymbol = %s".formatted(consumerId, CompanySymbol.INN.getKey()), companySymbolsImdg);
+ ImdgPredicateBuilder pb = companySymbolsImdg.predicateBuilder();
+
+ String companySymbolValueCLRC = getCompanySymbolValue(
+ pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.INN.getKey())
+ ),
+ companySymbolsImdg
+ );
Map valuesForTemplate = new HashMap<>();
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NotificationBuilder.java
index e1ac4bb34..c2ed1cce5 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/NotificationBuilder.java
@@ -1,11 +1,5 @@
package ru.spcex.clearing.reports.notifications;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import ru.clearing.classes.statics.data.company.CompanySymbols;
-import ru.spcex.clearing.reports.exceptions.ConfigException;
-import ru.spcex.platform.imdg.api.Imdg;
-
import java.io.File;
import java.net.URL;
import java.time.LocalDate;
@@ -15,6 +9,12 @@ import java.time.format.TextStyle;
import java.util.Collection;
import java.util.Locale;
import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import ru.clearing.classes.statics.data.company.CompanySymbols;
+import ru.spcex.clearing.reports.exceptions.ConfigException;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
public abstract class NotificationBuilder {
protected final Logger log = LoggerFactory.getLogger(getClass());
@@ -76,9 +76,9 @@ public abstract class NotificationBuilder {
return filename;
}
- protected String getCompanySymbolValue(String companySymbolsSql, Imdg companySymbolsImdg) {
+ protected String getCompanySymbolValue(ImdgPredicate predicate, Imdg companySymbolsImdg) {
CompanySymbols companySymbols;
- Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsBySQL(companySymbolsSql);
+ Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsByPredicate(predicate);
if (companySymbolsCollection.size() >= 1) {
companySymbols = companySymbolsCollection.iterator().next();
} else {
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/REXNotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/REXNotificationBuilder.java
index b09df0225..862910976 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/REXNotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/REXNotificationBuilder.java
@@ -1,5 +1,12 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -7,14 +14,11 @@ import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.TextStyle;
-import java.util.*;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@Component
public class REXNotificationBuilder extends NotificationBuilder {
@@ -31,7 +35,12 @@ public class REXNotificationBuilder extends NotificationBuilder {
@Override
public File buildNotification(Long consumerId) {
String sql = "companyId = %d AND documentType = 'XCNT'".formatted(consumerId);
- Collection profileDocuments = profileDocumentImdg.getCollectionObjectsBySQL(sql);
+ ImdgPredicateBuilder pb = profileDocumentImdg.predicateBuilder();
+ ImdgPredicate predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("documentType", DocumentTypes.xcnt.getKey())
+ );
+ Collection profileDocuments = profileDocumentImdg.getCollectionObjectsByPredicate(predicate);
ProfileDocument currentProfileDocument = null;
if (profileDocuments.size() >= 1) {
Optional profileDocumentOptional = profileDocuments.stream().max((o1, o2) -> {
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_ACTV_NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_ACTV_NotificationBuilder.java
index 1c92bfe86..9b81cc7fd 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_ACTV_NotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_ACTV_NotificationBuilder.java
@@ -1,5 +1,13 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -9,13 +17,11 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.relation.Relation;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.util.*;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@Component
public class ROOT_ACTV_NotificationBuilder extends NotificationBuilder {
@@ -44,14 +50,14 @@ public class ROOT_ACTV_NotificationBuilder extends NotificationBuilder {
return null;
}
- String relationsSql = "consumerId = %d".formatted(consumerId);
Relation relation = null;
- Collection relations = relationImdg.getCollectionObjectsBySQL(relationsSql);
- if (relations.size() >= 1) {
+ ImdgPredicate predicate = relationImdg.predicateBuilder().equals("consumerId", consumerId);
+ Collection relations = relationImdg.getCollectionObjectsByPredicate(predicate);
+ if (!relations.isEmpty()) {
Optional relationOptional = relations.stream().max(Comparator.comparing(BusinessObject::getUpdated));
relation = relationOptional.get();
} else {
- log.warn("Relation with sql {} not found", relationsSql);
+ log.warn("Relation with sql {} not found", predicate.toString());
return null;
}
Long notificationId = relation.getId();
@@ -61,13 +67,17 @@ public class ROOT_ACTV_NotificationBuilder extends NotificationBuilder {
return null;
}
- String companySymbolsSql = "companyId = %d AND companySymbol = INN";
+ ImdgPredicateBuilder pb = companySymbolsImdg.predicateBuilder();
+ predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.INN.getKey())
+ );
CompanySymbols companySymbols = null;
- Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsBySQL(companySymbolsSql);
- if (companySymbolsCollection.size() >= 1) {
+ Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsByPredicate(predicate);
+ if (!companySymbolsCollection.isEmpty()) {
companySymbols = companySymbolsCollection.iterator().next();
} else {
- log.warn("CompanySymbols with sql {} not found", companySymbolsSql);
+ log.warn("CompanySymbols with sql {} not found", predicate.toString());
return null;
}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_BLKD_NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_BLKD_NotificationBuilder.java
index 8259bda50..fb12faf20 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_BLKD_NotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_BLKD_NotificationBuilder.java
@@ -1,5 +1,13 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -9,13 +17,11 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.relation.Relation;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.util.*;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@Component
public class ROOT_BLKD_NotificationBuilder extends NotificationBuilder {
@@ -44,14 +50,14 @@ public class ROOT_BLKD_NotificationBuilder extends NotificationBuilder {
return null;
}
- String relationsSql = "consumerId = %d".formatted(consumerId);
Relation relation = null;
- Collection relations = relationImdg.getCollectionObjectsBySQL(relationsSql);
- if (relations.size() >= 1) {
+ ImdgPredicate predicate = relationImdg.predicateBuilder().equals("consumerId", consumerId);
+ Collection relations = relationImdg.getCollectionObjectsByPredicate(predicate);
+ if (!relations.isEmpty()) {
Optional relationOptional = relations.stream().max(Comparator.comparing(BusinessObject::getUpdated));
relation = relationOptional.get();
} else {
- log.warn("Relation with sql {} not found", relationsSql);
+ log.warn("Relation with sql {} not found", predicate.toString());
return null;
}
Long notificationId = relation.getId();
@@ -61,13 +67,17 @@ public class ROOT_BLKD_NotificationBuilder extends NotificationBuilder {
return null;
}
- String companySymbolsSql = "companyId = %d AND companySymbol = INN";
CompanySymbols companySymbols = null;
- Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsBySQL(companySymbolsSql);
- if (companySymbolsCollection.size() >= 1) {
+ ImdgPredicateBuilder pb = companySymbolsImdg.predicateBuilder();
+ predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.INN.getKey())
+ );
+ Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsByPredicate(predicate);
+ if (!companySymbolsCollection.isEmpty()) {
companySymbols = companySymbolsCollection.iterator().next();
} else {
- log.warn("CompanySymbols with sql {} not found", companySymbolsSql);
+ log.warn("CompanySymbols with sql {} not found", predicate.toString());
return null;
}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_CLOS_NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_CLOS_NotificationBuilder.java
index 2ac7b9083..993d7e324 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_CLOS_NotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_CLOS_NotificationBuilder.java
@@ -1,5 +1,12 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -8,14 +15,12 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.enumeration.CompanySymbol;
+import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.TextStyle;
-import java.util.*;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@Component
public class ROOT_CLOS_NotificationBuilder extends NotificationBuilder {
@@ -33,10 +38,14 @@ public class ROOT_CLOS_NotificationBuilder extends NotificationBuilder {
@Override
public File buildNotification(Long consumerId) {
- String sql = "companyId = %d AND documentType = 'CNTR'".formatted(consumerId);
- Collection profileDocuments = profileDocumentImdg.getCollectionObjectsBySQL(sql);
+ ImdgPredicateBuilder pb = profileDocumentImdg.predicateBuilder();
+ ImdgPredicate predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("documentType", DocumentTypes.cntr.toString())
+ );
+ Collection profileDocuments = profileDocumentImdg.getCollectionObjectsByPredicate(predicate);
ProfileDocument currentProfileDocument = null;
- if (profileDocuments.size() >= 1) {
+ if (!profileDocuments.isEmpty()) {
Optional profileDocumentOptional = profileDocuments.stream().max((o1, o2) -> {
LocalDate o1ValidFromDate = o1.getValidFromDate();
LocalDate o2ValidFromDate = o2.getValidFromDate();
@@ -46,7 +55,7 @@ public class ROOT_CLOS_NotificationBuilder extends NotificationBuilder {
});
currentProfileDocument = profileDocumentOptional.get();
} else {
- log.warn("Profile_document with sql {} not found", sql);
+ log.warn("Profile_document with sql {} not found", predicate.toString());
return null;
}
@@ -72,13 +81,17 @@ public class ROOT_CLOS_NotificationBuilder extends NotificationBuilder {
return null;
}
- String companySymbolsSql = "companyId = %d AND companySymbol = INN";
CompanySymbols companySymbols = null;
- Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsBySQL(companySymbolsSql);
- if (companySymbolsCollection.size() >= 1) {
+ pb = companySymbolsImdg.predicateBuilder();
+ predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.INN.getKey())
+ );
+ Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsByPredicate(predicate);
+ if (!companySymbolsCollection.isEmpty()) {
companySymbols = companySymbolsCollection.iterator().next();
} else {
- log.warn("CompanySymbols with sql {} not found", companySymbolsSql);
+ log.warn("CompanySymbols with sql {} not found", predicate.toString());
return null;
}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_NEW_NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_NEW_NotificationBuilder.java
index abcfcdd01..229564166 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_NEW_NotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_NEW_NotificationBuilder.java
@@ -1,5 +1,12 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -8,14 +15,12 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.enumeration.CompanySymbol;
+import ru.spcex.platform.enumeration.DocumentTypes;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.TextStyle;
-import java.util.*;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@Component
public class ROOT_NEW_NotificationBuilder extends NotificationBuilder {
@@ -33,8 +38,12 @@ public class ROOT_NEW_NotificationBuilder extends NotificationBuilder {
@Override
public File buildNotification(Long consumerId) {
- String sql = "companyId = %d AND documentType = 'CNTR'".formatted(consumerId);
- Collection profileDocuments = profileDocumentImdg.getCollectionObjectsBySQL(sql);
+ ImdgPredicateBuilder pb = profileDocumentImdg.predicateBuilder();
+ ImdgPredicate predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("documentType", DocumentTypes.cntr.toString())
+ );
+ Collection profileDocuments = profileDocumentImdg.getCollectionObjectsByPredicate(predicate);
ProfileDocument currentProfileDocument = null;
if (profileDocuments.size() >= 1) {
Optional profileDocumentOptional = profileDocuments.stream().max((o1, o2) -> {
@@ -46,7 +55,7 @@ public class ROOT_NEW_NotificationBuilder extends NotificationBuilder {
});
currentProfileDocument = profileDocumentOptional.get();
} else {
- log.warn("Profile_document with sql {} not found", sql);
+ log.warn("Profile_document with sql {} not found", predicate.toString());
return null;
}
@@ -72,13 +81,17 @@ public class ROOT_NEW_NotificationBuilder extends NotificationBuilder {
return null;
}
- String companySymbolsSql = "companyId = %d AND companySymbol = INN";
CompanySymbols companySymbols = null;
- Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsBySQL(companySymbolsSql);
- if (companySymbolsCollection.size() >= 1) {
+ pb = companySymbolsImdg.predicateBuilder();
+ predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.INN.getKey())
+ );
+ Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsByPredicate(predicate);
+ if (!companySymbolsCollection.isEmpty()) {
companySymbols = companySymbolsCollection.iterator().next();
} else {
- log.warn("CompanySymbols with sql {} not found", companySymbolsSql);
+ log.warn("CompanySymbols with sql {} not found", predicate.toString());
return null;
}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_SSPD_NotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_SSPD_NotificationBuilder.java
index 28807f29c..5dbc63599 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_SSPD_NotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/ROOT_SSPD_NotificationBuilder.java
@@ -1,5 +1,13 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -9,13 +17,11 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.relation.Relation;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.util.*;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@Component
public class ROOT_SSPD_NotificationBuilder extends NotificationBuilder {
@@ -44,14 +50,14 @@ public class ROOT_SSPD_NotificationBuilder extends NotificationBuilder {
return null;
}
- String relationsSql = "consumerId = %d".formatted(consumerId);
Relation relation = null;
- Collection relations = relationImdg.getCollectionObjectsBySQL(relationsSql);
- if (relations.size() >= 1) {
+ ImdgPredicate predicate = relationImdg.predicateBuilder().equals("consumerId", consumerId);
+ Collection relations = relationImdg.getCollectionObjectsByPredicate(predicate);
+ if (!relations.isEmpty()) {
Optional relationOptional = relations.stream().max(Comparator.comparing(BusinessObject::getUpdated));
relation = relationOptional.get();
} else {
- log.warn("Relation with sql {} not found", relationsSql);
+ log.warn("Relation with sql {} not found", predicate.toString());
return null;
}
Long notificationId = relation.getId();
@@ -61,13 +67,17 @@ public class ROOT_SSPD_NotificationBuilder extends NotificationBuilder {
return null;
}
- String companySymbolsSql = "companyId = %d AND companySymbol = INN";
CompanySymbols companySymbols = null;
- Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsBySQL(companySymbolsSql);
- if (companySymbolsCollection.size() >= 1) {
+ ImdgPredicateBuilder pb = companySymbolsImdg.predicateBuilder();
+ predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.INN.getKey())
+ );
+ Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsByPredicate(predicate);
+ if (!companySymbolsCollection.isEmpty()) {
companySymbols = companySymbolsCollection.iterator().next();
} else {
- log.warn("CompanySymbols with sql {} not found", companySymbolsSql);
+ log.warn("CompanySymbols with sql {} not found", predicate.toString());
return null;
}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/RRPCNotificationBuilder.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/RRPCNotificationBuilder.java
index 3622a661f..1b5ca6975 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/RRPCNotificationBuilder.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/notifications/RRPCNotificationBuilder.java
@@ -1,5 +1,13 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -9,13 +17,11 @@ import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.relation.Relation;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.enumeration.CompanySymbol;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.util.*;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
@Component
public class RRPCNotificationBuilder extends NotificationBuilder {
@@ -44,14 +50,14 @@ public class RRPCNotificationBuilder extends NotificationBuilder {
return null;
}
- String relationsSql = "consumerId = %d".formatted(consumerId);
Relation relation = null;
- Collection relations = relationImdg.getCollectionObjectsBySQL(relationsSql);
- if (relations.size() >= 1) {
+ ImdgPredicate predicate = relationImdg.predicateBuilder().equals("consumerId", consumerId);
+ Collection relations = relationImdg.getCollectionObjectsByPredicate(predicate);
+ if (!relations.isEmpty()) {
Optional relationOptional = relations.stream().max(Comparator.comparing(BusinessObject::getUpdated));
relation = relationOptional.get();
} else {
- log.warn("Relation with sql {} not found", relationsSql);
+ log.warn("Relation with sql {} not found", predicate.toString());
return null;
}
Long notificationId = relation.getId();
@@ -61,13 +67,17 @@ public class RRPCNotificationBuilder extends NotificationBuilder {
return null;
}
- String companySymbolsSql = "companyId = %d AND companySymbol = INN";
CompanySymbols companySymbols = null;
- Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsBySQL(companySymbolsSql);
+ ImdgPredicateBuilder pb = companySymbolsImdg.predicateBuilder();
+ predicate = pb.and(
+ pb.equals("companyId", consumerId),
+ pb.equals("companySymbol", CompanySymbol.INN.getKey())
+ );
+ Collection companySymbolsCollection = companySymbolsImdg.getCollectionObjectsByPredicate(predicate);
if (companySymbolsCollection.size() >= 1) {
companySymbols = companySymbolsCollection.iterator().next();
} else {
- log.warn("CompanySymbols with sql {} not found", companySymbolsSql);
+ log.warn("CompanySymbols with sql {} not found", predicate.toString());
return null;
}
diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java
index 260c1d456..042f31ebc 100644
--- a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java
+++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports/services/ReportService.java
@@ -1,5 +1,13 @@
package ru.spcex.clearing.reports.services;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.producer.Producer;
import org.slf4j.Logger;
@@ -35,11 +43,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.validation.IValidator;
-import java.io.File;
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
@Service
public class ReportService extends QueueConsumer implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -146,147 +149,167 @@ public class ReportService extends QueueConsumer implements InitializingBean {
public RequestInfoUpdate createReport(BaseRequest userRequest) {
log.debug("ReportRequest received");
- RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestValidator);
- if (requestInfoUpdate != null) return null;
+ try {
+ RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestValidator);
+ if (requestInfoUpdate != null) return null;
- ReportRequest req = userRequest.getRequestPayload();
+ ReportRequest req = userRequest.getRequestPayload();
- logUnknownProperties(userRequest);
+ logUnknownProperties(userRequest);
- log.debug("Create report type {}...", req.getReportId());
+ log.debug("Create report type {}...", req.getReportId());
- List> builders = reportBuildersWithoutParams.get(
+ List> builders = reportBuildersWithoutParams.get(
IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId())
- );
- List outFilenames = new ArrayList<>();
- List outFiles = new ArrayList<>();
- for (CSVReportBuilder builder : builders) {
- File outFile = builder.createReport(new EmptyParams(), outFolder);
- if (outFile == null) continue;
- outFilenames.add(outFile.getAbsolutePath());
- outFiles.add(outFile);
- }
+ );
+ List outFilenames = new ArrayList<>();
+ List outFiles = new ArrayList<>();
+ for (CSVReportBuilder builder : builders) {
+ File outFile = builder.createReport(new EmptyParams(), outFolder);
+ if (outFile == null) continue;
+ outFilenames.add(outFile.getAbsolutePath());
+ outFiles.add(outFile);
+ }
- int outFilesCnt = outFilenames.size();
- if (outFilesCnt == 0) {
- log.error("Create report {} failed, see log", req.getReportId());
- } else if (outFilesCnt < builders.size()) {
- log.error("Create some error for {} failed, see log", req.getReportId());
- } else {
- log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
- }
+ int outFilesCnt = outFilenames.size();
+ if (outFilesCnt == 0) {
+ log.error("Create report {} failed, see log", req.getReportId());
+ } else if (outFilesCnt < builders.size()) {
+ log.error("Create some error for {} failed, see log", req.getReportId());
+ } else {
+ log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
+ }
- sendFilesToSftp(outFiles);
+ sendFilesToSftp(outFiles);
+ } catch (Exception e) {
+ log.error("Unexpected exception", e);
+ }
return null;
}
public RequestInfoUpdate createReportForSessionId(BaseRequest userRequest) {
log.debug("ReportRequestWithSessionId received");
- RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdValidator);
- if (requestInfoUpdate != null) return null;
+ try {
+ RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestWithSessionIdValidator);
+ if (requestInfoUpdate != null) return null;
- ReportRequestWithSessionId req = userRequest.getRequestPayload();
+ ReportRequestWithSessionId req = userRequest.getRequestPayload();
- logUnknownProperties(userRequest);
+ logUnknownProperties(userRequest);
- log.debug("Create report type {}...", req.getReportId());
+ log.debug("Create report type {}...", req.getReportId());
- List> builders = reportBuildersWithSessionIdParam.get(
+ List> builders = reportBuildersWithSessionIdParam.get(
IEnumKey.getEnumByKey(ReportBuilderType.class, req.getReportId())
- );
- List outFilenames = new ArrayList<>();
- List outFiles = new ArrayList<>();
- for (CSVReportBuilder builder : builders) {
- SessionIdParam sessionIdParam = new SessionIdParam();
- sessionIdParam.setSessionId(List.of(req.getSessionId()));
- File outFile = builder.createReport(sessionIdParam, outFolder);
- if (outFile == null) continue;
- outFilenames.add(outFile.getAbsolutePath());
- }
+ );
+ List outFilenames = new ArrayList<>();
+ List outFiles = new ArrayList<>();
+ for (CSVReportBuilder builder : builders) {
+ SessionIdParam sessionIdParam = new SessionIdParam();
+ sessionIdParam.setSessionId(List.of(req.getSessionId()));
+ File outFile = builder.createReport(sessionIdParam, outFolder);
+ if (outFile == null) continue;
+ outFilenames.add(outFile.getAbsolutePath());
+ }
- int outFilesCnt = outFilenames.size();
- if (outFilesCnt == 0) {
- log.error("Create report {} failed, see log", req.getReportId());
- } else if (outFilesCnt < builders.size()) {
- log.error("Create some error for {} failed, see log", req.getReportId());
- } else {
- log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
- }
+ int outFilesCnt = outFilenames.size();
+ if (outFilesCnt == 0) {
+ log.error("Create report {} failed, see log", req.getReportId());
+ } else if (outFilesCnt < builders.size()) {
+ log.error("Create some error for {} failed, see log", req.getReportId());
+ } else {
+ log.debug("Reports {} successfully created. Output files: {}", req.getReportId(), String.join(", ", outFilenames));
+ }
- sendFilesToSftp(outFiles);
+ sendFilesToSftp(outFiles);
+ } catch (Exception e) {
+ log.error("Unexpected exception", e);
+ }
return null;
}
public RequestInfoUpdate createReportForGREP(BaseRequest userRequest) {
log.debug("GREP task received");
- RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREPValidator);
- if (requestInfoUpdate != null) return null;
- logUnknownProperties(userRequest);
+ try {
+ RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREPValidator);
+ if (requestInfoUpdate != null) return null;
+ logUnknownProperties(userRequest);
- List sessionIds = null;
- if (userRequest.getRequestPayload().getSessionId() != null) {
- sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
+ List sessionIds = null;
+ if (userRequest.getRequestPayload().getSessionId() != null) {
+ sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
+ }
+ Map outFiles = createReportsForTask(sessionIds, reportBuildersForGREP.values());
+
+ sendReportsToGateway(sessionIds, outFiles, ReportType.REPORT_KS_TMP.getKey());
+ sendFilesToSftp(outFiles.keySet());
+ } catch (Exception e) {
+ log.error("Unexpected exception", e);
}
- Map outFiles = createReportsForTask(sessionIds, reportBuildersForGREP.values());
-
- sendReportsToGateway(sessionIds, outFiles, ReportType.REPORT_KS_TMP.getKey());
- sendFilesToSftp(outFiles.keySet());
return null;
}
public RequestInfoUpdate createReportForGRET(BaseRequest userRequest) {
log.debug("GRET task received");
- RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGRETValidator);
- if (requestInfoUpdate != null) return null;
- logUnknownProperties(userRequest);
+ try {
+ RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGRETValidator);
+ if (requestInfoUpdate != null) return null;
+ logUnknownProperties(userRequest);
- List sessionIds = null;
- if (userRequest.getRequestPayload().getSessionId() != null) {
- sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
- }
- Map outFiles = createReportsForTask(sessionIds, reportBuildersForGRET.values());
-
- Map outFilesWithReportType_PFX64 = new HashMap<>();
- Map outFilesWithReportType_PFX65 = new HashMap<>();
- for (Map.Entry entry : outFiles.entrySet()) {
- File reportFile = entry.getKey();
- ReportInfo reportInfo = entry.getValue();
- ReportKeys reportKey = IEnumKey.getEnumByKey(ReportKeys.class, reportInfo.reportKey());
- if (reportKey == ReportKeys.KS_BR_PFX65_DEALS) {
- outFilesWithReportType_PFX65.put(reportFile, reportInfo);
- } else if (
- reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_1 ||
- reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_2 ||
- reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_3 ||
- reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_4
- ) {
- outFilesWithReportType_PFX64.put(reportFile, reportInfo);
+ List sessionIds = null;
+ if (userRequest.getRequestPayload().getSessionId() != null) {
+ sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
}
+ Map outFiles = createReportsForTask(sessionIds, reportBuildersForGRET.values());
+
+ Map outFilesWithReportType_PFX64 = new HashMap<>();
+ Map outFilesWithReportType_PFX65 = new HashMap<>();
+ for (Map.Entry entry : outFiles.entrySet()) {
+ File reportFile = entry.getKey();
+ ReportInfo reportInfo = entry.getValue();
+ ReportKeys reportKey = IEnumKey.getEnumByKey(ReportKeys.class, reportInfo.reportKey());
+ if (reportKey == ReportKeys.KS_BR_PFX65_DEALS) {
+ outFilesWithReportType_PFX65.put(reportFile, reportInfo);
+ } else if (
+ reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_1 ||
+ reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_2 ||
+ reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_3 ||
+ reportKey == ReportKeys.KS_BR_PFX64_INFTYPE_4
+ ) {
+ outFilesWithReportType_PFX64.put(reportFile, reportInfo);
+ }
+ }
+ sendReportsToGateway(sessionIds, outFilesWithReportType_PFX64, ReportType.PFX64.getKey());
+ sendReportsToGateway(sessionIds, outFilesWithReportType_PFX65, ReportType.PFX65.getKey());
+ sendFilesToSftp(outFiles.keySet());
+ } catch (Exception e) {
+ log.error("Unexpected exception", e);
}
- sendReportsToGateway(sessionIds, outFilesWithReportType_PFX64, ReportType.PFX64.getKey());
- sendReportsToGateway(sessionIds, outFilesWithReportType_PFX65, ReportType.PFX65.getKey());
- sendFilesToSftp(outFiles.keySet());
return null;
}
public RequestInfoUpdate createReportForGREF(BaseRequest userRequest) {
log.debug("GREF task received");
- RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREFValidator);
- if (requestInfoUpdate != null) return null;
- logUnknownProperties(userRequest);
+ try {
+ RequestInfoUpdate requestInfoUpdate = validationHelper.validateTillFirstError(userRequest, reportRequestGREFValidator);
+ if (requestInfoUpdate != null) return null;
+ logUnknownProperties(userRequest);
- List sessionIds = null;
- if (userRequest.getRequestPayload().getSessionId() != null) {
- sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
+ List sessionIds = null;
+ if (userRequest.getRequestPayload().getSessionId() != null) {
+ sessionIds = List.of(userRequest.getRequestPayload().getSessionId());
+ }
+ Map outFiles = createReportsForTask(sessionIds, reportBuildersForGREF.values());
+
+ sendReportsToGateway(sessionIds, outFiles, ReportType.REPORT_KS_FINAL.getKey());
+ sendFilesToSftp(outFiles.keySet());
+ } catch (Exception e) {
+ log.error("Unexpected exception", e);
}
- Map outFiles = createReportsForTask(sessionIds, reportBuildersForGREF.values());
-
- sendReportsToGateway(sessionIds, outFiles, ReportType.REPORT_KS_FINAL.getKey());
- sendFilesToSftp(outFiles.keySet());
return null;
}
diff --git a/clearing-parent/reports-service/src/main/resources/application.properties b/clearing-parent/reports-service/src/main/resources/application.properties
index 75eab238c..a691c323d 100644
--- a/clearing-parent/reports-service/src/main/resources/application.properties
+++ b/clearing-parent/reports-service/src/main/resources/application.properties
@@ -34,3 +34,11 @@ reports-service.notifications-store.server-port=2222
reports-service.notifications-store.delete-after-send=true
reports-service.reports.pfx-class-codes=BKVC,SKVC,UKVC,NKVC,DKVC,BMVC,SMVC,UMVC,DMVC,MMVC,BMFC,SMFC,UMFC,DMFC,MMFC,BMMC,SMMC,UMMC,DMMC,MMMC,BMIC,SMIC,UMIC,DMIC,MMIC
+
+reports-service.direct-db.enable=true
+reports-service.direct-db.login=clearing
+reports-service.direct-db.password=Aa111111
+reports-service.direct-db.url=jdbc:postgresql://10.200.200.133:5432/clearing?currentSchema=clearing_prod
+reports-service.direct-db.driver=org.postgresql.Driver
+reports-service.direct-db.min-pool-size=10
+reports-service.direct-db.max-pool-size=30
\ No newline at end of file
diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/notifications/NotificationBuilderTest.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/notifications/NotificationBuilderTest.java
index b0a5f47f7..c9a7df87d 100644
--- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/notifications/NotificationBuilderTest.java
+++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/notifications/NotificationBuilderTest.java
@@ -1,7 +1,12 @@
package ru.spcex.clearing.reports.notifications;
+import java.io.File;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Arrays;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import static org.mockito.Mockito.*;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.relation.Relation;
@@ -9,15 +14,7 @@ import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.io.File;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.ZoneId;
-import java.util.Arrays;
-import java.util.Collections;
-
-import static org.mockito.Mockito.*;
+import ru.spcex.platform.imdg.iml.hazelcast.adapter.predicate.ImdgPredicateBuilderHazelcast;
class NotificationBuilderTest {
static ImdgProvider imdgProviderMock;
@@ -59,7 +56,8 @@ class NotificationBuilderTest {
testProfileDocument_2.setValidFromDate(LocalDate.of(2019, 1, 1));
testProfileDocument_2.setNumber("TEST_NUMBER_2");
profileDocumentImdgMock = mock(Imdg.class);
- when(profileDocumentImdgMock.getCollectionObjectsBySQL(any())).thenReturn(Arrays.asList(testProfileDocument_1, testProfileDocument_2));
+ when(profileDocumentImdgMock.getCollectionObjectsByPredicate(any())).thenReturn(Arrays.asList(testProfileDocument_1, testProfileDocument_2));
+ when(profileDocumentImdgMock.predicateBuilder()).thenReturn(new ImdgPredicateBuilderHazelcast());
when(imdgProviderMock.getImdg(eq(IMDGDistributedNames.Map_ProfileDocument), eq(ProfileDocument.class))).thenReturn(profileDocumentImdgMock);
testRelation_1 = new Relation();
@@ -71,7 +69,8 @@ class NotificationBuilderTest {
testRelation_2.setConsumerId(777L);
testRelation_2.setUpdated(LocalDate.of(2019, 1, 1).atStartOfDay(ZoneId.systemDefault()).toInstant());
relationImdgMock = mock(Imdg.class);
- when(relationImdgMock.getCollectionObjectsBySQL(any())).thenReturn(Arrays.asList(testRelation_1, testRelation_2));
+ when(relationImdgMock.getCollectionObjectsByPredicate(any())).thenReturn(Arrays.asList(testRelation_1, testRelation_2));
+ when(relationImdgMock.predicateBuilder()).thenReturn(new ImdgPredicateBuilderHazelcast());
when(imdgProviderMock.getImdg(eq(IMDGDistributedNames.Map_Relation), eq(Relation.class))).thenReturn(relationImdgMock);
testCompanySymbols_1 = new CompanySymbols();
@@ -85,7 +84,8 @@ class NotificationBuilderTest {
testCompanySymbols_2.setCompanySymbol("TEST_COMPANY_SYMBOL_2");
testCompanySymbols_2.setCompanySymbolValue("TEST_COMPANY_SYMBOL_VALUE_2");
companySymbolsImdgMock = mock(Imdg.class);
- when(companySymbolsImdgMock.getCollectionObjectsBySQL(any())).thenReturn(Arrays.asList(testCompanySymbols_1, testCompanySymbols_2));
+ when(companySymbolsImdgMock.getCollectionObjectsByPredicate(any())).thenReturn(Arrays.asList(testCompanySymbols_1, testCompanySymbols_2));
+ when(companySymbolsImdgMock.predicateBuilder()).thenReturn(new ImdgPredicateBuilderHazelcast());
when(imdgProviderMock.getImdg(eq(IMDGDistributedNames.Map_CompanySymbols), eq(CompanySymbols.class))).thenReturn(companySymbolsImdgMock);
}
diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java
index 04b5531be..37111dd38 100644
--- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java
+++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_BP.java
@@ -1,14 +1,34 @@
package ru.spcex.clearing.reports.services;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import com.opencsv.CSVParser;
import com.opencsv.CSVParserBuilder;
import com.opencsv.CSVReader;
import com.opencsv.CSVReaderBuilder;
import com.opencsv.exceptions.CsvValidationException;
+import javax.annotation.PostConstruct;
import org.apache.commons.io.FileUtils;
import org.apache.kafka.clients.consumer.MockConsumer;
import org.apache.kafka.clients.producer.Producer;
-import org.junit.jupiter.api.*;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -36,22 +56,18 @@ import ru.spcex.clearing.reports.config.validation.ValidationConfig;
import ru.spcex.clearing.test.TestUtils;
import ru.spcex.clearing.test.config.ImdgTestConfig;
import ru.spcex.clearing.test.config.KafkaTestConfig;
-import ru.spcex.platform.enumeration.*;
+import ru.spcex.platform.enumeration.Allowed;
+import ru.spcex.platform.enumeration.InOutDirection;
+import ru.spcex.platform.enumeration.Market;
+import ru.spcex.platform.enumeration.RegistryDesignation;
+import ru.spcex.platform.enumeration.RegistryInstrumentType;
+import ru.spcex.platform.enumeration.RegistryUnit;
+import ru.spcex.platform.enumeration.ReportBuilderType;
+import ru.spcex.platform.enumeration.Side;
+import ru.spcex.platform.enumeration.WorkflowStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
-import javax.annotation.PostConstruct;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.temporal.ChronoUnit;
-import java.util.*;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {
BeanConfiguration.class,
@@ -600,9 +616,9 @@ public class ReportServiceTest_BP {
testRegistry_1.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_1);
Long TEST_MONEY_ACCOUNT_1 = 11L;
testRegistry_1.setAccountId(TEST_MONEY_ACCOUNT_1);
- String TEST_REGISTRY_CODE_1 = "CM";
+ String TEST_REGISTRY_CODE_1 = "OM";
testRegistry_1.setRegistryCode(TEST_REGISTRY_CODE_1);
- testRegistry_1.setRegistryDesignation(RegistryDesignation.C.getKey());
+ testRegistry_1.setRegistryDesignation(RegistryDesignation.O.getKey());
testRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
testRegistry_1.setOpenBalance(TEST_OPEN_BALANCE_1);
testRegistry_1.setCloseBalance(TEST_CLOSE_BALANCE_1);
@@ -620,9 +636,9 @@ public class ReportServiceTest_BP {
testRegistry_2.setTradingClearingRegistry(TEST_TRADING_CLEARING_REGISTRY_2);
Long TEST_MONEY_ACCOUNT_2 = 12L;
testRegistry_2.setAccountId(TEST_MONEY_ACCOUNT_2);
- String TEST_REGISTRY_CODE_2 = "CM";
+ String TEST_REGISTRY_CODE_2 = "OM";
testRegistry_2.setRegistryCode(TEST_REGISTRY_CODE_2);
- testRegistry_2.setRegistryDesignation(RegistryDesignation.C.getKey());
+ testRegistry_2.setRegistryDesignation(RegistryDesignation.O.getKey());
testRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
testRegistry_2.setOpenBalance(TEST_OPEN_BALANCE_2);
testRegistry_2.setCloseBalance(TEST_CLOSE_BALANCE_2);
diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java
index c8bc0db8d..b3c41b6c6 100644
--- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java
+++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java
@@ -212,97 +212,97 @@ public class ReportServiceTest_KS {
sessionForDay.setClearingDate(LocalDate.now());
Long SESSION_ID_FOR_DAY = sessionImdg.insert(sessionForDay);
- Registry cmtRegistry_1 = new Registry();
- cmtRegistry_1.setRegistryCode("CM_T");
- cmtRegistry_1.setRegistryDesignation(RegistryDesignation.C.getKey());
- cmtRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
- cmtRegistry_1.setRegistryUnit(RegistryUnit.T.getKey());
- cmtRegistry_1.setSessionId(SESSION_ID_FOR_DAY);
- cmtRegistry_1.setTradingCode("TRADING_CODE");
- cmtRegistry_1.setCompanyId(COMPANY_ID);
- cmtRegistry_1.setAccount("ACCOUNT");
- cmtRegistry_1.setRegistryStatus(RegistryStatus.CLRD.getKey());
- cmtRegistry_1.setBalance(BigDecimal.valueOf(111L));
- cmtRegistry_1.setContract("CONTRACT_1");
- registryImdg.insert(cmtRegistry_1);
+ Registry omtRegistry_1 = new Registry();
+ omtRegistry_1.setRegistryCode("OM_T");
+ omtRegistry_1.setRegistryDesignation(RegistryDesignation.O.getKey());
+ omtRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
+ omtRegistry_1.setRegistryUnit(RegistryUnit.T.getKey());
+ omtRegistry_1.setSessionId(SESSION_ID_FOR_DAY);
+ omtRegistry_1.setTradingCode("TRADING_CODE");
+ omtRegistry_1.setCompanyId(COMPANY_ID);
+ omtRegistry_1.setAccount("ACCOUNT");
+ omtRegistry_1.setRegistryStatus(RegistryStatus.CLRD.getKey());
+ omtRegistry_1.setBalance(BigDecimal.valueOf(111L));
+ omtRegistry_1.setContract("CONTRACT_1");
+ registryImdg.insert(omtRegistry_1);
- Registry cmtRegistry_2 = new Registry();
- cmtRegistry_2.setRegistryCode("CM_T");
- cmtRegistry_2.setRegistryDesignation(RegistryDesignation.C.getKey());
- cmtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
- cmtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
+ Registry omtRegistry_2 = new Registry();
+ omtRegistry_2.setRegistryCode("OM_T");
+ omtRegistry_2.setRegistryDesignation(RegistryDesignation.O.getKey());
+ omtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
+ omtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
ClearingMemberCategory clearingMemberCategory = new ClearingMemberCategory();
clearingMemberCategory.setCompanyId(COMPANY_ID);
clearingMemberCategory.setClearingMemberCategory(ClearingCategory.I.getKey());
clearingMemberCategoryImdg.insert(clearingMemberCategory);
- cmtRegistry_2.setSessionType(SessionType.XDEP.getKey());
- cmtRegistry_2.setCounterPartyId(COMPANY_ID);
+ omtRegistry_2.setSessionType(SessionType.XDEP.getKey());
+ omtRegistry_2.setCounterPartyId(COMPANY_ID);
- cmtRegistry_2.setSessionId(SESSION_ID_FOR_DAY);
- cmtRegistry_2.setTradingCode("TRADING_CODE");
- cmtRegistry_2.setCompanyId(COMPANY_ID);
- cmtRegistry_2.setAccount("ACCOUNT");
- cmtRegistry_2.setRegistryStatus(RegistryStatus.CLRD.getKey());
- cmtRegistry_2.setBalance(BigDecimal.valueOf(111L));
- cmtRegistry_2.setContract("CONTRACT_2");
- registryImdg.insert(cmtRegistry_2);
+ omtRegistry_2.setSessionId(SESSION_ID_FOR_DAY);
+ omtRegistry_2.setTradingCode("TRADING_CODE");
+ omtRegistry_2.setCompanyId(COMPANY_ID);
+ omtRegistry_2.setAccount("ACCOUNT");
+ omtRegistry_2.setRegistryStatus(RegistryStatus.CLRD.getKey());
+ omtRegistry_2.setBalance(BigDecimal.valueOf(111L));
+ omtRegistry_2.setContract("CONTRACT_2");
+ registryImdg.insert(omtRegistry_2);
- Registry cmtRegistry_3 = new Registry();
- cmtRegistry_3.setRegistryCode("CM_T");
- cmtRegistry_3.setRegistryDesignation(RegistryDesignation.C.getKey());
- cmtRegistry_3.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
- cmtRegistry_3.setRegistryUnit(RegistryUnit.T.getKey());
- cmtRegistry_3.setSessionId(SESSION_ID_FOR_DAY);
- cmtRegistry_3.setTradingCode("TRADING_CODE");
- cmtRegistry_3.setCompanyId(COMPANY_ID);
- cmtRegistry_3.setAccount("ACCOUNT");
- cmtRegistry_3.setRegistryStatus(RegistryStatus.CLRD.getKey());
- cmtRegistry_3.setBalance(BigDecimal.valueOf(111L));
- registryImdg.insert(cmtRegistry_3);
+ Registry omtRegistry_3 = new Registry();
+ omtRegistry_3.setRegistryCode("OM_T");
+ omtRegistry_3.setRegistryDesignation(RegistryDesignation.O.getKey());
+ omtRegistry_3.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
+ omtRegistry_3.setRegistryUnit(RegistryUnit.T.getKey());
+ omtRegistry_3.setSessionId(SESSION_ID_FOR_DAY);
+ omtRegistry_3.setTradingCode("TRADING_CODE");
+ omtRegistry_3.setCompanyId(COMPANY_ID);
+ omtRegistry_3.setAccount("ACCOUNT");
+ omtRegistry_3.setRegistryStatus(RegistryStatus.CLRD.getKey());
+ omtRegistry_3.setBalance(BigDecimal.valueOf(111L));
+ registryImdg.insert(omtRegistry_3);
- Registry lmtRegistry_1 = new Registry();
- lmtRegistry_1.setRegistryCode("LM_T");
- lmtRegistry_1.setRegistryDesignation(RegistryDesignation.L.getKey());
- lmtRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
- lmtRegistry_1.setRegistryUnit(RegistryUnit.T.getKey());
- lmtRegistry_1.setSessionId(SESSION_ID_FOR_DAY);
- lmtRegistry_1.setTradingCode("TRADING_CODE");
- lmtRegistry_1.setCompanyId(COMPANY_ID);
- lmtRegistry_1.setAccount("ACCOUNT");
- lmtRegistry_1.setRegistryStatus(RegistryStatus.CLRD.getKey());
- lmtRegistry_1.setBalance(BigDecimal.valueOf(11L));
- registryImdg.insert(lmtRegistry_1);
+ Registry tmtRegistry_1 = new Registry();
+ tmtRegistry_1.setRegistryCode("TM_T");
+ tmtRegistry_1.setRegistryDesignation(RegistryDesignation.T.getKey());
+ tmtRegistry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
+ tmtRegistry_1.setRegistryUnit(RegistryUnit.T.getKey());
+ tmtRegistry_1.setSessionId(SESSION_ID_FOR_DAY);
+ tmtRegistry_1.setTradingCode("TRADING_CODE");
+ tmtRegistry_1.setCompanyId(COMPANY_ID);
+ tmtRegistry_1.setAccount("ACCOUNT");
+ tmtRegistry_1.setRegistryStatus(RegistryStatus.CLRD.getKey());
+ tmtRegistry_1.setBalance(BigDecimal.valueOf(11L));
+ registryImdg.insert(tmtRegistry_1);
- Registry lmtRegistry_2 = new Registry();
- lmtRegistry_2.setRegistryCode("LM_T");
- lmtRegistry_2.setRegistryDesignation(RegistryDesignation.L.getKey());
- lmtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
- lmtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
+ Registry tmtRegistry_2 = new Registry();
+ tmtRegistry_2.setRegistryCode("TM_T");
+ tmtRegistry_2.setRegistryDesignation(RegistryDesignation.T.getKey());
+ tmtRegistry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
+ tmtRegistry_2.setRegistryUnit(RegistryUnit.T.getKey());
- lmtRegistry_2.setSessionType(SessionType.XDEP.getKey());
- lmtRegistry_2.setCounterPartyId(COMPANY_ID);
+ tmtRegistry_2.setSessionType(SessionType.XDEP.getKey());
+ tmtRegistry_2.setCounterPartyId(COMPANY_ID);
- lmtRegistry_2.setSessionId(SESSION_ID_FOR_DAY);
- lmtRegistry_2.setTradingCode("TRADING_CODE");
- lmtRegistry_2.setCompanyId(COMPANY_ID);
- lmtRegistry_2.setAccount("ACCOUNT");
- lmtRegistry_2.setRegistryStatus(RegistryStatus.CLRD.getKey());
- lmtRegistry_2.setBalance(BigDecimal.valueOf(11L));
- registryImdg.insert(lmtRegistry_2);
+ tmtRegistry_2.setSessionId(SESSION_ID_FOR_DAY);
+ tmtRegistry_2.setTradingCode("TRADING_CODE");
+ tmtRegistry_2.setCompanyId(COMPANY_ID);
+ tmtRegistry_2.setAccount("ACCOUNT");
+ tmtRegistry_2.setRegistryStatus(RegistryStatus.CLRD.getKey());
+ tmtRegistry_2.setBalance(BigDecimal.valueOf(11L));
+ registryImdg.insert(tmtRegistry_2);
- Registry lmtRegistry_3 = new Registry();
- lmtRegistry_3.setRegistryCode("LM_T");
- lmtRegistry_3.setRegistryDesignation(RegistryDesignation.L.getKey());
- lmtRegistry_3.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
- lmtRegistry_3.setRegistryUnit(RegistryUnit.T.getKey());
- lmtRegistry_3.setSessionId(SESSION_ID_FOR_DAY);
- lmtRegistry_3.setTradingCode("TRADING_CODE");
- lmtRegistry_3.setCompanyId(COMPANY_ID);
- lmtRegistry_3.setAccount("ACCOUNT");
- lmtRegistry_3.setRegistryStatus(RegistryStatus.CLRD.getKey());
- lmtRegistry_3.setBalance(BigDecimal.valueOf(11L));
- registryImdg.insert(lmtRegistry_3);
+ Registry tmtRegistry_3 = new Registry();
+ tmtRegistry_3.setRegistryCode("TM_T");
+ tmtRegistry_3.setRegistryDesignation(RegistryDesignation.T.getKey());
+ tmtRegistry_3.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
+ tmtRegistry_3.setRegistryUnit(RegistryUnit.T.getKey());
+ tmtRegistry_3.setSessionId(SESSION_ID_FOR_DAY);
+ tmtRegistry_3.setTradingCode("TRADING_CODE");
+ tmtRegistry_3.setCompanyId(COMPANY_ID);
+ tmtRegistry_3.setAccount("ACCOUNT");
+ tmtRegistry_3.setRegistryStatus(RegistryStatus.CLRD.getKey());
+ tmtRegistry_3.setBalance(BigDecimal.valueOf(11L));
+ registryImdg.insert(tmtRegistry_3);
Registry dmxRegistry_1 = new Registry();
dmxRegistry_1.setRegistryCode("DM_X");
@@ -392,12 +392,12 @@ public class ReportServiceTest_KS {
registryImdg.delete(addWithdrawRegistry_1);
registryImdg.delete(addWithdrawRegistry_2);
registryImdg.delete(addWithdrawRegistry_3);
- registryImdg.delete(cmtRegistry_1);
- registryImdg.delete(cmtRegistry_2);
- registryImdg.delete(cmtRegistry_3);
- registryImdg.delete(lmtRegistry_1);
- registryImdg.delete(lmtRegistry_2);
- registryImdg.delete(lmtRegistry_3);
+ registryImdg.delete(omtRegistry_1);
+ registryImdg.delete(omtRegistry_2);
+ registryImdg.delete(omtRegistry_3);
+ registryImdg.delete(tmtRegistry_1);
+ registryImdg.delete(tmtRegistry_2);
+ registryImdg.delete(tmtRegistry_3);
registryImdg.delete(dmxRegistry_1);
registryImdg.delete(dmxRegistry_2);
sessionImdg.delete(sessionForDay);
@@ -821,11 +821,11 @@ public class ReportServiceTest_KS {
registry_1.setSettlementDate(LocalDate.now());
registry_1.setGroupId(Long.MAX_VALUE);
registry_1.setClearingDate(LocalDate.now());
- registry_1.setRegistryCode("LM_T");
+ registry_1.setRegistryCode("TM_T");
registry_1.setTradingClearingRegistry("TKR");
registry_1.setSessionType(SessionType.IPO0.getKey());
- registry_1.setRegistryStatus(RegistryStatus.PROC.getKey());
- registry_1.setRegistryDesignation(RegistryDesignation.L.getKey());
+ registry_1.setRegistryStatus(RegistryStatus.OK.getKey());
+ registry_1.setRegistryDesignation(RegistryDesignation.T.getKey());
registry_1.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
registry_1.setRegistryUnit(RegistryUnit.T.getKey());
registry_1.setSessionId(sessionId);
@@ -840,10 +840,10 @@ public class ReportServiceTest_KS {
registry_2.setGroupId(Long.MAX_VALUE);
registry_2.setClearingDate(LocalDate.now());
registry_2.setSessionType(SessionType.IPO0.getKey());
- registry_2.setRegistryCode("CM_T");
+ registry_2.setRegistryCode("OM_T");
registry_2.setTradingClearingRegistry("TKR");
- registry_2.setRegistryStatus(RegistryStatus.PROC.getKey());
- registry_2.setRegistryDesignation(RegistryDesignation.C.getKey());
+ registry_2.setRegistryStatus(RegistryStatus.OK.getKey());
+ registry_2.setRegistryDesignation(RegistryDesignation.O.getKey());
registry_2.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
registry_2.setRegistryUnit(RegistryUnit.T.getKey());
registry_2.setSessionId(sessionId);
@@ -863,11 +863,11 @@ public class ReportServiceTest_KS {
registry_3.setSettlementDate(LocalDate.now());
registry_3.setGroupId(Long.MAX_VALUE);
registry_3.setClearingDate(LocalDate.now());
- registry_3.setRegistryCode("LM_T");
+ registry_3.setRegistryCode("TM_T");
registry_3.setSessionType(SessionType.FINL.getKey());
registry_3.setTradingClearingRegistry("TKR");
- registry_3.setRegistryStatus(RegistryStatus.PROC.getKey());
- registry_3.setRegistryDesignation(RegistryDesignation.L.getKey());
+ registry_3.setRegistryStatus(RegistryStatus.OK.getKey());
+ registry_3.setRegistryDesignation(RegistryDesignation.T.getKey());
registry_3.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
registry_3.setRegistryUnit(RegistryUnit.T.getKey());
registry_3.setSessionId(sessionId);
@@ -882,10 +882,10 @@ public class ReportServiceTest_KS {
registry_4.setGroupId(Long.MAX_VALUE);
registry_4.setSessionType(SessionType.FINL.getKey());
registry_4.setClearingDate(LocalDate.now());
- registry_4.setRegistryCode("CM_T");
+ registry_4.setRegistryCode("OM_T");
registry_4.setTradingClearingRegistry("TKR");
- registry_4.setRegistryStatus(RegistryStatus.PROC.getKey());
- registry_4.setRegistryDesignation(RegistryDesignation.C.getKey());
+ registry_4.setRegistryStatus(RegistryStatus.OK.getKey());
+ registry_4.setRegistryDesignation(RegistryDesignation.O.getKey());
registry_4.setRegistryInstrumentType(RegistryInstrumentType.M.getKey());
registry_4.setRegistryUnit(RegistryUnit.T.getKey());
registry_4.setSessionId(sessionId);
@@ -939,11 +939,11 @@ public class ReportServiceTest_KS {
registry_1.setClearingDate(LocalDate.now());
registry_1.setGroupId(Long.MAX_VALUE);
registry_1.setSettlementDate(LocalDate.now());
- registry_1.setRegistryCode("CS_T");
+ registry_1.setRegistryCode("OS_T");
registry_1.setTradingClearingRegistry("TKR");
- registry_1.setRegistryDesignation(RegistryDesignation.C.getKey());
+ registry_1.setRegistryDesignation(RegistryDesignation.O.getKey());
registry_1.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
- registry_1.setRegistryStatus(RegistryStatus.PROC.getKey());
+ registry_1.setRegistryStatus(RegistryStatus.OK.getKey());
registry_1.setRegistryUnit(RegistryUnit.T.getKey());
registry_1.setSecuritySymbol("SECURITY_SYMBOL");
registry_1.setSessionId(sessionId);
@@ -958,12 +958,12 @@ public class ReportServiceTest_KS {
registry_2.setClearingDate(LocalDate.now());
registry_2.setGroupId(Long.MAX_VALUE);
registry_2.setSettlementDate(LocalDate.now());
- registry_2.setRegistryCode("LS_T");
+ registry_2.setRegistryCode("TS_T");
registry_2.setTradingClearingRegistry("TKR");
- registry_2.setRegistryDesignation(RegistryDesignation.L.getKey());
+ registry_2.setRegistryDesignation(RegistryDesignation.T.getKey());
registry_2.setRegistryInstrumentType(RegistryInstrumentType.S.getKey());
registry_2.setRegistryUnit(RegistryUnit.T.getKey());
- registry_2.setRegistryStatus(RegistryStatus.PROC.getKey());
+ registry_2.setRegistryStatus(RegistryStatus.OK.getKey());
registry_2.setSecuritySymbol("SECURITY_SYMBOL");
registry_2.setSessionId(sessionId);
registry_2.setAccount("ACCOUNT");
@@ -1189,6 +1189,8 @@ public class ReportServiceTest_KS {
@Order(11)
public void ksRepCashNettoExtendedTest() throws IOException, CsvValidationException {
clearTestDir();
+ Collection allValues = registryImdg.getAllValues();
+ for (Registry registry : allValues) registryImdg.delete(registry);
Session session = new Session();
session.setCreated(
@@ -1234,6 +1236,7 @@ public class ReportServiceTest_KS {
registry.setRegistryCapacity(row[10]);
registry.setRegistryUnit(row[11]);
registry.setRegistryCode(row[12]);
+ registry.setRegistryStatus(row[15]);
registry.setAccountType(row[6]);
registry.setAccount(row[7]);
if (row[6].equalsIgnoreCase(AccountType.Info.getKey())) {
diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_expected.csv
index f671ff6a5..038b6a150 100644
--- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_expected.csv
+++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_expected.csv
@@ -1,3 +1,3 @@
"FIRMID","SESSION_ID","SESSION_DATE","ACCOUNT","TKR","VALUE","DATE","OBL_VALUE","REQ_VALUE","LOT_CURRENCY","CURRENCY_NETTO","TR_EXECDATE"
-"TRADING_CODE","146","20.01.1970T02:49:58","ACCOUNT","TKR","22.22","26.06.2024",,,,,
-"TRADING_CODE","146","20.01.1970T02:49:58","ACCOUNT_FROM_ACCOUNT","TKR",,"26.06.2024","22.22","44.44",,,
+"TRADING_CODE","146","20.01.1970T02:49:58","ACCOUNT","TKR","22.22","06.08.2024",,,,,
+"TRADING_CODE","146","20.01.1970T02:49:58","ACCOUNT_FROM_ACCOUNT","TKR",,"06.08.2024","22.22","44.44",,,
diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv
index 2d9508a04..59b529206 100644
--- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv
+++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_REGISTERS_expected.csv
@@ -1,2 +1,3 @@
"FIRMID","ACCOUNT","TKR","DATE","REGISTER_CODE","REGISTER_NAME","OPEN_BALANCE","CHANGE_BALANCE","ADD_WITHDRAW","CLOSE_BALANCE","REMARKS","TRADE_NUM","CURRENCY"
-"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","01.07.2024","AM_T","AM_T_NAME","77.78","189.00","111.00","377.78",,,
+"TRADING_CODE","ACCOUNT_FROM_ACCOUNT","TRADING_CLEARING_REGISTRY","06.08.2024","AM_T","AM_T_NAME","77.78","189.00","111.00","377.78",,,
+"TRADING_CODE","ACCOUNT","TRADING_CLEARING_REGISTRY","06.08.2024","AM_T","AM_T_NAME","77.78","189.00","111.00","377.78",,,
diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/ksRepCashNetto_registries.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/ksRepCashNetto_registries.csv
index ee191b2e6..38f4f7aa1 100644
--- a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/ksRepCashNetto_registries.csv
+++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/ksRepCashNetto_registries.csv
@@ -1,19 +1,19 @@
company_id;trading_code;clearing_code;short_name;full_name;account_id;account_type;account;registry_designation;registry_instrument_type;registry_capacity;registry_unit;registry_code;trading_clearing_registry_id;trading_clearing_registry;registry_status;security_id;security_symbol;balance;open_balance;close_balance;credit;debit;settled_credit;settled_debit;check_balance;diff_balance;plan_balance;balance_dimension;settlement_date;settlement_code;trading_date;clearing_date;refund_date;value_date;price;contract;counter_party_id;comment;parent_id;group_id;session_id;session_type;payment_id;id;created_at;updated_at;section
-4500120;95;95;Банк ВТБ (ПАО);Банк ВТБ (публичное акционерное общество);4410078;CLRN;30411810300000002094;C;M;A;T;CMAT;21240012;0095CAT00001;CLRD;643;RUB;69,75;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;80162;(null);(null);507;47580029;UNIT;(null);47580094;24.06.2024 14:16;24.06.2024 15:19;CURR
-80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;38690096;CLRN;3,04118607E+019;C;M;A;T;CMAT;130040;0008MAT00001;CLRD;860;UZS;10000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;4500120;(null);(null);507;47580029;UNIT;(null);47580076;24.06.2024 14:16;24.06.2024 15:19;CURR
-80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;38690028;CLRN;3,04111569E+019;C;M;A;T;CMAT;1860016;0472CAT00001;CLRD;156;CNY;10;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;4500072;(null);(null);508;47580029;UNIT;(null);47580074;24.06.2024 14:16;24.06.2024 15:19;CURR
-80136;45;45;АО "АБ "РОССИЯ";Акционерное общество «Акционерный Банк «РОССИЯ»;130023;CLRN;3,04118103E+019;C;M;A;T;CMAT;1860025;0045CAT00001;CLRD;643;RUB;3000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;17,12;DT1000S001U/240624/45/24062400000001;80074;(null);(null);24062400000001;47580029;UNIT;(null);47580072;24.06.2024 14:16;24.06.2024 15:19;MKR
-4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";47130002;INFO;3,99118600000001E+019;C;M;A;T;CMAT;47130004;0234CAT00001;CLRD;860;UZS;10000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;80022;(null);(null);1518298;47580029;UNIT;(null);47580093;24.06.2024 14:16;24.06.2024 15:19;CURR
-80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;130013;CLRN;3,041181E+019;C;M;A;T;CMAT;1930000;0008CAT00001;CLRD;643;RUB;7000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;16,88;DT1000S001U/240624/8/24062400000002;80074;(null);(null);24062400000002;47580029;UNIT;(null);47580079;24.06.2024 14:16;24.06.2024 15:19;MKR
-4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";4410023;INFO;3,99118100000003E+019;C;M;A;T;CMAT;47130004;0234CAT00001;CLRD;643;RUB;129,58;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;80022;(null);(null);508;47580029;UNIT;(null);47580073;24.06.2024 14:16;24.06.2024 15:19;CURR
-80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;130013;CLRN;3,041181E+019;C;M;A;T;CMAT;1930000;0008CAT00001;CLRD;643;RUB;9743,9;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;97;(null);80022;(null);(null);1461034;47580029;UNIT;(null);47580085;24.06.2024 14:16;24.06.2024 15:19;FOND
-80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;130005;CLRN;3,0411810101E+019;C;M;A;T;CMAT;1860016;0472CAT00001;CLRD;643;RUB;69757,5;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;4500072;(null);(null);1518298;47580029;UNIT;(null);47580090;24.06.2024 14:16;24.06.2024 15:19;CURR
-80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;38690032;CLRN;3,04118605E+019;L;M;A;T;LMAT;1860016;0472CAT00001;CLRD;860;UZS;10000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;4500072;(null);(null);1518298;47580029;UNIT;(null);47580075;24.06.2024 14:16;24.06.2024 15:19;CURR
-4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";47130000;INFO;3,99111560000002E+019;L;M;A;T;LMAT;47130004;0234CAT00001;CLRD;156;CNY;10;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;80022;(null);(null);508;47580029;UNIT;(null);47580087;24.06.2024 14:16;24.06.2024 15:19;CURR
-80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;130005;CLRN;3,0411810101E+019;L;M;A;T;LMAT;1860016;0472CAT00001;CLRD;643;RUB;129,58;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;4500072;(null);(null);508;47580029;UNIT;(null);47580083;24.06.2024 14:16;24.06.2024 15:19;CURR
-80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;130005;CLRN;3,0411810101E+019;L;M;A;T;LMAT;1860016;0472CAT00001;CLRD;643;RUB;9743,9;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;97;(null);80162;(null);(null);1461034;47580029;UNIT;(null);47580095;24.06.2024 14:16;24.06.2024 15:19;FOND
-80074;302;302;Комитет финансов СПб;Комитет финансов Санкт-Петербурга;130019;CLRN;3,04118107E+019;L;M;A;T;LMAT;130034;0302MAT00001;CLRD;643;RUB;7000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;16,88;DT1000S001U/240624/8/24062400000002;80162;(null);(null);24062400000002;47580029;UNIT;(null);47580089;24.06.2024 14:16;24.06.2024 15:19;MKR
-4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";4410023;INFO;3,99118100000003E+019;L;M;A;T;LMAT;47130004;0234CAT00001;CLRD;643;RUB;69757,5;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;80022;(null);(null);1518298;47580029;UNIT;(null);47580078;24.06.2024 14:16;24.06.2024 15:19;CURR
-80074;302;302;Комитет финансов СПб;Комитет финансов Санкт-Петербурга;130019;CLRN;3,04118107E+019;L;M;A;T;LMAT;130034;0302MAT00001;CLRD;643;RUB;3000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;17,12;DT1000S001U/240624/45/24062400000001;80136;(null);(null);24062400000001;47580029;UNIT;(null);47580086;24.06.2024 14:16;24.06.2024 15:19;MKR
-80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;130017;CLRN;3,04118102E+019;L;M;A;T;LMAT;130040;0008MAT00001;CLRD;643;RUB;69,75;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;4500120;(null);(null);507;47580029;UNIT;(null);47580084;24.06.2024 14:16;24.06.2024 15:19;CURR
-4500120;95;95;Банк ВТБ (ПАО);Банк ВТБ (публичное акционерное общество);38690016;CLRN;30411810300000002049;L;M;A;T;LMAT;21240012;0095CAT00001;CLRD;860;UZS;10000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;80162;(null);(null);507;47580029;UNIT;(null);47580088;24.06.2024 14:16;24.06.2024 15:19;CURR
+4500120;95;95;Банк ВТБ (ПАО);Банк ВТБ (публичное акционерное общество);4410078;CLRN;30411810300000002094;O;M;A;T;OMAT;21240012;0095CAT00001;CLRD;643;RUB;69,75;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;80162;(null);(null);507;47580029;UNIT;(null);47580094;24.06.2024 14:16;24.06.2024 15:19;CURR
+80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;38690096;CLRN;3,04118607E+019;O;M;A;T;OMAT;130040;0008MAT00001;CLRD;860;UZS;10000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;4500120;(null);(null);507;47580029;UNIT;(null);47580076;24.06.2024 14:16;24.06.2024 15:19;CURR
+80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;38690028;CLRN;3,04111569E+019;O;M;A;T;OMAT;1860016;0472CAT00001;CLRD;156;CNY;10;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;4500072;(null);(null);508;47580029;UNIT;(null);47580074;24.06.2024 14:16;24.06.2024 15:19;CURR
+80136;45;45;АО "АБ "РОССИЯ";Акционерное общество «Акционерный Банк «РОССИЯ»;130023;CLRN;3,04118103E+019;O;M;A;T;OMAT;1860025;0045CAT00001;CLRD;643;RUB;3000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;17,12;DT1000S001U/240624/45/24062400000001;80074;(null);(null);24062400000001;47580029;UNIT;(null);47580072;24.06.2024 14:16;24.06.2024 15:19;MKR
+4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";47130002;INFO;3,99118600000001E+019;O;M;A;T;OMAT;47130004;0234CAT00001;CLRD;860;UZS;10000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;80022;(null);(null);1518298;47580029;UNIT;(null);47580093;24.06.2024 14:16;24.06.2024 15:19;CURR
+80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;130013;CLRN;3,041181E+019;O;M;A;T;OMAT;1930000;0008CAT00001;CLRD;643;RUB;7000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;16,88;DT1000S001U/240624/8/24062400000002;80074;(null);(null);24062400000002;47580029;UNIT;(null);47580079;24.06.2024 14:16;24.06.2024 15:19;MKR
+4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";4410023;INFO;3,99118100000003E+019;O;M;A;T;OMAT;47130004;0234CAT00001;CLRD;643;RUB;129,58;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;80022;(null);(null);508;47580029;UNIT;(null);47580073;24.06.2024 14:16;24.06.2024 15:19;CURR
+80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;130013;CLRN;3,041181E+019;O;M;A;T;OMAT;1930000;0008CAT00001;CLRD;643;RUB;9743,9;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;97;(null);80022;(null);(null);1461034;47580029;UNIT;(null);47580085;24.06.2024 14:16;24.06.2024 15:19;FOND
+80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;130005;CLRN;3,0411810101E+019;O;M;A;T;OMAT;1860016;0472CAT00001;CLRD;643;RUB;69757,5;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;4500072;(null);(null);1518298;47580029;UNIT;(null);47580090;24.06.2024 14:16;24.06.2024 15:19;CURR
+80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;38690032;CLRN;3,04118605E+019;T;M;A;T;TMAT;1860016;0472CAT00001;CLRD;860;UZS;10000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;4500072;(null);(null);1518298;47580029;UNIT;(null);47580075;24.06.2024 14:16;24.06.2024 15:19;CURR
+4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";47130000;INFO;3,99111560000002E+019;T;M;A;T;TMAT;47130004;0234CAT00001;CLRD;156;CNY;10;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;80022;(null);(null);508;47580029;UNIT;(null);47580087;24.06.2024 14:16;24.06.2024 15:19;CURR
+80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;130005;CLRN;3,0411810101E+019;T;M;A;T;TMAT;1860016;0472CAT00001;CLRD;643;RUB;129,58;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;4500072;(null);(null);508;47580029;UNIT;(null);47580083;24.06.2024 14:16;24.06.2024 15:19;CURR
+80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;130005;CLRN;3,0411810101E+019;T;M;A;T;TMAT;1860016;0472CAT00001;CLRD;643;RUB;9743,9;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;97;(null);80162;(null);(null);1461034;47580029;UNIT;(null);47580095;24.06.2024 14:16;24.06.2024 15:19;FOND
+80074;302;302;Комитет финансов СПб;Комитет финансов Санкт-Петербурга;130019;CLRN;3,04118107E+019;T;M;A;T;TMAT;130034;0302MAT00001;CLRD;643;RUB;7000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;16,88;DT1000S001U/240624/8/24062400000002;80162;(null);(null);24062400000002;47580029;UNIT;(null);47580089;24.06.2024 14:16;24.06.2024 15:19;MKR
+4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";4410023;INFO;3,99118100000003E+019;T;M;A;T;TMAT;47130004;0234CAT00001;CLRD;643;RUB;69757,5;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;80022;(null);(null);1518298;47580029;UNIT;(null);47580078;24.06.2024 14:16;24.06.2024 15:19;CURR
+80074;302;302;Комитет финансов СПб;Комитет финансов Санкт-Петербурга;130019;CLRN;3,04118107E+019;T;M;A;T;TMAT;130034;0302MAT00001;CLRD;643;RUB;3000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;17,12;DT1000S001U/240624/45/24062400000001;80136;(null);(null);24062400000001;47580029;UNIT;(null);47580086;24.06.2024 14:16;24.06.2024 15:19;MKR
+80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;130017;CLRN;3,04118102E+019;T;M;A;T;TMAT;130040;0008MAT00001;CLRD;643;RUB;69,75;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;4500120;(null);(null);507;47580029;UNIT;(null);47580084;24.06.2024 14:16;24.06.2024 15:19;CURR
+4500120;95;95;Банк ВТБ (ПАО);Банк ВТБ (публичное акционерное общество);38690016;CLRN;30411810300000002049;T;M;A;T;TMAT;21240012;0095CAT00001;CLRD;860;UZS;10000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;80162;(null);(null);507;47580029;UNIT;(null);47580088;24.06.2024 14:16;24.06.2024 15:19;CURR
diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/specific/RegistryCodeRawSqlBuilder.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/specific/RegistryCodeRawSqlBuilder.java
new file mode 100644
index 000000000..46a1618ad
--- /dev/null
+++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/specific/RegistryCodeRawSqlBuilder.java
@@ -0,0 +1,15 @@
+package ru.spcex.platform.imdg.api.predicate.specific;
+
+import java.util.List;
+import ru.spcex.platform.enumeration.RegistryTradingParams;
+
+public class RegistryCodeRawSqlBuilder extends RegistryCodeSqlBuilder {
+ RegistryCodeRawSqlBuilder(List tradingParams) {
+ super(tradingParams);
+ registryDesignation = "registry_designation";
+ registryInstrumentType = "registry_instrument_type";
+ registryCapacity = "registry_capacity";
+ registryUnit = "registry_unit";
+ }
+
+}
diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/specific/RegistryCodeSqlBuilder.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/specific/RegistryCodeSqlBuilder.java
index 9e055e907..c9a97dbe7 100644
--- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/specific/RegistryCodeSqlBuilder.java
+++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/specific/RegistryCodeSqlBuilder.java
@@ -1,33 +1,46 @@
package ru.spcex.platform.imdg.api.predicate.specific;
-import ru.spcex.platform.enumeration.RegistryTradingParams;
-import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
-import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
+import ru.spcex.platform.enumeration.RegistryTradingParams;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
+import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
public class RegistryCodeSqlBuilder {
private List registryTradingParams;
private String prefix = null;
+ protected String registryDesignation = "registryDesignation";
+ protected String registryInstrumentType = "registryInstrumentType";
+ protected String registryCapacity = "registryCapacity";
+ protected String registryUnit = "registryUnit";
public static RegistryCodeSqlBuilder getInstance(RegistryTradingParams... tradingParams) {
- return new RegistryCodeSqlBuilder(Arrays.asList(tradingParams));
+ return getInstance(false, tradingParams);
}
- private RegistryCodeSqlBuilder(List tradingParams) {
+ public static RegistryCodeSqlBuilder getInstance(boolean directDB, RegistryTradingParams... tradingParams) {
+ RegistryCodeSqlBuilder builder;
+ if (directDB) {
+ builder = new RegistryCodeRawSqlBuilder(Arrays.asList(tradingParams));
+ } else {
+ builder = new RegistryCodeSqlBuilder(Arrays.asList(tradingParams));
+ }
+ return builder;
+ }
+
+ RegistryCodeSqlBuilder(List tradingParams) {
this.registryTradingParams = tradingParams;
}
public String build() {
List conditions = new ArrayList<>();
- String REGISTRY_DESIGNATION_FORMAT = "registryDesignation = '%s'";
- String REGISTRY_INSTRUMENT_TYPE_FORMAT = "registryInstrumentType = '%s'";
- String REGISTRY_CAPACITY_FORMAT = "registryCapacity = '%s'";
- String REGISTRY_UNIT_FORMAT = "registryUnit = '%s'";
+ String REGISTRY_DESIGNATION_FORMAT = registryDesignation + " = '%s'";
+ String REGISTRY_INSTRUMENT_TYPE_FORMAT = registryInstrumentType + " = '%s'";
+ String REGISTRY_CAPACITY_FORMAT = registryCapacity + " = '%s'";
+ String REGISTRY_UNIT_FORMAT = registryUnit + " = '%s'";
if (prefix != null) {
REGISTRY_DESIGNATION_FORMAT = "%s.%s".formatted(prefix, REGISTRY_DESIGNATION_FORMAT);
REGISTRY_INSTRUMENT_TYPE_FORMAT = "%s.%s".formatted(prefix, REGISTRY_INSTRUMENT_TYPE_FORMAT);
@@ -75,10 +88,10 @@ public class RegistryCodeSqlBuilder {
public ImdgPredicate buildPredicate(ImdgPredicateBuilder pb) {
List conditionsOr = new ArrayList<>();
- String REGISTRY_DESIGNATION_FIELD = "registryDesignation";
- String REGISTRY_INSTRUMENT_TYPE_FIELD = "registryInstrumentType";
- String REGISTRY_CAPACITY_FIELD = "registryCapacity";
- String REGISTRY_UNIT_FIELD = "registryUnit";
+ String REGISTRY_DESIGNATION_FIELD = registryDesignation;
+ String REGISTRY_INSTRUMENT_TYPE_FIELD = registryInstrumentType;
+ String REGISTRY_CAPACITY_FIELD = registryCapacity;
+ String REGISTRY_UNIT_FIELD = registryUnit;
if (prefix != null) {
REGISTRY_DESIGNATION_FIELD = "%s.%s".formatted(prefix, REGISTRY_DESIGNATION_FIELD);
REGISTRY_INSTRUMENT_TYPE_FIELD = "%s.%s".formatted(prefix, REGISTRY_INSTRUMENT_TYPE_FIELD);