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 267c4076f..4ee4d443d 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 @@ -1,5 +1,6 @@ package ru.spcex.clearing.xml.exporter.config; +import com.ctc.wstx.api.WstxOutputProperties; import com.ctc.wstx.stax.WstxInputFactory; import com.ctc.wstx.stax.WstxOutputFactory; import com.fasterxml.jackson.databind.SerializationFeature; @@ -57,6 +58,7 @@ public class XMLExporterConfig { xmlMapper.registerModule(new JavaTimeModule()); xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true); xmlMapper.configure(SerializationFeature.INDENT_OUTPUT, true); + xmlMapper.getFactory().getXMLOutputFactory().setProperty(WstxOutputProperties.P_USE_DOUBLE_QUOTES_IN_XML_DECL, true); return xmlMapper; } diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/config/settings/ExportXMLServiceSettings.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/config/settings/ExportXMLServiceSettings.java index 52ac3bca9..c7dd58726 100644 --- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/config/settings/ExportXMLServiceSettings.java +++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/config/settings/ExportXMLServiceSettings.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.xml.exporter.config.settings; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings; @@ -11,13 +12,23 @@ import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; @PropertySource("file:${spring.config.location}/application.properties") @ConfigurationProperties("export-xml-service") public class ExportXMLServiceSettings { + @NestedConfigurationProperty private HazelcastClientParams hazelcast; + @NestedConfigurationProperty private KafkaConsumerSettings kafkaConsumer; + @NestedConfigurationProperty private KafkaProducerSettings kafkaProducer; + @NestedConfigurationProperty private Common common; + @NestedConfigurationProperty private Store store; + @NestedConfigurationProperty private Cron cron; + private String section; + private String sender; + private String receiver; + public HazelcastClientParams getHazelcast() { return hazelcast; } @@ -65,4 +76,28 @@ public class ExportXMLServiceSettings { public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { this.kafkaProducer = kafkaProducer; } + + public String getSection() { + return section; + } + + public void setSection(String section) { + this.section = section; + } + + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public String getReceiver() { + return receiver; + } + + public void setReceiver(String receiver) { + this.receiver = receiver; + } } 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 b2b3a92b6..a8a84c88a 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 @@ -17,10 +17,12 @@ public class ResultContainer { private LocalDateTime registrationDateTime; private String memberCode; private DocumentTag documentTag; + private String section; - public ResultContainer(Table tableForExport) { + public ResultContainer(Table tableForExport, String section) { this.tableForExport = tableForExport; this.uuid = UUID.randomUUID(); + this.section = section; } public Table getTableForExport() { @@ -94,4 +96,12 @@ public class ResultContainer { public void setDocumentTag(DocumentTag documentTag) { this.documentTag = documentTag; } + + public String getSection() { + return section; + } + + public void setSection(String section) { + this.section = section; + } } diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/enums/FilenameTemplate.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/enums/FilenameTemplate.java index 58f406480..7d415ea43 100644 --- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/enums/FilenameTemplate.java +++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/enums/FilenameTemplate.java @@ -1,6 +1,5 @@ package ru.spcex.clearing.xml.exporter.logic.data.enums; -import static ru.spcex.clearing.xml.exporter.logic.stages.PrepareXMLFile.SECTION; import static ru.spcex.clearing.xml.exporter.logic.stages.PrepareXMLFile.outDir; import java.io.File; @@ -46,7 +45,7 @@ public enum FilenameTemplate { name.substring(i); } }, - df_section_dateTime_counter_mamberCode { + df_section_dateTime_counter_memberCode { @Override public String getFileName(ResultContainer resultContainer, List files) { return appendSection(resultContainer) @@ -63,7 +62,7 @@ public enum FilenameTemplate { result.append(File.separator); result.append(resultContainer.getTableForExport().getFilePrefix().toUpperCase(Locale.ROOT)); result.append('_'); - result.append(SECTION); + result.append(resultContainer.getSection()); return result; } diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/enums/Sender.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/enums/Sender.java new file mode 100644 index 000000000..319ae9bf7 --- /dev/null +++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/enums/Sender.java @@ -0,0 +1,16 @@ +package ru.spcex.clearing.xml.exporter.logic.data.enums; + +public enum Sender { + LCC("ЛЦК"), + SPVB("СПВБ"); + + Sender(String text) { + this.text = text; + } + + private String text; + + public String getText() { + return text; + } +} diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/DocumentTag.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/DocumentTag.java index 2adc35988..2109a1ef6 100644 --- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/DocumentTag.java +++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/DocumentTag.java @@ -33,7 +33,7 @@ public class DocumentTag { @JacksonXmlProperty(isAttribute = true, localName = "SENDER") private String sender; - @JacksonXmlProperty(isAttribute = true, localName = "RECEIVER") + @JacksonXmlProperty(isAttribute = true, localName = "RECIEVER") private String receiver; @JacksonXmlProperty(localName = "PARENTDOC") diff --git a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF56ObjectTag.java b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF56ObjectTag.java index 705da1f38..3d930d78f 100644 --- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF56ObjectTag.java +++ b/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/data/tags/objects/DF56ObjectTag.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; -import java.time.format.DateTimeFormatter; import java.util.Objects; import org.springframework.format.annotation.DateTimeFormat; import ru.clearing.classes.statics.data.sdf.SDf56; @@ -48,8 +47,8 @@ public class DF56ObjectTag extends ObjectTag { this.startDatetime = Instant.ofEpochMilli(this.startUnixtime).atZone(ZoneId.systemDefault()).toLocalDateTime(); this.endUnixtime = Long.valueOf(entity.getEnd_datetime()); this.endDatetime = Instant.ofEpochMilli(this.endUnixtime).atZone(ZoneId.systemDefault()).toLocalDateTime(); - this.account = entity.getAccount(); - this.deal = entity.getDeal(); + this.account = entity.getAccount() == null ? "" : entity.getAccount(); + this.deal = entity.getDeal() == null ? "" : entity.getDeal(); } @Override 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 c1111881e..6ff9a7faf 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,6 +1,11 @@ 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.io.IOException; import java.time.LocalDate; import java.time.LocalTime; import java.util.ArrayList; @@ -30,6 +35,7 @@ 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.Sender; 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; @@ -49,6 +55,7 @@ public class ExportFromHazelcast { private final Map> objectTagMap; private final Supplier kafkaSender; private final ExportXMLServiceSettings settings; + private final XmlMapper xmlMapper; private final Imdg sDf01Imdg; private final Imdg sDf52Imdg; @@ -58,7 +65,8 @@ public class ExportFromHazelcast { SFTPConfig.XmlGateway gateway, @Qualifier("mapOfTable") Map> objectTagMap, Supplier kafkaSender, - ExportXMLServiceSettings settings) { + ExportXMLServiceSettings settings, + XmlMapper xmlMapper) { this.imdgProvider = imdgProvider; this.gateway = gateway; this.objectTagMap = objectTagMap; @@ -68,6 +76,7 @@ public class ExportFromHazelcast { this.sDf01Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf01, SDf01.class); this.sDf52Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf52, SDf52.class); this.sDf06Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf06, SDf06.class); + this.xmlMapper = xmlMapper; } public StageResult process(ResultContainer resultContainer) { @@ -75,15 +84,25 @@ public class ExportFromHazelcast { Table table = Objects.requireNonNull(resultContainer.getTableForExport()); File xmlFile = Objects.requireNonNull(resultContainer.getFileForExport()); + String path; + String currency = ruCurrency; //todo: rewrite currency logic + if (CurrencyCode.isRub(currency)) { + path = settings.getStore().getOutPayValDir().get(ruCurrency); + } else { + path = settings.getStore().getOutPayValDir().get(currency); + } + DocumentTag documentTag = new DocumentTag(); ParentDocTag parentDocTag = new ParentDocTag(); + parentDocTag.setParentId(""); + // todo: Добавить данные DocumentTag'а documentTag.setMessageId(String.valueOf(resultContainer.getGroupId())); documentTag.setMessageType(table.getFilePrefix().replace("-", "")); documentTag.setMessageName(""); documentTag.setMessageDate(LocalDate.now()); documentTag.setMessageTime(LocalTime.now()); - documentTag.setSender(""); - documentTag.setReceiver(""); + documentTag.setSender(settings.getSender() != null ? Sender.valueOf(settings.getSender().toUpperCase()).getText() : ""); + documentTag.setReceiver(settings.getReceiver() != null ? settings.getReceiver() : ""); documentTag.setParentDoc(parentDocTag); Imdg map = imdgProvider.getImdg(table.getHazelcastMapName(), table.getEntityClass()); @@ -97,7 +116,19 @@ public class ExportFromHazelcast { } if (tableRows.isEmpty()) { log.info("uuid {}. Map {} is empty, generationId {}", resultContainer.getUuid(), resultContainer.getTableForExport().getHazelcastMapName(), resultContainer.getGroupId()); - return StageResult.COMPLETE; + log.debug("uuid {}, send to SFTP path \"{}\"", resultContainer.getUuid(), path); + + documentTag.setObjects(List.of()); + resultContainer.setDocumentTag(documentTag); + try { + xmlMapper.writeValue(xmlFile, documentTag); + } catch (IOException 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; + } + gateway.sendToSftp(xmlFile, path); + return StageResult.OK; } else { log.debug("uuid {}. Selected {} records from map {}, generationId {}", resultContainer.getUuid(), tableRows.size(), resultContainer.getTableForExport().getHazelcastMapName(), resultContainer.getGroupId()); @@ -120,28 +151,18 @@ public class ExportFromHazelcast { documentTag.setObjects(addObjectTags(tableRows, table)); resultContainer.setDocumentTag(documentTag); - - boolean emptyMap = tableRows.isEmpty(); - String path; - String currency = ruCurrency; //todo: rewrite currency logic - if (CurrencyCode.isRub(currency)) { - path = settings.getStore().getOutPayValDir().get(ruCurrency); - } else { - path = settings.getStore().getOutPayValDir().get(currency); + try { + xmlMapper.writeValue(xmlFile, documentTag); + } catch (IOException 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; } - 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()); - } - } else { - log.debug("uuid {}, send to SFTP path \"{}\"", resultContainer.getUuid(), path); - gateway.sendToSftp(xmlFile, path); - if (Table.S_DF02.equals(resultContainer.getTableForExport())) { - sendPairSdfRequest(resultContainer); - } + log.debug("uuid {}, send to SFTP path \"{}\"", resultContainer.getUuid(), path); + gateway.sendToSftp(xmlFile, path); + if (Table.S_DF02.equals(resultContainer.getTableForExport())) { + sendPairSdfRequest(resultContainer); } return StageResult.OK; 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 09601c0c8..a1205180d 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 @@ -25,7 +25,6 @@ import ru.spcex.clearing.xml.exporter.logic.data.enums.Table; @Component public class PrepareXMLFile implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); - public static final String SECTION = "S"; private final ExportXMLServiceSettings settings; public static String outDir; private final SFTPConfig.XmlGateway gateway; @@ -83,12 +82,12 @@ public class PrepareXMLFile implements InitializingBean { private static final Map nameTemplates = new EnumMap<>(Table.class); static { - nameTemplates.put(Table.S_DF02, FilenameTemplate.df_section_sameName); + nameTemplates.put(Table.S_DF02, FilenameTemplate.df_section_dateTime_counter); // df_section_sameName nameTemplates.put(Table.S_DF03, FilenameTemplate.df_section_dateTime_counter); - nameTemplates.put(Table.S_DF05, FilenameTemplate.df_section_dateTime); - nameTemplates.put(Table.S_DF07, FilenameTemplate.df_section_sameName); + nameTemplates.put(Table.S_DF05, FilenameTemplate.df_section_dateTime_counter); // df_section_dateTime + nameTemplates.put(Table.S_DF07, FilenameTemplate.df_section_dateTime_counter); // df_section_sameName nameTemplates.put(Table.S_DF51, FilenameTemplate.df_section_dateTime_counter); - nameTemplates.put(Table.S_DF53, FilenameTemplate.df_section_sameName); + nameTemplates.put(Table.S_DF53, FilenameTemplate.df_section_dateTime_counter); // df_section_sameName nameTemplates.put(Table.S_DF54, FilenameTemplate.df_section_dateTime_counter); nameTemplates.put(Table.S_DF56, FilenameTemplate.df_section_dateTime_counter); } 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 deleted file mode 100644 index 78aaa12f6..000000000 --- a/clearing-parent/xml-exporter/src/main/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFile.java +++ /dev/null @@ -1,42 +0,0 @@ -package ru.spcex.clearing.xml.exporter.logic.stages; - -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.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; - -@Component -public class WriteXMLFile { - private final Logger log = LoggerFactory.getLogger(getClass()); - private final XmlMapper xmlMapper; - - public WriteXMLFile(@Qualifier("xmlMapper") XmlMapper xmlMapper) { - 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()); - - DocumentTag documentTag = Objects.requireNonNull(resultContainer.getDocumentTag()); - - log.info("DOCUMENT TAG = {}", documentTag); - try { - xmlMapper.writeValue(xmlFile, documentTag); - } 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 5c3f8ef62..6ffd447ec 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 @@ -6,6 +6,7 @@ import org.apache.kafka.clients.consumer.Consumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.StopWatch; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; @@ -20,7 +21,6 @@ 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 @@ -29,19 +29,19 @@ public class CommandService extends QueueConsumer implements InitializingBean { private final PrepareXMLFile prepareXMLFile; private final ExportFromHazelcast exportFromHazelcast; - private final WriteXMLFile writeXMLFile; private final Journal journal; + private final String section; public CommandService(Consumer kafkaQueue, PrepareXMLFile prepareXMLFile, ExportFromHazelcast exportFromHazelcast, - WriteXMLFile writeXMLFile, - Journal journal) { + Journal journal, + @Value("${export-xml-service.section:S}") String section) { super(kafkaQueue); this.prepareXMLFile = prepareXMLFile; this.exportFromHazelcast = exportFromHazelcast; - this.writeXMLFile = writeXMLFile; this.journal = journal; + this.section = section; } @Override @@ -88,7 +88,7 @@ public class CommandService extends QueueConsumer implements InitializingBean { if (tableForExport.isEmpty()) { throw new IllegalStateException(String.format("Unsupported table prefix: %s", request.getNameOfTable())); } - ResultContainer resultContainer = new ResultContainer(tableForExport.get()); + ResultContainer resultContainer = new ResultContainer(tableForExport.get(), section); resultContainer.setGroupId(request.getSdfGroupId()); resultContainer.setSourceName(request.getFileName()); runProcess(resultContainer); @@ -96,7 +96,7 @@ public class CommandService extends QueueConsumer implements InitializingBean { private void processSpecial(Table table, BaseRequest systemRequest) { SdfClearingRequest request = systemRequest.getRequestPayload(); - ResultContainer resultContainer = new ResultContainer(table); + ResultContainer resultContainer = new ResultContainer(table, section); resultContainer.setGroupId(request.getGroupId()); resultContainer.setSourceName(null); runProcess(resultContainer); @@ -105,7 +105,7 @@ public class CommandService extends QueueConsumer implements InitializingBean { private void processByLauncher(Table table, BaseRequest systemRequest) { LauncherCommandRequest request = systemRequest.getRequestPayload(); log.info("RequestId={}, LauncherCommandRequest task={}. Table {}", systemRequest.getId(), request.getTaskName(), table); - ResultContainer resultContainer = new ResultContainer(table); + ResultContainer resultContainer = new ResultContainer(table, section); resultContainer.setGroupId(null); resultContainer.setSourceName(null); runProcess(resultContainer); @@ -123,10 +123,6 @@ 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/main/resources/application.properties b/clearing-parent/xml-exporter/src/main/resources/application.properties index 8501f4510..87f754e52 100644 --- a/clearing-parent/xml-exporter/src/main/resources/application.properties +++ b/clearing-parent/xml-exporter/src/main/resources/application.properties @@ -8,7 +8,7 @@ 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/ +# \u043A\u043E\u0434 \u0432\u0430\u043B\u044E\u0442\u044B \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u0432\u0435\u0440\u0445\u043D\u0435\u043C \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 \u0434\u043B\u044F \u0440\u0443\u0431\u043B\u0435\u0439 - "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 @@ -30,3 +30,7 @@ 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 + +export-xml-service.section=S +export-xml-service.sender=LCC +export-xml-service.receiver=\u0422\u0435\u0441\u0442 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 index 2092ae22e..2db4ef189 100644 --- 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 @@ -1,8 +1,13 @@ 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.Instant; import java.time.LocalDate; import java.time.ZoneId; @@ -12,6 +17,7 @@ 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.AfterEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; @@ -93,6 +99,22 @@ class ExportFromHazelcastTest { new TestObjectCreator(hazelcastService).createUserAdmin(1000L); } + @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_shouldExportSDf02ToObjectTag() { SDf02 expectedSDf02 = new SDf02(); @@ -121,7 +143,7 @@ class ExportFromHazelcastTest { Imdg sDf01Imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf01, SDf01.class); sDf01Imdg.insert(forParentId); - ResultContainer actualResultContainer = new ResultContainer(Table.S_DF02); + ResultContainer actualResultContainer = new ResultContainer(Table.S_DF02, "S"); actualResultContainer.setGroupId(1777L); actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-02_S_PRC1604240915_1.xml")); @@ -144,6 +166,35 @@ class ExportFromHazelcastTest { Assertions.assertThat(actualObjectTag.getSumengage()).isEqualTo(expectedSDf02.getSumengage()); Assertions.assertThat(actualObjectTag.getSumunblock()).isEqualTo(expectedSDf02.getSumunblock()); Assertions.assertThat(actualObjectTag.getFileType()).isEqualTo(expectedSDf02.getFile_type()); + + 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_shouldExportEmptySDf02ToObjectTag() { + ResultContainer actualResultContainer = new ResultContainer(Table.S_DF02, "S"); + 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(); + + Assertions.assertThat(stageResult).isEqualTo(StageResult.OK); + Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF02"); + Assertions.assertThat(actualObjectTag).isEqualTo(null); + + 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 @@ -166,7 +217,7 @@ class ExportFromHazelcastTest { Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf03, SDf03.class); imdg.insert(expectedSDf03); - ResultContainer actualResultContainer = new ResultContainer(Table.S_DF03); + ResultContainer actualResultContainer = new ResultContainer(Table.S_DF03, "S"); actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-03_S_PRC1604240915_1.xml")); StageResult stageResult = exportFromHazelcast.process(actualResultContainer); @@ -187,6 +238,14 @@ class ExportFromHazelcastTest { Assertions.assertThat(actualObjectTag.getSumDeb()).isEqualTo(expectedSDf03.getSum_deb()); Assertions.assertThat(actualObjectTag.getSpecif1()).isEqualTo(expectedSDf03.getSpecif_1()); Assertions.assertThat(actualObjectTag.getImpResult()).isEqualTo(expectedSDf03.getImp_result()); + + 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 @@ -200,7 +259,7 @@ class ExportFromHazelcastTest { Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf05, SDf05.class); imdg.insert(expectedSDf05); - ResultContainer actualResultContainer = new ResultContainer(Table.S_DF05); + ResultContainer actualResultContainer = new ResultContainer(Table.S_DF05, "S"); actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-05_S_PRC1604240915_1.xml")); StageResult stageResult = exportFromHazelcast.process(actualResultContainer); @@ -212,6 +271,14 @@ class ExportFromHazelcastTest { Assertions.assertThat(actualObjectTag.getDt()).isEqualTo(expectedSDf05.getDt()); Assertions.assertThat(actualObjectTag.getTm()).isEqualTo(expectedSDf05.getTm()); Assertions.assertThat(actualObjectTag.getPr()).isEqualTo(expectedSDf05.getPr()); + + 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 @@ -242,7 +309,7 @@ class ExportFromHazelcastTest { Imdg sDf06Imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf06, SDf06.class); sDf06Imdg.insert(forParentId); - ResultContainer actualResultContainer = new ResultContainer(Table.S_DF07); + ResultContainer actualResultContainer = new ResultContainer(Table.S_DF07, "S"); actualResultContainer.setGroupId(3775L); actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-07_S_PRC1604240915_1.xml")); @@ -266,6 +333,14 @@ class ExportFromHazelcastTest { Assertions.assertThat(actualObjectTag.getDocNum()).isEqualTo(expectedSDf07.getDoc_num()); Assertions.assertThat(actualObjectTag.getDocDate().format(formatter)).isEqualTo(expectedSDf07.getDoc_date()); Assertions.assertThat(actualObjectTag.getPayVal()).isEqualTo(expectedSDf07.getPay_val()); + + 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 @@ -277,7 +352,7 @@ class ExportFromHazelcastTest { Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf51, SDf51.class); imdg.insert(expectedSDf51); - ResultContainer actualResultContainer = new ResultContainer(Table.S_DF51); + ResultContainer actualResultContainer = new ResultContainer(Table.S_DF51, "S"); actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-51_S_PRC1604240915_1.xml")); StageResult stageResult = exportFromHazelcast.process(actualResultContainer); @@ -288,6 +363,14 @@ class ExportFromHazelcastTest { Assertions.assertThat(actualObjectTag.getNumber()).isEqualTo(expectedSDf51.getNumber()); Assertions.assertThat(actualObjectTag.getUnixtime()).isEqualTo(Long.parseLong(expectedSDf51.getDatetime())); Assertions.assertThat(actualObjectTag.getDatetime()).isEqualTo(Instant.ofEpochMilli(Long.parseLong(expectedSDf51.getDatetime())).atZone(ZoneId.systemDefault()).toLocalDateTime()); + + 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 @@ -312,7 +395,7 @@ class ExportFromHazelcastTest { Imdg sDf52Imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf52, SDf52.class); sDf52Imdg.insert(forParentId); - ResultContainer actualResultContainer = new ResultContainer(Table.S_DF53); + ResultContainer actualResultContainer = new ResultContainer(Table.S_DF53, "S"); actualResultContainer.setGroupId(2776L); actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-53_S_PRC1604240915_1.xml")); @@ -330,6 +413,14 @@ class ExportFromHazelcastTest { Assertions.assertThat(actualObjectTag.getStatus()).isEqualTo(expectedSDf53.getStatus()); Assertions.assertThat(actualObjectTag.getAccType()).isEqualTo(expectedSDf53.getAccType()); Assertions.assertThat(actualObjectTag.getResult()).isEqualTo(expectedSDf53.getResult()); + + 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 @@ -370,7 +461,7 @@ class ExportFromHazelcastTest { Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf54, SDf54.class); imdg.insert(expectedSDf54); - ResultContainer actualResultContainer = new ResultContainer(Table.S_DF54); + ResultContainer actualResultContainer = new ResultContainer(Table.S_DF54, "S"); actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-54_S_PRC1604240915_1.xml")); StageResult stageResult = exportFromHazelcast.process(actualResultContainer); @@ -409,6 +500,14 @@ class ExportFromHazelcastTest { Assertions.assertThat(actualObjectTag.getValueDate().format(formatter)).isEqualTo(expectedSDf54.getValue_date()); Assertions.assertThat(actualObjectTag.getSwiftBen()).isEqualTo(expectedSDf54.getSwift_ben()); Assertions.assertThat(actualObjectTag.getSwiftInt()).isEqualTo(expectedSDf54.getSwift_int()); + + 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 @@ -423,7 +522,7 @@ class ExportFromHazelcastTest { Imdg imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf56, SDf56.class); imdg.insert(expectedSDf56); - ResultContainer actualResultContainer = new ResultContainer(Table.S_DF56); + ResultContainer actualResultContainer = new ResultContainer(Table.S_DF56, "S"); actualResultContainer.setFileForExport(new File("./src/test/resources/xml/DF-56_S_PRC1604240915_1.xml")); StageResult stageResult = exportFromHazelcast.process(actualResultContainer); @@ -438,5 +537,13 @@ class ExportFromHazelcastTest { Assertions.assertThat(actualObjectTag.getEndDatetime()).isEqualTo(Instant.ofEpochMilli(Long.parseLong(expectedSDf56.getEnd_datetime())).atZone(ZoneId.systemDefault()).toLocalDateTime()); Assertions.assertThat(actualObjectTag.getAccount()).isEqualTo(expectedSDf56.getAccount()); Assertions.assertThat(actualObjectTag.getDeal()).isEqualTo(expectedSDf56.getDeal()); + + 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/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 deleted file mode 100644 index 457dfa6e3..000000000 --- a/clearing-parent/xml-exporter/src/test/java/ru/spcex/clearing/xml/exporter/logic/stages/WriteXMLFileTest.java +++ /dev/null @@ -1,433 +0,0 @@ -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 index ed48caa14..03c6c6e6b 100644 --- a/clearing-parent/xml-exporter/src/test/resources/application.properties +++ b/clearing-parent/xml-exporter/src/test/resources/application.properties @@ -8,7 +8,7 @@ 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/ +# \u043A\u043E\u0434 \u0432\u0430\u043B\u044E\u0442\u044B \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0432 \u0432\u0435\u0440\u0445\u043D\u0435\u043C \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 \u0434\u043B\u044F \u0440\u0443\u0431\u043B\u0435\u0439 - "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 @@ -29,4 +29,4 @@ 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 +export-xml-service.kafka-producer.buffer-memory=33554432 \ No newline at end of file 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 index 090d5af81..1304d3431 100644 --- 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 @@ -1,7 +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 index 565b4b9ec..b20b240d8 100644 --- 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 @@ -1,5 +1,5 @@ - + 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 index 84bc8c61c..e6c54e03c 100644 --- 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 @@ -1,5 +1,5 @@ - + 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 index fc452f087..9a3af18a7 100644 --- 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 @@ -1,5 +1,5 @@ - + 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 index 98aad253f..0b54e318d 100644 --- 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 @@ -1,5 +1,5 @@ - + 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 index 42dfacf8d..cf3b9e9e3 100644 --- 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 @@ -1,5 +1,5 @@ - + 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 index bda341726..c4d8d252b 100644 --- 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 @@ -1,5 +1,5 @@ - + 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 index 091c8c513..be6cb751f 100644 --- 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 @@ -1,5 +1,5 @@ - + diff --git a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/SFTPConfig.java b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/SFTPConfig.java index eb05d8a31..1d7188a7c 100644 --- a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/SFTPConfig.java +++ b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/SFTPConfig.java @@ -31,13 +31,13 @@ public class SFTPConfig { private final Logger log = LoggerFactory.getLogger(getClass()); @Bean("sftpSessionFactorySdf") - @ConditionalOnProperty(value = "import-xml-service.process-sdf-files", havingValue = "true") + @ConditionalOnProperty(value = "import-xml-service.process-files", havingValue = "true") public SessionFactory sftpSessionFactorySdf(ImportXMLServiceSettings settings) { DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true); - factory.setHost(settings.getStoreSdf().getSftpIn().getServerIp()); - factory.setPort(settings.getStoreSdf().getSftpIn().getServerPort()); - factory.setUser(settings.getStoreSdf().getSftpIn().getUser()); - factory.setPassword(settings.getStoreSdf().getSftpIn().getPassword()); + factory.setHost(settings.getStore().getSftpIn().getServerIp()); + factory.setPort(settings.getStore().getSftpIn().getServerPort()); + factory.setUser(settings.getStore().getSftpIn().getUser()); + factory.setPassword(settings.getStore().getSftpIn().getPassword()); factory.setAllowUnknownKeys(true); return new CachingSessionFactory<>(factory); } @@ -66,7 +66,7 @@ public class SFTPConfig { } @Bean("xmlGatewaySdf") - @ConditionalOnProperty(value = "import-xml-service.process-sdf-files", havingValue = "true") + @ConditionalOnProperty(value = "import-xml-service.process-files", havingValue = "true") public AnnotationGatewayProxyFactoryBean xmlGatewaySdf() { return new AnnotationGatewayProxyFactoryBean(XmlGatewaySdf.class); } @@ -78,7 +78,7 @@ public class SFTPConfig { } @Bean("listSftpChannelSdf") - @ConditionalOnProperty(value = "import-xml-service.process-sdf-files", havingValue = "true") + @ConditionalOnProperty(value = "import-xml-service.process-files", havingValue = "true") public MessageChannel listSftpChannelSdf(@Qualifier("sftpSessionFactorySdf") SessionFactory sessionFactory, ImportXMLServiceSettings settings) { DirectChannel dc = new DirectChannel(); @@ -96,12 +96,17 @@ public class SFTPConfig { } @Bean - @ConditionalOnProperty(value = "import-xml-service.process-sdf-files", havingValue = "true") + @ConditionalOnProperty(value = "import-xml-service.process-files", havingValue = "true") @ServiceActivator(inputChannel = "listSftpChannelSdf") public MessageHandler handlerListSdf(@Qualifier("sftpSessionFactorySdf") SessionFactory sessionFactory, ImportXMLServiceSettings settings) { + String localDirLocation = settings.getStore().getSrcDir(); + if (!List.of("/", "\\").contains(localDirLocation.substring(localDirLocation.length() - 1))) { + localDirLocation += File.separator; + } + SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sessionFactory, MGET.getCommand(), null); - sftpOutboundGateway.setLocalDirectory(new File(settings.getStoreSdf().getSrcDir())); + sftpOutboundGateway.setLocalDirectory(new File(localDirLocation)); sftpOutboundGateway.setAutoCreateLocalDirectory(true); sftpOutboundGateway.setOption(AbstractRemoteFileOutboundGateway.Option.DELETE); return sftpOutboundGateway; @@ -112,8 +117,13 @@ public class SFTPConfig { @ServiceActivator(inputChannel = "listSftpChannelLks") public MessageHandler handlerListLks(@Qualifier("sftpSessionFactoryLks") SessionFactory sessionFactory, ImportXMLServiceSettings settings) { + String localDirLocation = settings.getStore().getSrcDir(); + if (!List.of("/", "\\").contains(localDirLocation.substring(localDirLocation.length() - 1))) { + localDirLocation += File.separator; + } + SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sessionFactory, MGET.getCommand(), null); - sftpOutboundGateway.setLocalDirectory(new File(settings.getStoreLks().getSrcDir())); + sftpOutboundGateway.setLocalDirectory(new File(localDirLocation)); sftpOutboundGateway.setAutoCreateLocalDirectory(true); sftpOutboundGateway.setOption(AbstractRemoteFileOutboundGateway.Option.DELETE); return sftpOutboundGateway; diff --git a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/SFTPMockConfig.java b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/SFTPMockConfig.java index 4d3421c79..019d3b1e4 100644 --- a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/SFTPMockConfig.java +++ b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/SFTPMockConfig.java @@ -12,7 +12,7 @@ import org.springframework.context.annotation.Profile; @Configuration public class SFTPMockConfig { @Bean("xmlGatewaySdf") - @ConditionalOnProperty(value = "import-xml-service.process-sdf-files", havingValue = "true") + @ConditionalOnProperty(value = "import-xml-service.process-files", havingValue = "true") public SFTPConfig.XmlGatewaySdf xmlGatewaySdf(){ return new XGatewaySdf(); } diff --git a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/XMLImporterConfig.java b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/XMLImporterConfig.java index bbde9098d..d1507b679 100644 --- a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/XMLImporterConfig.java +++ b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/XMLImporterConfig.java @@ -60,7 +60,7 @@ public class XMLImporterConfig { } @Bean("mapOfTable") - @ConditionalOnProperty(value = "import-xml-service.process-sdf-files", havingValue = "true") + @ConditionalOnProperty(value = "import-xml-service.process-files", havingValue = "true") public Map> getMapOfTables() { Map> map = new HashMap<>(); map.put(ETable.DF_01, (ImdgHazelcast) hazelcastService.getImdg(IMDGDistributedNames.Map_SDf01, SDf01.class)); diff --git a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/settings/ImportXMLServiceSettings.java b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/settings/ImportXMLServiceSettings.java index 121f2eb40..25c4a5482 100644 --- a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/settings/ImportXMLServiceSettings.java +++ b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/config/settings/ImportXMLServiceSettings.java @@ -20,7 +20,7 @@ public class ImportXMLServiceSettings { private KafkaConsumerSettings kafkaConsumer; @NestedConfigurationProperty - private StoreSettings storeSdf; + private StoreSettings store; @NestedConfigurationProperty private StoreSettings storeLks; @@ -29,7 +29,7 @@ public class ImportXMLServiceSettings { @NestedConfigurationProperty private Cron cron; - private boolean processSdfFiles; + private boolean processFiles; private boolean processLksFiles; public HazelcastClientParams getHazelcast() { @@ -56,12 +56,12 @@ public class ImportXMLServiceSettings { this.kafkaConsumer = kafkaConsumer; } - public StoreSettings getStoreSdf() { - return storeSdf; + public StoreSettings getStore() { + return store; } - public void setStoreSdf(StoreSettings storeSdf) { - this.storeSdf = storeSdf; + public void setStore(StoreSettings store) { + this.store = store; } public StoreSettings getStoreLks() { @@ -88,12 +88,12 @@ public class ImportXMLServiceSettings { this.cron = cron; } - public boolean isProcessSdfFiles() { - return processSdfFiles; + public boolean isProcessFiles() { + return processFiles; } - public void setProcessSdfFiles(boolean processSdfFiles) { - this.processSdfFiles = processSdfFiles; + public void setProcessFiles(boolean processFiles) { + this.processFiles = processFiles; } public boolean isProcessLksFiles() { diff --git a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/logic/data/tags/sdf/DocumentTag.java b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/logic/data/tags/sdf/DocumentTag.java index 214f71321..6da8a4e9a 100644 --- a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/logic/data/tags/sdf/DocumentTag.java +++ b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/logic/data/tags/sdf/DocumentTag.java @@ -33,7 +33,7 @@ public class DocumentTag implements ru.spcex.clearing.xml.importer.logic.data.ta @JacksonXmlProperty(isAttribute = true, localName = "SENDER") private String sender; - @JacksonXmlProperty(isAttribute = true, localName = "RECEIVER") + @JacksonXmlProperty(isAttribute = true, localName = "RECIEVER") private String receiver; @JacksonXmlProperty(localName = "PARENTDOC") diff --git a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/logic/steps/ChangeDirOfFileStage.java b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/logic/steps/ChangeDirOfFileStage.java index b54918397..327e80c3a 100644 --- a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/logic/steps/ChangeDirOfFileStage.java +++ b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/logic/steps/ChangeDirOfFileStage.java @@ -30,16 +30,16 @@ public class ChangeDirOfFileStage { log.info("uuid {}. Stage: Change directory of file", resultContainer.getUuid()); File srcDir = new File(resultContainer.getXmlTable().getFileType().equals(FileType.SDF) ? - settings.getStoreSdf().getSrcDir() : + settings.getStore().getSrcDir() : settings.getStoreLks().getSrcDir()); File outDir; if (resultContainer.getLastStageStatus().equals(StageResult.ERROR)) { outDir = new File(resultContainer.getXmlTable().getFileType().equals(FileType.SDF) ? - settings.getStoreSdf().getOutDirError() : + settings.getStore().getOutDirError() : settings.getStoreLks().getOutDirError()); } else { outDir = new File(resultContainer.getXmlTable().getFileType().equals(FileType.SDF) ? - settings.getStoreSdf().getOutDir() : + settings.getStore().getOutDir() : settings.getStoreLks().getOutDir()); } File xmlFile = resultContainer.getXmlFilePath(); diff --git a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/services/FileChecker.java b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/services/FileChecker.java index 8f602b73c..eaec96429 100644 --- a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/services/FileChecker.java +++ b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/services/FileChecker.java @@ -12,6 +12,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.stream.Stream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,12 +27,12 @@ import ru.spcex.platform.utils.log.ExceptionUtils; public class FileChecker { private final Logger log = LoggerFactory.getLogger(this.getClass()); private final ImportXMLServiceSettings settings; - private final SFTPConfig.XmlGatewaySdf gatewaySdf; - private final SFTPConfig.XmlGatewayLks gatewayLks; + private final Optional gatewaySdf; + private final Optional gatewayLks; public FileChecker(ImportXMLServiceSettings settings, - SFTPConfig.XmlGatewaySdf gatewaySdf, - SFTPConfig.XmlGatewayLks gatewayLks) { + Optional gatewaySdf, + Optional gatewayLks) { this.settings = settings; this.gatewaySdf = gatewaySdf; this.gatewayLks = gatewayLks; @@ -42,15 +43,15 @@ public class FileChecker { List srcDir = new ArrayList<>(); if (specificTable == null) { - if (settings.isProcessSdfFiles()) { - srcDir.add(settings.getStoreSdf().getSrcDir()); + if (settings.isProcessFiles()) { + srcDir.add(settings.getStore().getSrcDir()); } if (settings.isProcessLksFiles()) { srcDir.add(settings.getStoreLks().getSrcDir()); } } else { srcDir.add(specificTable.getFileType().equals(FileType.SDF) ? - settings.getStoreSdf().getSrcDir() : + settings.getStore().getSrcDir() : settings.getStoreLks().getSrcDir()); } @@ -90,7 +91,7 @@ public class FileChecker { } public void checkAndLoadSFTP() { - if (settings.isProcessSdfFiles() && (settings.getStoreSdf().getSftpIn().getSftpSrcPayValDir() == null || settings.getStoreSdf().getSftpIn().getSftpSrcPayValDir().isEmpty())) { + if (settings.isProcessFiles() && (settings.getStore().getSftpIn().getSftpSrcPayValDir() == null || settings.getStore().getSftpIn().getSftpSrcPayValDir().isEmpty())) { log.error("No SFTP scanning directories, need will be adding setting like 'import-xml-service.store-sdf.sftp-in.sftp-src-pay-val-dir.VAL=/VAL' and restart app"); return; } @@ -100,19 +101,27 @@ public class FileChecker { } List files = new ArrayList<>(); - if (settings.isProcessSdfFiles()) { - log.trace("Load from SFTP paths: {}", settings.getStoreSdf().getSftpIn().getSftpSrcPayValDir().values()); - for (String path : settings.getStoreSdf().getSftpIn().getSftpSrcPayValDir().values()) { - files.addAll(gatewaySdf.listFiles(path)); - } + if (settings.isProcessFiles()) { + log.trace("Load from SFTP paths: {}", settings.getStore().getSftpIn().getSftpSrcPayValDir().values()); + + gatewaySdf.ifPresent(gateway -> { + for (String path : settings.getStore().getSftpIn().getSftpSrcPayValDir().values()) { + files.addAll(gateway.listFiles(path)); + } + }); + if (!files.isEmpty()) log.info("Loaded from SFTP SDF files count={}", files.size()); } if (settings.isProcessLksFiles()) { log.trace("Load from SFTP paths: {}", settings.getStoreLks().getSftpIn().getSftpSrcPayValDir().values()); - for (String path : settings.getStoreLks().getSftpIn().getSftpSrcPayValDir().values()) { - files.addAll(gatewayLks.listFiles(path)); - } + + gatewayLks.ifPresent(gateway -> { + for (String path : settings.getStoreLks().getSftpIn().getSftpSrcPayValDir().values()) { + files.addAll(gateway.listFiles(path)); + } + }); + if (!files.isEmpty()) log.info("Loaded from SFTP LKS files count={}", files.size()); } diff --git a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/services/XMLImporterService.java b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/services/XMLImporterService.java index 2ee47a039..75b861db1 100644 --- a/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/services/XMLImporterService.java +++ b/clearing-parent/xml-importer/src/main/java/ru/spcex/clearing/xml/importer/services/XMLImporterService.java @@ -59,9 +59,9 @@ public class XMLImporterService { this.filesCurrentlyInProcess = new HashSet<>(); } - @Scheduled(cron = "${import-xml-service.cron.check-src-dir-cron}") + @Scheduled(cron = "${import-xml-service.scheduler.check-src-dir-cron}") public void run() { - if (settings.isProcessSdfFiles() || settings.isProcessLksFiles()) { + if (settings.isProcessFiles() || settings.isProcessLksFiles()) { processTable(null); } else { log.warn("Turn on SDF or LKS file processing in application.properties!"); diff --git a/clearing-parent/xml-importer/src/main/resources/application.properties b/clearing-parent/xml-importer/src/main/resources/application.properties index c67a3ba19..f05c92ac1 100644 --- a/clearing-parent/xml-importer/src/main/resources/application.properties +++ b/clearing-parent/xml-importer/src/main/resources/application.properties @@ -2,44 +2,44 @@ server.port=8081 server.servlet.context-path=/xml-importer spring.main.web-application-type=servlet -import-xml-service.process-sdf-files=true -import-xml-service.process-lks-files=true +import-xml-service.process-files=true +import-xml-service.process-lks-files=false -import-xml-service.cron.check-src-dir-cron=* * * * 1 ? +import-xml-service.scheduler.check-src-dir-cron=* * * * 1 ? import-xml-service.common.encoding-source=cp866 import-xml-service.common.insert-batch-size=100 import-xml-service.common.threads-count=10 # Store directories for SDf -import-xml-service.store-sdf.delete-src-files=false -import-xml-service.store-sdf.src-dir=/opt/clearing/file/xml-importer/ -import-xml-service.store-sdf.out-dir=/opt/clearing/file/xml-importer/loaded/ -import-xml-service.store-sdf.out-dir-error=/opt/clearing/file/xml-importer/error/ +import-xml-service.store.delete-src-files=false +import-xml-service.store.src-dir=/opt/clearing/file/xml-importer/ +import-xml-service.store.out-dir=/opt/clearing/file/xml-importer/loaded/ +import-xml-service.store.out-dir-error=/opt/clearing/file/xml-importer/error/ # Sftp directories and credentials for SDf -import-xml-service.store-sdf.sftp-in.sftp-src-pay-val-dir.rub=clearing_xml-importer_sftp/rub/ -import-xml-service.store-sdf.sftp-in.sftp-src-pay-val-dir.eur=clearing_xml-importer_sftp/eur/ -import-xml-service.store-sdf.sftp-in.sftp-src-dir=clearing_xml-importer_sftp -import-xml-service.store-sdf.sftp-in.user=user -import-xml-service.store-sdf.sftp-in.password=********* -import-xml-service.store-sdf.sftp-in.server-ip=127.0.0.1 -import-xml-service.store-sdf.sftp-in.server-port=22 +import-xml-service.store.sftp-in.sftp-src-pay-val-dir.rub=clearing_xml-importer_sftp/rub/ +import-xml-service.store.sftp-in.sftp-src-pay-val-dir.eur=clearing_xml-importer_sftp/eur/ +import-xml-service.store.sftp-in.sftp-src-dir=clearing_xml-importer_sftp +import-xml-service.store.sftp-in.user=user +import-xml-service.store.sftp-in.password=********* +import-xml-service.store.sftp-in.server-ip=127.0.0.1 +import-xml-service.store.sftp-in.server-port=22 -# Store directories for LKS -import-xml-service.store-lks.delete-src-files=false -import-xml-service.store-lks.src-dir=/opt/clearing/file/xml-importer/ -import-xml-service.store-lks.out-dir=/opt/clearing/file/xml-importer/loaded/ -import-xml-service.store-lks.out-dir-error=/opt/clearing/file/xml-importer/error/ - -# Sftp directories and credentials for LKS -import-xml-service.store-lks.sftp-in.sftp-src-pay-val-dir.rub=clearing_xml-importer_sftp/rub/ -import-xml-service.store-lks.sftp-in.sftp-src-pay-val-dir.eur=clearing_xml-importer_sftp/eur/ -import-xml-service.store-lks.sftp-in.sftp-src-dir=clearing_xml-importer_sftp -import-xml-service.store-lks.sftp-in.user=user -import-xml-service.store-lks.sftp-in.password=********* -import-xml-service.store-lks.sftp-in.server-ip=127.0.0.1 -import-xml-service.store-lks.sftp-in.server-port=22 +## Store directories for LKS +#import-xml-service.store-lks.delete-src-files=false +#import-xml-service.store-lks.src-dir=/opt/clearing/file/xml-importer/ +#import-xml-service.store-lks.out-dir=/opt/clearing/file/xml-importer/loaded/ +#import-xml-service.store-lks.out-dir-error=/opt/clearing/file/xml-importer/error/ +# +## Sftp directories and credentials for LKS +#import-xml-service.store-lks.sftp-in.sftp-src-pay-val-dir.rub=clearing_xml-importer_sftp/rub/ +#import-xml-service.store-lks.sftp-in.sftp-src-pay-val-dir.eur=clearing_xml-importer_sftp/eur/ +#import-xml-service.store-lks.sftp-in.sftp-src-dir=clearing_xml-importer_sftp +#import-xml-service.store-lks.sftp-in.user=user +#import-xml-service.store-lks.sftp-in.password=********* +#import-xml-service.store-lks.sftp-in.server-ip=127.0.0.1 +#import-xml-service.store-lks.sftp-in.server-port=22 # Hazelcast cluster import-xml-service.hazelcast.cluster-members=10.200.200.181:5701 diff --git a/clearing-parent/xml-importer/src/test/resources/application.properties b/clearing-parent/xml-importer/src/test/resources/application.properties index c67a3ba19..f05c92ac1 100644 --- a/clearing-parent/xml-importer/src/test/resources/application.properties +++ b/clearing-parent/xml-importer/src/test/resources/application.properties @@ -2,44 +2,44 @@ server.port=8081 server.servlet.context-path=/xml-importer spring.main.web-application-type=servlet -import-xml-service.process-sdf-files=true -import-xml-service.process-lks-files=true +import-xml-service.process-files=true +import-xml-service.process-lks-files=false -import-xml-service.cron.check-src-dir-cron=* * * * 1 ? +import-xml-service.scheduler.check-src-dir-cron=* * * * 1 ? import-xml-service.common.encoding-source=cp866 import-xml-service.common.insert-batch-size=100 import-xml-service.common.threads-count=10 # Store directories for SDf -import-xml-service.store-sdf.delete-src-files=false -import-xml-service.store-sdf.src-dir=/opt/clearing/file/xml-importer/ -import-xml-service.store-sdf.out-dir=/opt/clearing/file/xml-importer/loaded/ -import-xml-service.store-sdf.out-dir-error=/opt/clearing/file/xml-importer/error/ +import-xml-service.store.delete-src-files=false +import-xml-service.store.src-dir=/opt/clearing/file/xml-importer/ +import-xml-service.store.out-dir=/opt/clearing/file/xml-importer/loaded/ +import-xml-service.store.out-dir-error=/opt/clearing/file/xml-importer/error/ # Sftp directories and credentials for SDf -import-xml-service.store-sdf.sftp-in.sftp-src-pay-val-dir.rub=clearing_xml-importer_sftp/rub/ -import-xml-service.store-sdf.sftp-in.sftp-src-pay-val-dir.eur=clearing_xml-importer_sftp/eur/ -import-xml-service.store-sdf.sftp-in.sftp-src-dir=clearing_xml-importer_sftp -import-xml-service.store-sdf.sftp-in.user=user -import-xml-service.store-sdf.sftp-in.password=********* -import-xml-service.store-sdf.sftp-in.server-ip=127.0.0.1 -import-xml-service.store-sdf.sftp-in.server-port=22 +import-xml-service.store.sftp-in.sftp-src-pay-val-dir.rub=clearing_xml-importer_sftp/rub/ +import-xml-service.store.sftp-in.sftp-src-pay-val-dir.eur=clearing_xml-importer_sftp/eur/ +import-xml-service.store.sftp-in.sftp-src-dir=clearing_xml-importer_sftp +import-xml-service.store.sftp-in.user=user +import-xml-service.store.sftp-in.password=********* +import-xml-service.store.sftp-in.server-ip=127.0.0.1 +import-xml-service.store.sftp-in.server-port=22 -# Store directories for LKS -import-xml-service.store-lks.delete-src-files=false -import-xml-service.store-lks.src-dir=/opt/clearing/file/xml-importer/ -import-xml-service.store-lks.out-dir=/opt/clearing/file/xml-importer/loaded/ -import-xml-service.store-lks.out-dir-error=/opt/clearing/file/xml-importer/error/ - -# Sftp directories and credentials for LKS -import-xml-service.store-lks.sftp-in.sftp-src-pay-val-dir.rub=clearing_xml-importer_sftp/rub/ -import-xml-service.store-lks.sftp-in.sftp-src-pay-val-dir.eur=clearing_xml-importer_sftp/eur/ -import-xml-service.store-lks.sftp-in.sftp-src-dir=clearing_xml-importer_sftp -import-xml-service.store-lks.sftp-in.user=user -import-xml-service.store-lks.sftp-in.password=********* -import-xml-service.store-lks.sftp-in.server-ip=127.0.0.1 -import-xml-service.store-lks.sftp-in.server-port=22 +## Store directories for LKS +#import-xml-service.store-lks.delete-src-files=false +#import-xml-service.store-lks.src-dir=/opt/clearing/file/xml-importer/ +#import-xml-service.store-lks.out-dir=/opt/clearing/file/xml-importer/loaded/ +#import-xml-service.store-lks.out-dir-error=/opt/clearing/file/xml-importer/error/ +# +## Sftp directories and credentials for LKS +#import-xml-service.store-lks.sftp-in.sftp-src-pay-val-dir.rub=clearing_xml-importer_sftp/rub/ +#import-xml-service.store-lks.sftp-in.sftp-src-pay-val-dir.eur=clearing_xml-importer_sftp/eur/ +#import-xml-service.store-lks.sftp-in.sftp-src-dir=clearing_xml-importer_sftp +#import-xml-service.store-lks.sftp-in.user=user +#import-xml-service.store-lks.sftp-in.password=********* +#import-xml-service.store-lks.sftp-in.server-ip=127.0.0.1 +#import-xml-service.store-lks.sftp-in.server-port=22 # Hazelcast cluster import-xml-service.hazelcast.cluster-members=10.200.200.181:5701