Write to XML moved to a separate class from ExportFromHazelcast, xml-exporter ExportFromHazelcast and WriteXMLFile steps tests added

This commit is contained in:
Ivan Nikolaev-Axenov 2024-06-18 14:24:59 +03:00
parent 2588000456
commit 5b1d672712
22 changed files with 1080 additions and 83 deletions

View file

@ -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<Table, ObjectTag<? extends SpcexObjectBase>> getMapOfTables() {

View file

@ -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;
}
}

View file

@ -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<SDf03> {
@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<SDf03> {
@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")

View file

@ -30,7 +30,7 @@ public class DF05ObjectTag extends ObjectTag<SDf05> {
@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);

View file

@ -10,13 +10,13 @@ import org.springframework.format.annotation.DateTimeFormat;
import ru.clearing.classes.statics.data.sdf.SDf51;
public class DF51ObjectTag extends ObjectTag<SDf51> {
@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;

View file

@ -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<SDf54> {
@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<SDf54> {
@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<SDf54> {
@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<SDf54> {
@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")

View file

@ -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<Table, ObjectTag<? extends SpcexObjectBase>> objectTagMap;
private final Supplier<KafkaSender> kafkaSender;
public ExportFromHazelcast(ExportXMLServiceSettings settings,
ImdgProvider imdgProvider,
public ExportFromHazelcast(ImdgProvider imdgProvider,
SFTPConfig.XmlGateway gateway,
@Qualifier("xmlMapper") XmlMapper xmlMapper,
@Qualifier("mapOfTable") Map<Table, ObjectTag<? extends SpcexObjectBase>> objectTagMap,
Supplier<KafkaSender> 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<String, Long> queryParams = Map.of("generationId", resultContainer.getGroupId());
tableRows = map.getCollectionObjectsByFieldValues(queryParams);
} else {
tableRows = map.getAllValues();
Collection<? extends SpcexObjectBase> tableRows;
if (resultContainer.getGroupId() != null) {
Map<String, Long> 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<SpcexObjectBase>(tableRows);
((ArrayList<SpcexObjectBase>) 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<SpcexObjectBase>(tableRows);
((ArrayList<SpcexObjectBase>) 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);
}
}

View file

@ -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<SftpFileInfo> files = new ArrayList<>();
log.trace("Get files from SFTP paths: {}", settings.getStore().getOutPayValDir().values());

View file

@ -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;
}
}

View file

@ -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<String, Object> 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);

View file

@ -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> producerRecord;
@SpyBean
private MockProducer<String, Object> producer;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> 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<SDf02> 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<SDf03> 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<SDf05> 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<SDf07> 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<SDf51> 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<SDf53> 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<SDf54> 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<SDf56> 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());
}
}

View file

@ -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!");
}
}
}

View file

@ -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

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT MESSAGEID="" MESSAGETYPE="DF02" MESSAGENAME="" MESSAGEDATE="2024-03-14" MESSAGETIME="09:15:31" SENDER="" RECEIVER="">
<PARENTDOC PARENTID=""/>
<OBJECTS>
<OBJECT CURR_CODE="test1" ACCOUNT="test2" REMAINDER="test3" DEAL="test4" ACC_CODE="test5" DAT="2024-03-14" MARKET="test6" ACC_NAME="test7" ACC_TYPE="test8" SUMENGAGE="test9" SUMUNBLOK="test10" FILE_TYPE="test11"/>
</OBJECTS>
</DOCUMENT>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT MESSAGEID="" MESSAGETYPE="DF03" MESSAGENAME="" MESSAGEDATE="2024-03-14" MESSAGETIME="09:15:31" SENDER="" RECEIVER="">
<PARENTDOC PARENTID=""/>
<OBJECTS>
<OBJECT SEG_TYPE="test1" DOC_TYPE="test2" DOCNM_REF="test3" DOCNMPREV="test4" C_ACC_DEB="test5" SBANKNAM="test6" C_ACC_CRED="test7" RBANKNAM="test8" PAY_DATE="2024-03-14" PAY_VAL="test9" SUM_DEB="test10" SPECIF_1="test11" IMP_RESULT="test12"/>
</OBJECTS>
</DOCUMENT>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT MESSAGEID="" MESSAGETYPE="DF05" MESSAGENAME="" MESSAGEDATE="2024-03-14" MESSAGETIME="09:15:31" SENDER="" RECEIVER="">
<PARENTDOC PARENTID=""/>
<OBJECTS>
<OBJECT TP="10" DT="2024-03-14" TM="09:22:12" PR="test2"/>
</OBJECTS>
</DOCUMENT>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT MESSAGEID="" MESSAGETYPE="DF07" MESSAGENAME="" MESSAGEDATE="2024-03-14" MESSAGETIME="09:15:31" SENDER="" RECEIVER="">
<PARENTDOC PARENTID=""/>
<OBJECTS>
<OBJECT ACCOUNT="test1" SUM="10" MARKET="test3" TYPE="test4" DEAL="test5" CLIENTN="test6" INN="test7" BIC="test8" SPEC="test9" NUMBER="2" DOC_NUM="test11" DOC_DATE="2024-03-14" PAY_VAL="test12"/>
</OBJECTS>
</DOCUMENT>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT MESSAGEID="" MESSAGETYPE="DF51" MESSAGENAME="" MESSAGEDATE="2024-03-14" MESSAGETIME="09:15:31" SENDER="" RECEIVER="">
<PARENTDOC PARENTID=""/>
<OBJECTS>
<OBJECT NUMBER="1234" UNIXTIME="1710396191" DATETIME="2024-03-14T09:03:11"/>
</OBJECTS>
</DOCUMENT>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT MESSAGEID="" MESSAGETYPE="DF53" MESSAGENAME="" MESSAGEDATE="2024-03-14" MESSAGETIME="09:15:31" SENDER="" RECEIVER="">
<PARENTDOC PARENTID=""/>
<OBJECTS>
<OBJECT ACCOUNT="test1" ACC_NAME="test2" DEAL="test3" DATE="2024-03-14" STATUS="1" ACC_TYPE="test4" RESULT="test5"/>
</OBJECTS>
</DOCUMENT>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT MESSAGEID="" MESSAGETYPE="DF54" MESSAGENAME="" MESSAGEDATE="2024-03-14" MESSAGETIME="09:15:31" SENDER="" RECEIVER="">
<PARENTDOC PARENTID=""/>
<OBJECTS>
<OBJECT SEG_TYPE="test1" DOC_TYPE="test2" DOCNM_REF="test3" DOCNMPREV="test4" SBANKCODE="test5" C_ACC_DEB="test6" SBANKNAM="test7" RBANKCODE="test8" C_ACC_CRED="test9" RBANKNAM="test10" OP_TYPE="test11" OP_ORDER="test12" PAY_DATE="2024-03-14" PAY_VAL="test13" SUM_DEB="test14" SCLIENTN="test15" INN_DEB="test16" KPP_DEB="test17" ACC_DEB="test18" RCLIENTN="test19" INN_CRED="test20" KPP_CRED="test21" ACC_KR_1="test22" SPECIF_1="test23" SEND_TYPE="test24" DOC_RESULT="test25" DOC_NUM="test26" DOC_DATE="2024-03-15" VALUE_DATE="2024-03-16" SWIFT_BEN="test27" SWIFT_INT="test28"/>
</OBJECTS>
</DOCUMENT>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<DOCUMENT MESSAGEID="" MESSAGETYPE="DF56" MESSAGENAME="" MESSAGEDATE="2024-03-14" MESSAGETIME="09:15:31" SENDER="" RECEIVER="">
<PARENTDOC PARENTID=""/>
<OBJECTS>
<OBJECT NUMBER="test1" SUNIXTIME="1710396191" SDATETIME="2024-03-14T09:03:11" EUNIXTIME="1713168191" EDATETIME="2024-04-15T11:03:11" ACCOUNT="test4" DEAL="test5"/>
</OBJECTS>
</DOCUMENT>