diff --git a/clearing-parent/swt-importer/pom.xml b/clearing-parent/swt-importer/pom.xml index 35515baf1..ec4e4f967 100644 --- a/clearing-parent/swt-importer/pom.xml +++ b/clearing-parent/swt-importer/pom.xml @@ -70,6 +70,19 @@ ru.spcex.platform platform-enum + + + + org.springframework.boot + spring-boot-starter-test + test + + + ru.spcex.clearing + test-clearing + test + + diff --git a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/data/tables/SDf10Table.java b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/data/tables/SDf10Table.java index 1c597f7e0..87c7d9562 100644 --- a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/data/tables/SDf10Table.java +++ b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/data/tables/SDf10Table.java @@ -20,10 +20,11 @@ public class SDf10Table extends AbstractTable { @Override public SDf10 getEntity(SWTHeaderData header, String[] entity) { SDf10 result = new SDf10(); + result.setOutDocument(header.getValFor20Tag()); result.setDepoCode(entity[0]); result.setQuantity(entity[1]); result.setSecurityCode(entity[2]); - result.setClientName(entity[5]); +// result.setClientName(entity[5]); result.setFileName(filename); result.setGenerationTime(Instant.now()); result.setGenerationId(fileId); diff --git a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/data/tables/SDf13Table.java b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/data/tables/SDf13Table.java index 682ad339b..fae01fb49 100644 --- a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/data/tables/SDf13Table.java +++ b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/data/tables/SDf13Table.java @@ -22,6 +22,9 @@ public class SDf13Table extends AbstractTable { SDf13 result = new SDf13(); result.setFileName(filename); result.setOutDocument(header.getValFor20Tag()); + result.setInDocument(header.getValFor21Tag()); + result.setResult(header.getValFor76Tag()); + result.setTextError(header.getValFor77ATag()); result.setGenerationTime(Instant.now()); result.setGenerationId(fileId); return result; diff --git a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/ImportToDB.java b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/ImportToDB.java index c9ce3794a..2b1d634d8 100644 --- a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/ImportToDB.java +++ b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/logic/stages/ImportToDB.java @@ -49,11 +49,13 @@ public class ImportToDB extends Stage { AbstractTable table = mappingEnumTableObjectTable.get(currTable); table.setHazelcastService(hazelcastService); table.setFilename(resultContainer.getSwtFile().getName()); + + hazelcastService.waitAvailable(); Long fileId = hazelcastService.getImdgIdGenerator().nextId(); table.setFileId(fileId); int counter = 0; SWTHeaderData swtHeaderData = swtReader.getSWTHeader(); - while (swtReader.hasNextRecord()) { + do { counter++; String[] entity = swtReader.nextRecord(); if (entity == null) { @@ -61,7 +63,7 @@ public class ImportToDB extends Stage { continue; } table.injectEntity(table.getEntity(swtHeaderData, entity)); - } + } while (swtReader.hasNextRecord()); kafkaMessenger.notifySystemIfNeeded(currTable, fileId); } catch (IOException exception) { log.warn(exception.getMessage()); diff --git a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/util/SWTReader.java b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/util/SWTReader.java index 2ae0a7c34..2ec4d0641 100644 --- a/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/util/SWTReader.java +++ b/clearing-parent/swt-importer/src/main/java/ru/spcex/clearing/swt/importer/util/SWTReader.java @@ -84,13 +84,13 @@ S_DF_13 * */ String val20, val21, val76, val77A; line = scanner.nextLine(); - val20 = line.substring(line.lastIndexOf(":20:")); + val20 = line.substring(line.lastIndexOf(":20:") + ":20:".length()); line = scanner.nextLine(); - val21 = line.substring(line.lastIndexOf(":21:")); + val21 = line.substring(line.lastIndexOf(":21:") + ":21:".length()); line = scanner.nextLine(); - val76 = line.substring(line.lastIndexOf(":76:")); + val76 = line.substring(line.lastIndexOf(":76:") + ":76:".length()); line = scanner.nextLine(); - val77A = line.substring(line.lastIndexOf(":77A:")); + val77A = line.substring(line.lastIndexOf(":77A:") + ":77A:".length()); swtHeaderData.setValFor20Tag(val20); swtHeaderData.setValFor21Tag(val21); swtHeaderData.setValFor76Tag(val76); @@ -104,13 +104,20 @@ S_DF_13 public String[] nextRecord() { switch (resultContainer.getSwtTable()) { - case S_DF_08, S_DF_10: + case S_DF_08: String line = scanner.nextLine(); String[] separetedLine = line.split(":"); if (separetedLine.length < 5) { return null; } return separetedLine; + case S_DF_10: + line = scanner.nextLine(); + separetedLine = line.split(":"); + if (separetedLine.length < 4) { + return null; + } + return separetedLine; case S_DF_13: return new String[0]; default: @@ -119,7 +126,16 @@ S_DF_13 } public boolean hasNextRecord() { - return scanner.hasNextLine(); + switch (resultContainer.getSwtTable()) { + case S_DF_08: + scanner.hasNextLine(); + case S_DF_10: + return false; + case S_DF_13: + return false; + default: + throw new IllegalStateException("Could not process this type of table"); + } } @Override diff --git a/clearing-parent/swt-importer/src/main/resources/application.properties b/clearing-parent/swt-importer/src/main/resources/application.properties index 7e746ce9b..debb4a56a 100644 --- a/clearing-parent/swt-importer/src/main/resources/application.properties +++ b/clearing-parent/swt-importer/src/main/resources/application.properties @@ -2,12 +2,12 @@ server.port=7117 server.servlet.context-path=/importer-swt spring.main.web-application-type=servlet -import-swt-service.scheduler.check-src-dir-cron=* * * * 1 ? +import-swt-service.scheduler.check-src-dir-cron= */10 * * * * * import-swt-service.store.delete-src-files=false -import-swt-service.store.src-dir=/opt/clearing/file/importer/ -import-swt-service.store.out-dir=/opt/clearing/file/importer/loaded/ -import-swt-service.store.out-dir-error=/opt/clearing/file/importer/error/ +import-swt-service.store.src-dir=clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/importer/ +import-swt-service.store.out-dir=clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/importer/loaded/ +import-swt-service.store.out-dir-error=clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/importer/error/ import-swt-service.common.encoding-source=cp866 import-swt-service.common.insert-batch-size=100 diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/config/ImportSWTServiceTest.java b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/config/ImportSWTServiceTest.java new file mode 100644 index 000000000..52dc91817 --- /dev/null +++ b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/config/ImportSWTServiceTest.java @@ -0,0 +1,43 @@ +package ru.spcex.clearing.swt.importer.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.swt.importer.config.settings.Common; +import ru.spcex.clearing.swt.importer.config.settings.ImportSWTServiceSettings; +import ru.spcex.clearing.swt.importer.logic.data.enums.ETable; +import ru.spcex.clearing.swt.importer.logic.data.tables.AbstractTable; +import ru.spcex.clearing.swt.importer.logic.data.tables.SDf08Table; +import ru.spcex.clearing.swt.importer.logic.data.tables.SDf10Table; +import ru.spcex.clearing.swt.importer.logic.data.tables.SDf13Table; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class ImportSWTServiceTest { + + @Bean + public ImportSWTServiceSettings settings(){ + ImportSWTServiceSettings settings = new ImportSWTServiceSettings(); + Common common = new Common(); + common.setEncodingSource("cp866"); + settings.setCommon(common); + return settings; + } + + @Bean("mapOfTable") + public Map getMapOfTables() { + Map map = new HashMap<>(); + map.put(ETable.S_DF_08, new SDf08Table()); + map.put(ETable.S_DF_10, new SDf10Table()); + map.put(ETable.S_DF_13, new SDf13Table()); + return map; + } + + @Bean + public HazelcastService imdgProvider(ImdgProvider imdgProvider) { + return (HazelcastService) imdgProvider; + } +} \ No newline at end of file diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-08_230227084839859.txt b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-08_230227084839859.txt new file mode 100644 index 000000000..ec0858a73 --- /dev/null +++ b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-08_230227084839859.txt @@ -0,0 +1,54 @@ +To:SPCE +From:CSO +Type:599 +Date/Time:20230227/0848 +:20:SDC230227084839 +:21:NONREF +:18A:46 +758200000AT0:000000000:SOVKB-BV-01:NW:0:���� ����(���) +758299999BT0:000000000:SOVKB-BV-01:NW:0:���� ����(���) +758300000AT0:000000000:SOVKB-BV-01:NW:0:�������(���) +758399999BT0:000000000:SOVKB-BV-01:NW:0:�������(���) +758330001XT0:000000000:SOVKB-BV-01:NW:0:�������(���) +704500000AT0:000000000:SOVKB-BV-01:NW:0:�� "�� "������" +704599999BT0:000000000:SOVKB-BV-01:NW:0:�� "�� "������" +709500000AT0:000000000:SOVKB-BV-01:NW:0:���� ��� (���) +746000000AT0:000000000:SOVKB-BV-01:NW:0:�� "��� ����" +747200000AT0:000000000:SOVKB-BV-01:NW:0:��� "�������������" +750000000AT0:000000000:SOVKB-BV-01:NW:0:��� ��� +750099999BT0:000000000:SOVKB-BV-01:NW:0:��� ��� +758500000AT0:000000000:SOVKB-BV-01:NW:0:�� ��� "�����������" +747100000AT0:000000000:SOVKB-BV-01:NW:0:��� ���� "�� ��������" +747199999BT0:000000000:SOVKB-BV-01:NW:0:��� ���� "�� ��������" +751700000AT0:000000000:SOVKB-BV-01:NW:0:��� "����������" +751799999BT0:000000000:SOVKB-BV-01:NW:0:��� "����������" +749700000AT0:000000000:SOVKB-BV-01:NW:0:��� ���� ��� +759600000AT0:000000000:SOVKB-BV-01:NW:0:��� "�� ����� �������" +759699999BT0:000000000:SOVKB-BV-01:NW:0:��� "�� ����� �������" +700400000AT0:000000000:SOVKB-BV-01:NW:0:��� "��������" +700499999BT0:000000000:SOVKB-BV-01:NW:0:��� "��������" +742100000AT0:000000000:SOVKB-BV-01:NW:0:��� "���������� ��������� ����" +758200000AT0:000000000:SU26239RMFS2:NW:0:���� ����(���) +758299999BT0:000000000:SU26239RMFS2:NW:0:���� ����(���) +758300000AT0:000000000:SU26239RMFS2:NW:0:�������(���) +758399999BT0:000000000:SU26239RMFS2:NW:0:�������(���) +758330001XT0:000000000:SU26239RMFS2:NW:0:�������(���) +704500000AT0:000000000:SU26239RMFS2:NW:0:�� "�� "������" +704599999BT0:000000000:SU26239RMFS2:NW:0:�� "�� "������" +709500000AT0:000000000:SU26239RMFS2:NW:0:���� ��� (���) +746000000AT0:000000000:SU26239RMFS2:NW:0:�� "��� ����" +747200000AT0:000000000:SU26239RMFS2:NW:0:��� "�������������" +750000000AT0:000000002:SU26239RMFS2:NW:0:��� ��� +750099999BT0:000000000:SU26239RMFS2:NW:0:��� ��� +758500000AT0:000000000:SU26239RMFS2:NW:0:�� ��� "�����������" +747100000AT0:000000000:SU26239RMFS2:NW:0:��� ���� "�� ��������" +747199999BT0:000000000:SU26239RMFS2:NW:0:��� ���� "�� ��������" +751700000AT0:000000000:SU26239RMFS2:NW:0:��� "����������" +751799999BT0:000000000:SU26239RMFS2:NW:0:��� "����������" +749700000AT0:000000000:SU26239RMFS2:NW:0:��� ���� ��� +759600000AT0:000000000:SU26239RMFS2:NW:0:��� "�� ����� �������" +759699999BT0:000000000:SU26239RMFS2:NW:0:��� "�� ����� �������" +700400000AT0:000000000:SU26239RMFS2:NW:0:��� "��������" +700499999BT0:000000000:SU26239RMFS2:NW:0:��� "��������" +742100000AT0:000000000:SU26239RMFS2:NW:0:��� "���������� ��������� ����" +2 diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-10_221017145001001.txt b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-10_221017145001001.txt new file mode 100644 index 000000000..59162d0c5 --- /dev/null +++ b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-10_221017145001001.txt @@ -0,0 +1,7 @@ +To:SPCE +From:CSO +Type:010 +Date/Time:20221017/1450 +:20:RNCB_2210170001-010 +758200000AT0:000000010:RNCB-BE-01:���� ����(���) +10 diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_220908153459636.txt b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_220908153459636.txt new file mode 100644 index 000000000..c35d61976 --- /dev/null +++ b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_220908153459636.txt @@ -0,0 +1,12 @@ +To:SPCEX +From:RDC +Type:596 +Date/Time:20220908/1534 +:20:220908M58C0001EX +:21:XXX202209081526 +:76:EXECUTED +:77A:��������� ��������� + + + + diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_221111131459718.txt b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_221111131459718.txt new file mode 100644 index 000000000..349c00dda --- /dev/null +++ b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_221111131459718.txt @@ -0,0 +1,8 @@ +To:SPCEX +From:RDC +Type:596 +Date/Time:20221111/1314 +:20:221111M58C0001EX +:21:XXX202211111247 +:76:EXECUTED +:77A:��������� ��������� diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/logic/stages/ImportToDBTest.java b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/logic/stages/ImportToDBTest.java new file mode 100644 index 000000000..b072bff8f --- /dev/null +++ b/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/logic/stages/ImportToDBTest.java @@ -0,0 +1,70 @@ +package ru.spcex.clearing.swt.importer.logic.stages; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.sdf.SDf10; +import ru.clearing.classes.statics.data.sdf.SDf13; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.swt.importer.config.ImportSWTServiceTest; +import ru.spcex.clearing.swt.importer.logic.data.ResultContainer; +import ru.spcex.clearing.swt.importer.logic.data.enums.ETable; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import javax.annotation.PostConstruct; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +import static ru.spcex.clearing.swt.importer.logic.data.ResultContainer.createNewTask; +import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = { + ImportToDB.class, + SWTImportKafkaMessenger.class, + ImportSWTServiceTest.class, + ImdgTestConfig.class, + KafkaTestConfig.class}) +class ImportToDBTest { + + @Autowired + @Qualifier("hazelcastServiceTest") + protected ImdgProvider imdgProvider; + + @Autowired + protected ImportToDB importToDB; + + @PostConstruct + protected void init() { + waitAvailableImdgProviderAndAddAdminWithDefaultId(); + + } + @Test + void process() throws IOException { + ETable eTable = ETable.S_DF_13; + File swtFile = new File("D:\\repo\\mfd\\clearing\\clearing-parent\\swt-importer\\src\\test\\java\\ru\\spcex\\clearing\\swt\\importer\\files\\RDC_KS_DF-13_bond_221111131459718.txt"); + ResultContainer resultContainer = createNewTask(eTable, swtFile); + resultContainer.setSwtSource(Files.readAllBytes(Paths.get(swtFile.getAbsolutePath()))); + + importToDB.process(resultContainer); + Imdg df13Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf13, SDf13.class); + df13Imdg.getAllValues(); + + eTable = ETable.S_DF_10; + swtFile = new File("D:\\repo\\mfd\\clearing\\clearing-parent\\swt-importer\\src\\test\\java\\ru\\spcex\\clearing\\swt\\importer\\files\\RDC_KS_DF-10_221017145001001.txt"); + resultContainer = createNewTask(eTable, swtFile); + resultContainer.setSwtSource(Files.readAllBytes(Paths.get(swtFile.getAbsolutePath()))); + + importToDB.process(resultContainer); + Imdg df10Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf10, SDf10.class); + df10Imdg.getAllValues(); + } +} \ No newline at end of file