From f39991a55938ee98770b26b1caceb125e00ff092 Mon Sep 17 00:00:00 2001 From: AKurakin Date: Wed, 9 Aug 2023 11:53:46 +0300 Subject: [PATCH] swt-exporter http://jira.mfd.msk:8088/browse/CLS-478 S_DF09 --- .../services/AbstractExporterService.java | 7 +-- .../services/exportimpl/DF09Exporter.java | 17 ++++++- .../services/exportimpl/DF11Exporter.java | 2 +- .../services/exportimpl/DF12Exporter.java | 2 +- .../services/exportimpl/DF14Exporter.java | 2 +- .../swt/exporter/util/SWTHeaderData.java | 3 ++ .../services/exportimpl/DF09ExporterTest.java | 44 +++++++++++++------ 7 files changed, 56 insertions(+), 21 deletions(-) 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 42b36a30d..85b752eb6 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 @@ -27,6 +27,7 @@ import static ru.spcex.clearing.platform.messaging.domain.Consts.JOURNAL_SERVICE public abstract class AbstractExporterService { protected final Logger log = LoggerFactory.getLogger(getClass()); + public static final Charset ENCODING = Charset.forName("windows-1251"); protected final SwtTable type; protected final Imdg sdfImdg; private final DateTimeFormatter dtFileNameFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); @@ -57,7 +58,7 @@ public abstract class AbstractExporterService { protected abstract String typeForHeader(); - protected abstract SWTHeaderData getHeader(T record); + protected abstract SWTHeaderData getHeader(T record, int count); public void process(Long groupId) { @@ -94,7 +95,7 @@ public abstract class AbstractExporterService { if (optional.isPresent()) { value = optional.get(); } - return getHeader(value); + return getHeader(value, records.size()); } protected abstract String getDocumentNameForJournal(); @@ -137,7 +138,7 @@ public abstract class AbstractExporterService { // protected abstract String[] swtHeader(); protected void makeSWTData(SWTHeaderData header, Collection records, OutputStream outStream) { - try (PrintWriter out = new PrintWriter(outStream, false, Charset.forName("windows-1251"))) { + try (PrintWriter out = new PrintWriter(outStream, false, ENCODING)) { out.print(header.buildString()); int totalSize = records.size(); int counter = totalSize == 0 ? 0 : 1; // нумерация начинается с 1 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 8062c474b..c12c10399 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 @@ -14,7 +14,9 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import java.io.PrintWriter; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; @Service public class DF09Exporter extends AbstractExporterService { @@ -43,12 +45,13 @@ public class DF09Exporter extends AbstractExporterService { } @Override - protected SWTHeaderData getHeader(SDf09 record){ + protected SWTHeaderData getHeader(SDf09 record, int count){ SWTHeaderData swtHeaderData = new SWTHeaderData(); swtHeaderData.setTo("CSO"); swtHeaderData.setFrom("SPCE"); swtHeaderData.setType(typeForHeader()); swtHeaderData.setDateTime(LocalDateTime.now()); + swtHeaderData.setValFor18ATag(String.valueOf(count)); swtHeaderData.setValFor20Tag(java.util.UUID.randomUUID().toString()); if(record!=null){ swtHeaderData.setValFor21Tag(record.getInDocument()); @@ -56,6 +59,18 @@ public class DF09Exporter extends AbstractExporterService { return swtHeaderData; } + // Выборка отсортированная + @Override + protected Collection selectItems(Long groupId) { + List orderedList = new ArrayList<>(super.selectItems(groupId)); + orderedList.sort((SDf09 a, SDf09 b) -> { + if (a.getSecurityCode() == null && b.getSecurityCode() == null) return 0; + if (a.getSecurityCode() != null) return a.getSecurityCode().compareTo(b.getSecurityCode()); + return -b.getSecurityCode().compareTo(a.getSecurityCode()); + }); + return orderedList; + } + @Override protected String getDocumentNameForJournal() { return "Уведомление об исполнении операции загрузки ценных бумаг или уведомление об ошибке"; 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 ef24ca1aa..8d4c786e8 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 @@ -60,7 +60,7 @@ public class DF11Exporter extends AbstractExporterService { } @Override - protected SWTHeaderData getHeader(SDf11 record) { + protected SWTHeaderData getHeader(SDf11 record, int count) { SWTHeaderData swtHeaderData = new SWTHeaderData(); swtHeaderData.setTo("CSO"); swtHeaderData.setFrom("SPCE"); 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 1648d0804..57b49a4ec 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 @@ -74,7 +74,7 @@ public class DF12Exporter extends AbstractExporterService { } @Override - protected SWTHeaderData getHeader(SDf12 record) { + protected SWTHeaderData getHeader(SDf12 record, int count) { SWTHeaderData swtHeaderData = new SWTHeaderData(); swtHeaderData.setTo("RDS"); swtHeaderData.setFrom("SPCEX"); 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 122fcedae..35f138dbc 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 @@ -61,7 +61,7 @@ public class DF14Exporter extends AbstractExporterService { } @Override - protected SWTHeaderData getHeader(SDf14 record) { + protected SWTHeaderData getHeader(SDf14 record, int count) { SWTHeaderData swtHeaderData = new SWTHeaderData(); swtHeaderData.setTo("CSO"); swtHeaderData.setFrom("SPCE"); diff --git a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/util/SWTHeaderData.java b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/util/SWTHeaderData.java index b946f5ce8..7dd98489b 100644 --- a/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/util/SWTHeaderData.java +++ b/clearing-parent/swt-exporter/src/main/java/ru/spcex/clearing/swt/exporter/util/SWTHeaderData.java @@ -147,6 +147,9 @@ public class SWTHeaderData { String timeS = dtInFileHeaderFormatter.format(dateTime); stringBuilder.append("Date/Time:").append(timeS).append(LINE_SEPARATOR); } + if (valFor18ATag != null) { + stringBuilder.append(":18A:").append(valFor18ATag).append(LINE_SEPARATOR); + } if (valFor20Tag != null) { stringBuilder.append(":20:").append(valFor20Tag).append(LINE_SEPARATOR); } 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 index e8bab72b0..68d43283e 100644 --- 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 @@ -1,6 +1,5 @@ package ru.spcex.clearing.swt.exporter.services.exportimpl; -import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import ru.clearing.classes.statics.data.sdf.SDf09; @@ -11,7 +10,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.utils.time.TimeUtil; import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.OutputStream; import java.time.LocalDate; import java.time.LocalTime; @@ -25,18 +23,33 @@ class DF09ExporterTest { @Test void convertRecord() { Collection records = new ArrayList<>(); - SDf09 rec1 = new SDf09(); - rec1.setOutDocument("test1"); - rec1.setInDocument("test2"); - rec1.setDepoCode("test3"); - rec1.setQuantity("4567"); - 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); + { + SDf09 rec1 = new SDf09(); + rec1.setOutDocument("test1"); + rec1.setInDocument("test2"); + rec1.setDepoCode("test3"); + rec1.setQuantity("4567"); + rec1.setSecurityCode("test5"); + rec1.setClientName("test6"); + rec1.setResult("test7"); + rec1.setGenerationTime(TimeUtil.localDateToInstant(dt)); + rec1.setGenerationId(1234L); + records.add(rec1); + } + { + SDf09 rec2 = new SDf09(); + rec2.setOutDocument("test1"); + rec2.setInDocument("test2"); + rec2.setDepoCode("DEPO"); + rec2.setQuantity("450"); + rec2.setSecurityCode("SECCODE"); + rec2.setClientName("SPB"); + rec2.setResult("OK"); + rec2.setGenerationTime(TimeUtil.localDateToInstant(dt)); + rec2.setGenerationId(1234L); + records.add(rec2); + } ImdgProvider mockImdg = Mockito.mock(ImdgProvider.class); TestableExporter exporter = new TestableExporter(null, null, mockImdg) { @@ -57,10 +70,13 @@ class DF09ExporterTest { "From:SPCE\r\n" + "Type:009\r\n" + "Date/Time:XXXX\r\n" + + ":18A:2\r\n" + ":20:XXXX\r\n" + ":21:test2\r\n" + "test3:4567:test5:test6:test7\r\n" + - "4567", out); + "DEPO:450:SECCODE:SPB:OK\r\n" + + "5017", out); + // Тест проверяет переносы строк: windows-1251 /r/n } private static class TestableExporter extends DF09Exporter {