This commit is contained in:
parent
bfba880629
commit
b3f56db198
3 changed files with 84 additions and 19 deletions
|
|
@ -1,16 +1,21 @@
|
|||
package ru.spcex.clearing.xml.exporter.logic.data.enums;
|
||||
|
||||
import static ru.spcex.clearing.xml.exporter.logic.stages.PrepareXMLFile.outDir;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.integration.sftp.session.SftpFileInfo;
|
||||
import ru.spcex.clearing.xml.exporter.logic.data.ResultContainer;
|
||||
import static ru.spcex.clearing.xml.exporter.logic.stages.PrepareXMLFile.outDir;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||
import ru.spcex.platform.utils.time.TimeUtil;
|
||||
|
||||
public enum FilenameTemplate {
|
||||
df_section_dateTime {
|
||||
|
|
@ -30,6 +35,25 @@ public enum FilenameTemplate {
|
|||
.append(".XML").toString();
|
||||
}
|
||||
},
|
||||
df_section_dateTime_counter_with_generation_time {
|
||||
@Override
|
||||
public boolean needSftpFiles() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFileName(ResultContainer resultContainer, ImdgProviderThreadSafeWrapper imdgPr) {
|
||||
Imdg<SpcexObjectBase> imdg = imdgPr.getImdg(resultContainer.getTableForExport().getHazelcastMapName(), SpcexObjectBase.class);
|
||||
ImdgPredicateBuilder pb = imdg.predicateBuilder();
|
||||
Collection<SpcexObjectBase> sdfs = imdg.getCollectionObjectsByPredicate(
|
||||
pb.greatEqual("generationTime", TimeUtil.localDateToInstant(LocalDate.now()))
|
||||
);
|
||||
return appendSection(resultContainer)
|
||||
.append(dateTime(resultContainer))
|
||||
.append("_").append(sdfs.size() + 1)
|
||||
.append(".XML").toString();
|
||||
}
|
||||
},
|
||||
df_section_sameName {
|
||||
@Override
|
||||
public String getFileName(ResultContainer resultContainer, List<SftpFileInfo> files) {
|
||||
|
|
@ -126,4 +150,12 @@ public enum FilenameTemplate {
|
|||
public String getFileName(ResultContainer resultContainer, List<SftpFileInfo> files) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getFileName(ResultContainer resultContainer, ImdgProviderThreadSafeWrapper provider) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean needSftpFiles() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
package ru.spcex.clearing.xml.exporter.logic.data.enums;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
public final class ImdgProviderThreadSafeWrapper {
|
||||
private final ConcurrentHashMap<String, Imdg<?>> cash = new ConcurrentHashMap<>();
|
||||
private final ImdgProvider imdgProvider;
|
||||
|
||||
public ImdgProviderThreadSafeWrapper(ImdgProvider imdgProvider) {
|
||||
this.imdgProvider = imdgProvider;
|
||||
}
|
||||
|
||||
public <T extends SpcexObjectBase> Imdg<T> getImdg(String mapName, Class<T> clazz) {
|
||||
return (Imdg<T>)
|
||||
cash.computeIfAbsent(mapName, (k) -> imdgProvider.getImdg(k, clazz));
|
||||
}
|
||||
}
|
||||
|
|
@ -20,8 +20,10 @@ import ru.spcex.clearing.xml.exporter.config.SFTPConfig;
|
|||
import ru.spcex.clearing.xml.exporter.config.settings.ExportXMLServiceSettings;
|
||||
import ru.spcex.clearing.xml.exporter.logic.data.ResultContainer;
|
||||
import ru.spcex.clearing.xml.exporter.logic.data.enums.FilenameTemplate;
|
||||
import ru.spcex.clearing.xml.exporter.logic.data.enums.ImdgProviderThreadSafeWrapper;
|
||||
import ru.spcex.clearing.xml.exporter.logic.data.enums.StageResult;
|
||||
import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||
|
||||
@Component
|
||||
|
|
@ -32,11 +34,14 @@ public class PrepareXMLFile implements InitializingBean {
|
|||
private final ExportXMLServiceSettings settings;
|
||||
public static String outDir;
|
||||
private final SFTPConfig.XmlGateway gateway;
|
||||
private final ImdgProviderThreadSafeWrapper imdgProviderWrapper;
|
||||
|
||||
public PrepareXMLFile(ExportXMLServiceSettings settings,
|
||||
public PrepareXMLFile(ImdgProvider imdgProvider,
|
||||
ExportXMLServiceSettings settings,
|
||||
SFTPConfig.XmlGateway gateway) {
|
||||
this.settings = settings;
|
||||
this.gateway = gateway;
|
||||
this.imdgProviderWrapper = new ImdgProviderThreadSafeWrapper(imdgProvider);
|
||||
}
|
||||
|
||||
public StageResult process(ResultContainer resultContainer) {
|
||||
|
|
@ -46,26 +51,34 @@ public class PrepareXMLFile implements InitializingBean {
|
|||
log.error("No SFTP scanning directories, need will be adding settings like 'export-xml-service.store.out-pay-val-dir.RUB=/RUB' and restart app");
|
||||
return StageResult.ERROR;
|
||||
}
|
||||
boolean sftpConnectionError = false;
|
||||
List<SftpFileInfo> files = new ArrayList<>();
|
||||
log.trace("Get files from SFTP paths: {}", settings.getStore().getOutPayValDir().values());
|
||||
for (String path : settings.getStore().getOutPayValDir().values()) {
|
||||
if (!path.endsWith("/")) path += "/";
|
||||
try {
|
||||
files.addAll(gateway.listFiles(path));
|
||||
} catch (Exception e) {
|
||||
log.error("SFTP connection error: {}", ExceptionUtils.getStackTrace(e));
|
||||
sftpConnectionError = true;
|
||||
files = new ArrayList<>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
log.info("There are {} files on the sFTP server in the search directories.", files.size());
|
||||
boolean sftpConnectionError = false;
|
||||
Table table = resultContainer.getTableForExport();
|
||||
FilenameTemplate template = nameTemplates.get(table);
|
||||
if (template.needSftpFiles()) {
|
||||
log.trace("Get files from SFTP paths: {}", settings.getStore().getOutPayValDir().values());
|
||||
for (String path : settings.getStore().getOutPayValDir().values()) {
|
||||
if (!path.endsWith("/")) path += "/";
|
||||
try {
|
||||
files.addAll(gateway.listFiles(path));
|
||||
} catch (Exception e) {
|
||||
log.error("SFTP connection error: {}", ExceptionUtils.getStackTrace(e));
|
||||
sftpConnectionError = true;
|
||||
files = new ArrayList<>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
log.info("There are {} files on the sFTP server in the search directories.", files.size());
|
||||
}
|
||||
LocalDateTime currentDateTime = LocalDateTime.now();
|
||||
resultContainer.setRegistrationDateTime(currentDateTime);
|
||||
|
||||
File xmlFile = new File(nameTemplates.get(table).getFileName(resultContainer, files));
|
||||
File xmlFile;
|
||||
if (template.needSftpFiles()) {
|
||||
xmlFile = new File(template.getFileName(resultContainer, files));
|
||||
} else {
|
||||
xmlFile = new File(template.getFileName(resultContainer, imdgProviderWrapper));
|
||||
}
|
||||
if (sftpConnectionError) {
|
||||
String errorFileName = "error_%s_%s".formatted(LocalDateTime.now().format(FORMATTER), xmlFile.getName());
|
||||
xmlFile = xmlFile.getParentFile().getAbsoluteFile().toPath().resolve(errorFileName).toFile();
|
||||
|
|
@ -108,7 +121,7 @@ public class PrepareXMLFile implements InitializingBean {
|
|||
nameTemplates.put(Table.S_DF07, FilenameTemplate.df_section_sameName); // df_section_sameName
|
||||
nameTemplates.put(Table.S_DF51, FilenameTemplate.df_section_dateTime_counter);
|
||||
nameTemplates.put(Table.S_DF53, FilenameTemplate.df_section_sameName); // df_section_sameName
|
||||
nameTemplates.put(Table.S_DF54, FilenameTemplate.df_section_dateTime_counter);
|
||||
nameTemplates.put(Table.S_DF54, FilenameTemplate.df_section_dateTime_counter_with_generation_time);
|
||||
nameTemplates.put(Table.S_DF56, FilenameTemplate.df_section_dateTime_counter);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue