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