diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/config/XMLExporterConfig.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/config/XMLExporterConfig.java
index 3538011ca..267c4076f 100644
--- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/config/XMLExporterConfig.java
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/config/XMLExporterConfig.java
@@ -13,7 +13,6 @@ import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF02ObjectTag;
@@ -29,7 +28,6 @@ import ru.spcex.platform.classes.base.SpcexObjectBase;
@Configuration
@EnableConfigurationProperties
-@ComponentScan(basePackages = {"ru.spcex.clearing.xml.exporter"})
public class XMLExporterConfig {
@Bean("mapOfTable")
public Map
> getMapOfTables() {
diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/ResultContainer.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/ResultContainer.java
index d60d1628a..b2b3a92b6 100644
--- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/ResultContainer.java
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/ResultContainer.java
@@ -5,6 +5,7 @@ import java.time.LocalDateTime;
import java.util.UUID;
import ru.spcex.clearing.xml.exporter.logic.data.enums.StageResult;
import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.DocumentTag;
public class ResultContainer {
private String sourceName; // имя инициатора (файла)
@@ -15,6 +16,7 @@ public class ResultContainer {
private StageResult lastStageResult;
private LocalDateTime registrationDateTime;
private String memberCode;
+ private DocumentTag documentTag;
public ResultContainer(Table tableForExport) {
this.tableForExport = tableForExport;
@@ -84,4 +86,12 @@ public class ResultContainer {
public void setMemberCode(String memberCode) {
this.memberCode = memberCode;
}
+
+ public DocumentTag getDocumentTag() {
+ return documentTag;
+ }
+
+ public void setDocumentTag(DocumentTag documentTag) {
+ this.documentTag = documentTag;
+ }
}
diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF03ObjectTag.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF03ObjectTag.java
index d2b5d7fcf..1f2a53926 100644
--- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF03ObjectTag.java
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF03ObjectTag.java
@@ -1,6 +1,7 @@
package ru.spcex.clearing.xml.exporter.logic.data.tags.objects;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@@ -25,9 +26,13 @@ public class DF03ObjectTag extends ObjectTag {
@JacksonXmlProperty(isAttribute = true, localName = "SBANKNAM")
private String sbanknam1;
+ @JsonIgnore
private String sbanknam2;
+ @JsonIgnore
private String sbanknam3;
+ @JsonIgnore
private String sbanknam4;
+ @JsonIgnore
private String sbanknam5;
@JacksonXmlProperty(isAttribute = true, localName = "C_ACC_CRED")
@@ -35,9 +40,13 @@ public class DF03ObjectTag extends ObjectTag {
@JacksonXmlProperty(isAttribute = true, localName = "RBANKNAM")
private String rbanknam1;
+ @JsonIgnore
private String rbanknam2;
+ @JsonIgnore
private String rbanknam3;
+ @JsonIgnore
private String rbanknam4;
+ @JsonIgnore
private String rbanknam5;
@JacksonXmlProperty(isAttribute = true, localName = "PAY_DATE")
diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF05ObjectTag.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF05ObjectTag.java
index 47944d53b..ded7ece25 100644
--- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF05ObjectTag.java
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF05ObjectTag.java
@@ -30,7 +30,7 @@ public class DF05ObjectTag extends ObjectTag {
@Override
public void setData(SDf05 entity) {
- final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("hh:mm:ss");
+ final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
this.tp = entity.getTp();
this.dt = entity.getDt();
this.tm = LocalTime.parse(entity.getTm(), dtf);
diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF51ObjectTag.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF51ObjectTag.java
index 5657da60e..e89784b8e 100644
--- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF51ObjectTag.java
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF51ObjectTag.java
@@ -10,13 +10,13 @@ import org.springframework.format.annotation.DateTimeFormat;
import ru.clearing.classes.statics.data.sdf.SDf51;
public class DF51ObjectTag extends ObjectTag {
- @JacksonXmlProperty(isAttribute = true, localName = "ACCOUNT")
+ @JacksonXmlProperty(isAttribute = true, localName = "NUMBER")
private String number;
- @JacksonXmlProperty(isAttribute = true, localName = "ACCOUNT")
+ @JacksonXmlProperty(isAttribute = true, localName = "UNIXTIME")
private Long unixtime;
- @JacksonXmlProperty(isAttribute = true, localName = "ACCOUNT")
+ @JacksonXmlProperty(isAttribute = true, localName = "DATETIME")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime datetime;
diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF54ObjectTag.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF54ObjectTag.java
index a1619dd77..1bae2c0bc 100644
--- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF54ObjectTag.java
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF54ObjectTag.java
@@ -1,6 +1,7 @@
package ru.spcex.clearing.xml.exporter.logic.data.tags.objects;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@@ -28,9 +29,13 @@ public class DF54ObjectTag extends ObjectTag {
@JacksonXmlProperty(isAttribute = true, localName = "SBANKNAM")
private String sbanknam1;
+ @JsonIgnore
private String sbanknam2;
+ @JsonIgnore
private String sbanknam3;
+ @JsonIgnore
private String sbanknam4;
+ @JsonIgnore
private String sbanknam5;
@JacksonXmlProperty(isAttribute = true, localName = "RBANKCODE")
@@ -41,9 +46,13 @@ public class DF54ObjectTag extends ObjectTag {
@JacksonXmlProperty(isAttribute = true, localName = "RBANKNAM")
private String rbanknam1;
+ @JsonIgnore
private String rbanknam2;
+ @JsonIgnore
private String rbanknam3;
+ @JsonIgnore
private String rbanknam4;
+ @JsonIgnore
private String rbanknam5;
@JacksonXmlProperty(isAttribute = true, localName = "OP_TYPE")
@@ -64,8 +73,11 @@ public class DF54ObjectTag extends ObjectTag {
@JacksonXmlProperty(isAttribute = true, localName = "SCLIENTN")
private String sclientn1;
+ @JsonIgnore
private String sclientn2;
+ @JsonIgnore
private String sclientn3;
+ @JsonIgnore
private String sclientn4;
@JacksonXmlProperty(isAttribute = true, localName = "INN_DEB")
@@ -79,8 +91,11 @@ public class DF54ObjectTag extends ObjectTag {
@JacksonXmlProperty(isAttribute = true, localName = "RCLIENTN")
private String rclientn1;
+ @JsonIgnore
private String rclientn2;
+ @JsonIgnore
private String rclientn3;
+ @JsonIgnore
private String rclientn4;
@JacksonXmlProperty(isAttribute = true, localName = "INN_CRED")
diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/ExportFromHazelcast.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/ExportFromHazelcast.java
index 605949981..25fc20ce2 100644
--- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/ExportFromHazelcast.java
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/ExportFromHazelcast.java
@@ -1,9 +1,7 @@
package ru.spcex.clearing.xml.exporter.logic.stages;
import static ru.spcex.clearing.platform.messaging.domain.Consts.PAIR_SDF;
-import static ru.spcex.clearing.xml.exporter.logic.data.tags.objects.ObjectTag.ruCurrency;
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.File;
import java.time.LocalDate;
import java.time.LocalTime;
@@ -22,7 +20,6 @@ import ru.spcex.clearing.platform.messaging.domain.cud.utilities.PairSdfRequest;
import ru.spcex.clearing.platform.messaging.serialization.LogFormatter;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.xml.exporter.config.SFTPConfig;
-import ru.spcex.clearing.xml.exporter.config.settings.ExportXMLServiceSettings;
import ru.spcex.clearing.xml.exporter.logic.data.ResultContainer;
import ru.spcex.clearing.xml.exporter.logic.data.enums.StageResult;
import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
@@ -30,39 +27,31 @@ import ru.spcex.clearing.xml.exporter.logic.data.tags.DocumentTag;
import ru.spcex.clearing.xml.exporter.logic.data.tags.ParentDocTag;
import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.ObjectTag;
import ru.spcex.platform.classes.base.SpcexObjectBase;
-import ru.spcex.platform.enumeration.CurrencyCode;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
@Component
public class ExportFromHazelcast {
private final Logger log = LoggerFactory.getLogger(getClass());
- private final ExportXMLServiceSettings settings;
private final ImdgProvider imdgProvider;
private final SFTPConfig.XmlGateway gateway;
- private final XmlMapper xmlMapper;
private final Map> objectTagMap;
private final Supplier kafkaSender;
- public ExportFromHazelcast(ExportXMLServiceSettings settings,
- ImdgProvider imdgProvider,
+ public ExportFromHazelcast(ImdgProvider imdgProvider,
SFTPConfig.XmlGateway gateway,
- @Qualifier("xmlMapper") XmlMapper xmlMapper,
@Qualifier("mapOfTable") Map> objectTagMap,
Supplier kafkaSender) {
- this.settings = settings;
this.imdgProvider = imdgProvider;
this.gateway = gateway;
- this.xmlMapper = xmlMapper;
this.objectTagMap = objectTagMap;
this.kafkaSender = kafkaSender;
}
public StageResult process(ResultContainer resultContainer) {
log.info("uuid {}. Stage: {}", resultContainer.getUuid(), this.getClass().getSimpleName());
- Objects.requireNonNull(resultContainer.getTableForExport());
- Objects.requireNonNull(resultContainer.getFileForExport());
- Table table = resultContainer.getTableForExport();
+ Table table = Objects.requireNonNull(resultContainer.getTableForExport());
+ File xmlFile = Objects.requireNonNull(resultContainer.getFileForExport());
DocumentTag documentTag = new DocumentTag();
ParentDocTag parentDocTag = new ParentDocTag();
@@ -78,70 +67,46 @@ public class ExportFromHazelcast {
documentTag.setParentDoc(parentDocTag);
Imdg extends SpcexObjectBase> map = imdgProvider.getImdg(table.getHazelcastMapName(), table.getEntityClass());
- File xmlFile = resultContainer.getFileForExport();
- String currency = null;
+
String path = null;
- boolean writeOk = false;
- boolean emptyMap = true;
+ boolean emptyMap;
- try {
- Collection extends SpcexObjectBase> tableRows;
- if (resultContainer.getGroupId() != null) {
- Map queryParams = Map.of("generationId", resultContainer.getGroupId());
- tableRows = map.getCollectionObjectsByFieldValues(queryParams);
- } else {
- tableRows = map.getAllValues();
+ Collection extends SpcexObjectBase> tableRows;
+ if (resultContainer.getGroupId() != null) {
+ Map queryParams = Map.of("generationId", resultContainer.getGroupId());
+ tableRows = map.getCollectionObjectsByFieldValues(queryParams);
+ } else {
+ tableRows = map.getAllValues();
+ }
+ if (tableRows.isEmpty()) {
+ log.info("uuid {}. Map {} is empty, generationId {}", resultContainer.getUuid(), resultContainer.getTableForExport().getHazelcastMapName(), resultContainer.getGroupId());
+ return StageResult.COMPLETE;
+ } else {
+ log.debug("uuid {}. Selected {} records from map {}, generationId {}", resultContainer.getUuid(),
+ tableRows.size(), resultContainer.getTableForExport().getHazelcastMapName(), resultContainer.getGroupId());
+ }
+ if (Table.S_DF02 == resultContainer.getTableForExport()) {
+ log.trace("Sort S_DF02 items"); // Сортировка по возрастанию id, чтобы сохранить последовательность строк SDF02, как в SDF01
+ tableRows = new ArrayList(tableRows);
+ ((ArrayList) tableRows).sort(Comparator.comparing(SpcexObjectBase::getId));
+ }
+
+ documentTag.setObjects(addObjectTags(tableRows, table));
+ resultContainer.setDocumentTag(documentTag);
+
+ emptyMap = tableRows.isEmpty();
+
+ if (emptyMap) {
+ log.debug("Delete empty XML temp file \"{}\"", resultContainer.getFileForExport());
+ boolean deleteOk = resultContainer.getFileForExport().delete();
+ if (!deleteOk) {
+ log.warn("Can't delete file {}", resultContainer.getFileForExport().getName());
}
- if (tableRows.isEmpty()) {
- log.info("uuid {}. Map {} is empty, generationId {}", resultContainer.getUuid(), resultContainer.getTableForExport().getHazelcastMapName(), resultContainer.getGroupId());
- return StageResult.COMPLETE;
- } else {
- log.debug("uuid {}. Selected {} records from map {}, generationId {}", resultContainer.getUuid(),
- tableRows.size(), resultContainer.getTableForExport().getHazelcastMapName(), resultContainer.getGroupId());
- }
- if (Table.S_DF02 == resultContainer.getTableForExport()) {
- log.trace("Sort S_DF02 items"); // Сортировка по возрастанию id, чтобы сохранить последовательность строк SDF02, как в SDF01
- tableRows = new ArrayList(tableRows);
- ((ArrayList) tableRows).sort(Comparator.comparing(SpcexObjectBase::getId));
- }
-
- documentTag.setObjects(addObjectTags(tableRows, table));
-
- //todo: rewrite currency logic
- currency = ruCurrency;
- log.info("DOCUMENT TAG = {}", documentTag);
- xmlMapper.writeValue(xmlFile, documentTag);
-
- if (CurrencyCode.isRub(currency))
- path = settings.getStore().getOutPayValDir().get(ruCurrency);
- else path = settings.getStore().getOutPayValDir().get(currency);
-
- log.info("settings.getStore().getOutPayValDir().get(ruCurrency): {}", settings.getStore().getOutPayValDir().get(ruCurrency));
- log.info("settings.getStore().getOutPayValDir().get(currency): {}", settings.getStore().getOutPayValDir().get(currency));
-
- if (path == null)
- throw new Exception("Get unknown currency=" + currency + ", need will be adding settings like 'export-xml-service.store.out-pay-val-dir.RUB=/RUB' and restart app");
- writeOk = true;
- emptyMap = tableRows.isEmpty();
-
-
- } catch (Exception e) {
- log.error(String.format("uuid %s. Can't export table %s (map %s) to file %s. Table was skipped.",
- resultContainer.getUuid(), table, table.getHazelcastMapName(), xmlFile), e);
- return StageResult.ERROR;
- } finally {
- if (!writeOk || emptyMap) {
- log.debug("Delete empty XML temp file \"{}\"", resultContainer.getFileForExport());
- boolean deleteOk = resultContainer.getFileForExport().delete();
- if (!deleteOk) {
- log.warn("Can't delete file {}", resultContainer.getFileForExport().getName());
- }
- } else {
- log.debug("uuid {}, send to SFTP path \"{}\"", resultContainer.getUuid(), path);
- gateway.sendToSftp(xmlFile, path);
- if (Table.S_DF02.equals(resultContainer.getTableForExport())) {
- sendPairSdfRequest(resultContainer);
- }
+ } else {
+ log.debug("uuid {}, send to SFTP path \"{}\"", resultContainer.getUuid(), path);
+ gateway.sendToSftp(xmlFile, path);
+ if (Table.S_DF02.equals(resultContainer.getTableForExport())) {
+ sendPairSdfRequest(resultContainer);
}
}
diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/PrepareXMLFile.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/PrepareXMLFile.java
index 48e18f7b3..09601c0c8 100644
--- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/PrepareXMLFile.java
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/PrepareXMLFile.java
@@ -13,7 +13,6 @@ import java.util.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.integration.sftp.session.SftpFileInfo;
import org.springframework.stereotype.Component;
import ru.spcex.clearing.xml.exporter.config.SFTPConfig;
@@ -42,7 +41,7 @@ public class PrepareXMLFile implements InitializingBean {
Objects.requireNonNull(resultContainer.getTableForExport());
if (settings.getStore().getOutPayValDir() == null || settings.getStore().getOutPayValDir().isEmpty()) {
log.error("No SFTP scanning directories, need will be adding settings like 'export-xml-service.store.out-pay-val-dir.RUB=/RUB' and restart app");
- return StageResult.ERROR;
+ return StageResult.ERROR;
}
List files = new ArrayList<>();
log.trace("Get files from SFTP paths: {}", settings.getStore().getOutPayValDir().values());
diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFile.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFile.java
new file mode 100644
index 000000000..0cd76f35e
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFile.java
@@ -0,0 +1,63 @@
+package ru.spcex.clearing.xml.exporter.logic.stages;
+
+import static ru.spcex.clearing.xml.exporter.logic.data.tags.objects.ObjectTag.ruCurrency;
+
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import java.io.File;
+import java.util.Objects;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+import ru.spcex.clearing.xml.exporter.config.settings.ExportXMLServiceSettings;
+import ru.spcex.clearing.xml.exporter.logic.data.ResultContainer;
+import ru.spcex.clearing.xml.exporter.logic.data.enums.StageResult;
+import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.DocumentTag;
+import ru.spcex.platform.enumeration.CurrencyCode;
+
+@Component
+public class WriteXMLFile {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+ private final ExportXMLServiceSettings settings;
+ private final XmlMapper xmlMapper;
+
+ public WriteXMLFile(ExportXMLServiceSettings settings,
+ @Qualifier("xmlMapper") XmlMapper xmlMapper) {
+ this.settings = settings;
+ this.xmlMapper = xmlMapper;
+ }
+
+ public StageResult process(ResultContainer resultContainer) {
+ log.info("uuid {}. Stage: {}", resultContainer.getUuid(), this.getClass().getSimpleName());
+ Table table = Objects.requireNonNull(resultContainer.getTableForExport());
+ File xmlFile = Objects.requireNonNull(resultContainer.getFileForExport());
+ //todo: rewrite currency logic
+ String currency = ruCurrency;
+
+ DocumentTag documentTag = Objects.requireNonNull(resultContainer.getDocumentTag());
+
+ String path;
+ if (CurrencyCode.isRub(currency)) {
+ path = settings.getStore().getOutPayValDir().get(ruCurrency);
+ } else {
+ path = settings.getStore().getOutPayValDir().get(currency);
+ }
+
+ log.info("DOCUMENT TAG = {}", documentTag);
+ try {
+ if (path == null) {
+ throw new Exception("Get unknown currency=" + currency + ", need will be adding settings like 'export-xml-service.store.out-pay-val-dir.RUB=/RUB' and restart app");
+ }
+ xmlMapper.writeValue(xmlFile, documentTag);
+ log.info("settings.getStore().getOutPayValDir().get(ruCurrency): {}", settings.getStore().getOutPayValDir().get(ruCurrency));
+ log.info("settings.getStore().getOutPayValDir().get(currency): {}", settings.getStore().getOutPayValDir().get(currency));
+ } catch (Exception e) {
+ log.error(String.format("uuid %s. Can't export table %s (map %s) to file %s. Table was skipped.",
+ resultContainer.getUuid(), table, table.getHazelcastMapName(), xmlFile), e);
+ return StageResult.ERROR;
+ }
+
+ return StageResult.OK;
+ }
+}
diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/services/CommandService.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/services/CommandService.java
index 724664e0f..5c3f8ef62 100644
--- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/services/CommandService.java
+++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/services/CommandService.java
@@ -20,6 +20,7 @@ import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
import ru.spcex.clearing.xml.exporter.logic.stages.ExportFromHazelcast;
import ru.spcex.clearing.xml.exporter.logic.stages.Journal;
import ru.spcex.clearing.xml.exporter.logic.stages.PrepareXMLFile;
+import ru.spcex.clearing.xml.exporter.logic.stages.WriteXMLFile;
import ru.spcex.platform.enumeration.Task;
@Service
@@ -28,15 +29,18 @@ public class CommandService extends QueueConsumer implements InitializingBean {
private final PrepareXMLFile prepareXMLFile;
private final ExportFromHazelcast exportFromHazelcast;
+ private final WriteXMLFile writeXMLFile;
private final Journal journal;
public CommandService(Consumer kafkaQueue,
PrepareXMLFile prepareXMLFile,
ExportFromHazelcast exportFromHazelcast,
+ WriteXMLFile writeXMLFile,
Journal journal) {
super(kafkaQueue);
this.prepareXMLFile = prepareXMLFile;
this.exportFromHazelcast = exportFromHazelcast;
+ this.writeXMLFile = writeXMLFile;
this.journal = journal;
}
@@ -119,6 +123,10 @@ public class CommandService extends QueueConsumer implements InitializingBean {
result = exportFromHazelcast.process(resultContainer);
resultContainer.setLastStageResult(result);
}
+ if (result == StageResult.OK) {
+ result = writeXMLFile.process(resultContainer);
+ resultContainer.setLastStageResult(result);
+ }
if (result == StageResult.OK) {
result = journal.process(resultContainer);
resultContainer.setLastStageResult(result);
diff --git a/clearing-parent/xml-exporter/src/test/java/ru/spcex/clearing/xml/exporter/logic/stages/ExportFromHazelcastTest.java b/clearing-parent/xml-exporter/src/test/java/ru/spcex/clearing/xml/exporter/logic/stages/ExportFromHazelcastTest.java
new file mode 100644
index 000000000..cb6c63c42
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/java/ru/spcex/clearing/xml/exporter/logic/stages/ExportFromHazelcastTest.java
@@ -0,0 +1,409 @@
+package ru.spcex.clearing.xml.exporter.logic.stages;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import javax.annotation.PostConstruct;
+import org.apache.kafka.clients.producer.MockProducer;
+import org.apache.kafka.clients.producer.Producer;
+import org.apache.kafka.clients.producer.ProducerRecord;
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.SpyBean;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.TestPropertySource;
+import ru.clearing.classes.statics.data.sdf.SDf02;
+import ru.clearing.classes.statics.data.sdf.SDf03;
+import ru.clearing.classes.statics.data.sdf.SDf05;
+import ru.clearing.classes.statics.data.sdf.SDf07;
+import ru.clearing.classes.statics.data.sdf.SDf51;
+import ru.clearing.classes.statics.data.sdf.SDf53;
+import ru.clearing.classes.statics.data.sdf.SDf54;
+import ru.clearing.classes.statics.data.sdf.SDf56;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.clearing.test.TestObjectCreator;
+import ru.spcex.clearing.test.config.ImdgTestConfig;
+import ru.spcex.clearing.test.config.KafkaTestConfig;
+import ru.spcex.clearing.xml.exporter.config.SFTPMockConfig;
+import ru.spcex.clearing.xml.exporter.config.XMLExporterConfig;
+import ru.spcex.clearing.xml.exporter.config.settings.ExportXMLServiceSettings;
+import ru.spcex.clearing.xml.exporter.logic.data.ResultContainer;
+import ru.spcex.clearing.xml.exporter.logic.data.enums.StageResult;
+import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF02ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF03ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF05ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF07ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF51ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF53ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF54ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF56ObjectTag;
+import ru.spcex.platform.imdg.api.Imdg;
+import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
+
+@SpringBootTest(classes = {
+ ExportFromHazelcast.class,
+ ExportXMLServiceSettings.class,
+ XMLExporterConfig.class,
+ SFTPMockConfig.class,
+ ImdgTestConfig.class,
+ KafkaTestConfig.class,
+})
+@TestPropertySource(properties = {"spring.config.location=./src/test/resources/"})
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+@ActiveProfiles("test")
+class ExportFromHazelcastTest {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @Autowired
+ @Qualifier("hazelcastServiceTest")
+ private HazelcastService hazelcastService;
+
+ @Captor
+ private ArgumentCaptor producerRecord;
+ @SpyBean
+ private MockProducer producer;
+ @Autowired
+ @Qualifier("mockProducer")
+ protected Producer mockProducer;
+
+ @Autowired
+ private ExportFromHazelcast exportFromHazelcast;
+
+ @PostConstruct
+ private void init() {
+ hazelcastService.waitAvailable();
+
+ new TestObjectCreator(hazelcastService).createUserAdmin(1000L);
+ }
+
+ @Test
+ void process_shouldExportSDf02ToObjectTag() {
+ SDf02 expectedSDf02 = new SDf02();
+ expectedSDf02.setCurr_code("test1");
+ expectedSDf02.setAccount("test2");
+ expectedSDf02.setRemainder("test3");
+ expectedSDf02.setDeal("test4");
+ expectedSDf02.setAcc_code("test5");
+ expectedSDf02.setDat("2024-03-14");
+ expectedSDf02.setMarket("test6");
+ expectedSDf02.setAcc_name("test7");
+ expectedSDf02.setAcc_type("test8");
+ expectedSDf02.setSumengage("test9");
+ expectedSDf02.setSumunblock("test10");
+ expectedSDf02.setFile_type("test11");
+ expectedSDf02.setResult("test12");
+
+ Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class);
+ imdg.insert(expectedSDf02);
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF02);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-02_S_PRC1604240915_1.xml"));
+
+ StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
+ DF02ObjectTag actualObjectTag = (DF02ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
+
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+ Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF02");
+ Assertions.assertThat(actualObjectTag.getCurrCode()).isEqualTo(expectedSDf02.getCurr_code());
+ Assertions.assertThat(actualObjectTag.getAccount()).isEqualTo(expectedSDf02.getAccount());
+ Assertions.assertThat(actualObjectTag.getRemainder()).isEqualTo(expectedSDf02.getRemainder());
+ Assertions.assertThat(actualObjectTag.getDeal()).isEqualTo(expectedSDf02.getDeal());
+ Assertions.assertThat(actualObjectTag.getAccCode()).isEqualTo(expectedSDf02.getAcc_code());
+ Assertions.assertThat(actualObjectTag.getDat()).isEqualTo(expectedSDf02.getDat());
+ Assertions.assertThat(actualObjectTag.getMarket()).isEqualTo(expectedSDf02.getMarket());
+ Assertions.assertThat(actualObjectTag.getAccName()).isEqualTo(expectedSDf02.getAcc_name());
+ Assertions.assertThat(actualObjectTag.getAccType()).isEqualTo(expectedSDf02.getAcc_type());
+ Assertions.assertThat(actualObjectTag.getSumengage()).isEqualTo(expectedSDf02.getSumengage());
+ Assertions.assertThat(actualObjectTag.getSumunblock()).isEqualTo(expectedSDf02.getSumunblock());
+ Assertions.assertThat(actualObjectTag.getFileType()).isEqualTo(expectedSDf02.getFile_type());
+ }
+
+ @Test
+ void process_shouldExportSDf03ToObjectTag() {
+ SDf03 expectedSDf03 = new SDf03();
+ expectedSDf03.setSeg_type("test1");
+ expectedSDf03.setDoc_type("test2");
+ expectedSDf03.setDocnm_ref("test3");
+ expectedSDf03.setDocnmprev("test4");
+ expectedSDf03.setC_acc_deb("test5");
+ expectedSDf03.setSbanknam1("test6");
+ expectedSDf03.setC_acc_cred("test7");
+ expectedSDf03.setRbanknam1("test8");
+ expectedSDf03.setPay_date("2024-03-14");
+ expectedSDf03.setPay_val("test9");
+ expectedSDf03.setSum_deb("test10");
+ expectedSDf03.setSpecif_1("test11");
+ expectedSDf03.setImp_result("test12");
+
+ Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class);
+ imdg.insert(expectedSDf03);
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF03);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-03_S_PRC1604240915_1.xml"));
+
+ StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
+ DF03ObjectTag actualObjectTag = (DF03ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
+
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+ Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF03");
+ Assertions.assertThat(actualObjectTag.getSegType()).isEqualTo(expectedSDf03.getSeg_type());
+ Assertions.assertThat(actualObjectTag.getDocType()).isEqualTo(expectedSDf03.getDoc_type());
+ Assertions.assertThat(actualObjectTag.getDocnmRef()).isEqualTo(expectedSDf03.getDocnm_ref());
+ Assertions.assertThat(actualObjectTag.getDocnmprev()).isEqualTo(expectedSDf03.getDocnmprev());
+ Assertions.assertThat(actualObjectTag.getcAccDeb()).isEqualTo(expectedSDf03.getC_acc_deb());
+ Assertions.assertThat(actualObjectTag.getSbanknam1()).isEqualTo(expectedSDf03.getSbanknam1());
+ Assertions.assertThat(actualObjectTag.getcAccCred()).isEqualTo(expectedSDf03.getC_acc_cred());
+ Assertions.assertThat(actualObjectTag.getRbanknam1()).isEqualTo(expectedSDf03.getRbanknam1());
+ Assertions.assertThat(actualObjectTag.getPayDate()).isEqualTo(expectedSDf03.getPay_date());
+ Assertions.assertThat(actualObjectTag.getPayVal()).isEqualTo(expectedSDf03.getPay_val());
+ Assertions.assertThat(actualObjectTag.getSumDeb()).isEqualTo(expectedSDf03.getSum_deb());
+ Assertions.assertThat(actualObjectTag.getSpecif1()).isEqualTo(expectedSDf03.getSpecif_1());
+ Assertions.assertThat(actualObjectTag.getImpResult()).isEqualTo(expectedSDf03.getImp_result());
+ }
+
+ @Test
+ void process_shouldExportSDf05ToObjectTag() {
+ SDf05 expectedSDf05 = new SDf05();
+ expectedSDf05.setTp(BigDecimal.TEN);
+ expectedSDf05.setDt(LocalDate.parse("2024-03-14"));
+ expectedSDf05.setTm("09:22:12");
+ expectedSDf05.setPr("test2");
+
+ Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf05, SDf05.class);
+ imdg.insert(expectedSDf05);
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF05);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-05_S_PRC1604240915_1.xml"));
+
+ StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
+ DF05ObjectTag actualObjectTag = (DF05ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
+
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+ Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF05");
+ Assertions.assertThat(actualObjectTag.getTp()).isEqualTo(expectedSDf05.getTp());
+ Assertions.assertThat(actualObjectTag.getDt()).isEqualTo(expectedSDf05.getDt());
+ Assertions.assertThat(actualObjectTag.getTm()).isEqualTo(expectedSDf05.getTm());
+ Assertions.assertThat(actualObjectTag.getPr()).isEqualTo(expectedSDf05.getPr());
+ }
+
+ @Test
+ void process_shouldExportSDf07ToObjectTag() {
+ SDf07 expectedSDf07 = new SDf07();
+ expectedSDf07.setAccount("test1");
+ expectedSDf07.setSum(new BigDecimal(BigInteger.TEN));
+ expectedSDf07.setMarket("test3");
+ expectedSDf07.setType("test4");
+ expectedSDf07.setDeal("test5");
+ expectedSDf07.setClientN("test6");
+ expectedSDf07.setInn("test7");
+ expectedSDf07.setBic("test8");
+ expectedSDf07.setSpec("test9");
+ expectedSDf07.setNumber(new BigDecimal(BigInteger.TWO));
+ expectedSDf07.setDoc_Num("test11");
+ expectedSDf07.setDoc_Date("2024-03-14");
+ expectedSDf07.setPay_val("test12");
+
+ Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf07, SDf07.class);
+ imdg.insert(expectedSDf07);
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF07);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-07_S_PRC1604240915_1.xml"));
+
+ StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
+ DF07ObjectTag actualObjectTag = (DF07ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
+
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+ Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF07");
+ Assertions.assertThat(actualObjectTag.getAccount()).isEqualTo(expectedSDf07.getAccount());
+ Assertions.assertThat(actualObjectTag.getSum()).isEqualTo(expectedSDf07.getSum());
+ Assertions.assertThat(actualObjectTag.getMarket()).isEqualTo(expectedSDf07.getMarket());
+ Assertions.assertThat(actualObjectTag.getType()).isEqualTo(expectedSDf07.getType());
+ Assertions.assertThat(actualObjectTag.getDeal()).isEqualTo(expectedSDf07.getDeal());
+ Assertions.assertThat(actualObjectTag.getClientN()).isEqualTo(expectedSDf07.getClientN());
+ Assertions.assertThat(actualObjectTag.getInn()).isEqualTo(expectedSDf07.getInn());
+ Assertions.assertThat(actualObjectTag.getBic()).isEqualTo(expectedSDf07.getBic());
+ Assertions.assertThat(actualObjectTag.getSpec()).isEqualTo(expectedSDf07.getSpec());
+ Assertions.assertThat(actualObjectTag.getNumber()).isEqualTo(expectedSDf07.getNumber());
+ Assertions.assertThat(actualObjectTag.getDocNum()).isEqualTo(expectedSDf07.getDoc_Num());
+ Assertions.assertThat(actualObjectTag.getDocDate()).isEqualTo(expectedSDf07.getDoc_Date());
+ Assertions.assertThat(actualObjectTag.getPayVal()).isEqualTo(expectedSDf07.getPay_val());
+ }
+
+ @Test
+ void process_shouldExportSDf51ToObjectTag() {
+ SDf51 expectedSDf51 = new SDf51();
+ expectedSDf51.setNumber("1234");
+ expectedSDf51.setDatetime("2024-03-14T09:03:11");
+
+ Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf51, SDf51.class);
+ imdg.insert(expectedSDf51);
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF51);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-51_S_PRC1604240915_1.xml"));
+
+ StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
+ DF51ObjectTag actualObjectTag = (DF51ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
+
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+ Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF51");
+ Assertions.assertThat(actualObjectTag.getNumber()).isEqualTo(expectedSDf51.getNumber());
+ Assertions.assertThat(actualObjectTag.getDatetime()).isEqualTo(expectedSDf51.getDatetime());
+ Assertions.assertThat(actualObjectTag.getUnixtime()).isEqualTo(actualObjectTag.getDatetime()
+ .atZone(ZoneId.systemDefault())
+ .toEpochSecond());
+ }
+
+ @Test
+ void process_shouldExportSDf53ToObjectTag() {
+ SDf53 expectedSDf53 = new SDf53();
+ expectedSDf53.setAccount("test1");
+ expectedSDf53.setAccName("test2");
+ expectedSDf53.setDeal("test3");
+ expectedSDf53.setDate("2024-03-14");
+ expectedSDf53.setStatus(1L);
+ expectedSDf53.setAccType("test4");
+ expectedSDf53.setResult("test5");
+
+ Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf53, SDf53.class);
+ imdg.insert(expectedSDf53);
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF53);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-53_S_PRC1604240915_1.xml"));
+
+ StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
+ DF53ObjectTag actualObjectTag = (DF53ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
+
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+ Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF53");
+ Assertions.assertThat(actualObjectTag.getAccount()).isEqualTo(expectedSDf53.getAccount());
+ Assertions.assertThat(actualObjectTag.getAccName()).isEqualTo(expectedSDf53.getAccName());
+ Assertions.assertThat(actualObjectTag.getDeal()).isEqualTo(expectedSDf53.getDeal());
+ Assertions.assertThat(actualObjectTag.getDate()).isEqualTo(expectedSDf53.getDate());
+ Assertions.assertThat(actualObjectTag.getStatus()).isEqualTo(expectedSDf53.getStatus());
+ Assertions.assertThat(actualObjectTag.getAccType()).isEqualTo(expectedSDf53.getAccType());
+ Assertions.assertThat(actualObjectTag.getResult()).isEqualTo(expectedSDf53.getResult());
+ }
+
+ @Test
+ void process_shouldExportSDf54ToObjectTag() {
+ SDf54 expectedSDf54 = new SDf54();
+ expectedSDf54.setSeg_type("test1");
+ expectedSDf54.setDoc_type("test2");
+ expectedSDf54.setDocnm_ref("test3");
+ expectedSDf54.setDocnmprev("test4");
+ expectedSDf54.setSbankcode("test5");
+ expectedSDf54.setC_acc_deb("test6");
+ expectedSDf54.setSbanknam1("test7");
+ expectedSDf54.setRbankcode("test8");
+ expectedSDf54.setC_acc_cred("test9");
+ expectedSDf54.setRbanknam1("test10");
+ expectedSDf54.setOp_type("test11");
+ expectedSDf54.setOp_order("test12");
+ expectedSDf54.setPay_date("2024-03-14");
+ expectedSDf54.setPay_val("test13");
+ expectedSDf54.setSum_deb("test14");
+ expectedSDf54.setSclientn1("test15");
+ expectedSDf54.setInn_deb("test16");
+ expectedSDf54.setKpp_deb("test17");
+ expectedSDf54.setAcc_deb("test18");
+ expectedSDf54.setRclientn1("test19");
+ expectedSDf54.setInn_cred("test20");
+ expectedSDf54.setKpp_cred("test21");
+ expectedSDf54.setAcc_kr_1("test22");
+ expectedSDf54.setSpecif_1("test23");
+ expectedSDf54.setSend_type("test24");
+ expectedSDf54.setDoc_result("test25");
+ expectedSDf54.setDoc_Num("test26");
+ expectedSDf54.setDoc_Date("2024-03-15");
+ expectedSDf54.setValue_date("2024-03-16");
+ expectedSDf54.setSwift_ben("test27");
+ expectedSDf54.setSwift_int("test28");
+
+ Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf54, SDf54.class);
+ imdg.insert(expectedSDf54);
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF54);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-54_S_PRC1604240915_1.xml"));
+
+ StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
+ DF54ObjectTag actualObjectTag = (DF54ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
+
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+ Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF54");
+ Assertions.assertThat(actualObjectTag.getSegType()).isEqualTo(expectedSDf54.getSeg_type());
+ Assertions.assertThat(actualObjectTag.getDocType()).isEqualTo(expectedSDf54.getDoc_type());
+ Assertions.assertThat(actualObjectTag.getDocnmRef()).isEqualTo(expectedSDf54.getDocnm_ref());
+ Assertions.assertThat(actualObjectTag.getDocnmprev()).isEqualTo(expectedSDf54.getDocnmprev());
+ Assertions.assertThat(actualObjectTag.getSbankcode()).isEqualTo(expectedSDf54.getSbankcode());
+ Assertions.assertThat(actualObjectTag.getcAccDeb()).isEqualTo(expectedSDf54.getC_acc_deb());
+ Assertions.assertThat(actualObjectTag.getSbanknam1()).isEqualTo(expectedSDf54.getSbanknam1());
+ Assertions.assertThat(actualObjectTag.getRbankcode()).isEqualTo(expectedSDf54.getRbankcode());
+ Assertions.assertThat(actualObjectTag.getcAccCred()).isEqualTo(expectedSDf54.getC_acc_cred());
+ Assertions.assertThat(actualObjectTag.getRbanknam1()).isEqualTo(expectedSDf54.getRbanknam1());
+ Assertions.assertThat(actualObjectTag.getOpType()).isEqualTo(expectedSDf54.getOp_type());
+ Assertions.assertThat(actualObjectTag.getOpOrder()).isEqualTo(expectedSDf54.getOp_order());
+ Assertions.assertThat(actualObjectTag.getPayDate()).isEqualTo(expectedSDf54.getPay_date());
+ Assertions.assertThat(actualObjectTag.getPayVal()).isEqualTo(expectedSDf54.getPay_val());
+ Assertions.assertThat(actualObjectTag.getSumDeb()).isEqualTo(expectedSDf54.getSum_deb());
+ Assertions.assertThat(actualObjectTag.getSclientn1()).isEqualTo(expectedSDf54.getSclientn1());
+ Assertions.assertThat(actualObjectTag.getInnDeb()).isEqualTo(expectedSDf54.getInn_deb());
+ Assertions.assertThat(actualObjectTag.getKppDeb()).isEqualTo(expectedSDf54.getKpp_deb());
+ Assertions.assertThat(actualObjectTag.getAccDeb()).isEqualTo(expectedSDf54.getAcc_deb());
+ Assertions.assertThat(actualObjectTag.getRclientn1()).isEqualTo(expectedSDf54.getRclientn1());
+ Assertions.assertThat(actualObjectTag.getInnCred()).isEqualTo(expectedSDf54.getInn_cred());
+ Assertions.assertThat(actualObjectTag.getKppCred()).isEqualTo(expectedSDf54.getKpp_cred());
+ Assertions.assertThat(actualObjectTag.getAccKr1()).isEqualTo(expectedSDf54.getAcc_kr_1());
+ Assertions.assertThat(actualObjectTag.getSpecif1()).isEqualTo(expectedSDf54.getSpecif_1());
+ Assertions.assertThat(actualObjectTag.getSendType()).isEqualTo(expectedSDf54.getSend_type());
+ Assertions.assertThat(actualObjectTag.getDocResult()).isEqualTo(expectedSDf54.getDoc_result());
+ Assertions.assertThat(actualObjectTag.getDocNum()).isEqualTo(expectedSDf54.getDoc_Num());
+ Assertions.assertThat(actualObjectTag.getDocDate()).isEqualTo(expectedSDf54.getDoc_Date());
+ Assertions.assertThat(actualObjectTag.getValueDate()).isEqualTo(expectedSDf54.getValue_date());
+ Assertions.assertThat(actualObjectTag.getSwiftBen()).isEqualTo(expectedSDf54.getSwift_ben());
+ Assertions.assertThat(actualObjectTag.getSwiftInt()).isEqualTo(expectedSDf54.getSwift_int());
+ }
+
+ @Test
+ void process_shouldExportSDf56ToObjectTag() {
+ SDf56 expectedSDf56 = new SDf56();
+ expectedSDf56.setNumber("test1");
+ expectedSDf56.setStart_datetime("2024-03-14T09:03:11");
+ expectedSDf56.setEnd_datetime("2024-04-15T11:03:11");
+ expectedSDf56.setAccount("test4");
+ expectedSDf56.setDeal("test5");
+
+ Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf56, SDf56.class);
+ imdg.insert(expectedSDf56);
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF56);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-56_S_PRC1604240915_1.xml"));
+
+ StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
+ DF56ObjectTag actualObjectTag = (DF56ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
+
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+ Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF56");
+ Assertions.assertThat(actualObjectTag.getNumber()).isEqualTo(expectedSDf56.getNumber());
+ Assertions.assertThat(actualObjectTag.getStartDatetime()).isEqualTo(expectedSDf56.getStart_datetime());
+ Assertions.assertThat(actualObjectTag.getEndDatetime()).isEqualTo(expectedSDf56.getEnd_datetime());
+ Assertions.assertThat(actualObjectTag.getAccount()).isEqualTo(expectedSDf56.getAccount());
+ Assertions.assertThat(actualObjectTag.getDeal()).isEqualTo(expectedSDf56.getDeal());
+ Assertions.assertThat(actualObjectTag.getStartUnixtime()).isEqualTo(actualObjectTag.getStartDatetime()
+ .atZone(ZoneId.systemDefault())
+ .toEpochSecond());
+ Assertions.assertThat(actualObjectTag.getEndUnixtime()).isEqualTo(actualObjectTag.getEndDatetime()
+ .atZone(ZoneId.systemDefault())
+ .toEpochSecond());
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/xml-exporter/src/test/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFileTest.java b/clearing-parent/xml-exporter/src/test/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFileTest.java
new file mode 100644
index 000000000..457dfa6e3
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFileTest.java
@@ -0,0 +1,433 @@
+package ru.spcex.clearing.xml.exporter.logic.stages;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneId;
+import java.util.List;
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.TestPropertySource;
+import ru.spcex.clearing.test.config.ImdgTestConfig;
+import ru.spcex.clearing.xml.exporter.config.XMLExporterConfig;
+import ru.spcex.clearing.xml.exporter.config.settings.ExportXMLServiceSettings;
+import ru.spcex.clearing.xml.exporter.logic.data.ResultContainer;
+import ru.spcex.clearing.xml.exporter.logic.data.enums.StageResult;
+import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.DocumentTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.ParentDocTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF02ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF03ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF05ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF07ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF51ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF53ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF54ObjectTag;
+import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF56ObjectTag;
+
+@SpringBootTest(classes = {
+ WriteXMLFile.class,
+ ExportXMLServiceSettings.class,
+ XMLExporterConfig.class,
+ ImdgTestConfig.class,
+})
+@TestPropertySource(properties = {"spring.config.location=./src/test/resources/"})
+@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+class WriteXMLFileTest {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @Autowired
+ private WriteXMLFile writeXMLFile;
+
+ @AfterEach
+ void tearDown() {
+ try {
+ Files.deleteIfExists(Path.of("./src/test/resources/xml/DF-02_S_PRC1604240915_1.xml"));
+ Files.deleteIfExists(Path.of("./src/test/resources/xml/DF-03_S_PRC1604240915_1.xml"));
+ Files.deleteIfExists(Path.of("./src/test/resources/xml/DF-05_S_PRC1604240915_1.xml"));
+ Files.deleteIfExists(Path.of("./src/test/resources/xml/DF-07_S_PRC1604240915_1.xml"));
+ Files.deleteIfExists(Path.of("./src/test/resources/xml/DF-51_S_PRC1604240915_1.xml"));
+ Files.deleteIfExists(Path.of("./src/test/resources/xml/DF-53_S_PRC1604240915_1.xml"));
+ Files.deleteIfExists(Path.of("./src/test/resources/xml/DF-54_S_PRC1604240915_1.xml"));
+ Files.deleteIfExists(Path.of("./src/test/resources/xml/DF-56_S_PRC1604240915_1.xml"));
+ } catch (IOException e) {
+ fail(e.getMessage());
+ }
+ }
+
+ @Test
+ void process_shouldWriteSDf02ToXMLFile() {
+ DF02ObjectTag expectedObjectTag = new DF02ObjectTag();
+ expectedObjectTag.setCurrCode("test1");
+ expectedObjectTag.setAccount("test2");
+ expectedObjectTag.setRemainder("test3");
+ expectedObjectTag.setDeal("test4");
+ expectedObjectTag.setAccCode("test5");
+ expectedObjectTag.setDat(LocalDate.parse("2024-03-14"));
+ expectedObjectTag.setMarket("test6");
+ expectedObjectTag.setAccName("test7");
+ expectedObjectTag.setAccType("test8");
+ expectedObjectTag.setSumengage("test9");
+ expectedObjectTag.setSumunblock("test10");
+ expectedObjectTag.setFileType("test11");
+
+ ParentDocTag expectedParentDocTag = new ParentDocTag();
+ expectedParentDocTag.setParentId("");
+
+ DocumentTag expectedDocumentTag = new DocumentTag();
+ expectedDocumentTag.setMessageId("");
+ expectedDocumentTag.setMessageType("DF02");
+ expectedDocumentTag.setMessageName("");
+ expectedDocumentTag.setMessageDate(LocalDate.parse("2024-03-14"));
+ expectedDocumentTag.setMessageTime(LocalTime.parse("09:15:31"));
+ expectedDocumentTag.setSender("");
+ expectedDocumentTag.setReceiver("");
+ expectedDocumentTag.setParentDoc(expectedParentDocTag);
+ expectedDocumentTag.setObjects(List.of(expectedObjectTag));
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF02);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-02_S_PRC1604240915_1.xml"));
+ actualResultContainer.setDocumentTag(expectedDocumentTag);
+
+ StageResult stageResult = writeXMLFile.process(actualResultContainer);
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+
+ try {
+ Assertions.assertThat(Files.mismatch(actualResultContainer.getFileForExport().toPath(),
+ Path.of("./src/test/resources/xml-original/DF-02_S_PRC1604240915_1.xml")))
+ .isEqualTo(-1L);
+ } catch (IOException e) {
+ fail("File comparison failed!");
+ }
+ }
+
+ @Test
+ void process_shouldWriteSDf03ToXMLFile() {
+ DF03ObjectTag expectedObjectTag = new DF03ObjectTag();
+ expectedObjectTag.setSegType("test1");
+ expectedObjectTag.setDocType("test2");
+ expectedObjectTag.setDocnmRef("test3");
+ expectedObjectTag.setDocnmprev("test4");
+ expectedObjectTag.setcAccDeb("test5");
+ expectedObjectTag.setSbanknam1("test6");
+ expectedObjectTag.setcAccCred("test7");
+ expectedObjectTag.setRbanknam1("test8");
+ expectedObjectTag.setPayDate(LocalDate.parse("2024-03-14"));
+ expectedObjectTag.setPayVal("test9");
+ expectedObjectTag.setSumDeb("test10");
+ expectedObjectTag.setSpecif1("test11");
+ expectedObjectTag.setImpResult("test12");
+
+ ParentDocTag expectedParentDocTag = new ParentDocTag();
+ expectedParentDocTag.setParentId("");
+
+ DocumentTag expectedDocumentTag = new DocumentTag();
+ expectedDocumentTag.setMessageId("");
+ expectedDocumentTag.setMessageType("DF03");
+ expectedDocumentTag.setMessageName("");
+ expectedDocumentTag.setMessageDate(LocalDate.parse("2024-03-14"));
+ expectedDocumentTag.setMessageTime(LocalTime.parse("09:15:31"));
+ expectedDocumentTag.setSender("");
+ expectedDocumentTag.setReceiver("");
+ expectedDocumentTag.setParentDoc(expectedParentDocTag);
+ expectedDocumentTag.setObjects(List.of(expectedObjectTag));
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF03);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-03_S_PRC1604240915_1.xml"));
+ actualResultContainer.setDocumentTag(expectedDocumentTag);
+
+ StageResult stageResult = writeXMLFile.process(actualResultContainer);
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+
+ try {
+ Assertions.assertThat(Files.mismatch(actualResultContainer.getFileForExport().toPath(),
+ Path.of("./src/test/resources/xml-original/DF-03_S_PRC1604240915_1.xml")))
+ .isEqualTo(-1L);
+ } catch (IOException e) {
+ fail("File comparison failed!");
+ }
+ }
+
+ @Test
+ void process_shouldWriteSDf05ToXMLFile() {
+ DF05ObjectTag expectedObjectTag = new DF05ObjectTag();
+ expectedObjectTag.setTp(BigDecimal.TEN);
+ expectedObjectTag.setDt(LocalDate.parse("2024-03-14"));
+ expectedObjectTag.setTm(LocalTime.parse("09:22:12"));
+ expectedObjectTag.setPr("test2");
+
+ ParentDocTag expectedParentDocTag = new ParentDocTag();
+ expectedParentDocTag.setParentId("");
+
+ DocumentTag expectedDocumentTag = new DocumentTag();
+ expectedDocumentTag.setMessageId("");
+ expectedDocumentTag.setMessageType("DF05");
+ expectedDocumentTag.setMessageName("");
+ expectedDocumentTag.setMessageDate(LocalDate.parse("2024-03-14"));
+ expectedDocumentTag.setMessageTime(LocalTime.parse("09:15:31"));
+ expectedDocumentTag.setSender("");
+ expectedDocumentTag.setReceiver("");
+ expectedDocumentTag.setParentDoc(expectedParentDocTag);
+ expectedDocumentTag.setObjects(List.of(expectedObjectTag));
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF05);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-05_S_PRC1604240915_1.xml"));
+ actualResultContainer.setDocumentTag(expectedDocumentTag);
+
+ StageResult stageResult = writeXMLFile.process(actualResultContainer);
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+
+ try {
+ Assertions.assertThat(Files.mismatch(actualResultContainer.getFileForExport().toPath(),
+ Path.of("./src/test/resources/xml-original/DF-05_S_PRC1604240915_1.xml")))
+ .isEqualTo(-1L);
+ } catch (IOException e) {
+ fail("File comparison failed!");
+ }
+ }
+
+ @Test
+ void process_shouldWriteSDf07ToXMLFile() {
+ DF07ObjectTag expectedObjectTag = new DF07ObjectTag();
+ expectedObjectTag.setAccount("test1");
+ expectedObjectTag.setSum(new BigDecimal(BigInteger.TEN));
+ expectedObjectTag.setMarket("test3");
+ expectedObjectTag.setType("test4");
+ expectedObjectTag.setDeal("test5");
+ expectedObjectTag.setClientN("test6");
+ expectedObjectTag.setInn("test7");
+ expectedObjectTag.setBic("test8");
+ expectedObjectTag.setSpec("test9");
+ expectedObjectTag.setNumber(new BigDecimal(BigInteger.TWO));
+ expectedObjectTag.setDocNum("test11");
+ expectedObjectTag.setDocDate(LocalDate.parse("2024-03-14"));
+ expectedObjectTag.setPayVal("test12");
+
+ ParentDocTag expectedParentDocTag = new ParentDocTag();
+ expectedParentDocTag.setParentId("");
+
+ DocumentTag expectedDocumentTag = new DocumentTag();
+ expectedDocumentTag.setMessageId("");
+ expectedDocumentTag.setMessageType("DF07");
+ expectedDocumentTag.setMessageName("");
+ expectedDocumentTag.setMessageDate(LocalDate.parse("2024-03-14"));
+ expectedDocumentTag.setMessageTime(LocalTime.parse("09:15:31"));
+ expectedDocumentTag.setSender("");
+ expectedDocumentTag.setReceiver("");
+ expectedDocumentTag.setParentDoc(expectedParentDocTag);
+ expectedDocumentTag.setObjects(List.of(expectedObjectTag));
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF07);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-07_S_PRC1604240915_1.xml"));
+ actualResultContainer.setDocumentTag(expectedDocumentTag);
+
+ StageResult stageResult = writeXMLFile.process(actualResultContainer);
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+
+ try {
+ Assertions.assertThat(Files.mismatch(actualResultContainer.getFileForExport().toPath(),
+ Path.of("./src/test/resources/xml-original/DF-07_S_PRC1604240915_1.xml")))
+ .isEqualTo(-1L);
+ } catch (IOException e) {
+ fail("File comparison failed!");
+ }
+ }
+
+ @Test
+ void process_shouldWriteSDf51ToXMLFile() {
+ DF51ObjectTag expectedObjectTag = new DF51ObjectTag();
+ expectedObjectTag.setNumber("1234");
+ expectedObjectTag.setDatetime(LocalDateTime.parse("2024-03-14T09:03:11"));
+ expectedObjectTag.setUnixtime(expectedObjectTag.getDatetime().atZone(ZoneId.systemDefault()).toEpochSecond());
+
+ ParentDocTag expectedParentDocTag = new ParentDocTag();
+ expectedParentDocTag.setParentId("");
+
+ DocumentTag expectedDocumentTag = new DocumentTag();
+ expectedDocumentTag.setMessageId("");
+ expectedDocumentTag.setMessageType("DF51");
+ expectedDocumentTag.setMessageName("");
+ expectedDocumentTag.setMessageDate(LocalDate.parse("2024-03-14"));
+ expectedDocumentTag.setMessageTime(LocalTime.parse("09:15:31"));
+ expectedDocumentTag.setSender("");
+ expectedDocumentTag.setReceiver("");
+ expectedDocumentTag.setParentDoc(expectedParentDocTag);
+ expectedDocumentTag.setObjects(List.of(expectedObjectTag));
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF51);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-51_S_PRC1604240915_1.xml"));
+ actualResultContainer.setDocumentTag(expectedDocumentTag);
+
+ StageResult stageResult = writeXMLFile.process(actualResultContainer);
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+
+ try {
+ Assertions.assertThat(Files.mismatch(actualResultContainer.getFileForExport().toPath(),
+ Path.of("./src/test/resources/xml-original/DF-51_S_PRC1604240915_1.xml")))
+ .isEqualTo(-1L);
+ } catch (IOException e) {
+ fail("File comparison failed!");
+ }
+ }
+
+ @Test
+ void process_shouldWriteSDf53ToXMLFile() {
+ DF53ObjectTag expectedObjectTag = new DF53ObjectTag();
+ expectedObjectTag.setAccount("test1");
+ expectedObjectTag.setAccName("test2");
+ expectedObjectTag.setDeal("test3");
+ expectedObjectTag.setDate(LocalDate.parse("2024-03-14"));
+ expectedObjectTag.setStatus(1L);
+ expectedObjectTag.setAccType("test4");
+ expectedObjectTag.setResult("test5");
+
+ ParentDocTag expectedParentDocTag = new ParentDocTag();
+ expectedParentDocTag.setParentId("");
+
+ DocumentTag expectedDocumentTag = new DocumentTag();
+ expectedDocumentTag.setMessageId("");
+ expectedDocumentTag.setMessageType("DF53");
+ expectedDocumentTag.setMessageName("");
+ expectedDocumentTag.setMessageDate(LocalDate.parse("2024-03-14"));
+ expectedDocumentTag.setMessageTime(LocalTime.parse("09:15:31"));
+ expectedDocumentTag.setSender("");
+ expectedDocumentTag.setReceiver("");
+ expectedDocumentTag.setParentDoc(expectedParentDocTag);
+ expectedDocumentTag.setObjects(List.of(expectedObjectTag));
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF53);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-53_S_PRC1604240915_1.xml"));
+ actualResultContainer.setDocumentTag(expectedDocumentTag);
+
+ StageResult stageResult = writeXMLFile.process(actualResultContainer);
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+
+ try {
+ Assertions.assertThat(Files.mismatch(actualResultContainer.getFileForExport().toPath(),
+ Path.of("./src/test/resources/xml-original/DF-53_S_PRC1604240915_1.xml")))
+ .isEqualTo(-1L);
+ } catch (IOException e) {
+ fail("File comparison failed!");
+ }
+ }
+
+ @Test
+ void process_shouldWriteSDf54ToXMLFile() {
+ DF54ObjectTag expectedObjectTag = new DF54ObjectTag();
+ expectedObjectTag.setSegType("test1");
+ expectedObjectTag.setDocType("test2");
+ expectedObjectTag.setDocnmRef("test3");
+ expectedObjectTag.setDocnmprev("test4");
+ expectedObjectTag.setSbankcode("test5");
+ expectedObjectTag.setcAccDeb("test6");
+ expectedObjectTag.setSbanknam1("test7");
+ expectedObjectTag.setRbankcode("test8");
+ expectedObjectTag.setcAccCred("test9");
+ expectedObjectTag.setRbanknam1("test10");
+ expectedObjectTag.setOpType("test11");
+ expectedObjectTag.setOpOrder("test12");
+ expectedObjectTag.setPayDate(LocalDate.parse("2024-03-14"));
+ expectedObjectTag.setPayVal("test13");
+ expectedObjectTag.setSumDeb("test14");
+ expectedObjectTag.setSclientn1("test15");
+ expectedObjectTag.setInnDeb("test16");
+ expectedObjectTag.setKppDeb("test17");
+ expectedObjectTag.setAccDeb("test18");
+ expectedObjectTag.setRclientn1("test19");
+ expectedObjectTag.setInnCred("test20");
+ expectedObjectTag.setKppCred("test21");
+ expectedObjectTag.setAccKr1("test22");
+ expectedObjectTag.setSpecif1("test23");
+ expectedObjectTag.setSendType("test24");
+ expectedObjectTag.setDocResult("test25");
+ expectedObjectTag.setDocNum("test26");
+ expectedObjectTag.setDocDate(LocalDate.parse("2024-03-15"));
+ expectedObjectTag.setValueDate(LocalDate.parse("2024-03-16"));
+ expectedObjectTag.setSwiftBen("test27");
+ expectedObjectTag.setSwiftInt("test28");
+
+ ParentDocTag expectedParentDocTag = new ParentDocTag();
+ expectedParentDocTag.setParentId("");
+
+ DocumentTag expectedDocumentTag = new DocumentTag();
+ expectedDocumentTag.setMessageId("");
+ expectedDocumentTag.setMessageType("DF54");
+ expectedDocumentTag.setMessageName("");
+ expectedDocumentTag.setMessageDate(LocalDate.parse("2024-03-14"));
+ expectedDocumentTag.setMessageTime(LocalTime.parse("09:15:31"));
+ expectedDocumentTag.setSender("");
+ expectedDocumentTag.setReceiver("");
+ expectedDocumentTag.setParentDoc(expectedParentDocTag);
+ expectedDocumentTag.setObjects(List.of(expectedObjectTag));
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF54);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-54_S_PRC1604240915_1.xml"));
+ actualResultContainer.setDocumentTag(expectedDocumentTag);
+
+ StageResult stageResult = writeXMLFile.process(actualResultContainer);
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+
+ try {
+ Assertions.assertThat(Files.mismatch(actualResultContainer.getFileForExport().toPath(),
+ Path.of("./src/test/resources/xml-original/DF-54_S_PRC1604240915_1.xml")))
+ .isEqualTo(-1L);
+ } catch (IOException e) {
+ fail("File comparison failed!");
+ }
+ }
+
+ @Test
+ void process_shouldWriteSDf56ToXMLFile() {
+ DF56ObjectTag expectedObjectTag = new DF56ObjectTag();
+ expectedObjectTag.setNumber("test1");
+ expectedObjectTag.setStartDatetime(LocalDateTime.parse("2024-03-14T09:03:11"));
+ expectedObjectTag.setEndDatetime(LocalDateTime.parse("2024-04-15T11:03:11"));
+ expectedObjectTag.setAccount("test4");
+ expectedObjectTag.setDeal("test5");
+ expectedObjectTag.setStartUnixtime(expectedObjectTag.getStartDatetime().atZone(ZoneId.systemDefault()).toEpochSecond());
+ expectedObjectTag.setEndUnixtime(expectedObjectTag.getEndDatetime().atZone(ZoneId.systemDefault()).toEpochSecond());
+
+ ParentDocTag expectedParentDocTag = new ParentDocTag();
+ expectedParentDocTag.setParentId("");
+
+ DocumentTag expectedDocumentTag = new DocumentTag();
+ expectedDocumentTag.setMessageId("");
+ expectedDocumentTag.setMessageType("DF56");
+ expectedDocumentTag.setMessageName("");
+ expectedDocumentTag.setMessageDate(LocalDate.parse("2024-03-14"));
+ expectedDocumentTag.setMessageTime(LocalTime.parse("09:15:31"));
+ expectedDocumentTag.setSender("");
+ expectedDocumentTag.setReceiver("");
+ expectedDocumentTag.setParentDoc(expectedParentDocTag);
+ expectedDocumentTag.setObjects(List.of(expectedObjectTag));
+
+ ResultContainer actualResultContainer = new ResultContainer(Table.S_DF56);
+ actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-56_S_PRC1604240915_1.xml"));
+ actualResultContainer.setDocumentTag(expectedDocumentTag);
+
+ StageResult stageResult = writeXMLFile.process(actualResultContainer);
+ Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
+
+ try {
+ Assertions.assertThat(Files.mismatch(actualResultContainer.getFileForExport().toPath(),
+ Path.of("./src/test/resources/xml-original/DF-56_S_PRC1604240915_1.xml")))
+ .isEqualTo(-1L);
+ } catch (IOException e) {
+ fail("File comparison failed!");
+ }
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/xml-exporter/src/test/resources/application.properties b/clearing-parent/xml-exporter/src/test/resources/application.properties
new file mode 100644
index 000000000..ed48caa14
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/resources/application.properties
@@ -0,0 +1,32 @@
+spring.main.web-application-type=none
+
+export-xml-service.hazelcast.cluster-members=127.0.0.1:5701
+export-xml-service.hazelcast.login=dev
+export-xml-service.hazelcast.password=dev-pass
+
+export-xml-service.common.encoding=cp866
+export-xml-service.common.threads-count=10
+
+export-xml-service.store.local-temp-dir=D:\\docs and T3\\clearing\\xml\\
+# код валюты должен быть в верхнем регистре, например для рублей - "RUB" (*.RUB=export/rub/).RUB=export/rub/
+export-xml-service.store.out-pay-val-dir.RUB=export/rub/
+export-xml-service.store.out-pay-val-dir.EUR=export/eur/
+export-xml-service.store.user:tester
+export-xml-service.store.password=password
+export-xml-service.store.server-ip=localhost
+export-xml-service.store.server-port=2222
+
+export-xml-service.kafka-consumer.bootstrap-servers=localhost:9092
+export-xml-service.kafka-consumer.group-id=dev-group-balance-service
+export-xml-service.kafka-consumer.enable-auto-commit=false
+export-xml-service.kafka-consumer.session-timeout-ms=30000
+export-xml-service.kafka-consumer.auto-offset-reset=latest
+export-xml-service.kafka-consumer.linger-ms=1
+export-xml-service.kafka-consumer.buffer-memory=33554432
+
+export-xml-service.kafka-producer.bootstrap-servers=localhost:9092
+export-xml-service.kafka-producer.acks=all
+export-xml-service.kafka-producer.retries=0
+export-xml-service.kafka-producer.batch-size=16384
+export-xml-service.kafka-producer.linger-ms=1
+export-xml-service.kafka-producer.buffer-memory=33554432
diff --git a/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-02_S_PRC1604240915_1.xml b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-02_S_PRC1604240915_1.xml
new file mode 100644
index 000000000..090d5af81
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-02_S_PRC1604240915_1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-03_S_PRC1604240915_1.xml b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-03_S_PRC1604240915_1.xml
new file mode 100644
index 000000000..565b4b9ec
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-03_S_PRC1604240915_1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-05_S_PRC1604240915_1.xml b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-05_S_PRC1604240915_1.xml
new file mode 100644
index 000000000..84bc8c61c
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-05_S_PRC1604240915_1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-07_S_PRC1604240915_1.xml b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-07_S_PRC1604240915_1.xml
new file mode 100644
index 000000000..fc452f087
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-07_S_PRC1604240915_1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-51_S_PRC1604240915_1.xml b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-51_S_PRC1604240915_1.xml
new file mode 100644
index 000000000..98aad253f
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-51_S_PRC1604240915_1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-53_S_PRC1604240915_1.xml b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-53_S_PRC1604240915_1.xml
new file mode 100644
index 000000000..42dfacf8d
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-53_S_PRC1604240915_1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-54_S_PRC1604240915_1.xml b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-54_S_PRC1604240915_1.xml
new file mode 100644
index 000000000..bda341726
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-54_S_PRC1604240915_1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-56_S_PRC1604240915_1.xml b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-56_S_PRC1604240915_1.xml
new file mode 100644
index 000000000..091c8c513
--- /dev/null
+++ b/clearing-parent/xml-exporter/src/test/resources/xml-original/DF-56_S_PRC1604240915_1.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/clearing-parent/xml-exporter/src/test/resources/xml/.gitkeep b/clearing-parent/xml-exporter/src/test/resources/xml/.gitkeep
new file mode 100644
index 000000000..e69de29bb