From 1835673dd4d1af8372447cfb0a4c3952729124ca Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 25 Mar 2025 14:37:54 +0300 Subject: [PATCH] extdb-importer http://jira.mfd.msk:8088/browse/CLS-821 --- clearing-parent/extdb-importer/pom.xml | 4 ++ .../services/ExtDBImporterService.java | 45 +++++++++++++++++-- .../src/main/resources/application.properties | 15 ++++--- .../services/ExtDBImporterServiceTest.java | 4 +- 4 files changed, 58 insertions(+), 10 deletions(-) diff --git a/clearing-parent/extdb-importer/pom.xml b/clearing-parent/extdb-importer/pom.xml index 4e240bb18..5fee44ba5 100644 --- a/clearing-parent/extdb-importer/pom.xml +++ b/clearing-parent/extdb-importer/pom.xml @@ -43,6 +43,10 @@ com.microsoft.sqlserver mssql-jdbc + + org.postgresql + postgresql + com.mchange c3p0 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 078fc6a81..d49b56dff 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 @@ -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 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; diff --git a/clearing-parent/extdb-importer/src/main/resources/application.properties b/clearing-parent/extdb-importer/src/main/resources/application.properties index a6e92cd2f..b5c8d9414 100644 --- a/clearing-parent/extdb-importer/src/main/resources/application.properties +++ b/clearing-parent/extdb-importer/src/main/resources/application.properties @@ -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 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 bdb4edc4c..823499235 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 @@ -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); } /**