diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/HistoryConfig.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/HistoryConfig.java
index d75397db0..2458ba1ca 100644
--- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/HistoryConfig.java
+++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/config/HistoryConfig.java
@@ -40,6 +40,7 @@ public class HistoryConfig {
hst.add(excludeLiabilitiesRegister());
hst.add(liabilitiesRegister());
hst.add(executionRegister());
+ hst.add(session());
return hst;
}
@@ -174,4 +175,17 @@ public class HistoryConfig {
));
return sbscr;
}
+
+
+ private HistorySubscription session() {
+ HistorySubscription sbscr = new HistorySubscription();
+ sbscr.setDestination("session");
+ sbscr.setSearchProxyMapName(IMDGDistributedNames.Map_SearchSession);
+ sbscr.setFullHistoryMapName(IMDGDistributedNames.Map_Session);
+ sbscr.setConditions(List.of(
+ new TradingDateFromCondition(pb),
+ new TradingDateToCondition(pb)
+ ));
+ return sbscr;
+ }
}
diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.json b/clearing-parent/backend-api/src/main/resources/meta/meta.json
index feb804d5d..5bb12cbfb 100644
--- a/clearing-parent/backend-api/src/main/resources/meta/meta.json
+++ b/clearing-parent/backend-api/src/main/resources/meta/meta.json
@@ -1,6 +1,6 @@
{
- "version": "3.11.0.84",
+ "version": "3.11.0.85",
"enums": {
@@ -6140,6 +6140,8 @@
"destination": "sessions",
+ "historyDestination": "history",
+
"class": "ru.clearing.classes.statics.data.misc.Session",
"logUpdates": "true",
diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml
index 745b3af62..9abe6aae7 100644
--- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml
+++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml
@@ -1,6 +1,6 @@
-
+
@@ -1414,7 +1414,7 @@
-
+
diff --git a/clearing-parent/backend-api/src/test/resources/meta.json b/clearing-parent/backend-api/src/test/resources/meta.json
index 590401157..5bb12cbfb 100644
--- a/clearing-parent/backend-api/src/test/resources/meta.json
+++ b/clearing-parent/backend-api/src/test/resources/meta.json
@@ -1,6 +1,6 @@
{
- "version": "3.11.0.83",
+ "version": "3.11.0.85",
"enums": {
@@ -4764,6 +4764,10 @@
{"code": "accountType",
"type": 12,"name": "Наименование типа счета","shortname": "Тип","link": "accountType","required": true,"visible": false
}
+ ,
+ {"code": "currency",
+ "type": 12,"name": "Код валюты","shortname": "Валюта","visible": true,"link": "currencyCode","linkCode": "code"
+ }
]
}
,
@@ -6136,6 +6140,8 @@
"destination": "sessions",
+ "historyDestination": "history",
+
"class": "ru.clearing.classes.statics.data.misc.Session",
"logUpdates": "true",
diff --git a/clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/index/SearchProxySession.java b/clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/index/SearchProxySession.java
new file mode 100644
index 000000000..5d8f191d4
--- /dev/null
+++ b/clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/index/SearchProxySession.java
@@ -0,0 +1,22 @@
+package ru.spcex.clearing.historyimdg.index;
+
+import ru.spcex.clearing.historyimdg.index.field.SearchWithTradingDate;
+
+import java.time.LocalDate;
+
+public class SearchProxySession extends SearchProxy implements SearchWithTradingDate {
+ /**
+ * trading_date или created_at
+ */
+ private LocalDate tradingDate;
+
+ @Override
+ public LocalDate getTradingDate() {
+ return tradingDate;
+ }
+
+ @Override
+ public void setTradingDate(LocalDate tradingDate) {
+ this.tradingDate = tradingDate;
+ }
+}
diff --git a/clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/mapstores/SearchSessionMapStore.java b/clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/mapstores/SearchSessionMapStore.java
new file mode 100644
index 000000000..70330851b
--- /dev/null
+++ b/clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/mapstores/SearchSessionMapStore.java
@@ -0,0 +1,53 @@
+package ru.spcex.clearing.historyimdg.mapstores;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Component;
+import ru.spcex.clearing.historyimdg.index.SearchProxySession;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+
+import java.time.LocalDate;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+
+@Component
+public class SearchSessionMapStore extends AbstractSliceMapLoader {
+ public SearchSessionMapStore(JdbcTemplate jdbcTemplate) {
+ super(jdbcTemplate);
+ }
+
+ @Override
+ protected String getTableName() {
+ return "session";
+ }
+
+ @Override
+ protected String fieldOfDay() {
+ return "clearing_date"; // or "created_at" ;
+ }
+
+ @Override
+ public Collection load(Collection keys) {
+ Map> paramMap = Collections.singletonMap("ids", keys);
+ return namedParameterJdbcTemplate.query("select * from " + getTableName() + " where id in (:ids)", paramMap,
+ (rs, rowNum) -> {
+ SearchProxySession proxyFond = new SearchProxySession();
+ proxyFond.setId(rs.getObject("id", Long.class));
+ LocalDate date = getLocalDateFromSqlDate(rs, "trading_date");
+ if (date == null)
+ date = getLocalDateFromSqlDate(rs, "created_at");
+ proxyFond.setTradingDate(date);
+ return proxyFond;
+ });
+ }
+
+ @Override
+ public String getMapName() {
+ return IMDGDistributedNames.Map_SearchSession;
+ }
+
+ @Override
+ public String[] getIndexingField() {
+ return new String[]{"clearingDate"};
+ }
+}
diff --git a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java
index fef559a7f..12a1ff431 100644
--- a/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java
+++ b/platform-parent/platform-imdg-api-hazelcast-impl/src/main/java/ru/spcex/platform/imdg/iml/hazelcast/adapter/predicate/ImdgPredicateBuilderHazelcast.java
@@ -45,6 +45,11 @@ public class ImdgPredicateBuilderHazelcast implements ImdgPredicateBuilder {
return new ImdgPredicateHazelcast(Predicates.not(Predicates.equal(key, null)));
}
+ @Override
+ public ImdgPredicate isNull(String key) {
+ return new ImdgPredicateHazelcast(Predicates.equal(key, null));
+ }
+
@Override
public ImdgPredicate in(String key, Comparable[] values) {
return new ImdgPredicateHazelcast(Predicates.in(key, values));
diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java
index aa00b217f..0249ad7b1 100644
--- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java
+++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java
@@ -223,6 +223,7 @@ public final class IMDGDistributedNames {
public static final String Map_SearchExcludeLiabilitiesRegister = "Map_SearchExcludeLiabilitiesRegister";
public static final String Map_SearchLiabilitiesRegister = "Map_SearchLiabilitiesRegister";
public static final String Map_SearchExecutionRegister = "Map_SearchExecutionRegister";
+ public static final String Map_SearchSession = "Map_SearchSession";
public static final String MAP_SEQUENCE_NAME = "MAP_SEQUENCE_NAME";
private IMDGDistributedNames() {
diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java
index bee080b38..4bd78cb41 100644
--- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java
+++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/ImdgPredicateBuilder.java
@@ -7,6 +7,7 @@ public interface ImdgPredicateBuilder {
ImdgPredicate greater(String key, Comparable value);
ImdgPredicate less(String key, Comparable value);
ImdgPredicate notNull(String key);
+ ImdgPredicate isNull(String key);
ImdgPredicate in(String key, Comparable... values);
diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/sql/ImdgPredicateBuilderSqlMock.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/sql/ImdgPredicateBuilderSqlMock.java
index 5f7d50716..c24137c29 100644
--- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/sql/ImdgPredicateBuilderSqlMock.java
+++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/platform/imdg/api/predicate/sql/ImdgPredicateBuilderSqlMock.java
@@ -47,6 +47,11 @@ public class ImdgPredicateBuilderSqlMock implements ImdgPredicateBuilder {
return new SimpleSQLPredicate(key + " is not null");
}
+ @Override
+ public ImdgPredicate isNull(String key) {
+ return new SimpleSQLPredicate(key + " is null");
+ }
+
@Override
public ImdgPredicate in(String key, Comparable[] values) {
String enumiration = Arrays.stream(values).map(this::escape).collect(Collectors.joining(", "));