diff --git a/clearing-parent/extdb-importer/src/main/java/ru/spcex/clearing/extdb/importer/services/ExtDBImporterService.java b/clearing-parent/extdb-importer/src/main/java/ru/spcex/clearing/extdb/importer/services/ExtDBImporterService.java index 68bee3fa4..078fc6a81 100644 --- a/clearing-parent/extdb-importer/src/main/java/ru/spcex/clearing/extdb/importer/services/ExtDBImporterService.java +++ b/clearing-parent/extdb-importer/src/main/java/ru/spcex/clearing/extdb/importer/services/ExtDBImporterService.java @@ -56,9 +56,30 @@ public class ExtDBImporterService { process(false); } + protected String createSelectSQL() { + SCrossRate maxCrossRate = sCrossRateImdg.aggregateByMax( + "date", + sCrossRateImdg.predicateBuilder().notNull("date") + ); + LocalDate maxDate; + if (maxCrossRate == null || maxCrossRate.getDate() == null) { + maxDate = LocalDate.of(2024, 1, 1); + log.trace("Mo record in SCrossRate/ use default maxDate={}", maxDate); + } else { + maxDate = maxCrossRate.getDate(); + log.trace("Found record in SCrossRate, maxDate={}", maxDate); + } + if (maxDate.isAfter(LocalDate.now())) { + log.warn("maxDate={} too high, set current date", maxDate); + maxDate = LocalDate.now(); + } + return String.format("SELECT * FROM %s.crossRate where date>='%s'", + schema, maxDate); + } + public synchronized void process(boolean byCommand) { log.debug("Start process import SCrossRate from DB. byCommand={}", byCommand); - String sql = String.format("SELECT * FROM %s.crossRate", schema); + String sql = createSelectSQL(); Collection crossRatesFromDB = jdbcTemplate.query(sql, (resultSet, i) -> readSCrossRate(resultSet)); Instant currentInstant = Instant.now(); diff --git a/clearing-parent/extdb-importer/src/test/java/ru/spcex/clearing/extdb/importer/services/ExtDBImporterServiceTest.java b/clearing-parent/extdb-importer/src/test/java/ru/spcex/clearing/extdb/importer/services/ExtDBImporterServiceTest.java index eee2151bb..bdb4edc4c 100644 --- a/clearing-parent/extdb-importer/src/test/java/ru/spcex/clearing/extdb/importer/services/ExtDBImporterServiceTest.java +++ b/clearing-parent/extdb-importer/src/test/java/ru/spcex/clearing/extdb/importer/services/ExtDBImporterServiceTest.java @@ -3,6 +3,7 @@ package ru.spcex.clearing.extdb.importer.services; import org.apache.kafka.clients.consumer.MockConsumer; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.misc.SCrossRate; @@ -10,6 +11,8 @@ import ru.spcex.clearing.extdb.importer.AbstractServiceTest; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.test.MatcherFactory; import ru.spcex.platform.enumeration.Task; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast; import javax.annotation.PostConstruct; import java.math.BigDecimal; @@ -56,8 +59,9 @@ class ExtDBImporterServiceTest extends AbstractServiceTest { * Тест проверяет обновление сущности {@link SCrossRate}.
* Входной запрос {@link LauncherCommandRequest}:
*/ -// @Test //для работы теста нужна тестовая база Microsoft SQL с данными - void process() throws InterruptedException { + @Disabled //для работы теста нужна тестовая база Microsoft SQL с данными + @Test + void process_by_queue() throws InterruptedException { SCrossRate sCrossRate = getSCrossRate(); Long id = sCrossRateImdg.insert(sCrossRate); @@ -76,6 +80,49 @@ class ExtDBImporterServiceTest extends AbstractServiceTest { /** * {@link ExtDBImporterService#process(boolean)}
+ * Тест проверяет обновление сущности {@link SCrossRate}.
+ * Входной запрос {@link LauncherCommandRequest}:
+ */ + @Disabled //для работы теста нужна тестовая база Microsoft SQL с данными + @Test + void process_direct_call() throws InterruptedException { + SCrossRate sCrossRate = getSCrossRate(); + sCrossRate.setDate(LocalDate.of(2024,2,13)); + Long id = sCrossRateImdg.insert(sCrossRate); + assertEquals(1, sCrossRateImdg.size()); + + extDBImporterService.process(true); + + assertEquals(6, sCrossRateImdg.size()); // резуьтат зависит от внешней тестовой базы + } + + /** + * {@link ExtDBImporterService#createSelectSQL()}
+ * Тест проверяет построение SQL.
+ * Входные данные {@link SCrossRate} в sCrossRateImdg
+ */ + @Test + void createSelectSQL() { + ((ImdgHazelcast) sCrossRateImdg).clear(); + String sql = extDBImporterService.createSelectSQL(); + assertEquals("SELECT * FROM dbo.crossRate where date>='2024-01-01'", sql); + + { + SCrossRate sCrossRate = getSCrossRate(); + sCrossRate.setDate(LocalDate.of(2024, 2, 13)); + Long id = sCrossRateImdg.insert(sCrossRate); + } + { + SCrossRate sCrossRate = getSCrossRate(); + sCrossRate.setDate(LocalDate.of(2024, 1, 15)); + Long id = sCrossRateImdg.insert(sCrossRate); + } + sql = extDBImporterService.createSelectSQL(); + assertEquals("SELECT * FROM dbo.crossRate where date>='2024-02-13'", sql); + } + + /** + * {@link ExtDBImporterService#getSCrossRateFromImdg(SCrossRate, Imdg)}
* Тест проверяет поиск сущности {@link SCrossRate}.
* Входной запрос {@link LauncherCommandRequest}:
*/