swt-exporter http://jira.mfd.msk:8088/browse/CLS-317 улучшил перенос строк, поправил вывод в файл

This commit is contained in:
AKurakin 2023-05-30 14:58:38 +03:00
parent d7400624fa
commit 1710d25188
6 changed files with 107 additions and 28 deletions

View file

@ -29,6 +29,7 @@ public abstract class AbstractExporterService<T extends SpcexObjectBase> {
private final KafkaSender kafkaSender;
protected final FileStorage fileStorage;
protected final Class<T> mapClass;
protected final String lineSeparator = "\n";
protected AbstractExporterService(FileStorage fileStorage,
KafkaSender kafkaSender, ImdgProvider imdgProvider,
@ -86,7 +87,7 @@ public abstract class AbstractExporterService<T extends SpcexObjectBase> {
protected SWTHeaderData makeSwtHeader(Collection<T> records) {
Optional<T> optional = records.stream().findAny();
T value = null;
if(optional.isPresent()){
if (optional.isPresent()) {
value = optional.get();
}
return getHeader(value);
@ -132,16 +133,19 @@ public abstract class AbstractExporterService<T extends SpcexObjectBase> {
// protected abstract String[] swtHeader();
protected void makeSWTData(SWTHeaderData header, Collection<T> records, OutputStream outStream) {
PrintWriter out = new PrintWriter(outStream);
out.print(header.buildString());
int counter = 0;
int totalSize = records.size();
for (T row : records) {
ConvertionContext context = new ConvertionContext(mapClass, counter, totalSize);
String data = convertRecord(row, context);
out.println(data);
counter++;
try (PrintWriter out = new PrintWriter(outStream)) {
out.print(header.buildString());
int counter = 0;
int totalSize = records.size();
for (T row : records) {
ConvertionContext context = new ConvertionContext(mapClass, counter, totalSize);
String data = convertRecord(row, context);
out.print(data);
counter++;
}
out.print(totalSize);
out.print(lineSeparator);
out.flush();
}
out.println(totalSize);
}
}

View file

@ -66,7 +66,7 @@ public class DF09Exporter extends AbstractExporterService<SDf09> {
stringBuilder.append(record.getQuantity()).append(':');
stringBuilder.append(record.getSecurityCode()).append(':');
stringBuilder.append(record.getClientName()).append(':');
stringBuilder.append(record.getResult()).append('\n');
stringBuilder.append(record.getResult()).append(lineSeparator);
return stringBuilder.toString();
}

View file

@ -48,24 +48,25 @@ public class DF11Exporter extends AbstractExporterService<SDf11> {
}
@Override
protected String convertRecord(SDf11 record, ConvertionContext context) {
protected String convertRecord(SDf11 record, ConvertionContext context) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(record.getDepoCode()).append(':');
stringBuilder.append(record.getQuantity()).append(':');
stringBuilder.append(record.getSecurityCode()).append(':');
stringBuilder.append(record.getClientName()).append(':');
stringBuilder.append(record.getResult()).append('\n');
stringBuilder.append(record.getResult()).append(lineSeparator);
return stringBuilder.toString();
}
@Override
protected SWTHeaderData getHeader(SDf11 record){
protected SWTHeaderData getHeader(SDf11 record) {
SWTHeaderData swtHeaderData = new SWTHeaderData();
swtHeaderData.setTo("CSO");
swtHeaderData.setFrom("SPCE");
swtHeaderData.setType(typeForHeader());
swtHeaderData.setDateTime(LocalDateTime.now());
swtHeaderData.setValFor20Tag(java.util.UUID.randomUUID().toString());
if(record!=null){
if (record != null) {
swtHeaderData.setValFor21Tag(record.getInDocument());
}
return swtHeaderData;

View file

@ -19,8 +19,6 @@ import java.util.LinkedHashMap;
@Service
public class DF12Exporter extends AbstractExporterService<SDf12> {
public static final String DIRECTION_CONST = "DELFREE";
public DF12Exporter(FileStorage fileStorage,
KafkaSender kafkaSender,
ImdgProvider imdgProvider) {
@ -56,13 +54,13 @@ public class DF12Exporter extends AbstractExporterService<SDf12> {
@Override
protected String convertRecord(SDf12 record, ConvertionContext context) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(context.getCountOfRecord()).append('\n');
stringBuilder.append(context.getTotalCountOfRecords()).append('\n');
stringBuilder.append(":23:").append(DIRECTION_CONST).append('\n'); //fixme
stringBuilder.append(":35A:").append(record.getQuantity()).append('\n');
stringBuilder.append(":35B:").append(record.getSecurityCode()).append('\n');
stringBuilder.append(":82D:").append(record.getDepoCodeSender()).append('\n');
stringBuilder.append(":87C:").append(record.getDepoCodeAdressee()).append('\n');
stringBuilder.append(context.getCountOfRecord()).append(lineSeparator);
stringBuilder.append(context.getTotalCountOfRecords()).append(lineSeparator);
stringBuilder.append(":23:").append(record.getDirection()).append(lineSeparator);
stringBuilder.append(":35A:").append(record.getQuantity()).append(lineSeparator);
stringBuilder.append(":35B:").append(record.getSecurityCode()).append(lineSeparator);
stringBuilder.append(":82D:").append(record.getDepoCodeSender()).append(lineSeparator);
stringBuilder.append(":87C:").append(record.getDepoCodeAdressee()).append(lineSeparator);
return stringBuilder.toString();
}
@ -75,7 +73,7 @@ public class DF12Exporter extends AbstractExporterService<SDf12> {
swtHeaderData.setDateTime(LocalDateTime.now());
if (record != null) {
swtHeaderData.setValFor20Tag(record.getOutDocument());
swtHeaderData.setValFor23Tag(DIRECTION_CONST); //FIXME
swtHeaderData.setValFor23Tag(record.getDirection());
swtHeaderData.setValFor35ATag(record.getQuantity());
swtHeaderData.setValFor35BTag(record.getSecurityCode());
swtHeaderData.setValFor82DTag(record.getDepoCodeSender());

View file

@ -57,12 +57,12 @@ public class DF14Exporter extends AbstractExporterService<SDf14> {
@Override
protected String convertRecord(SDf14 record, ConvertionContext context) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(RESULT_CONST).append('\n');
stringBuilder.append(RESULT_CONST).append(lineSeparator);
return stringBuilder.toString();
}
@Override
protected SWTHeaderData getHeader(SDf14 record){
protected SWTHeaderData getHeader(SDf14 record) {
SWTHeaderData swtHeaderData = new SWTHeaderData();
swtHeaderData.setTo("CSO");
swtHeaderData.setFrom("SPCE");

View file

@ -0,0 +1,76 @@
package ru.spcex.clearing.swt.exporter.services.exportimpl;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import ru.clearing.classes.statics.data.sdf.SDf09;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
import ru.spcex.clearing.swt.exporter.services.FileStorage;
import ru.spcex.clearing.swt.exporter.util.SWTHeaderData;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.time.TimeUtil;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Collection;
import static org.junit.jupiter.api.Assertions.*;
class DF09ExporterTest {
@Test
void convertRecord() {
Collection<SDf09> records = new ArrayList<>();
SDf09 rec1 = new SDf09();
rec1.setOutDocument("test1");
rec1.setInDocument("test2");
rec1.setDepoCode("test3");
rec1.setQuantity("test4");
rec1.setSecurityCode("test5");
rec1.setClientName("test6");
rec1.setResult("test7");
LocalDate dt = LocalDate.of(2023, 10, 12);
rec1.setGenerationTime(TimeUtil.localDateToInstant(dt));
rec1.setGenerationId(1234L);
records.add(rec1);
ImdgProvider mockImdg = Mockito.mock(ImdgProvider.class);
TestableExporter exporter = new TestableExporter(null, null, mockImdg) {
};
SWTHeaderData header = exporter.makeSwtHeader(records);
ByteArrayOutputStream outBytes = new ByteArrayOutputStream();
exporter.makeSWTData(header, records, outBytes);
String out = outBytes.toString();
assertTrue(out.length() > 35);
// assertEquals("To:CSO\n" +
// "From:SPCE\n" +
// "Type:009\n" +
// "Date/Time:20230530/1457\n" +
// ":20:7cf8af93-1a5e-456e-85c7-bca92dd36797\n" + // random UUID
// ":21:test2\n" +
// "test3:test4:test5:test6:test7\n" +
// "1\n", out);
}
private static class TestableExporter extends DF09Exporter {
public TestableExporter(FileStorage fileStorage, KafkaSender kafkaSender, ImdgProvider imdgProvider) {
super(fileStorage, kafkaSender, imdgProvider);
}
@Override
public void makeSWTData(SWTHeaderData header, Collection<SDf09> records, OutputStream outStream) {
super.makeSWTData(header, records, outStream);
}
@Override
public SWTHeaderData makeSwtHeader(Collection<SDf09> records) {
return super.makeSwtHeader(records);
}
}
}