From 1710d25188a84e0773483f9ac653f05073836b35 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Tue, 30 May 2023 14:58:38 +0300 Subject: [PATCH] =?UTF-8?q?swt-exporter=20http://jira.mfd.msk:8088/browse/?= =?UTF-8?q?CLS-317=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B8=D0=BB=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA,=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=B2=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/AbstractExporterService.java | 26 ++++--- .../services/exportimpl/DF09Exporter.java | 2 +- .../services/exportimpl/DF11Exporter.java | 9 ++- .../services/exportimpl/DF12Exporter.java | 18 ++--- .../services/exportimpl/DF14Exporter.java | 4 +- .../services/exportimpl/DF09ExporterTest.java | 76 +++++++++++++++++++ 6 files changed, 107 insertions(+), 28 deletions(-) create mode 100644 clearing-parent/swt-exporter/src/test/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF09ExporterTest.java diff --git a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/AbstractExporterService.java b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/AbstractExporterService.java index 6769733a7..eb6e32ff3 100644 --- a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/AbstractExporterService.java +++ b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/AbstractExporterService.java @@ -29,6 +29,7 @@ public abstract class AbstractExporterService { private final KafkaSender kafkaSender; protected final FileStorage fileStorage; protected final Class mapClass; + protected final String lineSeparator = "\n"; protected AbstractExporterService(FileStorage fileStorage, KafkaSender kafkaSender, ImdgProvider imdgProvider, @@ -86,7 +87,7 @@ public abstract class AbstractExporterService { protected SWTHeaderData makeSwtHeader(Collection records) { Optional 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 { // protected abstract String[] swtHeader(); protected void makeSWTData(SWTHeaderData header, Collection 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); } } diff --git a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF09Exporter.java b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF09Exporter.java index 03bc8cc79..9403de12c 100644 --- a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF09Exporter.java +++ b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF09Exporter.java @@ -66,7 +66,7 @@ public class DF09Exporter extends AbstractExporterService { 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(); } diff --git a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF11Exporter.java b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF11Exporter.java index 02c0594d7..739f60ce4 100644 --- a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF11Exporter.java +++ b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF11Exporter.java @@ -48,24 +48,25 @@ public class DF11Exporter extends AbstractExporterService { } @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; diff --git a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF12Exporter.java b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF12Exporter.java index 7c38024a7..7f7a67346 100644 --- a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF12Exporter.java +++ b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF12Exporter.java @@ -19,8 +19,6 @@ import java.util.LinkedHashMap; @Service public class DF12Exporter extends AbstractExporterService { - public static final String DIRECTION_CONST = "DELFREE"; - public DF12Exporter(FileStorage fileStorage, KafkaSender kafkaSender, ImdgProvider imdgProvider) { @@ -56,13 +54,13 @@ public class DF12Exporter extends AbstractExporterService { @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 { 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()); diff --git a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF14Exporter.java b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF14Exporter.java index d2afdf797..e8b462fb4 100644 --- a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF14Exporter.java +++ b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF14Exporter.java @@ -57,12 +57,12 @@ public class DF14Exporter extends AbstractExporterService { @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"); diff --git a/clearing-parent/swt-exporter/src/test/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF09ExporterTest.java b/clearing-parent/swt-exporter/src/test/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF09ExporterTest.java new file mode 100644 index 000000000..ea90f9c5f --- /dev/null +++ b/clearing-parent/swt-exporter/src/test/java/ru/spcex/clearing/swt/exporter/services/exportimpl/DF09ExporterTest.java @@ -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 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 records, OutputStream outStream) { + super.makeSWTData(header, records, outStream); + } + + + @Override + public SWTHeaderData makeSwtHeader(Collection records) { + return super.makeSwtHeader(records); + } + } +} \ No newline at end of file