Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
29c818a76a
12 changed files with 108 additions and 23 deletions
|
|
@ -7,10 +7,7 @@ import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||||
import ru.spcex.clearing.dbf.importer.logic.stages.ImportToDB;
|
import ru.spcex.clearing.dbf.importer.logic.stages.*;
|
||||||
import ru.spcex.clearing.dbf.importer.logic.stages.LoadFileFromDisk;
|
|
||||||
import ru.spcex.clearing.dbf.importer.logic.stages.Stage;
|
|
||||||
import ru.spcex.clearing.dbf.importer.logic.stages.ValidateFields;
|
|
||||||
import ru.spcex.clearing.dbf.importer.properties.AProperties;
|
import ru.spcex.clearing.dbf.importer.properties.AProperties;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
@ -36,6 +33,7 @@ public class DBFImporterConfig {
|
||||||
pipeline.add(context.getBean(LoadFileFromDisk.class));
|
pipeline.add(context.getBean(LoadFileFromDisk.class));
|
||||||
pipeline.add(context.getBean(ValidateFields.class));
|
pipeline.add(context.getBean(ValidateFields.class));
|
||||||
pipeline.add(context.getBean(ImportToDB.class));
|
pipeline.add(context.getBean(ImportToDB.class));
|
||||||
|
pipeline.add(context.getBean(ChangeDirOfFileStage.class));
|
||||||
|
|
||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ public abstract class AbstractTable<T extends SpcexObjectBase> {
|
||||||
private final String nameOfMap;
|
private final String nameOfMap;
|
||||||
protected HazelcastService hazelcastService;
|
protected HazelcastService hazelcastService;
|
||||||
protected ImdgHazelcast<T> map;
|
protected ImdgHazelcast<T> map;
|
||||||
|
protected String filename;
|
||||||
|
|
||||||
protected AbstractTable(String prefix, Class<T> clazz, String nameOfMap) {
|
protected AbstractTable(String prefix, Class<T> clazz, String nameOfMap) {
|
||||||
this.prefix = prefix;
|
this.prefix = prefix;
|
||||||
|
|
@ -17,6 +18,10 @@ public abstract class AbstractTable<T extends SpcexObjectBase> {
|
||||||
this.nameOfMap = nameOfMap;
|
this.nameOfMap = nameOfMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setFilename(String filename) {
|
||||||
|
this.filename = filename;
|
||||||
|
}
|
||||||
|
|
||||||
public void setHazelcastService(HazelcastService hazelcastService) {
|
public void setHazelcastService(HazelcastService hazelcastService) {
|
||||||
this.hazelcastService = hazelcastService;
|
this.hazelcastService = hazelcastService;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import ru.clearing.classes.statics.data.sdf.SDf01;
|
||||||
import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable;
|
import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
public class SDf01Table extends AbstractTable<SDf01> {
|
public class SDf01Table extends AbstractTable<SDf01> {
|
||||||
|
|
||||||
private static final String PREFIX = ETable.DF_01.name();
|
private static final String PREFIX = ETable.DF_01.name();
|
||||||
|
|
@ -30,6 +32,9 @@ public class SDf01Table extends AbstractTable<SDf01> {
|
||||||
result.setSumengage((String) entity[9]);
|
result.setSumengage((String) entity[9]);
|
||||||
result.setSumunblock((String) entity[10]);
|
result.setSumunblock((String) entity[10]);
|
||||||
result.setFile_type((String) entity[11]);
|
result.setFile_type((String) entity[11]);
|
||||||
|
result.setFileName(filename);
|
||||||
|
result.setGenerationTime(Instant.now());
|
||||||
|
result.setGenerationId(0L);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
public class SDf02Table extends AbstractTable<SDf02> {
|
public class SDf02Table extends AbstractTable<SDf02> {
|
||||||
|
|
||||||
private static final String PREFIX = ETable.DF_02.name();
|
private static final String PREFIX = ETable.DF_02.name();
|
||||||
|
|
@ -35,6 +37,9 @@ public class SDf02Table extends AbstractTable<SDf02> {
|
||||||
result.setGenerationTime(TimeUtil.strToInstant((String) entity[13]));
|
result.setGenerationTime(TimeUtil.strToInstant((String) entity[13]));
|
||||||
result.setGenerationId((Long) entity[14]);
|
result.setGenerationId((Long) entity[14]);
|
||||||
result.setInSDf01Id((Long) entity[15]);
|
result.setInSDf01Id((Long) entity[15]);
|
||||||
|
//result.setFileName(filename);
|
||||||
|
result.setGenerationTime(Instant.now());
|
||||||
|
result.setGenerationId(0L);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
public class SDf08Table extends AbstractTable<SDf08> {
|
public class SDf08Table extends AbstractTable<SDf08> {
|
||||||
|
|
||||||
|
|
@ -24,8 +25,9 @@ public class SDf08Table extends AbstractTable<SDf08> {
|
||||||
|
|
||||||
result.setNumber((BigDecimal) entity[0]);
|
result.setNumber((BigDecimal) entity[0]);
|
||||||
result.setDatetime(TimeUtil.strToInstant((String) entity[1]));
|
result.setDatetime(TimeUtil.strToInstant((String) entity[1]));
|
||||||
result.setGenerationTime(TimeUtil.strToInstant((String) entity[2]));
|
//result.setFileName(filename);
|
||||||
result.setGenerationId((Long) entity[3]);
|
result.setGenerationTime(Instant.now());
|
||||||
|
result.setGenerationId(0L);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,9 @@ package ru.spcex.clearing.dbf.importer.logic.data.tables;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf12;
|
import ru.clearing.classes.statics.data.sdf.SDf12;
|
||||||
import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable;
|
import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
public class SDf12Table extends AbstractTable<SDf12> {
|
public class SDf12Table extends AbstractTable<SDf12> {
|
||||||
|
|
||||||
|
|
@ -25,10 +25,9 @@ public class SDf12Table extends AbstractTable<SDf12> {
|
||||||
result.setAccount((String) entity[0]);
|
result.setAccount((String) entity[0]);
|
||||||
result.setDeal((String) entity[1]);
|
result.setDeal((String) entity[1]);
|
||||||
result.setStatus((BigDecimal) entity[2]);
|
result.setStatus((BigDecimal) entity[2]);
|
||||||
result.setFileName((String) entity[3]);
|
result.setFileName(filename);
|
||||||
result.setGenerationTime(TimeUtil.strToInstant((String) entity[4]));
|
result.setGenerationTime(Instant.now());
|
||||||
result.setGenerationId((Long) entity[5]);
|
result.setGenerationId(0L);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -6,6 +6,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
public class SDf16Table extends AbstractTable<SDf16> {
|
public class SDf16Table extends AbstractTable<SDf16> {
|
||||||
|
|
||||||
|
|
@ -31,9 +32,9 @@ public class SDf16Table extends AbstractTable<SDf16> {
|
||||||
result.setBIC((BigDecimal) entity[6]);
|
result.setBIC((BigDecimal) entity[6]);
|
||||||
result.setSPEC((String) entity[7]);
|
result.setSPEC((String) entity[7]);
|
||||||
result.setNumber((BigDecimal) entity[8]);
|
result.setNumber((BigDecimal) entity[8]);
|
||||||
result.setFileName((String) entity[9]);
|
result.setFileName(filename);
|
||||||
result.setGenerationTime(TimeUtil.strToInstant((String) entity[10]));
|
result.setGenerationTime(Instant.now());
|
||||||
result.setGenerationId((Long) entity[11]);
|
result.setGenerationId(0L);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3,9 +3,9 @@ package ru.spcex.clearing.dbf.importer.logic.data.tables;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf18;
|
import ru.clearing.classes.statics.data.sdf.SDf18;
|
||||||
import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable;
|
import ru.spcex.clearing.dbf.importer.logic.data.enums.ETable;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
public class SDf18Table extends AbstractTable<SDf18> {
|
public class SDf18Table extends AbstractTable<SDf18> {
|
||||||
|
|
||||||
|
|
@ -20,13 +20,14 @@ public class SDf18Table extends AbstractTable<SDf18> {
|
||||||
@Override
|
@Override
|
||||||
public SDf18 getEntity(Object[] entity) {
|
public SDf18 getEntity(Object[] entity) {
|
||||||
SDf18 result = new SDf18();
|
SDf18 result = new SDf18();
|
||||||
|
|
||||||
result.setAccount((String) entity[0]);
|
result.setAccount((String) entity[0]);
|
||||||
result.setDeal((String) entity[1]);
|
result.setDeal((String) entity[1]);
|
||||||
result.setStatus((BigDecimal) entity[2]);
|
result.setStatus((BigDecimal) entity[2]);
|
||||||
result.setResult((BigDecimal) entity[3]);
|
result.setResult((BigDecimal) entity[3]);
|
||||||
result.setGenerationTime(TimeUtil.strToInstant((String) entity[4]));
|
// result.setFileName(filename);
|
||||||
result.setGenerationId((Long) entity[5]);
|
result.setGenerationTime(Instant.now());
|
||||||
|
result.setGenerationId(0L);
|
||||||
result.setInSDf12Id((Long) entity[6]);
|
result.setInSDf12Id((Long) entity[6]);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
package ru.spcex.clearing.dbf.importer.logic.stages;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.spcex.clearing.dbf.importer.logic.data.ResultContainer;
|
||||||
|
import ru.spcex.clearing.dbf.importer.logic.data.enums.StageResult;
|
||||||
|
import ru.spcex.clearing.dbf.importer.properties.AProperties;
|
||||||
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
|
||||||
|
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class ChangeDirOfFileStage extends Stage {
|
||||||
|
|
||||||
|
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy.MM.dd HH.mm.ss");
|
||||||
|
private final AProperties properties;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public ChangeDirOfFileStage(AProperties properties) {
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StageResult process(ResultContainer resultContainer) {
|
||||||
|
File srcDir = new File(properties.getSrcDir());
|
||||||
|
File outDir = new File(properties.getOutDir());
|
||||||
|
File dbfFile = resultContainer.getDbfFile();
|
||||||
|
|
||||||
|
if (!srcDir.exists()) {
|
||||||
|
log.error("SettlementHouse_DocIn does not exists!");
|
||||||
|
return StageResult.ERROR;
|
||||||
|
}
|
||||||
|
if (!outDir.exists()) {
|
||||||
|
log.warn("SettlementHouse_DocIn does not exists! Trying to made new!");
|
||||||
|
if (outDir.mkdir()) {
|
||||||
|
log.error("Made dir {} successfully!", outDir.getName());
|
||||||
|
} else {
|
||||||
|
log.error("SettlementHouse_DocIn does not exists!");
|
||||||
|
return StageResult.ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!dbfFile.exists()) {
|
||||||
|
log.error("DBF file to save does not exists!");
|
||||||
|
return StageResult.ERROR;
|
||||||
|
}
|
||||||
|
String newNameOfFile = TimeUtil.formatInstant(Instant.now(), FORMATTER) + '_' + dbfFile.getName();
|
||||||
|
|
||||||
|
try {
|
||||||
|
Files.move(dbfFile.toPath(), outDir.toPath().resolve(newNameOfFile), REPLACE_EXISTING);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("Could not move file {}", e.getMessage());
|
||||||
|
return StageResult.ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return StageResult.COMPLETE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -43,6 +43,7 @@ public class ImportToDB extends Stage {
|
||||||
DBFReader dbfReader = new DBFReader(is, sourceCharset)) {
|
DBFReader dbfReader = new DBFReader(is, sourceCharset)) {
|
||||||
AbstractTable table = MAPPING_ENUM_TABLE_OBJECT_TABLE.get(currTable);
|
AbstractTable table = MAPPING_ENUM_TABLE_OBJECT_TABLE.get(currTable);
|
||||||
table.setHazelcastService(hazelcastService);
|
table.setHazelcastService(hazelcastService);
|
||||||
|
table.setFilename(resultContainer.getDbfFile().getName());
|
||||||
for (int i = 0; i < dbfReader.getRecordCount(); i++) {
|
for (int i = 0; i < dbfReader.getRecordCount(); i++) {
|
||||||
Object[] entity = dbfReader.nextRecord();
|
Object[] entity = dbfReader.nextRecord();
|
||||||
table.injectEntity(table.getEntity(entity));
|
table.injectEntity(table.getEntity(entity));
|
||||||
|
|
@ -53,6 +54,6 @@ public class ImportToDB extends Stage {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return StageResult.COMPLETE;
|
return StageResult.OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,19 +8,21 @@ public class AProperties {
|
||||||
|
|
||||||
@Value("${dbf.src-dir}")
|
@Value("${dbf.src-dir}")
|
||||||
private String srcDir;
|
private String srcDir;
|
||||||
|
@Value("${dbf.out-dir}")
|
||||||
|
private String outDir;
|
||||||
@Value("${dbf.delete-src-files}")
|
@Value("${dbf.delete-src-files}")
|
||||||
private boolean deleteSrcFiles = true;
|
private boolean deleteSrcFiles = true;
|
||||||
|
|
||||||
@Value("${dbf.encoding-source}")
|
@Value("${dbf.encoding-source}")
|
||||||
private String dbfEncoding;
|
private String dbfEncoding;
|
||||||
|
|
||||||
@Value("${dbf.insert-batch-size}")
|
@Value("${dbf.insert-batch-size}")
|
||||||
private int insertBatchSize;
|
private int insertBatchSize;
|
||||||
|
|
||||||
@Value("${dbf.threads-count}")
|
@Value("${dbf.threads-count}")
|
||||||
private int threadsCount;
|
private int threadsCount;
|
||||||
|
|
||||||
|
public String getOutDir() {
|
||||||
|
return outDir;
|
||||||
|
}
|
||||||
|
|
||||||
public String getSrcDir() {
|
public String getSrcDir() {
|
||||||
return srcDir;
|
return srcDir;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ dbf.encoding-source=cp866
|
||||||
dbf.insert-batch-size=100
|
dbf.insert-batch-size=100
|
||||||
dbf.delete-src-files=false
|
dbf.delete-src-files=false
|
||||||
dbf.src-dir=D:\\dbf\\
|
dbf.src-dir=D:\\dbf\\
|
||||||
|
dbf.out-dir=D:\\dbf\\out
|
||||||
dbf.threads-count=10
|
dbf.threads-count=10
|
||||||
import-dbf-service.hazelcast.cluster-members=127.0.0.1
|
import-dbf-service.hazelcast.cluster-members=127.0.0.1
|
||||||
import-dbf-service.hazelcast.login=dev
|
import-dbf-service.hazelcast.login=dev
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue