dbf-exporter http://jira.mfd.msk:8088/browse/CLS-474
This commit is contained in:
parent
1c1b134edf
commit
51949a281a
5 changed files with 43 additions and 46 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<SftpFileInfo> 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<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 utilFormatter = DateTimeFormatter.ofPattern("yyMMdd");
|
||||
|
||||
|
|
|
|||
|
|
@ -71,12 +71,12 @@ public class PrepareDBFFile extends Stage implements InitializingBean {
|
|||
private static final Map<Table, FilenameTemplate> 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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<SftpFileInfo> 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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue