extdb-importer http://jira.mfd.msk:8088/browse/CLS-641 ограничение по дате в SQL
This commit is contained in:
parent
686b15318d
commit
df8849b0c8
2 changed files with 71 additions and 3 deletions
|
|
@ -56,9 +56,30 @@ public class ExtDBImporterService {
|
||||||
process(false);
|
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) {
|
public synchronized void process(boolean byCommand) {
|
||||||
log.debug("Start process import SCrossRate from DB. byCommand={}", 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,
|
Collection<SCrossRate> crossRatesFromDB = jdbcTemplate.query(sql,
|
||||||
(resultSet, i) -> readSCrossRate(resultSet));
|
(resultSet, i) -> readSCrossRate(resultSet));
|
||||||
Instant currentInstant = Instant.now();
|
Instant currentInstant = Instant.now();
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.spcex.clearing.extdb.importer.services;
|
||||||
import org.apache.kafka.clients.consumer.MockConsumer;
|
import org.apache.kafka.clients.consumer.MockConsumer;
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Disabled;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import ru.clearing.classes.statics.data.misc.SCrossRate;
|
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.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
|
||||||
import ru.spcex.clearing.test.MatcherFactory;
|
import ru.spcex.clearing.test.MatcherFactory;
|
||||||
import ru.spcex.platform.enumeration.Task;
|
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 javax.annotation.PostConstruct;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
@ -56,8 +59,9 @@ class ExtDBImporterServiceTest extends AbstractServiceTest {
|
||||||
* Тест проверяет обновление сущности {@link SCrossRate}.<br>
|
* Тест проверяет обновление сущности {@link SCrossRate}.<br>
|
||||||
* Входной запрос {@link LauncherCommandRequest}:<br>
|
* Входной запрос {@link LauncherCommandRequest}:<br>
|
||||||
*/
|
*/
|
||||||
// @Test //для работы теста нужна тестовая база Microsoft SQL с данными
|
@Disabled //для работы теста нужна тестовая база Microsoft SQL с данными
|
||||||
void process() throws InterruptedException {
|
@Test
|
||||||
|
void process_by_queue() throws InterruptedException {
|
||||||
SCrossRate sCrossRate = getSCrossRate();
|
SCrossRate sCrossRate = getSCrossRate();
|
||||||
Long id = sCrossRateImdg.insert(sCrossRate);
|
Long id = sCrossRateImdg.insert(sCrossRate);
|
||||||
|
|
||||||
|
|
@ -76,6 +80,49 @@ class ExtDBImporterServiceTest extends AbstractServiceTest {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link ExtDBImporterService#process(boolean)}<br>
|
* {@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 SCrossRate}.<br>
|
||||||
* Входной запрос {@link LauncherCommandRequest}:<br>
|
* Входной запрос {@link LauncherCommandRequest}:<br>
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue