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);
}
/**