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 ce639423b..49297d4b1 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 @@ -14,6 +14,7 @@ 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.Objects; /** @@ -21,7 +22,10 @@ import java.util.Objects; */ @Component public class PrepareDBFFile extends Stage implements InitializingBean { - private static DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss"); + private static final String SECTION = "U"; + private static final String CODE_OF_MEMBER = null; + private static DateTimeFormatter tsFormatter = DateTimeFormatter.ofPattern("yyMMddHHmm"); + private static DateTimeFormatter utilFormatter = DateTimeFormatter.ofPattern("yyMMdd"); private final AProperties properties; private String outDir; @@ -34,11 +38,7 @@ public class PrepareDBFFile extends Stage implements InitializingBean { Objects.requireNonNull(resultContainer.getTableForExport()); Table table = resultContainer.getTableForExport(); - File dbfFile = new File(String.format("%s%s%s_%s.dbf", - outDir, - File.separator, - table.getFilePrefix(), - tsFormatter.format(LocalDateTime.now()))); + File dbfFile = new File(prepareFilename(table, SECTION, CODE_OF_MEMBER, outDir)); try { Path dbfFilePath = dbfFile.toPath(); Files.deleteIfExists(dbfFilePath); @@ -61,4 +61,56 @@ public class PrepareDBFFile extends Stage implements InitializingBean { if (!outDirFile.exists()) Files.createDirectories(outDirFile.toPath()); 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()); + + 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('_'); + + if (!prefixOfTable.equalsIgnoreCase("DF-05")) { + result.append(countSameFilesInDir(prefixOfTable, outDir) + 1); + result.append('_'); + } + + if (codeOfMember != null) { + result.append(codeOfMember); + } + result.append(".DBF"); + return result.toString(); + } + + private Integer countSameFilesInDir(String prefixOfTable, String outDir) { + int res = 1; + 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]; + //prepare for substring for counter + int positionOfDot = counter.indexOf('.'); + if (positionOfDot != -1) { + counter = counter.substring(0, positionOfDot); + } + res = Integer.max(res, Integer.parseInt(counter)); + + } + } + } + return res; + } }