From b4397a25a850ee1a116f97eaf4732c753b6f0dc0 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Fri, 25 Aug 2023 18:08:29 +0300 Subject: [PATCH] =?UTF-8?q?dbf-importer=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D0=BD=D0=B3,=20=D1=8E=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/data/tables/AbstractTable.java | 45 +++++++++++++ .../logic/data/tables/SDf06Table.java | 26 ------- .../logic/data/tables/SDf52Table.java | 2 +- .../logic/data/tables/SDf52TableTest.java | 67 +++++++++++++++++++ .../logic/data/tables/SDf57TableTest.java | 19 ++++-- 5 files changed, 125 insertions(+), 34 deletions(-) create mode 100644 clearing-parent/dbf-importer/src/test/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf52TableTest.java diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/AbstractTable.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/AbstractTable.java index a1e355406..46e566c02 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/AbstractTable.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/AbstractTable.java @@ -6,6 +6,8 @@ import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; +import java.math.BigDecimal; + public abstract class AbstractTable { private final Logger log = LoggerFactory.getLogger(getClass()); private final String prefix; @@ -51,4 +53,47 @@ public abstract class AbstractTable { protected void bootMap() { map = (ImdgHazelcast) hazelcastService.getImdg(nameOfMap, clazz); } + + protected String anyToString(Object value) { + if (value == null) return null; + if (value instanceof String) { + String str = ((String)value).trim(); + if (str.isEmpty()) return null; + return str; + } + return value.toString(); + } + + protected BigDecimal anyNumberToBigDecimal(Object value) { + if (value == null) return null; + if (value instanceof BigDecimal) { + return (BigDecimal) value; + } + if (value instanceof String) { + //return BigDecimal.valueOf(Long.parseLong((String)value)); + String str = ((String)value).trim(); + if (str.isEmpty()) return null; + return new BigDecimal(str); + } + if (value instanceof Number) { + return BigDecimal.valueOf(((Number)value).longValue()); + } + throw new IllegalArgumentException("Can not convert to BigDecimal " + value.getClass().getName() + " " + value); + } + + protected Long anyNumberToLong(Object value) { + if (value == null) return null; + if (value instanceof BigDecimal) { + return ((BigDecimal) value).longValue(); + } + if (value instanceof String) { + String str = ((String)value).trim(); + if (str.isEmpty()) return null; + return Long.parseLong(str); + } + if (value instanceof Number) { + return ((Number)value).longValue(); + } + throw new IllegalArgumentException("Can not convert to BigDecimal " + value.getClass().getName() + " " + value); + } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf06Table.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf06Table.java index 0f8b13c39..d737696d7 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf06Table.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf06Table.java @@ -36,30 +36,4 @@ public class SDf06Table extends AbstractTable { return result; } - BigDecimal anyNumberToBigDecimal(Object value) { - if (value == null) return null; - if (value instanceof BigDecimal) { - return (BigDecimal) value; - } - if (value instanceof String) { - //return BigDecimal.valueOf(Long.parseLong((String)value)); - String str = ((String)value).trim(); - if (str.isEmpty()) return null; - return new BigDecimal(str); - } - if (value instanceof Number) { - return BigDecimal.valueOf(((Number)value).longValue()); - } - throw new IllegalArgumentException("Can not convert to BigDecimal " + value.getClass().getName() + " " + value); - } - - String anyToString(Object value) { - if (value == null) return null; - if (value instanceof String) { - String str = ((String)value).trim(); - if (str.isEmpty()) return null; - return str; - } - return value.toString(); - } } \ No newline at end of file diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf52Table.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf52Table.java index f0a6f994a..1a5fcaf1c 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf52Table.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf52Table.java @@ -25,7 +25,7 @@ public class SDf52Table extends AbstractTable { result.setDeal((String) entity[2]); result.setDate((String) entity[3]); BigDecimal status = (BigDecimal) entity[4]; - result.setStatus(status != null ? status.longValue() : null); + result.setStatus(status != null ? status.longValue() : null); // or safe universal type result.setStatus(anyNumberToLong(entity[4])); result.setFileName(filename); result.setGenerationTime(Instant.now()); result.setGenerationId(fileId); diff --git a/clearing-parent/dbf-importer/src/test/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf52TableTest.java b/clearing-parent/dbf-importer/src/test/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf52TableTest.java new file mode 100644 index 000000000..c2604b788 --- /dev/null +++ b/clearing-parent/dbf-importer/src/test/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf52TableTest.java @@ -0,0 +1,67 @@ +package ru.spcex.clearing.dbf.importer.logic.data.tables; + +import com.linuxense.javadbf.DBFReader; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import ru.spcex.platform.classes.base.SpcexObjectBase; +import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; +import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + + +class SDf52TableTest { + + // @Test todo тестовый файл DF-52_S_PRC2308251504_1.dbf не готов, включить тест, когда будет пример формата + void getEntity() throws IOException { + ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer = null; + ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter = null; + HazelcastClientParams hazelcastClientParams = Mockito.mock(HazelcastClientParams.class); + HazelcastService hcSvs = new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter, hazelcastClientParams); + + SDf52Table tableReader = new SDf52Table(); + tableReader.setHazelcastService(hcSvs); + + // ImportToDB + + byte[] fileData = Files.readAllBytes(Path.of("src/test/resources/sdf/DF-52_S_PRC2308251504_1.dbf")); + tableReader.setFilename("DF-52_S_PRC2308251504_1.dbf"); + tableReader.setFileId(123L); + tableReader.bootMap(); // IMDGDistributedNames.Map_SDf57 + int count = reader(fileData, tableReader); + + Assertions.assertEquals(1, count); +// Assertions.assertEquals(count, tableReader.map.size()); + } + + int reader(byte[] source, AbstractTable table) throws IOException { +// byte[] source = resultContainer.getDbfSource(); + Charset sourceCharset = Charset.forName("cp866"); //settings.getCommon().getEncodingSource()); + + int count = 0; + try (InputStream is = new ByteArrayInputStream(source); + DBFReader dbfReader = new DBFReader(is, sourceCharset)) { + for (int i = 0; i < dbfReader.getRecordCount(); i++) { + Object[] entity = dbfReader.nextRecord(); + if (entity == null) { +// log.warn("record index {} null", i); + continue; + } + count++; + SpcexObjectBase entityObj = table.getEntity(entity); + Assertions.assertNotNull(entityObj); + //table.injectEntity(table.getEntity(entity)); + } + } + return count; + } +} \ No newline at end of file diff --git a/clearing-parent/dbf-importer/src/test/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf57TableTest.java b/clearing-parent/dbf-importer/src/test/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf57TableTest.java index f764aa1ef..ec5ad0135 100644 --- a/clearing-parent/dbf-importer/src/test/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf57TableTest.java +++ b/clearing-parent/dbf-importer/src/test/java/ru/spcex/clearing/dbf/importer/logic/data/tables/SDf57TableTest.java @@ -1,10 +1,12 @@ package ru.spcex.clearing.dbf.importer.logic.data.tables; import com.linuxense.javadbf.DBFReader; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import ru.spcex.clearing.dbf.importer.logic.data.enums.StageResult; +import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; import ru.spcex.platform.utils.log.ExceptionUtils; @@ -19,14 +21,14 @@ import java.nio.file.Path; class SDf57TableTest { -// @Test + @Test void getEntity() throws IOException { SDf57Table tableReader = new SDf57Table(); ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer = null; ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter = null; HazelcastClientParams hazelcastClientParams = Mockito.mock(HazelcastClientParams.class); - HazelcastService hcSvs = new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter,hazelcastClientParams ); + HazelcastService hcSvs = new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter, hazelcastClientParams); tableReader.setHazelcastService(hcSvs); //tableReader.bootMap(); @@ -38,13 +40,14 @@ class SDf57TableTest { tableReader.setFilename("DF-57_S_PRC2306141135_1.dbf"); tableReader.setFileId(123L); tableReader.bootMap(); // IMDGDistributedNames.Map_SDf57 - reader(fileData, tableReader); + int count = reader(fileData, tableReader); + Assertions.assertEquals(10, count); } - void reader(byte[] source, AbstractTable table) throws IOException { + int reader(byte[] source, AbstractTable table) throws IOException { // byte[] source = resultContainer.getDbfSource(); Charset sourceCharset = Charset.forName("cp866"); //settings.getCommon().getEncodingSource()); - + int count = 0; try (InputStream is = new ByteArrayInputStream(source); DBFReader dbfReader = new DBFReader(is, sourceCharset)) { for (int i = 0; i < dbfReader.getRecordCount(); i++) { @@ -53,9 +56,11 @@ class SDf57TableTest { // log.warn("record index {} null", i); continue; } - table.injectEntity(table.getEntity(entity)); + SpcexObjectBase entityObj = table.getEntity(entity); + //table.injectEntity(entityObj); + count++; } } - + return count; } } \ No newline at end of file