extdb-importer http://jira.mfd.msk:8088/browse/CLS-641 ограничение по дате в SQL

This commit is contained in:
AKurakin 2024-02-13 17:50:07 +03:00
parent 686b15318d
commit 619b7d8767
2 changed files with 71 additions and 3 deletions

View file

@ -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<SCrossRate> crossRatesFromDB = jdbcTemplate.query(sql,
(resultSet, i) -> readSCrossRate(resultSet));
Instant currentInstant = Instant.now();

View file

@ -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}.<br>
* Входной запрос {@link LauncherCommandRequest}:<br>
*/
// @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)}<br>
* Тест проверяет обновление сущности {@link SCrossRate}.<br>
* Входной запрос {@link LauncherCommandRequest}:<br>
*/
@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()}<br>
* Тест проверяет построение SQL.<br>
* Входные данные {@link SCrossRate} в sCrossRateImdg<br>
*/
@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)}<br>
* Тест проверяет поиск сущности {@link SCrossRate}.<br>
* Входной запрос {@link LauncherCommandRequest}:<br>
*/