Привел модуль в соответствие с новым ТЗ.
This commit is contained in:
psemenkov 2023-05-18 12:22:09 +03:00
parent fe79868712
commit 2b038a3b04
25 changed files with 474 additions and 398 deletions

View file

@ -21,10 +21,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>

View file

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

View file

@ -38,7 +38,7 @@ public class KafkaSenderConfig {
return KafkaProducerFactory.producerFactory(kafkaSettings);
}
@Autowired(required = false)
// @Autowired(required = false)
@Bean("kafkaTemplate")
public KafkaTemplate<String, Object> kafkaTemplate(ProducerFactory<String, Object> 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<String, Object> kafkaTemplate,
ImdgProvider imdgProvider) {

View file

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

View file

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

View file

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

View file

@ -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);
/**
* Префикс имени файла для экспорта

View file

@ -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<Table, DBFField[]> 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() {

View file

@ -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<Table, String> 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, "");
}
}

View file

@ -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<Table, FilenameTemplate> 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);
}
}

View file

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

View file

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

View file

@ -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<T extends SpcexObjectBase> {
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);
}
}

View file

@ -43,7 +43,7 @@ public class S_DF02_Converter extends DFConverter<SDf02> {
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);
}

View file

@ -69,15 +69,15 @@ public class S_DF03_Converter extends DFConverter<SDf03> {
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<SDf03> {
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);
}

View file

@ -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<SDf05> {
@Override
public Object[] toObjectArray(SDf05 entity) {
List<Object> values = new LinkedList<>();
values.add(typeMatch(entity.getTp()));
values.add(typeMatch(entity.getDt()));
values.add(typeMatch(entity.getTm()));
values.add(typeMatch(entity.getPr()));
return values.toArray(Object[]::new);
}
@Override
public DBFField[] getDBFHeaders() {
List<DBFField> dbfFields = new LinkedList<>();
Date date = new Date();
dbfFields.add(new DBFField("TP", DBFDataType.NUMERIC, 72, 18));
dbfFields.add(new DBFField("DT", DBFDataType.DATE));
dbfFields.add(new DBFField("TM", DBFDataType.DATE));
dbfFields.add(new DBFField("PR", DBFDataType.CHARACTER, 1));
return dbfFields.toArray(DBFField[]::new);
}
}

View file

@ -3,20 +3,22 @@ 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.SDf17;
import ru.clearing.classes.statics.data.sdf.SDf07;
import java.util.LinkedList;
import java.util.List;
@Service
public class S_DF17_Converter extends DFConverter<SDf17> {
public class S_DF07_Converter extends DFConverter<SDf07> {
@Override
public Object[] toObjectArray(SDf17 entity) {
public Object[] toObjectArray(SDf07 entity) {
List<Object> values = new LinkedList<>();
values.add(typeMatch(entity.getAccount()));
values.add(typeMatch(entity.getSum()));
values.add(typeMatch(entity.getMarket()));
values.add(typeMatch(entity.getType()));
values.add(typeMatch(entity.getDeal()));
values.add(typeMatch(entity.getClientN()));
values.add(typeMatch(entity.getInn()));
values.add(typeMatch(entity.getBic()));
values.add(typeMatch(entity.getSpec()));
@ -29,14 +31,16 @@ public class S_DF17_Converter extends DFConverter<SDf17> {
public DBFField[] getDBFHeaders() {
List<DBFField> dbfFields = new LinkedList<>();
dbfFields.add(new DBFField("ACCOUNT", DBFDataType.CHARACTER, 20));
dbfFields.add(new DBFField("SUM", DBFDataType.NUMERIC, 32, 18));
dbfFields.add(new DBFField("SUM", DBFDataType.NUMERIC, 72, 18));
dbfFields.add(new DBFField("MARKET", DBFDataType.CHARACTER, 1));
dbfFields.add(new DBFField("TYPE", DBFDataType.CHARACTER, 1));
dbfFields.add(new DBFField("_I_N_N", DBFDataType.NUMERIC, 32, 18));
dbfFields.add(new DBFField("_B_I_C", DBFDataType.NUMERIC, 32, 18));
dbfFields.add(new DBFField("_S_P_E_C", DBFDataType.CHARACTER, 254));
dbfFields.add(new DBFField("NUMBER", DBFDataType.NUMERIC, 32, 18));
dbfFields.add(new DBFField("RESULT", DBFDataType.NUMERIC, 1));
dbfFields.add(new DBFField("DEAL", DBFDataType.CHARACTER, 10));
dbfFields.add(new DBFField("CLIENT_N", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("_I_N_N", DBFDataType.NUMERIC, 72, 18));
dbfFields.add(new DBFField("_B_I_C", DBFDataType.NUMERIC, 72, 18));
dbfFields.add(new DBFField("_S_P_E_C", DBFDataType.CHARACTER, 255));
dbfFields.add(new DBFField("NUMBER", DBFDataType.NUMERIC, 72, 18));
dbfFields.add(new DBFField("RESULT", DBFDataType.NUMERIC, 72, 18));
return dbfFields.toArray(DBFField[]::new);
}

View file

@ -1,39 +0,0 @@
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.SDf10;
import java.util.LinkedList;
import java.util.List;
@Service
public class S_DF10_Converter extends DFConverter<SDf10> {
@Override
public Object[] toObjectArray(SDf10 entity) {
List<Object> values = new LinkedList<>();
// values.add(typeMatch(entity.getAccount()));
// values.add(typeMatch(entity.getSum()));
// values.add(typeMatch(entity.getMarket()));
// values.add(typeMatch(entity.getType()));
// values.add(typeMatch(entity.getNumber()));
// values.add(typeMatch(entity.getInn()));
// values.add(typeMatch(entity.getResult()));
return values.toArray(Object[]::new);
}
@Override
public DBFField[] getDBFHeaders() {
List<DBFField> dbfFields = new LinkedList<>();
dbfFields.add(new DBFField("ACCOUNT", DBFDataType.CHARACTER, 20));
dbfFields.add(new DBFField("SUM", DBFDataType.NUMERIC, 32, 18));
dbfFields.add(new DBFField("MARKET", DBFDataType.CHARACTER, 1));
dbfFields.add(new DBFField("TYPE", DBFDataType.CHARACTER, 1));
dbfFields.add(new DBFField("NUMBER", DBFDataType.NUMERIC, 32, 18));
dbfFields.add(new DBFField("_I_N_N", DBFDataType.NUMERIC, 32, 18));
dbfFields.add(new DBFField("RESULT", DBFDataType.CHARACTER, 3));
return dbfFields.toArray(DBFField[]::new);
}
}

View file

@ -1,115 +0,0 @@
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.SDf11;
import java.util.LinkedList;
import java.util.List;
@Service
public class S_DF11_Converter extends DFConverter<SDf11> {
@Override
public Object[] toObjectArray(SDf11 entity) {
List<Object> values = new LinkedList<>();
// values.add(typeMatch(entity.getSeg_type()));
// values.add(typeMatch(entity.getDoc_type()));
// values.add(typeMatch(entity.getDocnm_ref()));
// values.add(typeMatch(entity.getDocnmprev()));
// values.add(typeMatch(entity.getPriority()));
// values.add(typeMatch(entity.getSbankcode()));
// values.add(typeMatch(entity.getC_acc_deb()));
// values.add(typeMatch(entity.getSbanknam1()));
// values.add(typeMatch(entity.getSbanknam2()));
// values.add(typeMatch(entity.getSbanknam3()));
// values.add(typeMatch(entity.getSbanknam4()));
// values.add(typeMatch(entity.getSbanknam5()));
// values.add(typeMatch(entity.getRbankcode()));
// values.add(typeMatch(entity.getC_acc_cred()));
// values.add(typeMatch(entity.getRbanknam1()));
// values.add(typeMatch(entity.getRbanknam2()));
// values.add(typeMatch(entity.getRbanknam3()));
// values.add(typeMatch(entity.getRbanknam4()));
// values.add(typeMatch(entity.getRbanknam5()));
// values.add(typeMatch(entity.getPay_date()));
// values.add(typeMatch(entity.getExt_date()));
// values.add(typeMatch(entity.getPay_val()));
// values.add(typeMatch(entity.getSum_deb()));
// values.add(typeMatch(entity.getSclientn1()));
// values.add(typeMatch(entity.getSclientn2()));
// values.add(typeMatch(entity.getSclientn3()));
// values.add(typeMatch(entity.getSclientn4()));
// values.add(typeMatch(entity.getSc_code()));
// values.add(typeMatch(entity.getAcc_deb()));
// values.add(typeMatch(entity.getRclientn1()));
// values.add(typeMatch(entity.getRclientn2()));
// values.add(typeMatch(entity.getRclientn3()));
// values.add(typeMatch(entity.getRclientn4()));
// values.add(typeMatch(entity.getAcc_kr_1()));
// values.add(typeMatch(entity.getAcc_kr_2()));
// values.add(typeMatch(entity.getSp_code()));
// values.add(typeMatch(entity.getSpecif_1()));
// values.add(typeMatch(entity.getSpecif_2()));
// values.add(typeMatch(entity.getSpecif_3()));
// values.add(typeMatch(entity.getSpecif_4()));
// values.add(typeMatch(entity.getSpecif_5()));
// values.add(typeMatch(entity.getSpecif_6()));
// values.add(typeMatch(entity.getSend_type()));
// values.add(typeMatch(entity.getServdate()));
// values.add(typeMatch(entity.getDoc_result()));
return values.toArray(Object[]::new);
}
@Override
public DBFField[] getDBFHeaders() {
List<DBFField> dbfFields = new LinkedList<>();
dbfFields.add(new DBFField("SEG_TYPE", DBFDataType.CHARACTER, 1));
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("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("C_ACC_CRED", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM1", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM2", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM3", DBFDataType.CHARACTER, 35));
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("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));
return dbfFields.toArray(DBFField[]::new);
}
}

View file

@ -3,35 +3,30 @@ 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.SDf08;
import ru.clearing.classes.statics.data.sdf.SDf51;
import java.time.format.DateTimeFormatter;
import java.util.LinkedList;
import java.util.List;
@Service
public class S_DF08_Converter extends DFConverter<SDf08> {
public class S_DF51_Converter extends DFConverter<SDf51> {
@Override
public Object[] toObjectArray(SDf08 entity) {
public Object[] toObjectArray(SDf51 entity) {
List<Object> values = new LinkedList<>();
// values.add(convertStrToLong(entity.getNumber()));
// values.add(typeMatch(convertStrToLong(entity.getDatetime()))); // UNIX TIME
values.add(typeMatch(entity.getNumber()));
values.add(typeMatch(convertStrToLong(entity.getDatetime()))); // UNIX TIME
return values.toArray(Object[]::new);
}
@Override
public DBFField[] getDBFHeaders() {
List<DBFField> dbfFields = new LinkedList<>();
dbfFields.add(new DBFField("NUMBER", DBFDataType.NUMERIC, 10));
dbfFields.add(new DBFField("NUMBER", DBFDataType.CHARACTER, 10));
dbfFields.add(new DBFField("DATETIME", DBFDataType.NUMERIC, 13)); // UNIX TIME
return dbfFields.toArray(DBFField[]::new);
}
Long convertStrToLong(String s) {
if (s == null) return null;
return Long.valueOf(s);
}
private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("dd.MM.yyyy");
private static final DateTimeFormatter DATE_TIME_FMT = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");

View file

@ -3,15 +3,15 @@ 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.SDf18;
import ru.clearing.classes.statics.data.sdf.SDf53;
import java.util.LinkedList;
import java.util.List;
@Service
public class S_DF18_Converter extends DFConverter<SDf18> {
public class S_DF53_Converter extends DFConverter<SDf53> {
@Override
public Object[] toObjectArray(SDf18 entity) {
public Object[] toObjectArray(SDf53 entity) {
List<Object> values = new LinkedList<>();
values.add(typeMatch(entity.getAccount()));
values.add(typeMatch(entity.getDeal()));

View file

@ -0,0 +1,105 @@
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.SDf54;
import java.util.LinkedList;
import java.util.List;
@Service
public class S_DF54_Converter extends DFConverter<SDf54> {
@Override
public Object[] toObjectArray(SDf54 entity) {
List<Object> values = new LinkedList<>();
values.add(typeMatch(entity.getSeg_type()));
values.add(typeMatch(entity.getDoc_type()));
values.add(typeMatch(entity.getDocnm_ref()));
values.add(typeMatch(entity.getDocnmprev()));
values.add(typeMatch(entity.getSbankcode()));
values.add(typeMatch(entity.getC_acc_deb()));
values.add(typeMatch(entity.getSbanknam1()));
values.add(typeMatch(entity.getSbanknam2()));
values.add(typeMatch(entity.getSbanknam3()));
values.add(typeMatch(entity.getSbanknam4()));
values.add(typeMatch(entity.getSbanknam5()));
values.add(typeMatch(entity.getRbankcode()));
values.add(typeMatch(entity.getC_acc_cred()));
values.add(typeMatch(entity.getRbanknam1()));
values.add(typeMatch(entity.getRbanknam2()));
values.add(typeMatch(entity.getRbanknam3()));
values.add(typeMatch(entity.getRbanknam4()));
values.add(typeMatch(entity.getRbanknam5()));
values.add(typeMatch(entity.getOp_type()));
values.add(typeMatch(entity.getOp_order()));
values.add(typeMatch(entity.getPay_date()));
values.add(typeMatch(entity.getPay_val()));
values.add(typeMatch(entity.getSum_deb()));
values.add(typeMatch(entity.getSclientn1()));
values.add(typeMatch(entity.getSclientn2()));
values.add(typeMatch(entity.getSclientn3()));
values.add(typeMatch(entity.getSclientn4()));
values.add(typeMatch(entity.getInn_deb()));
values.add(typeMatch(entity.getKpp_deb()));
values.add(typeMatch(entity.getAcc_deb()));
values.add(typeMatch(entity.getRclientn1()));
values.add(typeMatch(entity.getRclientn2()));
values.add(typeMatch(entity.getRclientn3()));
values.add(typeMatch(entity.getRclientn4()));
values.add(typeMatch(entity.getInn_cred()));
values.add(typeMatch(entity.getKpp_cred()));
values.add(typeMatch(entity.getAcc_kr_1()));
values.add(typeMatch(entity.getSpecif_1()));
values.add(typeMatch(entity.getSend_type()));
values.add(typeMatch(entity.getDoc_result()));
return values.toArray(Object[]::new);
}
@Override
public DBFField[] getDBFHeaders() {
List<DBFField> dbfFields = new LinkedList<>();
dbfFields.add(new DBFField("SEG_TYPE", DBFDataType.CHARACTER, 1));
dbfFields.add(new DBFField("DOC_TYPE", DBFDataType.CHARACTER, 13));
dbfFields.add(new DBFField("DOCNM_REF", DBFDataType.CHARACTER, 16));
dbfFields.add(new DBFField("DOCNMPREV", DBFDataType.CHARACTER, 16));
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("C_ACC_CRED", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM1", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM2", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM3", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM4", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("RBANKNAM5", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("OP_TYPE", DBFDataType.CHARACTER, 2));
dbfFields.add(new DBFField("OP_ORDER", DBFDataType.CHARACTER, 1));
dbfFields.add(new DBFField("PAY_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("INN_DEB", DBFDataType.CHARACTER, 12));
dbfFields.add(new DBFField("KPP_DEB", DBFDataType.CHARACTER, 9));
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("INN_CRED", DBFDataType.CHARACTER, 12));
dbfFields.add(new DBFField("KPP_CRED", DBFDataType.CHARACTER, 9));
dbfFields.add(new DBFField("ACC_KR1", DBFDataType.CHARACTER, 35));
dbfFields.add(new DBFField("SPECIF1", DBFDataType.CHARACTER, 255));
dbfFields.add(new DBFField("SEND_TYPE", DBFDataType.CHARACTER, 10));
dbfFields.add(new DBFField("DOC_RESULT", DBFDataType.CHARACTER, 2));
return dbfFields.toArray(DBFField[]::new);
}
}

View file

@ -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.SDf56;
import java.util.LinkedList;
import java.util.List;
@Service
public class S_DF56_Converter extends DFConverter<SDf56> {
@Override
public Object[] toObjectArray(SDf56 entity) {
List<Object> values = new LinkedList<>();
values.add(typeMatch(entity.getNumber()));
values.add(convertStrToBigDecimal(entity.getStart_datetime())); // UNIX DATE TIME
values.add(convertStrToBigDecimal(entity.getEnd_datetime())); // UNIX DATE TIME
values.add(typeMatch(entity.getAccount()));
values.add(typeMatch(entity.getDeal()));
return values.toArray(Object[]::new);
}
@Override
public DBFField[] getDBFHeaders() {
List<DBFField> dbfFields = new LinkedList<>();
dbfFields.add(new DBFField("NUMBER", DBFDataType.CHARACTER, 10));
dbfFields.add(new DBFField("START_DATETIME", DBFDataType.NUMERIC, 10));
dbfFields.add(new DBFField("END_DATETIME", DBFDataType.NUMERIC, 10));
dbfFields.add(new DBFField("ACCOUNT", DBFDataType.CHARACTER, 25));
dbfFields.add(new DBFField("DEAL", DBFDataType.CHARACTER, 4));
return dbfFields.toArray(DBFField[]::new);
}
}

View file

@ -1,6 +1,4 @@
server.port=8080
server.servlet.context-path=/exporter
spring.main.web-application-type=servlet
spring.main.web-application-type=none
export-dbf-service.hazelcast.cluster-members=10.200.200.181:5701
export-dbf-service.hazelcast.login=dev
@ -18,3 +16,10 @@ export-dbf-service.kafka-consumer.session-timeout-ms=30000
export-dbf-service.kafka-consumer.auto-offset-reset=latest
export-dbf-service.kafka-consumer.linger-ms=1
export-dbf-service.kafka-consumer.buffer-memory=33554432
export-dbf-service.kafka-producer.bootstrap-servers=localhost:9092
export-dbf-service.kafka-producer.acks=all
export-dbf-service.kafka-producer.retries=0
export-dbf-service.kafka-producer.batch-size=16384
export-dbf-service.kafka-producer.linger-ms=1
export-dbf-service.kafka-producer.buffer-memory=33554432

View file

@ -100,12 +100,19 @@ public interface Consts {
String USER_SETTINGS_UPDATE = "user-settings-update";
String STATEMENT_PROCESS = "statement-process";
String SDF04_PROCESS = "sdf04-process";
String SDF02_PROCESS = "sdf02-process";
String SDF03_PROCESS = "sdf03-process";
String SDF04_PROCESS = "sdf04-process";
String SDF05_PROCESS = "sdf05-process";
String SDF07_PROCESS = "sdf07-process";
String SDF11_PROCESS = "sdf11-process";
String SDF51_PROCESS = "sdf51-process";
String SDF53_PROCESS = "sdf53-process";
String SDF54_PROCESS = "sdf54-process";
String SDF56_PROCESS = "sdf56-process";
String SDF57_PROCESS = "sdf57-process";
String EXPORT_PROCESS = "export-process";
String EXPORT_COMPLETED = "export_completed";
String S_TRADES_IMPORTED = "s_trades-imported";
String LIM_EXPORTED = "lim_exported";
String ACCOUNT_TERMINATION = "account-termination";