From 51949a281ada0f093816efd60520c0488dcf62df Mon Sep 17 00:00:00 2001 From: AKurakin Date: Thu, 10 Aug 2023 17:54:01 +0300 Subject: [PATCH] dbf-exporter http://jira.mfd.msk:8088/browse/CLS-474 --- .../exporter/logic/data/ResultContainer.java | 9 ++++ .../logic/data/enums/FilenameTemplate.java | 50 ++++--------------- .../exporter/logic/stages/PrepareDBFFile.java | 6 +-- .../dbf/exporter/services/CommandService.java | 3 ++ .../data/enums/FilenameTemplateTest.java | 21 ++++++-- 5 files changed, 43 insertions(+), 46 deletions(-) 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 6d2afc5cd..14f144e2f 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 @@ -11,6 +11,7 @@ import java.util.UUID; * Контейнер для передачи результата между стадиями */ public class ResultContainer { + private String sourceName; // имя инициатора (файла) private UUID uuid; private Table tableForExport; private File fileForExport; @@ -60,6 +61,14 @@ public class ResultContainer { this.groupId = groupId; } + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + public StageResult getLastStageResult() { return lastStageResult; } 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 25f3ea1dc..02164284c 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 @@ -34,14 +34,19 @@ public enum FilenameTemplate { .append(".DBF").toString(); } }, - df_section_dateTime_counter_samteDate { + df_section_sameName { @Override public String getFileName(ResultContainer resultContainer, List files) { - return appendSection(resultContainer) - .append(dateTime(resultContainer)) - .append(counter(resultContainer, files)) - .append(".DBF").toString(); - //todo изменить логику для частичного сохранения имени(даты). Будут присылать в месте с generationId имя sourceName + if (resultContainer.getSourceName() == null) { + LoggerFactory.getLogger(getClass()).warn("{} groupId={}, SourceName no set. Do default name as df_section_dateTime_counter.", resultContainer.getTableForExport(), resultContainer.getGroupId()); + return df_section_dateTime_counter.getFileName(resultContainer, files); + } + String name = resultContainer.getSourceName(); + int i = name.indexOf("_"); + if (i < 0) throw new IllegalArgumentException("Unexpected source name (symbol _ not found): " + name); + return outDir + File.separator + + resultContainer.getTableForExport().getFilePrefix().toUpperCase(Locale.ROOT) + + name.substring(i); } }, df_section_dateTime_counter_mamberCode { @@ -119,39 +124,6 @@ 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 b956bb12d..cfb0b219a 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,12 +71,12 @@ 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_samteDate); + nameTemplates.put(Table.S_DF02, FilenameTemplate.df_section_sameName); nameTemplates.put(Table.S_DF03, FilenameTemplate.df_section_dateTime_counter); nameTemplates.put(Table.S_DF05, FilenameTemplate.df_section_dateTime); - nameTemplates.put(Table.S_DF07, FilenameTemplate.df_section_dateTime_counter); + nameTemplates.put(Table.S_DF07, FilenameTemplate.df_section_sameName); nameTemplates.put(Table.S_DF51, FilenameTemplate.df_section_dateTime_counter); - nameTemplates.put(Table.S_DF53, FilenameTemplate.df_section_dateTime_counter); + nameTemplates.put(Table.S_DF53, FilenameTemplate.df_section_sameName); nameTemplates.put(Table.S_DF54, FilenameTemplate.df_section_dateTime_counter); nameTemplates.put(Table.S_DF56, FilenameTemplate.df_section_dateTime_counter); } diff --git a/clearing-parent/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 9a9afee90..d1a7c0bbe 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 @@ -81,6 +81,7 @@ public class CommandService extends QueueConsumer implements InitializingBean { } ResultContainer resultContainer = ResultContainer.createNewTask(tableForExport.get()); resultContainer.setGroupId(request.getSdfGroupId()); + resultContainer.setSourceName(request.getFileName()); processor.process(resultContainer); } @@ -88,6 +89,7 @@ public class CommandService extends QueueConsumer implements InitializingBean { SdfClearingRequest request = systemRequest.getRequestPayload(); ResultContainer resultContainer = ResultContainer.createNewTask(table); resultContainer.setGroupId(request.getGroupId()); + resultContainer.setSourceName(null); processor.process(resultContainer); } @@ -96,6 +98,7 @@ public class CommandService extends QueueConsumer implements InitializingBean { log.info("RequestId={}, LauncherCommandRequest task={}. Table {}", systemRequest.getId(), request.getTaskName(), table); ResultContainer resultContainer = ResultContainer.createNewTask(table); resultContainer.setGroupId(null); + resultContainer.setSourceName(null); processor.process(resultContainer); } } 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 b9620e0e9..f560f5c11 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 @@ -3,12 +3,16 @@ package ru.spcex.clearing.dbf.exporter.logic.data.enums; import com.jcraft.jsch.ChannelSftp.LsEntry; import org.junit.jupiter.api.Test; import org.springframework.integration.sftp.session.SftpFileInfo; +import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer; +import ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile; -import java.time.LocalDate; +import java.io.File; +import java.time.LocalDateTime; import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.*; +import static ru.spcex.clearing.dbf.exporter.logic.data.enums.FilenameTemplate.df_section_sameName; class FilenameTemplateTest { @@ -28,13 +32,22 @@ class FilenameTemplateTest { } @Test - void dateFromFilesInDir() { + void df_section_sameName() { 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); + ResultContainer resultContainer = ResultContainer.createNewTask(Table.S_DF02); + resultContainer.setGroupId(10L); + resultContainer.setSourceName("DF-01_S_PRC1807230915_1.dbf"); + PrepareDBFFile.outDir="TEST_DIR"; + String name = df_section_sameName.getFileName(resultContainer, files); + assertEquals("TEST_DIR" + File.separator + "DF-02_S_PRC1807230915_1.dbf", name); + + resultContainer.setSourceName(null); + resultContainer.setRegistrationDateTime(LocalDateTime.of(2023,8,10, 17,40,22)); + String name2 = df_section_sameName.getFileName(resultContainer, files); + assertEquals("TEST_DIR" + File.separator + "DF-02_S_PRC2308101740_1.DBF", name2); } } \ No newline at end of file