From 5b1d672712dce4c1b910ba890180b2a84e39763d Mon Sep 17 00:00:00 2001 From: Ivan Nikolaev-Axenov Date: Tue, 18 Jun 2024 14:24:59 +0300 Subject: [PATCH] Write to XML moved to a separate class from ExportFromHazelcast, xml-exporter ExportFromHazelcast and WriteXMLFile steps tests added --- .../exporter/config/XMLExporterConfig.java | 2 - .../exporter/logic/data/ResultContainer.java | 10 + .../data/tags/objects/DF03ObjectTag.java | 9 + .../data/tags/objects/DF05ObjectTag.java | 2 +- .../data/tags/objects/DF51ObjectTag.java | 6 +- .../data/tags/objects/DF54ObjectTag.java | 15 + .../logic/stages/ExportFromHazelcast.java | 115 ++--- .../exporter/logic/stages/PrepareXMLFile.java | 3 +- .../exporter/logic/stages/WriteXMLFile.java | 63 +++ .../xml/exporter/services/CommandService.java | 8 + .../logic/stages/ExportFromHazelcastTest.java | 409 +++++++++++++++++ .../logic/stages/WriteXMLFileTest.java | 433 ++++++++++++++++++ .../src/test/resources/application.properties | 32 ++ .../xml-original/DF-02_S_PRC1604240915_1.xml | 7 + .../xml-original/DF-03_S_PRC1604240915_1.xml | 7 + .../xml-original/DF-05_S_PRC1604240915_1.xml | 7 + .../xml-original/DF-07_S_PRC1604240915_1.xml | 7 + .../xml-original/DF-51_S_PRC1604240915_1.xml | 7 + .../xml-original/DF-53_S_PRC1604240915_1.xml | 7 + .../xml-original/DF-54_S_PRC1604240915_1.xml | 7 + .../xml-original/DF-56_S_PRC1604240915_1.xml | 7 + .../src/test/resources/xml/.gitkeep | 0 22 files changed, 1080 insertions(+), 83 deletions(-) create mode 100644 clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFile.java create mode 100644 clearing-parent/xml-exporter/src/test/java/ru/spcex/clearing/xml/exporter/logic/stages/ExportFromHazelcastTest.java create mode 100644 clearing-parent/xml-exporter/src/test/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFileTest.java create mode 100644 clearing-parent/xml-exporter/src/test/resources/application.properties create mode 100644 clearing-parent/xml-exporter/src/test/resources/xml-original/DF-02_S_PRC1604240915_1.xml create mode 100644 clearing-parent/xml-exporter/src/test/resources/xml-original/DF-03_S_PRC1604240915_1.xml create mode 100644 clearing-parent/xml-exporter/src/test/resources/xml-original/DF-05_S_PRC1604240915_1.xml create mode 100644 clearing-parent/xml-exporter/src/test/resources/xml-original/DF-07_S_PRC1604240915_1.xml create mode 100644 clearing-parent/xml-exporter/src/test/resources/xml-original/DF-51_S_PRC1604240915_1.xml create mode 100644 clearing-parent/xml-exporter/src/test/resources/xml-original/DF-53_S_PRC1604240915_1.xml create mode 100644 clearing-parent/xml-exporter/src/test/resources/xml-original/DF-54_S_PRC1604240915_1.xml create mode 100644 clearing-parent/xml-exporter/src/test/resources/xml-original/DF-56_S_PRC1604240915_1.xml create mode 100644 clearing-parent/xml-exporter/src/test/resources/xml/.gitkeep 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 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 tableRows; - if (resultContainer.getGroupId() != null) { - Map queryParams = Map.of("generationId", resultContainer.getGroupId()); - tableRows = map.getCollectionObjectsByFieldValues(queryParams); - } else { - tableRows = map.getAllValues(); + Collection 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