Добавил загрузку файлов ДФ-20.
This commit is contained in:
psemenkov 2023-08-09 16:03:24 +03:00
parent 2c65f7ab92
commit d4142e3b03
11 changed files with 180 additions and 3 deletions

View file

@ -57,6 +57,7 @@ public class SWTImporterConfig {
map.put(ETable.S_DF_08, new SDf08Table());
map.put(ETable.S_DF_10, new SDf10Table());
map.put(ETable.S_DF_13, new SDf13Table());
map.put(ETable.S_DF_20, new SDf20Table());
map.put(ETable.S_DF_21, new SDf21Table());
return map;
}

View file

@ -4,8 +4,8 @@ public enum ETable {
S_DF_08("DF-08"),
S_DF_10("DF-10"),
S_DF_13("DF-13"),
S_DF_20("DF-20"),
S_DF_21("DF-21");
//S_DF20("DF-20");
private final String prefix;

View file

@ -0,0 +1,39 @@
package ru.spcex.clearing.swt.importer.logic.data.tables;
import ru.clearing.classes.statics.data.sdf.SDf20;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.swt.importer.logic.data.enums.ETable;
import ru.spcex.clearing.swt.importer.readers.SWTRecord;
import java.time.Instant;
public class SDf20Table extends AbstractTable<SDf20> {
private static final String PREFIX = ETable.S_DF_20.name();
private static final Class<SDf20> CLAZZ = SDf20.class;
private static final String NAME_OF_HZ_MAP = IMDGDistributedNames.Map_SDf20;
public SDf20Table() {
super(PREFIX, CLAZZ, NAME_OF_HZ_MAP);
}
@Override
public SDf20 getEntity(SWTRecord record) {
SDf20 result = new SDf20();
result.setOutDocument(record.getValFor20Tag());
result.setInDocument(record.getValFor21Tag());
result.setSecurity(record.getValFor35BTag()[0]);
result.setOpenBalance(record.getValFor60ATag());
result.setDepoCodeCl(record.getValFor83DTag()[0]);
result.setQuantity(record.getValFor35ATag());
result.setOperationCode(record.getValFor66ATag());
result.setDepoCodeCorr(record.getValFor87DTag());
result.setOperationDate(record.getValFor30Tag());
result.setCloseBalance(record.getValFor62ATag());
result.setFileName(filename);
result.setGenerationTime(Instant.now());
result.setGenerationId(fileId);
return result;
}
}

View file

@ -31,6 +31,7 @@ public class SWTImportKafkaMessenger implements InitializingBean {
messengers.put(ETable.S_DF_08, groupId -> messageBalance(groupId, SdfTable.SDF_08));
messengers.put(ETable.S_DF_10, groupId -> messageBalance(groupId, SdfTable.SDF_10));
messengers.put(ETable.S_DF_13, groupId -> messageBalance(groupId, SdfTable.SDF_13));
messengers.put(ETable.S_DF_20, groupId -> messageBalance(groupId, SdfTable.SDF_20));
messengers.put(ETable.S_DF_21, groupId -> messageBalance(groupId, SdfTable.SDF_21));
}

View file

@ -3,6 +3,7 @@ package ru.spcex.clearing.swt.importer.readers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ru.spcex.clearing.swt.importer.logic.data.enums.ReadingPatterns;
import ru.spcex.clearing.swt.importer.readers.template.SDf20Template;
import ru.spcex.clearing.swt.importer.readers.template.SDf21Template;
import java.util.List;
@ -54,4 +55,8 @@ public abstract class AbstractTemplate {
public static AbstractTemplate getSDf21Template(Scanner scanner){
return new SDf21Template(scanner);
}
public static AbstractTemplate getSDf20Template(Scanner scanner){
return new SDf20Template(scanner);
}
}

View file

@ -28,6 +28,7 @@ public class SWTReader implements Closeable {
recordEnds.put(ETable.S_DF_08, ReadingPatterns.TableRow);
recordEnds.put(ETable.S_DF_10, ReadingPatterns.TableRow);
recordEnds.put(ETable.S_DF_13, ReadingPatterns.Tag77A);
templates.put(ETable.S_DF_20, AbstractTemplate::getSDf20Template);
templates.put(ETable.S_DF_21, AbstractTemplate::getSDf21Template);
}

View file

@ -0,0 +1,102 @@
package ru.spcex.clearing.swt.importer.readers.template;
import ru.spcex.clearing.swt.importer.logic.data.enums.ReadingPatterns;
import ru.spcex.clearing.swt.importer.readers.AbstractTemplate;
import ru.spcex.clearing.swt.importer.readers.SWTRecord;
import ru.spcex.clearing.swt.importer.readers.ValidationResult;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import static ru.spcex.clearing.swt.importer.logic.data.enums.ReadingPatterns.*;
import static ru.spcex.clearing.swt.importer.readers.ValidationResult.SUCSESS;
public class SDf20Template extends AbstractTemplate {
private List<ReadingPatterns> hederPatterns = List.of(
To,
From,
Type,
DateTime,
Tag20,
Tag21,
Tag35B,
Tag60A,
Tag83D,
Tag20C,
Tag35A,
Tag23,
Tag66A,
Tag87D,
Tag30,
Tag62A);
private List<SWTRecord> groupRecords = new ArrayList<>();
private String line = "";
public SDf20Template(Scanner scanner) {
super(scanner);
}
@Override
protected List<SWTRecord> getGroupRecords() {
return groupRecords;
}
@Override
public ValidationResult readAndValidate() {
SWTRecord currentRecord = new SWTRecord();
currentRecord.setNotEmpty(false);
ReadingPatterns currentPattern;
boolean hederEnded = false;
boolean recordEmpty = true;
ValidationResult result = prepareNextLine(this::setLine);
if (!SUCSESS.equals(result)) return result;
for (int i = 0; i < hederPatterns.size() && !isReadEnded(); i++) {
currentPattern = hederPatterns.get(i);
if (currentPattern.canRead(line)) {
currentPattern.reed(line, currentRecord);
currentRecord.setNotEmpty(true);
if (Tag21.equals(currentPattern)) {
hederEnded = true;
} else if (Tag35B.equals(currentPattern)) {
recordEmpty = false;
} else if (Tag62A.equals(currentPattern)) {
groupRecords.add(currentRecord);
setReadEnded(true);
return SUCSESS;
}
result = prepareNextLine(this::setLine);
if (!SUCSESS.equals(result)) {
if (hederEnded && recordEmpty) {
setReadEnded(true);
return SUCSESS;
} else {
return result;
}
}
} else {
result = checkNotValue(line, "required teg: " + currentPattern.name() + ", but was: ");
if (!SUCSESS.equals(result)) return result;
result = prepareNextLine(this::setLine);
if (!SUCSESS.equals(result)) {
if (hederEnded && recordEmpty) {
setReadEnded(true);
return SUCSESS;
} else {
return result;
}
}
i--;
}
}
if (!recordEmpty) groupRecords.add(currentRecord);
setReadEnded(true);
return SUCSESS;
}
public void setLine(String line) {
this.line = line;
}
}

View file

@ -30,6 +30,7 @@ public class ImportSWTServiceTest {
map.put(ETable.S_DF_08, new SDf08Table());
map.put(ETable.S_DF_10, new SDf10Table());
map.put(ETable.S_DF_13, new SDf13Table());
map.put(ETable.S_DF_20, new SDf20Table());
map.put(ETable.S_DF_21, new SDf21Table());
return map;
}

View file

@ -0,0 +1,16 @@
To:SPCE
From:CSO
Type:512
Date/Time:20230717/1639
:20:SPCEX_20230717Q8712-512
:21:NONREF
:35B:ISIN MFBEL-BV-08:Ðåñïóáëèêà Áåëàðóñü:îáëèãàöèè
:60A:SHS0,
:83D:747200000AT0:ÏÀÎ "Ïðîìñâÿçüáàíê"
:20C:Ïîðó÷åíèå XXX202304061703 îò 2023-04-06
:35A:SHS100000,
:23:8712
:66A:RECFREE
:87D:747288887ZT0
:30:20230406
:62A:SHS9900000,

View file

@ -7,6 +7,7 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import ru.clearing.classes.statics.data.sdf.SDf10;
import ru.clearing.classes.statics.data.sdf.SDf13;
import ru.clearing.classes.statics.data.sdf.SDf20;
import ru.clearing.classes.statics.data.sdf.SDf21;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.swt.importer.config.ImportSWTServiceTest;
@ -49,11 +50,20 @@ class ImportToDBTest {
}
// @Test
void process() throws IOException {
ETable eTable = ETable.S_DF_21;
File swtFile = new File("D:\\repo\\mfd\\clearing\\clearing-parent\\swt-importer\\src\\test\\java\\ru\\spcex\\clearing\\swt\\importer\\files\\RDC_KS_DF-21_230717164021676.txt");
ETable eTable = ETable.S_DF_20;
File swtFile = new File("D:\\repo\\mfd\\clearing\\clearing-parent\\swt-importer\\src\\test\\java\\ru\\spcex\\clearing\\swt\\importer\\files\\RDC_KS_DF-20_230717163911161.txt");
ResultContainer resultContainer = createNewTask(eTable, swtFile);
resultContainer.setSwtSource(Files.readAllBytes(Paths.get(swtFile.getAbsolutePath())));
importToDB.process(resultContainer);
Imdg<SDf20> df20Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf20, SDf20.class);
df20Imdg.getAllValues();
eTable = ETable.S_DF_21;
swtFile = new File("D:\\repo\\mfd\\clearing\\clearing-parent\\swt-importer\\src\\test\\java\\ru\\spcex\\clearing\\swt\\importer\\files\\RDC_KS_DF-21_230717164021676.txt");
resultContainer = createNewTask(eTable, swtFile);
resultContainer.setSwtSource(Files.readAllBytes(Paths.get(swtFile.getAbsolutePath())));
importToDB.process(resultContainer);
Imdg<SDf21> df21Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf21, SDf21.class);
df21Imdg.getAllValues();

View file

@ -13,6 +13,7 @@ public enum SdfTable implements IEnumKey {
SDF_12("SDF_12"),
SDF_13("SDF_13"),
SDF_16("SDF_16"),
SDF_20("SDF_20"),
SDF_21("SDF_21"),
SDF_57("SDF_57");