This commit is contained in:
AKurakin 2025-03-25 14:37:54 +03:00
parent 73d3250ce0
commit 1835673dd4
4 changed files with 58 additions and 10 deletions

View file

@ -43,6 +43,10 @@
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>

View file

@ -73,13 +73,14 @@ public class ExtDBImporterService {
log.warn("maxDate={} too high, set current date", maxDate);
maxDate = LocalDate.now();
}
return String.format("SELECT * FROM %s.crossRate where date>='%s'",
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 = createSelectSQL();
log.debug("Select SQL: {}", sql);
Collection<SCrossRate> crossRatesFromDB = jdbcTemplate.query(sql,
(resultSet, i) -> readSCrossRate(resultSet));
Instant currentInstant = Instant.now();
@ -162,12 +163,50 @@ public class ExtDBImporterService {
|| StringUtils.hasText(crossRate.getCurrency()));
}
protected BigDecimal safeReadAsBigDecimal(ResultSet rs, String column) throws SQLException {
int columnType = rs.getMetaData().getColumnType(rs.findColumn(column));
switch (columnType) {
case java.sql.Types.NUMERIC:
return rs.getBigDecimal(column);
case java.sql.Types.INTEGER:
int i = rs.getInt(column);
if (rs.wasNull())
return null;
return BigDecimal.valueOf(i);
case java.sql.Types.BIGINT:
long l = rs.getLong(column);
if (rs.wasNull())
return null;
return BigDecimal.valueOf(l);
default:
return rs.getBigDecimal(column); // try by JDBC convert
}
}
protected String safeReadAsString(ResultSet rs, String column) throws SQLException {
int columnType = rs.getMetaData().getColumnType(rs.findColumn(column));
switch (columnType) {
case java.sql.Types.INTEGER:
int i = rs.getInt(column);
if (rs.wasNull())
return null;
return String.valueOf(i);
case java.sql.Types.BIGINT:
long l = rs.getLong(column);
if (rs.wasNull())
return null;
return String.valueOf(l);
default:
return rs.getString(column);
}
}
public SCrossRate readSCrossRate(ResultSet resultSet) throws SQLException {
SCrossRate object = new SCrossRate();
object.setDate(getLocalDateFromSqlDate(resultSet, "DATE"));
object.setCurrency(resultSet.getObject("CURRENCY", String.class));
object.setCurrCode(resultSet.getObject("CURRCODE", String.class));
object.setFaceValue(resultSet.getObject("FACEVALUE", BigDecimal.class));
object.setCurrCode(safeReadAsString(resultSet,"CURRCODE"));
object.setFaceValue(safeReadAsBigDecimal(resultSet, "FACEVALUE"));
object.setRate(resultSet.getObject("RATE", BigDecimal.class));
object.setUnitRate(resultSet.getObject("UNITRATE", BigDecimal.class));
return object;

View file

@ -3,11 +3,16 @@ spring.main.web-application-type=none
#extdb-importer.cron.load-from-db-cron=0 0/5 * * * ? - каждые 5 минут
extdb-importer.cron.load-from-db-cron=0 0/5 * * * ?
extdb-importer.database.login=CR_user
extdb-importer.database.password=Crossrate
extdb-importer.database.schema=dbo
extdb-importer.database.url=jdbc:sqlserver://10.200.200.144:1433;database=CBRInfo;
extdb-importer.database.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
#extdb-importer.database.login=CR_user
#extdb-importer.database.password=Crossrate
#extdb-importer.database.schema=dbo
#extdb-importer.database.url=jdbc:sqlserver://10.200.200.144:1433;database=CBRInfo;
#extdb-importer.database.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
extdb-importer.database.login=clearing
extdb-importer.database.password=Aa111111
extdb-importer.database.schema=CBRInfo
extdb-importer.database.url=jdbc:postgresql://10.200.200.133:5432/clearing?currentSchema=CBRInfo
extdb-importer.database.driver=org.postgresql.Driver
extdb-importer.hazelcast.cluster-members=127.0.0.1:5701
extdb-importer.hazelcast.login=dev

View file

@ -105,7 +105,7 @@ class ExtDBImporterServiceTest extends AbstractServiceTest {
void createSelectSQL() {
((ImdgHazelcast) sCrossRateImdg).clear();
String sql = extDBImporterService.createSelectSQL();
assertEquals("SELECT * FROM dbo.crossRate where date>='2024-01-01'", sql);
assertEquals("SELECT * FROM \"CBRInfo\".\"Crossrate\" where \"Date\">='2024-01-01'", sql);
{
SCrossRate sCrossRate = getSCrossRate();
@ -118,7 +118,7 @@ class ExtDBImporterServiceTest extends AbstractServiceTest {
Long id = sCrossRateImdg.insert(sCrossRate);
}
sql = extDBImporterService.createSelectSQL();
assertEquals("SELECT * FROM dbo.crossRate where date>='2024-02-13'", sql);
assertEquals("SELECT * FROM \"CBRInfo\".\"Crossrate\" where \"Date\">='2024-02-13'", sql);
}
/**