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 f2597a46e..53e962ffe 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 @@ -127,15 +127,6 @@ public abstract class AbstractExporterService { return sdfImdg.getAllValues(); } - /** - * Последняя строка - количество - * @param records - * @return - */ - protected int countIssues(Collection records) { - return records.size(); - } - // Конвертация (поля см. meta.xml) protected abstract String convertRecord(T record, ConvertionContext context); @@ -152,9 +143,11 @@ public abstract class AbstractExporterService { out.print(data); counter++; } - int checkSumCount = countIssues(records); - out.print(checkSumCount); // количество + writeFooter(out, records, counter); out.flush(); } } + + protected abstract void writeFooter(PrintWriter out, Collection records, int counter); + } 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 57510cf87..09ea5b2d9 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 @@ -1,5 +1,6 @@ package ru.spcex.clearing.swt.exporter.services.exportimpl; +import com.hazelcast.aws.utility.StringUtil; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.sdf.SDf09; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -11,10 +12,9 @@ import ru.spcex.clearing.swt.exporter.util.SWTHeaderData; import ru.spcex.platform.enumeration.SwtTable; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.io.PrintWriter; import java.time.LocalDateTime; import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Objects; @Service public class DF09Exporter extends AbstractExporterService { @@ -72,9 +72,18 @@ public class DF09Exporter extends AbstractExporterService { return stringBuilder.toString(); } + protected long countIssues(Collection records) { + return records.stream() + .map(r -> r.getQuantity()) + .filter(StringUtil::isNotEmpty) + .mapToLong(quantity -> Long.parseLong(quantity)) + .sum(); + } + @Override - protected int countIssues(Collection records) { - return (int) records.stream().map(SDf09::getSecurityCode).filter(Objects::nonNull).distinct().count(); + protected void writeFooter(PrintWriter out, Collection records, int counter) { + long checkSumCount = countIssues(records); + out.print(checkSumCount); } } 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 cc5170761..fc684942f 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 @@ -1,7 +1,7 @@ package ru.spcex.clearing.swt.exporter.services.exportimpl; +import com.hazelcast.aws.utility.StringUtil; import org.springframework.stereotype.Service; -import ru.clearing.classes.statics.data.sdf.SDf09; import ru.clearing.classes.statics.data.sdf.SDf11; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; @@ -12,10 +12,9 @@ import ru.spcex.clearing.swt.exporter.util.SWTHeaderData; import ru.spcex.platform.enumeration.SwtTable; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.io.PrintWriter; import java.time.LocalDateTime; import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Objects; @Service @@ -74,9 +73,18 @@ public class DF11Exporter extends AbstractExporterService { return swtHeaderData; } + protected long countIssues(Collection records) { + return records.stream() + .map(r -> r.getQuantity()) + .filter(StringUtil::isNotEmpty) + .mapToLong(quantity -> Long.parseLong(quantity)) + .sum(); + } + @Override - protected int countIssues(Collection records) { - return (int) records.stream().map(SDf11::getSecurityCode).filter(Objects::nonNull).distinct().count(); + protected void writeFooter(PrintWriter out, Collection records, int counter) { + long checkSumCount = countIssues(records); + out.print(checkSumCount); } } 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 5da283396..69cdade6c 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 @@ -1,5 +1,6 @@ package ru.spcex.clearing.swt.exporter.services.exportimpl; +import com.hazelcast.aws.utility.StringUtil; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.sdf.SDf11; import ru.clearing.classes.statics.data.sdf.SDf12; @@ -12,8 +13,10 @@ import ru.spcex.clearing.swt.exporter.util.SWTHeaderData; import ru.spcex.platform.enumeration.SwtTable; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.io.PrintWriter; import java.time.LocalDateTime; -import java.util.LinkedHashMap; +import java.util.Collection; +import java.util.Objects; @Service @@ -51,11 +54,16 @@ public class DF12Exporter extends AbstractExporterService { return "Распоряжение на проведение операций по итогам клиринга (Фондовая секция / ОФЗ, ОБР)"; } + String lastHeader20 = null; @Override protected String convertRecord(SDf12 record, ConvertionContext context) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(context.getCountOfRecord()).append(lineSeparator); stringBuilder.append(context.getTotalCountOfRecords()).append(lineSeparator); + if (!Objects.equals(lastHeader20, record.getOutDocument())) { // header + stringBuilder.append(":20:").append(record.getOutDocument()).append(lineSeparator); + lastHeader20 = record.getOutDocument(); + } stringBuilder.append(":23:").append(record.getDirection()).append(lineSeparator); stringBuilder.append(":35A:SHS").append(record.getQuantity()).append(lineSeparator); stringBuilder.append(":35B:ISIN ").append(record.getSecurityCode()).append(lineSeparator); @@ -72,13 +80,25 @@ public class DF12Exporter extends AbstractExporterService { swtHeaderData.setType(typeForHeader()); swtHeaderData.setDateTime(LocalDateTime.now()); if (record != null) { - swtHeaderData.setValFor20Tag(record.getOutDocument()); - swtHeaderData.setValFor23Tag(record.getDirection()); - swtHeaderData.setValFor35ATag(record.getQuantity()); - swtHeaderData.setValFor35BTag(record.getSecurityCode()); - swtHeaderData.setValFor82DTag(record.getDepoCodeSender()); - swtHeaderData.setValFor87CTag(record.getDepoCodeAdressee()); +// swtHeaderData.setValFor20Tag(record.getOutDocument()); } + lastHeader20 = null; return swtHeaderData; } + + protected long countIssues(Collection records) { + return records.stream() + .map(r -> r.getQuantity()) + .filter(StringUtil::isNotEmpty) + .mapToLong(quantity -> Long.parseLong(quantity)) + .sum(); + } + + @Override + protected void writeFooter(PrintWriter out, Collection records, int counter) { + String footerCheckSum = counter + lineSeparator + records.size() + lineSeparator; + out.print(footerCheckSum); + String shsCheckSum = "SHS" + countIssues(records); + out.print(shsCheckSum); + } } 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 e8b462fb4..26cd1f59f 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 @@ -13,8 +13,9 @@ import ru.spcex.clearing.swt.exporter.util.SWTHeaderData; import ru.spcex.platform.enumeration.SwtTable; import ru.spcex.platform.imdg.api.ImdgProvider; +import java.io.PrintWriter; import java.time.LocalDateTime; -import java.util.LinkedHashMap; +import java.util.Collection; @Service @@ -71,4 +72,9 @@ public class DF14Exporter extends AbstractExporterService { swtHeaderData.setValFor20Tag(java.util.UUID.randomUUID().toString()); return swtHeaderData; } + + @Override + protected void writeFooter(PrintWriter out, Collection records, int counter) { + // нет специального конца файла + } }