From 807dffdc92eec2060c9cee915fc009caa101ef25 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 10 Aug 2023 12:53:45 +0300 Subject: [PATCH] =?UTF-8?q?dbf-exporter=20http://jira.mfd.msk:8088/browse/?= =?UTF-8?q?CLS-474=20=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../logic/data/enums/FilenameTemplate.java | 45 +++++++++++++++++++ .../exporter/logic/stages/PrepareDBFFile.java | 2 +- .../data/enums/FilenameTemplateTest.java | 12 +++++ .../files/RDC_KS_DF-08_230227084839859.txt | 0 .../files/RDC_KS_DF-10_221017145001001.txt | 0 .../RDC_KS_DF-13_bond_220908153459636.txt | 0 .../RDC_KS_DF-13_bond_221111131459718.txt | 0 .../files/RDC_KS_DF-20_230717163911161.txt | 0 .../files/RDC_KS_DF-21_230717164021676.txt | 0 .../input/RDC_KS_DF-20_230717163911161.txt | 16 +++++++ 10 files changed, 74 insertions(+), 1 deletion(-) rename clearing-parent/swt-importer/src/test/{java/ru/spcex/clearing/swt/importer => resources}/files/RDC_KS_DF-08_230227084839859.txt (100%) rename clearing-parent/swt-importer/src/test/{java/ru/spcex/clearing/swt/importer => resources}/files/RDC_KS_DF-10_221017145001001.txt (100%) rename clearing-parent/swt-importer/src/test/{java/ru/spcex/clearing/swt/importer => resources}/files/RDC_KS_DF-13_bond_220908153459636.txt (100%) rename clearing-parent/swt-importer/src/test/{java/ru/spcex/clearing/swt/importer => resources}/files/RDC_KS_DF-13_bond_221111131459718.txt (100%) rename clearing-parent/swt-importer/src/test/{java/ru/spcex/clearing/swt/importer => resources}/files/RDC_KS_DF-20_230717163911161.txt (100%) rename clearing-parent/swt-importer/src/test/{java/ru/spcex/clearing/swt/importer => resources}/files/RDC_KS_DF-21_230717164021676.txt (100%) create mode 100644 clearing-parent/swt-importer/src/test/resources/input/RDC_KS_DF-20_230717163911161.txt 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 index a6a2ae06b..25f3ea1dc 100644 --- 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 @@ -6,8 +6,10 @@ import org.springframework.integration.sftp.session.SftpFileInfo; import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer; import java.io.File; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.HashSet; import java.util.List; import java.util.Locale; @@ -32,6 +34,16 @@ public enum FilenameTemplate { .append(".DBF").toString(); } }, + df_section_dateTime_counter_samteDate { + @Override + public String getFileName(ResultContainer resultContainer, List files) { + return appendSection(resultContainer) + .append(dateTime(resultContainer)) + .append(counter(resultContainer, files)) + .append(".DBF").toString(); + //todo изменить логику для частичного сохранения имени(даты). Будут присылать в месте с generationId имя sourceName + } + }, df_section_dateTime_counter_mamberCode { @Override public String getFileName(ResultContainer resultContainer, List files) { @@ -107,6 +119,39 @@ public enum FilenameTemplate { return res; } + + protected LocalDate dateFromFilesInDir(String prefixOfTable, List files) { + final Logger log = LoggerFactory.getLogger(getClass()); + + HashSet dates = new HashSet<>(); + for (SftpFileInfo file : files) { + if (file.isDirectory()) continue; + String name = file.getFilename(); + String[] splitName = name.split("_"); + if (splitName.length < 3) { + log.info("Filename did not contains 3 or 4+ separator \"_\": " + name); + continue; + } + String prefix = splitName[0]; + String timestamp = splitName[2]; + + try { + if (timestamp.startsWith("PRC")) + timestamp = timestamp.substring(3); + timestamp = timestamp.substring(0, Math.min(6, timestamp.length())); + LocalDate dt = LocalDate.parse(timestamp, utilFormatter); + dates.add(dt); + } catch (Exception e) { + log.warn("Can not parse timestamp \"{}\" as {}: {}", timestamp, utilFormatter, e.getMessage()); + } + } + if (dates.isEmpty()) return null; + if (dates.size() == 1) return dates.iterator().next(); // normal + LocalDate maxDate = dates.stream().max(LocalDate::compareTo).orElse(null); + log.warn("Parsed too many dates: {}; select max {}", dates, maxDate); + return maxDate; + } + private static final DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm"); private static final DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd"); 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 2b88238c0..b956bb12d 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 @@ -71,7 +71,7 @@ public class PrepareDBFFile extends Stage implements InitializingBean { private static final Map nameTemplates = new EnumMap<>(Table.class); static { - nameTemplates.put(Table.S_DF02, FilenameTemplate.df_section_dateTime_counter); + nameTemplates.put(Table.S_DF02, FilenameTemplate.df_section_dateTime_counter_samteDate); 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_dateTime_counter); diff --git a/clearing-parent/dbf-exporter/src/test/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/FilenameTemplateTest.java b/clearing-parent/dbf-exporter/src/test/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/FilenameTemplateTest.java index a59594bc4..b9620e0e9 100644 --- a/clearing-parent/dbf-exporter/src/test/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/FilenameTemplateTest.java +++ b/clearing-parent/dbf-exporter/src/test/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/FilenameTemplateTest.java @@ -4,6 +4,7 @@ import com.jcraft.jsch.ChannelSftp.LsEntry; import org.junit.jupiter.api.Test; import org.springframework.integration.sftp.session.SftpFileInfo; +import java.time.LocalDate; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -25,4 +26,15 @@ class FilenameTemplateTest { // count = FilenameTemplate.df_section_dateTime.countSameFilesInDir("DF-02", files); // assertEquals(0, count); } + + @Test + void dateFromFilesInDir() { + LsEntry lsEntry = mock(LsEntry.class); + doReturn("DF-02_S_PRC2305191321_1.DBF").when(lsEntry).getFilename(); + SftpFileInfo sftpFileInfo = spy(new SftpFileInfo(lsEntry)); + doReturn(false).when(sftpFileInfo).isDirectory(); + List files = List.of(sftpFileInfo); + LocalDate maxDate = FilenameTemplate.df_section_dateTime_counter_samteDate.dateFromFilesInDir("DF-02", files); + assertEquals(LocalDate.of(2023,5,19), maxDate); + } } \ No newline at end of file diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-08_230227084839859.txt b/clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-08_230227084839859.txt similarity index 100% rename from clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-08_230227084839859.txt rename to clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-08_230227084839859.txt diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-10_221017145001001.txt b/clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-10_221017145001001.txt similarity index 100% rename from clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-10_221017145001001.txt rename to clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-10_221017145001001.txt diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_220908153459636.txt b/clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-13_bond_220908153459636.txt similarity index 100% rename from clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_220908153459636.txt rename to clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-13_bond_220908153459636.txt diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_221111131459718.txt b/clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-13_bond_221111131459718.txt similarity index 100% rename from clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-13_bond_221111131459718.txt rename to clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-13_bond_221111131459718.txt diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-20_230717163911161.txt b/clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-20_230717163911161.txt similarity index 100% rename from clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-20_230717163911161.txt rename to clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-20_230717163911161.txt diff --git a/clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-21_230717164021676.txt b/clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-21_230717164021676.txt similarity index 100% rename from clearing-parent/swt-importer/src/test/java/ru/spcex/clearing/swt/importer/files/RDC_KS_DF-21_230717164021676.txt rename to clearing-parent/swt-importer/src/test/resources/files/RDC_KS_DF-21_230717164021676.txt diff --git a/clearing-parent/swt-importer/src/test/resources/input/RDC_KS_DF-20_230717163911161.txt b/clearing-parent/swt-importer/src/test/resources/input/RDC_KS_DF-20_230717163911161.txt new file mode 100644 index 000000000..d5c7d8b0b --- /dev/null +++ b/clearing-parent/swt-importer/src/test/resources/input/RDC_KS_DF-20_230717163911161.txt @@ -0,0 +1,16 @@ +To:SPCE +From:CSO +Type:512 +Date/Time:20230717/1639 +:20:SPCEX_20230717Q8712-512 +:21:NONREF +:35B:ISIN MFBEL-BV-08: : +:60A:SHS0, +:83D:747200000AT0: "" +:20C: XXX202304061703 2023-04-06 +:35A:SHS9900000, +:23:8712 +:66A:RECFREE +:87D:747288887ZT0 +:30:20230406 +:62A:SHS9900000, \ No newline at end of file