This commit is contained in:
AKurakin 2023-08-10 17:54:01 +03:00
parent 1c1b134edf
commit 51949a281a
5 changed files with 43 additions and 46 deletions

View file

@ -11,6 +11,7 @@ import java.util.UUID;
* Контейнер для передачи результата между стадиями * Контейнер для передачи результата между стадиями
*/ */
public class ResultContainer { public class ResultContainer {
private String sourceName; // имя инициатора (файла)
private UUID uuid; private UUID uuid;
private Table tableForExport; private Table tableForExport;
private File fileForExport; private File fileForExport;
@ -60,6 +61,14 @@ public class ResultContainer {
this.groupId = groupId; this.groupId = groupId;
} }
public String getSourceName() {
return sourceName;
}
public void setSourceName(String sourceName) {
this.sourceName = sourceName;
}
public StageResult getLastStageResult() { public StageResult getLastStageResult() {
return lastStageResult; return lastStageResult;
} }

View file

@ -34,14 +34,19 @@ public enum FilenameTemplate {
.append(".DBF").toString(); .append(".DBF").toString();
} }
}, },
df_section_dateTime_counter_samteDate { df_section_sameName {
@Override @Override
public String getFileName(ResultContainer resultContainer, List<SftpFileInfo> files) { public String getFileName(ResultContainer resultContainer, List<SftpFileInfo> files) {
return appendSection(resultContainer) if (resultContainer.getSourceName() == null) {
.append(dateTime(resultContainer)) LoggerFactory.getLogger(getClass()).warn("{} groupId={}, SourceName no set. Do default name as df_section_dateTime_counter.", resultContainer.getTableForExport(), resultContainer.getGroupId());
.append(counter(resultContainer, files)) return df_section_dateTime_counter.getFileName(resultContainer, files);
.append(".DBF").toString(); }
//todo изменить логику для частичного сохранения имени(даты). Будут присылать в месте с generationId имя sourceName 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 { df_section_dateTime_counter_mamberCode {
@ -119,39 +124,6 @@ public enum FilenameTemplate {
return res; return res;
} }
protected LocalDate dateFromFilesInDir(String prefixOfTable, List<SftpFileInfo> files) {
final Logger log = LoggerFactory.getLogger(getClass());
HashSet<LocalDate> 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 tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm");
private static final DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd"); private static final DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd");

View file

@ -71,12 +71,12 @@ public class PrepareDBFFile extends Stage implements InitializingBean {
private static final Map<Table, FilenameTemplate> nameTemplates = new EnumMap<>(Table.class); private static final Map<Table, FilenameTemplate> nameTemplates = new EnumMap<>(Table.class);
static { 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_DF03, FilenameTemplate.df_section_dateTime_counter);
nameTemplates.put(Table.S_DF05, FilenameTemplate.df_section_dateTime); 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_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_DF54, FilenameTemplate.df_section_dateTime_counter);
nameTemplates.put(Table.S_DF56, FilenameTemplate.df_section_dateTime_counter); nameTemplates.put(Table.S_DF56, FilenameTemplate.df_section_dateTime_counter);
} }

View file

@ -81,6 +81,7 @@ public class CommandService extends QueueConsumer implements InitializingBean {
} }
ResultContainer resultContainer = ResultContainer.createNewTask(tableForExport.get()); ResultContainer resultContainer = ResultContainer.createNewTask(tableForExport.get());
resultContainer.setGroupId(request.getSdfGroupId()); resultContainer.setGroupId(request.getSdfGroupId());
resultContainer.setSourceName(request.getFileName());
processor.process(resultContainer); processor.process(resultContainer);
} }
@ -88,6 +89,7 @@ public class CommandService extends QueueConsumer implements InitializingBean {
SdfClearingRequest request = systemRequest.getRequestPayload(); SdfClearingRequest request = systemRequest.getRequestPayload();
ResultContainer resultContainer = ResultContainer.createNewTask(table); ResultContainer resultContainer = ResultContainer.createNewTask(table);
resultContainer.setGroupId(request.getGroupId()); resultContainer.setGroupId(request.getGroupId());
resultContainer.setSourceName(null);
processor.process(resultContainer); 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); log.info("RequestId={}, LauncherCommandRequest task={}. Table {}", systemRequest.getId(), request.getTaskName(), table);
ResultContainer resultContainer = ResultContainer.createNewTask(table); ResultContainer resultContainer = ResultContainer.createNewTask(table);
resultContainer.setGroupId(null); resultContainer.setGroupId(null);
resultContainer.setSourceName(null);
processor.process(resultContainer); processor.process(resultContainer);
} }
} }

View file

@ -3,12 +3,16 @@ package ru.spcex.clearing.dbf.exporter.logic.data.enums;
import com.jcraft.jsch.ChannelSftp.LsEntry; import com.jcraft.jsch.ChannelSftp.LsEntry;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.integration.sftp.session.SftpFileInfo; 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 java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import static ru.spcex.clearing.dbf.exporter.logic.data.enums.FilenameTemplate.df_section_sameName;
class FilenameTemplateTest { class FilenameTemplateTest {
@ -28,13 +32,22 @@ class FilenameTemplateTest {
} }
@Test @Test
void dateFromFilesInDir() { void df_section_sameName() {
LsEntry lsEntry = mock(LsEntry.class); LsEntry lsEntry = mock(LsEntry.class);
doReturn("DF-02_S_PRC2305191321_1.DBF").when(lsEntry).getFilename(); doReturn("DF-02_S_PRC2305191321_1.DBF").when(lsEntry).getFilename();
SftpFileInfo sftpFileInfo = spy(new SftpFileInfo(lsEntry)); SftpFileInfo sftpFileInfo = spy(new SftpFileInfo(lsEntry));
doReturn(false).when(sftpFileInfo).isDirectory(); doReturn(false).when(sftpFileInfo).isDirectory();
List<SftpFileInfo> files = List.of(sftpFileInfo); List<SftpFileInfo> files = List.of(sftpFileInfo);
LocalDate maxDate = FilenameTemplate.df_section_dateTime_counter_samteDate.dateFromFilesInDir("DF-02", files); ResultContainer resultContainer = ResultContainer.createNewTask(Table.S_DF02);
assertEquals(LocalDate.of(2023,5,19), maxDate); 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);
} }
} }