diff --git a/clearing-parent/dbf-exporter/pom.xml b/clearing-parent/dbf-exporter/pom.xml
index fc2108169..249e0f012 100644
--- a/clearing-parent/dbf-exporter/pom.xml
+++ b/clearing-parent/dbf-exporter/pom.xml
@@ -21,10 +21,6 @@
org.springframework.boot
spring-boot-starter
-
- org.springframework.boot
- spring-boot-starter-web
-
org.springframework.boot
spring-boot-autoconfigure
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java
index 10261ad81..183e5148c 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java
@@ -9,6 +9,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
import ru.spcex.clearing.dbf.exporter.logic.stages.ExportFromHazelcast;
+import ru.spcex.clearing.dbf.exporter.logic.stages.Journal;
import ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile;
import ru.spcex.clearing.dbf.exporter.logic.stages.Stage;
import ru.spcex.platform.imdg.api.ImdgProvider;
@@ -50,6 +51,7 @@ public class DBFExporterConfig {
pipeline.add(context.getBean(PrepareDBFFile.class));
pipeline.add(context.getBean(ExportFromHazelcast.class));
+ pipeline.add(context.getBean(Journal.class));
return pipeline;
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/KafkaSenderConfig.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/KafkaSenderConfig.java
index 5f0a59e40..04b8b3431 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/KafkaSenderConfig.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/KafkaSenderConfig.java
@@ -38,7 +38,7 @@ public class KafkaSenderConfig {
return KafkaProducerFactory.producerFactory(kafkaSettings);
}
- @Autowired(required = false)
+// @Autowired(required = false)
@Bean("kafkaTemplate")
public KafkaTemplate kafkaTemplate(ProducerFactory pf) {
if (pf == null) {
@@ -47,7 +47,7 @@ public class KafkaSenderConfig {
return new KafkaTemplate<>(pf);
}
- @Autowired(required = false)
+// @Autowired(required = false)
@Bean
public KafkaSender kafkaSender(KafkaTemplate kafkaTemplate,
ImdgProvider imdgProvider) {
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/ExporterController.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/ExporterController.java
deleted file mode 100644
index a82bd0f32..000000000
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/ExporterController.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package ru.spcex.clearing.dbf.exporter.controller;
-
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-import ru.spcex.clearing.dbf.exporter.services.DBFExportService;
-
-@Controller("/")
-public class ExporterController implements InitializingBean {
- private final Logger log = LoggerFactory.getLogger(getClass());
- private final DBFExportService dbfExportService;
-
- public ExporterController(@Qualifier("dbfExportService") DBFExportService dbfExportService) {
- this.dbfExportService = dbfExportService;
- }
-
- @RequestMapping(method = RequestMethod.GET, path = "/export", produces = MediaType.TEXT_PLAIN_VALUE)
- @ResponseBody
- public String exportTables() {
- log.info("Call export method for exporter controller");
- dbfExportService.run();
- return "export done";
- }
-
- @Override
- public void afterPropertiesSet() throws Exception {
- log.info("controller started");
-
- }
-}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java
index a84f3a8cb..82b5a7559 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java
@@ -4,6 +4,7 @@ import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult;
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
import java.io.File;
+import java.time.LocalDateTime;
import java.util.UUID;
/**
@@ -15,6 +16,8 @@ public class ResultContainer {
private File fileForExport;
private Long groupId;
private StageResult lastStageResult;
+ private LocalDateTime registrationDateTime;
+ private String mamberCode;
protected ResultContainer() {}
@@ -64,4 +67,20 @@ public class ResultContainer {
public void setLastStageResult(StageResult lastStageResult) {
this.lastStageResult = lastStageResult;
}
+
+ public LocalDateTime getRegistrationDateTime() {
+ return registrationDateTime;
+ }
+
+ public void setRegistrationDateTime(LocalDateTime registrationDateTime) {
+ this.registrationDateTime = registrationDateTime;
+ }
+
+ public String getMamberCode() {
+ return mamberCode;
+ }
+
+ public void setMamberCode(String mamberCode) {
+ this.mamberCode = mamberCode;
+ }
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/FilenameTemplate.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/FilenameTemplate.java
new file mode 100644
index 000000000..457c83e7d
--- /dev/null
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/FilenameTemplate.java
@@ -0,0 +1,105 @@
+package ru.spcex.clearing.dbf.exporter.logic.data.enums;
+
+import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
+
+import java.io.File;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Locale;
+import java.util.Objects;
+
+import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.SECTION;
+import static ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile.outDir;
+
+public enum FilenameTemplate {
+ df_section_dateTime {
+ @Override
+ public String getFileName(ResultContainer resultContainer) {
+ return appendSection(resultContainer)
+ .append(dateTime(resultContainer))
+ .append(".DBF").toString();
+ }
+ },
+ df_section_dateTime_counter {
+ @Override
+ public String getFileName(ResultContainer resultContainer) {
+ return appendSection(resultContainer)
+ .append(dateTime(resultContainer))
+ .append(counter(resultContainer))
+ .append(".DBF").toString();
+ }
+ },
+ df_section_dateTime_counter_mamberCode {
+ @Override
+ public String getFileName(ResultContainer resultContainer) {
+ return appendSection(resultContainer)
+ .append(dateTime(resultContainer))
+ .append(counter(resultContainer))
+ .append(mamberCode(resultContainer))
+ .append(".DBF").toString();
+ }
+ };
+
+ protected StringBuilder appendSection(ResultContainer resultContainer) {
+ StringBuilder result = new StringBuilder();
+ result.append(outDir);
+ result.append(File.separator);
+ result.append(resultContainer.getTableForExport().getFilePrefix().toUpperCase(Locale.ROOT));
+ result.append('_');
+ result.append(SECTION);
+ return result;
+ }
+
+ protected StringBuilder dateTime(ResultContainer resultContainer) {
+ StringBuilder result = new StringBuilder();
+ result.append('_');
+ result.append("PRC");
+ result.append(tsFormatter.format(resultContainer.getRegistrationDateTime()));
+ return result;
+ }
+
+ protected StringBuilder counter(ResultContainer resultContainer) {
+ StringBuilder result = new StringBuilder();
+ result.append('_');
+ result.append(countSameFilesInDir(resultContainer.getTableForExport().getFilePrefix(), outDir) + 1);
+ return result;
+ }
+
+ protected StringBuilder mamberCode(ResultContainer resultContainer) {
+ StringBuilder result = new StringBuilder();
+ result.append('_');
+ result.append(resultContainer.getMamberCode());
+ return result;
+ }
+
+ protected Integer countSameFilesInDir(String prefixOfTable, String outDir) {
+ int res = 0;
+ File directory = new File(outDir);
+ String timestampNow = utilFormatter.format(LocalDateTime.now());
+ if (directory.exists()) {
+ for (File file : Objects.requireNonNull(directory.listFiles())) {
+ String name = file.getName();
+ String[] splitName = name.split("_");
+ String prefix = splitName[0];
+ String timestamp = splitName[2];
+
+ if (prefix.equalsIgnoreCase(prefixOfTable) && timestamp.contains(timestampNow)) {
+ String counter = splitName[3];
+ int positionOfDot = counter.indexOf('.');
+ if (positionOfDot != -1) {
+ counter = counter.substring(0, positionOfDot);
+ }
+ res = Integer.max(res, Integer.parseInt(counter));
+ }
+ }
+ }
+ return res;
+ }
+
+ private static final DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm");
+ private static final DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd");
+
+ public String getFileName(ResultContainer resultContainer) {
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/Table.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/Table.java
index 52f7d87cd..24ae62a8e 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/Table.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/Table.java
@@ -7,11 +7,13 @@ import ru.spcex.platform.classes.base.SpcexObjectBase;
public enum Table {
S_DF02("DF-02", IMDGDistributedNames.Map_SDf02, SDf02.class),
S_DF03("DF-03", IMDGDistributedNames.Map_SDf03, SDf03.class),
- S_DF08("DF-08", IMDGDistributedNames.Map_SDf08, SDf08.class),
- S_DF11("DF-11", IMDGDistributedNames.Map_SDf11, SDf11.class),
- S_DF18("DF-18", IMDGDistributedNames.Map_SDf18, SDf18.class),
- S_DF10("DF-10", IMDGDistributedNames.Map_SDf10, SDf10.class),
- S_DF17("DF-17", IMDGDistributedNames.Map_SDf17, SDf17.class);
+ S_DF05("DF-05", IMDGDistributedNames.Map_SDf05, SDf05.class),
+ S_DF07("DF-07", IMDGDistributedNames.Map_SDf07, SDf07.class),
+ S_DF51("DF-51", IMDGDistributedNames.Map_SDf51, SDf51.class),
+ S_DF53("DF-53", IMDGDistributedNames.Map_SDf53, SDf53.class),
+ S_DF54("DF-54", IMDGDistributedNames.Map_SDf54, SDf54.class),
+ S_DF56("DF-56", IMDGDistributedNames.Map_SDf56, SDf56.class);
+
/**
* Префикс имени файла для экспорта
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java
index a2bebeafc..b9c819c40 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromHazelcast.java
@@ -33,11 +33,12 @@ public class ExportFromHazelcast extends Stage implements InitializingBean {
private final S_DF02_Converter s_df02_converter;
private final S_DF03_Converter s_df03_converter;
- private final S_DF08_Converter s_df08_converter;
- private final S_DF11_Converter s_df11_converter;
- private final S_DF18_Converter s_df18_converter;
- private final S_DF10_Converter s_df10_converter;
- private final S_DF17_Converter s_df17_converter;
+ private final S_DF05_Converter s_df05_converter;
+ private final S_DF07_Converter s_df07_converter;
+ private final S_DF51_Converter s_df51_converter;
+ private final S_DF53_Converter s_df53_converter;
+ private final S_DF54_Converter s_df54_converter;
+ private final S_DF56_Converter s_df56_converter;
private final Map dbfFieldsForTable = new HashMap<>();
private Charset dbfCharset;
@@ -46,20 +47,22 @@ public class ExportFromHazelcast extends Stage implements InitializingBean {
@Qualifier("imdgProvider") ImdgProvider imdgProvider,
S_DF02_Converter s_df02_converter,
S_DF03_Converter s_df03_converter,
- S_DF08_Converter s_df08_converter,
- S_DF11_Converter s_df11_converter,
- S_DF18_Converter s_df18_converter,
- S_DF10_Converter s_df10_converter,
- S_DF17_Converter s_df17_converter) {
+ S_DF07_Converter s_df07_converter,
+ S_DF05_Converter s_df05_converter,
+ S_DF51_Converter s_df51_converter,
+ S_DF54_Converter s_df54_converter,
+ S_DF53_Converter s_df53_converter,
+ S_DF56_Converter s_df56_converter) {
this.settings = settings;
this.imdgProvider = imdgProvider;
this.s_df02_converter = s_df02_converter;
this.s_df03_converter = s_df03_converter;
- this.s_df08_converter = s_df08_converter;
- this.s_df11_converter = s_df11_converter;
- this.s_df18_converter = s_df18_converter;
- this.s_df10_converter = s_df10_converter;
- this.s_df17_converter = s_df17_converter;
+ this.s_df07_converter = s_df07_converter;
+ this.s_df05_converter = s_df05_converter;
+ this.s_df51_converter = s_df51_converter;
+ this.s_df54_converter = s_df54_converter;
+ this.s_df53_converter = s_df53_converter;
+ this.s_df56_converter = s_df56_converter;
}
@Override
@@ -89,11 +92,12 @@ public class ExportFromHazelcast extends Stage implements InitializingBean {
Object[] values;
if (value instanceof SDf02 sDf02Value) values = s_df02_converter.toObjectArray(sDf02Value);
else if (value instanceof SDf03 sDf03Value) values = s_df03_converter.toObjectArray(sDf03Value);
- else if (value instanceof SDf08 sDf08Value) values = s_df08_converter.toObjectArray(sDf08Value);
- else if (value instanceof SDf11 sDf11Value) values = s_df11_converter.toObjectArray(sDf11Value);
- else if (value instanceof SDf18 sDf18Value) values = s_df18_converter.toObjectArray(sDf18Value);
- else if (value instanceof SDf10 sDf10Value) values = s_df10_converter.toObjectArray(sDf10Value);
- else if (value instanceof SDf17 sDf17Value) values = s_df17_converter.toObjectArray(sDf17Value);
+ else if (value instanceof SDf05 sDf05Value) values = s_df05_converter.toObjectArray(sDf05Value);
+ else if (value instanceof SDf07 sDf07Value) values = s_df07_converter.toObjectArray(sDf07Value);
+ else if (value instanceof SDf51 sDf51Value) values = s_df51_converter.toObjectArray(sDf51Value);
+ else if (value instanceof SDf53 sDf53Value) values = s_df53_converter.toObjectArray(sDf53Value);
+ else if (value instanceof SDf54 sDf54Value) values = s_df54_converter.toObjectArray(sDf54Value);
+ else if (value instanceof SDf56 sDf56Value) values = s_df56_converter.toObjectArray(sDf56Value);
else throw new Exception("Get unknown object from imdg. Class: " + value.getClass().getSimpleName());
dbfWriter.addRecord(values);
}
@@ -131,11 +135,12 @@ public class ExportFromHazelcast extends Stage implements InitializingBean {
private void initExportFileStructure() {
dbfFieldsForTable.put(Table.S_DF02, s_df02_converter.getDBFHeaders());
dbfFieldsForTable.put(Table.S_DF03, s_df03_converter.getDBFHeaders());
- dbfFieldsForTable.put(Table.S_DF08, s_df08_converter.getDBFHeaders());
- dbfFieldsForTable.put(Table.S_DF18, s_df18_converter.getDBFHeaders());
- dbfFieldsForTable.put(Table.S_DF10, s_df10_converter.getDBFHeaders());
- dbfFieldsForTable.put(Table.S_DF11, s_df11_converter.getDBFHeaders());
- dbfFieldsForTable.put(Table.S_DF17, s_df17_converter.getDBFHeaders());
+ dbfFieldsForTable.put(Table.S_DF05, s_df05_converter.getDBFHeaders());
+ dbfFieldsForTable.put(Table.S_DF07, s_df07_converter.getDBFHeaders());
+ dbfFieldsForTable.put(Table.S_DF51, s_df51_converter.getDBFHeaders());
+ dbfFieldsForTable.put(Table.S_DF53, s_df53_converter.getDBFHeaders());
+ dbfFieldsForTable.put(Table.S_DF54, s_df54_converter.getDBFHeaders());
+ dbfFieldsForTable.put(Table.S_DF56, s_df56_converter.getDBFHeaders());
}
private void initDBFCharset() {
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/Journal.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/Journal.java
index 957862fa5..025a1819f 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/Journal.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/Journal.java
@@ -11,25 +11,21 @@ import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
import ru.spcex.clearing.platform.messaging.domain.cud.system.JournalSdf;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
-import java.time.LocalDate;
-import java.time.LocalTime;
import java.util.EnumMap;
import java.util.Map;
+import static ru.spcex.clearing.platform.messaging.domain.Consts.EXPORT_COMPLETED;
+
@Component
public class Journal extends Stage implements InitializingBean {
private final Logger log = LoggerFactory.getLogger(getClass());
private final KafkaSender kafkaSender;
- @Autowired(required = false)
+ @Autowired
public Journal(KafkaSender kafkaSender) {
this.kafkaSender = kafkaSender;
}
- public Journal() {
- this.kafkaSender = null;
- }
-
@Override
public boolean skipCompleted() {
return false;
@@ -43,13 +39,13 @@ public class Journal extends Stage implements InitializingBean {
}
JournalSdf journalSdf = new JournalSdf();
//todo read file attibutes
- journalSdf.setRegistrationDate(LocalDate.now());
- journalSdf.setRegistrationTime(LocalTime.now());
+ journalSdf.setRegistrationDate(resultContainer.getRegistrationDateTime().toLocalDate());
+ journalSdf.setRegistrationTime(resultContainer.getRegistrationDateTime().toLocalTime());
journalSdf.setRegistrationNumber(resultContainer.getGroupId());
journalSdf.setDocumentName(documentNames.get(resultContainer.getTableForExport()));
journalSdf.setDossierNumber(dossierNumber.get(resultContainer.getTableForExport()));
journalSdf.setResultStatus(StageResult.ERROR.equals(resultContainer.getLastStageResult()) ? "NACK" : "ACK");
-// kafkaSender.sendRequestToQueue();
+ kafkaSender.sendRequestToQueue(EXPORT_COMPLETED, journalSdf);
return StageResult.COMPLETE;
}
@@ -61,23 +57,23 @@ public class Journal extends Stage implements InitializingBean {
static {
documentNames.put(Table.S_DF02, "Уведомлений об исполнении операции загрузки денежных средств или уведомление об ошибке");
documentNames.put(Table.S_DF03, "Сводное платёжное поручение по итогу проведения расчетов, направляемое в РО");
- //documentNames.put(Table.S_DF05, "Уведомление о завершении расчетов в секции");
- documentNames.put(Table.S_DF08, "Запрос остатков по всем счетам, направляемый в РО");
- documentNames.put(Table.S_DF10, "Подтверждение о загрузке по поступлению на клиринговый счет");
- documentNames.put(Table.S_DF11, "Распоряжение на списание с ТБС УК на Клиринговый счет (по итогам проведения расчетов по возврату депозита) / Распоряжение на списание с ТБС УК на Корреспонденский счет УК");
- //documentNames.put(Table.S_DF13, "Распоряжение на списание денежных средств УК категории В (с клирингового счета)");
- documentNames.put(Table.S_DF17, "Подтверждение о загрузке Уведомления о возврате ден.ср. по договору депозита");
+ documentNames.put(Table.S_DF05, "Уведомление о завершении расчетов в секции");
+ documentNames.put(Table.S_DF07, "Подтверждение о загрузке Уведомления о возврате ден.ср. по договору депозита");
+ documentNames.put(Table.S_DF51, "Запрос остатков по всем счетам, направляемый в РО");
+ documentNames.put(Table.S_DF53, "");
+ documentNames.put(Table.S_DF54, "Распоряжение на списание денежных средств УК категории В (с клирингового счета)");
+ documentNames.put(Table.S_DF56, "");
}
private static final Map dossierNumber = new EnumMap<>(Table.class);
static {
dossierNumber.put(Table.S_DF02, "07-50");
dossierNumber.put(Table.S_DF03, "07-51");
- //dossierNumber.put(Table.S_DF05, "07-53");
- dossierNumber.put(Table.S_DF08, "07-55");
- dossierNumber.put(Table.S_DF10, "07-56");
- dossierNumber.put(Table.S_DF11, "07-36");
- //dossierNumber.put(Table.S_DF13, "07-48");
- dossierNumber.put(Table.S_DF17, "07-58");
+ dossierNumber.put(Table.S_DF05, "07-53");
+ dossierNumber.put(Table.S_DF07, "07-58");
+ dossierNumber.put(Table.S_DF51, "07-55");
+ dossierNumber.put(Table.S_DF53, "");
+ dossierNumber.put(Table.S_DF54, "07-48");
+ dossierNumber.put(Table.S_DF56, "");
}
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java
index a0743322c..f62dca17c 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/PrepareDBFFile.java
@@ -4,6 +4,7 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import ru.spcex.clearing.dbf.exporter.config.settings.ExportDBFServiceSettings;
import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
+import ru.spcex.clearing.dbf.exporter.logic.data.enums.FilenameTemplate;
import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult;
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
@@ -12,8 +13,8 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.Locale;
+import java.util.EnumMap;
+import java.util.Map;
import java.util.Objects;
/**
@@ -21,12 +22,10 @@ import java.util.Objects;
*/
@Component
public class PrepareDBFFile extends Stage implements InitializingBean {
- private static final String SECTION = "U";
- private static final String CODE_OF_MEMBER = null;
- private static final DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm");
- private static final DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd");
+ public static final String SECTION = "U";
+ public static final String CODE_OF_MEMBER = null;
private final ExportDBFServiceSettings settings;
- private String outDir;
+ public static String outDir;
public PrepareDBFFile(ExportDBFServiceSettings settings) {
this.settings = settings;
@@ -37,7 +36,9 @@ public class PrepareDBFFile extends Stage implements InitializingBean {
Objects.requireNonNull(resultContainer.getTableForExport());
Table table = resultContainer.getTableForExport();
- File dbfFile = new File(prepareFilename(table, SECTION, CODE_OF_MEMBER, outDir));
+ LocalDateTime currentDateTime = LocalDateTime.now();
+ resultContainer.setRegistrationDateTime(currentDateTime);
+ File dbfFile = new File(nameTemplates.get(table).getFileName(resultContainer));
try {
Path dbfFilePath = dbfFile.toPath();
Files.deleteIfExists(dbfFilePath);
@@ -61,50 +62,16 @@ public class PrepareDBFFile extends Stage implements InitializingBean {
this.outDir = outDirPath;
}
- private String prepareFilename(Table table, String section, String codeOfMember, String outDir) {
- StringBuilder result = new StringBuilder();
- String prefixOfTable = table.getFilePrefix();
- String time = "PRC" + tsFormatter.format(LocalDateTime.now());
+ private static final Map nameTemplates = new EnumMap<>(Table.class);
- result.append(outDir);
- result.append(File.separator);
- result.append(prefixOfTable.toUpperCase(Locale.ROOT));
- result.append('_');
- result.append(section);
- result.append('_');
- result.append(time);
- result.append('_');
- result.append(countSameFilesInDir(prefixOfTable, outDir) + 1);
- if (codeOfMember != null) {
- result.append('_');
- result.append(codeOfMember);
- }
- result.append(".DBF");
- return result.toString();
- }
-
- private Integer countSameFilesInDir(String prefixOfTable, String outDir) {
- int res = 0;
- File directory = new File(outDir);
- if (directory.exists()) {
- for (File file : Objects.requireNonNull(directory.listFiles())) {
- String name = file.getName();
- String[] splitName = name.split("_");
- String prefix = splitName[0];
- String timestamp = splitName[2];
- String timestampNow = utilFormatter.format(LocalDateTime.now());
-
- if (prefix.equalsIgnoreCase(prefixOfTable) && timestamp.contains(timestampNow)) {
- String counter = splitName[3];
- int positionOfDot = counter.indexOf('.');
- if (positionOfDot != -1) {
- counter = counter.substring(0, positionOfDot);
- }
- res = Integer.max(res, Integer.parseInt(counter));
-
- }
- }
- }
- return res;
+ static {
+ nameTemplates.put(Table.S_DF02, FilenameTemplate.df_section_dateTime);
+ nameTemplates.put(Table.S_DF03, FilenameTemplate.df_section_dateTime_counter_mamberCode);
+ nameTemplates.put(Table.S_DF05, FilenameTemplate.df_section_dateTime);
+ nameTemplates.put(Table.S_DF07, FilenameTemplate.df_section_dateTime_counter);
+ nameTemplates.put(Table.S_DF51, FilenameTemplate.df_section_dateTime_counter);
+ nameTemplates.put(Table.S_DF53, FilenameTemplate.df_section_dateTime_counter);
+ 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/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java
index 8689559f0..2c3acd3f1 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/CommandService.java
@@ -35,12 +35,30 @@ public class CommandService extends QueueConsumer implements InitializingBean {
callback(ExportToFileRequest.class)
.setConsumer(this::process)
.forDestination(Consts.EXPORT_PROCESS, callbacks::put);
+ callback(SdfClearingRequest.class)
+ .setConsumer(r -> processSpecial(Table.S_DF02, r))
+ .forDestination(Consts.SDF02_PROCESS, callbacks::put);
callback(SdfClearingRequest.class)
.setConsumer(r -> processSpecial(Table.S_DF03, r)) // todo необходимо в отдельную папку: "в отдельную директорию SettlementHouse_Fail (чтобы не отдавать такие файлы в ПРЦ"
.forDestination(Consts.SDF03_PROCESS, callbacks::put);
callback(SdfClearingRequest.class)
- .setConsumer(r -> processSpecial(Table.S_DF11, r))
- .forDestination(Consts.SDF11_PROCESS, callbacks::put);
+ .setConsumer(r -> processSpecial(Table.S_DF05, r))
+ .forDestination(Consts.SDF05_PROCESS, callbacks::put);
+ callback(SdfClearingRequest.class)
+ .setConsumer(r -> processSpecial(Table.S_DF07, r))
+ .forDestination(Consts.SDF07_PROCESS, callbacks::put);
+ callback(SdfClearingRequest.class)
+ .setConsumer(r -> processSpecial(Table.S_DF51, r))
+ .forDestination(Consts.SDF51_PROCESS, callbacks::put);
+ callback(SdfClearingRequest.class)
+ .setConsumer(r -> processSpecial(Table.S_DF53, r))
+ .forDestination(Consts.SDF53_PROCESS, callbacks::put);
+ callback(SdfClearingRequest.class)
+ .setConsumer(r -> processSpecial(Table.S_DF54, r))
+ .forDestination(Consts.SDF54_PROCESS, callbacks::put);
+ callback(SdfClearingRequest.class)
+ .setConsumer(r -> processSpecial(Table.S_DF56, r))
+ .forDestination(Consts.SDF56_PROCESS, callbacks::put);
init();
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/DBFExportService.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/DBFExportService.java
deleted file mode 100644
index 3371e1c72..000000000
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/DBFExportService.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package ru.spcex.clearing.dbf.exporter.services;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import org.springframework.stereotype.Service;
-import ru.spcex.clearing.dbf.exporter.logic.Processor;
-import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
-import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
-import ru.spcex.platform.imdg.api.ImdgProvider;
-
-import java.util.Arrays;
-
-@Service("dbfExportService")
-public class DBFExportService {
- Logger log = LoggerFactory.getLogger(getClass());
- private final ThreadPoolTaskExecutor executor;
- private final Processor processor;
- protected final ImdgProvider imdgProvider;
-
- public DBFExportService(@Qualifier("executor") ThreadPoolTaskExecutor executor,
- @Qualifier("processor") Processor processor,
- ImdgProvider imdgProvider) {
- this.executor = executor;
- this.processor = processor;
- this.imdgProvider = imdgProvider;
- log.debug("Check IMDG...");
- imdgProvider.waitAvailable();
- log.debug("IMDG ready...");
- }
-
- public void run() {
- log.debug("Do export for all: {}", Arrays.toString(Table.values()));
- for (Table tableForExport : Table.values()) {
- executor.submit(() -> processor.process(ResultContainer.createNewTask(tableForExport)));
- }
- }
-
-}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/DFConverter.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/DFConverter.java
index 34ade61a5..c8c15f2ad 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/DFConverter.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/DFConverter.java
@@ -3,6 +3,7 @@ package ru.spcex.clearing.dbf.exporter.services.converters;
import com.linuxense.javadbf.DBFField;
import ru.spcex.platform.classes.base.SpcexObjectBase;
+import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
@@ -25,4 +26,14 @@ public abstract class DFConverter {
if (src instanceof LocalTime srcLocalTime) return Time.valueOf(srcLocalTime);
return src;
}
+
+ protected Long convertStrToLong(String s) {
+ if (s == null) return null;
+ return Long.valueOf(s);
+ }
+
+ protected BigDecimal convertStrToBigDecimal(String s) {
+ if (s == null) return null;
+ return new BigDecimal(s).setScale(0);
+ }
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF02_Converter.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF02_Converter.java
index b5c99f71e..5626235e0 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF02_Converter.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF02_Converter.java
@@ -43,7 +43,7 @@ public class S_DF02_Converter extends DFConverter {
dbfFields.add(new DBFField("ACC_TYPE", DBFDataType.CHARACTER, 2));
dbfFields.add(new DBFField("SUMENGAGE", DBFDataType.CHARACTER, 22));
dbfFields.add(new DBFField("SUMUNBLOCK", DBFDataType.CHARACTER, 22));
- dbfFields.add(new DBFField("FILE_TYPE", DBFDataType.CHARACTER, 22));
+ dbfFields.add(new DBFField("FILE_TYPE", DBFDataType.CHARACTER, 1));
dbfFields.add(new DBFField("RESULT", DBFDataType.CHARACTER, 3));
return dbfFields.toArray(DBFField[]::new);
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF03_Converter.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF03_Converter.java
index 9505abaf5..854ba7aa0 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF03_Converter.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF03_Converter.java
@@ -69,15 +69,15 @@ public class S_DF03_Converter extends DFConverter {
dbfFields.add(new DBFField("DOC_TYPE", DBFDataType.CHARACTER, 4));
dbfFields.add(new DBFField("DOCNM_REF", DBFDataType.CHARACTER, 16));
dbfFields.add(new DBFField("DOCNMPREV", DBFDataType.CHARACTER, 16));
- dbfFields.add(new DBFField("PRIORITY", DBFDataType.CHARACTER, 1));
- dbfFields.add(new DBFField("SBANKCODE", DBFDataType.CHARACTER, 12));
+// dbfFields.add(new DBFField("PRIORITY", DBFDataType.CHARACTER, 1));
+// dbfFields.add(new DBFField("SBANKCODE", DBFDataType.CHARACTER, 12));
dbfFields.add(new DBFField("C_ACC_DEB", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("SBANKNAM1", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("SBANKNAM2", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("SBANKNAM3", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("SBANKNAM4", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("SBANKNAM5", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("RBANKCODE", DBFDataType.CHARACTER, 12));
+// dbfFields.add(new DBFField("RBANKCODE", DBFDataType.CHARACTER, 12));
dbfFields.add(new DBFField("C_ACC_CRED", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM1", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM2", DBFDataType.CHARACTER, 35));
@@ -85,31 +85,31 @@ public class S_DF03_Converter extends DFConverter {
dbfFields.add(new DBFField("RBANKNAM4", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM5", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("PAY_DATE", DBFDataType.CHARACTER, 8));
- dbfFields.add(new DBFField("EXT_DATE", DBFDataType.CHARACTER, 8));
- dbfFields.add(new DBFField("PAY_VAL", DBFDataType.CHARACTER, 12));
+// dbfFields.add(new DBFField("EXT_DATE", DBFDataType.CHARACTER, 8));
+// dbfFields.add(new DBFField("PAY_VAL", DBFDataType.CHARACTER, 12));
dbfFields.add(new DBFField("SUM_DEB", DBFDataType.CHARACTER, 22));
- dbfFields.add(new DBFField("SCLIENTN1", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SCLIENTN2", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SCLIENTN3", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SCLIENTN4", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SC_CODE", DBFDataType.CHARACTER, 12));
- dbfFields.add(new DBFField("ACC_DEB", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("RCLIENTN1", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("RCLIENTN2", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("RCLIENTN3", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("RCLIENTN4", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("ACC_KR_1", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("ACC_KR_2", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SP_CODE", DBFDataType.CHARACTER, 2));
- dbfFields.add(new DBFField("SPECIF_1", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SPECIF_2", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SPECIF_3", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SPECIF_4", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SPECIF_5", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SPECIF_6", DBFDataType.CHARACTER, 35));
- dbfFields.add(new DBFField("SEND_TYPE", DBFDataType.CHARACTER, 10));
- dbfFields.add(new DBFField("SERVDATE", DBFDataType.CHARACTER, 8));
- dbfFields.add(new DBFField("DOC_RESULT", DBFDataType.CHARACTER, 2));
+// dbfFields.add(new DBFField("SCLIENTN1", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SCLIENTN2", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SCLIENTN3", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SCLIENTN4", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SC_CODE", DBFDataType.CHARACTER, 12));
+// dbfFields.add(new DBFField("ACC_DEB", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("RCLIENTN1", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("RCLIENTN2", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("RCLIENTN3", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("RCLIENTN4", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("ACC_KR_1", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("ACC_KR_2", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SP_CODE", DBFDataType.CHARACTER, 2));
+ dbfFields.add(new DBFField("SPECIF_1", DBFDataType.CHARACTER, 255));
+// dbfFields.add(new DBFField("SPECIF_2", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SPECIF_3", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SPECIF_4", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SPECIF_5", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SPECIF_6", DBFDataType.CHARACTER, 35));
+// dbfFields.add(new DBFField("SEND_TYPE", DBFDataType.CHARACTER, 10));
+// dbfFields.add(new DBFField("SERVDATE", DBFDataType.CHARACTER, 8));
+// dbfFields.add(new DBFField("DOC_RESULT", DBFDataType.CHARACTER, 2));
dbfFields.add(new DBFField("IMP_RESULT", DBFDataType.CHARACTER, 3));
return dbfFields.toArray(DBFField[]::new);
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF05_Converter.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF05_Converter.java
new file mode 100644
index 000000000..9b9a7d181
--- /dev/null
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/services/converters/S_DF05_Converter.java
@@ -0,0 +1,35 @@
+package ru.spcex.clearing.dbf.exporter.services.converters;
+
+import com.linuxense.javadbf.DBFDataType;
+import com.linuxense.javadbf.DBFField;
+import org.springframework.stereotype.Service;
+import ru.clearing.classes.statics.data.sdf.SDf05;
+
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+
+@Service
+public class S_DF05_Converter extends DFConverter {
+ @Override
+ public Object[] toObjectArray(SDf05 entity) {
+ List