From 5ca2153a3b440d81e7cf415ae0d284649fa44689 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 26 Apr 2024 20:54:04 +0300 Subject: [PATCH] backend-api imdg-hist http://jira.mfd.msk:8088/browse/CLS-523 session-history --- .../backendapi/config/HistoryConfig.java | 14 +++++ .../src/main/resources/meta/meta.json | 4 +- .../src/main/resources/meta/meta.xml | 4 +- .../backend-api/src/test/resources/meta.json | 8 ++- .../historyimdg/index/SearchProxySession.java | 22 ++++++++ .../mapstores/SearchSessionMapStore.java | 53 +++++++++++++++++++ .../ImdgPredicateBuilderHazelcast.java | 5 ++ .../clearing/imdg/IMDGDistributedNames.java | 1 + .../api/predicate/ImdgPredicateBuilder.java | 1 + .../sql/ImdgPredicateBuilderSqlMock.java | 5 ++ 10 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/index/SearchProxySession.java create mode 100644 clearing-parent/imdg-hist/src/main/java/ru/spcex/clearing/historyimdg/mapstores/SearchSessionMapStore.java 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(", "));