diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Store.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Store.java index c4d563268..cc456f796 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Store.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/config/settings/Store.java @@ -4,6 +4,7 @@ public class Store { private String srcDir; private String outDir; + private String outDirError; private boolean deleteSrcFiles = true; public String getSrcDir() { @@ -29,4 +30,12 @@ public class Store { public void setDeleteSrcFiles(boolean deleteSrcFiles) { this.deleteSrcFiles = deleteSrcFiles; } + + public String getOutDirError() { + return outDirError; + } + + public void setOutDirError(String outDirError) { + this.outDirError = outDirError; + } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/Processor.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/Processor.java index 86340fc6f..f5a50fc3e 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/Processor.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/Processor.java @@ -22,18 +22,21 @@ public class Processor { public void process(ResultContainer task) { log.info("uuid {}. Task started", task.getUuid()); - StageResult result = null; long startMills = System.currentTimeMillis(); for (Stage currStage : pipeline) { + if (statusIsFinal(task.getLastStageStatus()) && currStage.skipCompleted()) {continue;} log.info("uuid {}. Stage: {}", task.getUuid(), currStage.getClass().getSimpleName()); - result = currStage.process(task); - log.info("uuid {}. Stage {} finished", task.getUuid(), currStage.getClass().getSimpleName()); - if (Arrays.asList(StageResult.ERROR, StageResult.COMPLETE).contains(result)) break; + task.setLastStageStatus(currStage.process(task)); + log.info("uuid {}. Stage {} finished with status {}", task.getUuid(), currStage.getClass().getSimpleName(), task.getLastStageStatus()); } long endMills = System.currentTimeMillis(); log.info("uuid {}. Task completed, result: {}, time working: {} ms", task.getUuid(), - result, + task, endMills - startMills); } + + private boolean statusIsFinal(StageResult previousStageStatus) { + return Arrays.asList(StageResult.ERROR, StageResult.COMPLETE).contains(previousStageStatus); + } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/ResultContainer.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/ResultContainer.java index d022f674b..fc5b7b7f2 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/ResultContainer.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/data/ResultContainer.java @@ -1,6 +1,7 @@ package ru.spcex.clearing.dbf.importer.logic.data; import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable; +import ru.spcex.clearing.dbf.importer.logic.data.enums.StageResult; import java.io.File; import java.util.UUID; @@ -12,6 +13,7 @@ public class ResultContainer { private UUID uuid; private ETable dbfTable; private File dbfFile; + private StageResult lastStageStatus; private byte[] dbfSource; @@ -57,4 +59,12 @@ public class ResultContainer { public void setUuid(UUID uuid) { this.uuid = uuid; } + + public StageResult getLastStageStatus() { + return lastStageStatus; + } + + public void setLastStageStatus(StageResult lastStageRes) { + this.lastStageStatus = lastStageRes; + } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ChangeDirOfFileStage.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ChangeDirOfFileStage.java index 6c30f8b30..411b37214 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ChangeDirOfFileStage.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/ChangeDirOfFileStage.java @@ -27,11 +27,21 @@ public class ChangeDirOfFileStage extends Stage { this.settings = settings; } + @Override + public boolean skipCompleted() { + return false; + } @Override public StageResult process(ResultContainer resultContainer) { File srcDir = new File(settings.getStore().getSrcDir()); - File outDir = new File(settings.getStore().getOutDir()); + File outDir; + if (resultContainer.getLastStageStatus().equals(StageResult.ERROR)) { + outDir = new File(settings.getStore().getOutDirError()); + + } else { + outDir = new File(settings.getStore().getOutDir()); + } File dbfFile = resultContainer.getDbfFile(); if (!srcDir.exists()) { @@ -39,7 +49,7 @@ public class ChangeDirOfFileStage extends Stage { return StageResult.ERROR; } if (!outDir.exists()) { - log.warn("SettlementHouse_DocIn does not exists! Trying to made new!"); + log.warn("ouput directory {} does not exists! Trying to made new!", outDir.getAbsolutePath()); if (outDir.mkdir()) { log.error("Made dir {} successfully!", outDir.getName()); } else { @@ -60,6 +70,10 @@ public class ChangeDirOfFileStage extends Stage { return StageResult.ERROR; } - return StageResult.COMPLETE; + if (resultContainer.getLastStageStatus().equals(StageResult.ERROR)) { + return StageResult.ERROR; + } else { + return StageResult.COMPLETE; + } } } diff --git a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/Stage.java b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/Stage.java index ee41691dd..084b6e8d1 100644 --- a/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/Stage.java +++ b/clearing-parent/dbf-importer/src/main/java/ru/spcex/clearing/dbf/importer/logic/stages/Stage.java @@ -9,4 +9,8 @@ public abstract class Stage { protected Logger log = LoggerFactory.getLogger(getClass()); public abstract StageResult process(ResultContainer resultContainer); + + public boolean skipCompleted() { + return true; + } } diff --git a/clearing-parent/dbf-importer/src/main/resources/application.properties b/clearing-parent/dbf-importer/src/main/resources/application.properties index c1c2a3fe0..2d3916b1d 100644 --- a/clearing-parent/dbf-importer/src/main/resources/application.properties +++ b/clearing-parent/dbf-importer/src/main/resources/application.properties @@ -7,6 +7,7 @@ import-dbf-service.scheduler.check-src-dir-cron=* * * * 1 ? import-dbf-service.store.delete-src-files=false import-dbf-service.store.src-dir=/opt/clearing/file/importer/ import-dbf-service.store.out-dir=/opt/clearing/file/importer/loaded/ +import-dbf-service.store.out-dir-error=/opt/clearing/file/importer/error/ import-dbf-service.common.encoding-source=cp866 import-dbf-service.common.insert-batch-size=100