swt-exporter http://jira.mfd.msk:8088/browse/CLS-317 поправил формат DF09, DF11, DF12, DF14

This commit is contained in:
AKurakin 2023-06-22 19:08:21 +03:00
parent 385992cdb1
commit c18d9d41aa
5 changed files with 64 additions and 28 deletions

View file

@ -127,15 +127,6 @@ public abstract class AbstractExporterService<T extends SpcexObjectBase> {
return sdfImdg.getAllValues();
}
/**
* Последняя строка - количество
* @param records
* @return
*/
protected int countIssues(Collection<T> records) {
return records.size();
}
// Конвертация (поля см. meta.xml)
protected abstract String convertRecord(T record, ConvertionContext context);
@ -152,9 +143,11 @@ public abstract class AbstractExporterService<T extends SpcexObjectBase> {
out.print(data);
counter++;
}
int checkSumCount = countIssues(records);
out.print(checkSumCount); // количество
writeFooter(out, records, counter);
out.flush();
}
}
protected abstract void writeFooter(PrintWriter out, Collection<T> records, int counter);
}

View file

@ -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<SDf09> {
@ -72,9 +72,18 @@ public class DF09Exporter extends AbstractExporterService<SDf09> {
return stringBuilder.toString();
}
protected long countIssues(Collection<SDf09> records) {
return records.stream()
.map(r -> r.getQuantity())
.filter(StringUtil::isNotEmpty)
.mapToLong(quantity -> Long.parseLong(quantity))
.sum();
}
@Override
protected int countIssues(Collection<SDf09> records) {
return (int) records.stream().map(SDf09::getSecurityCode).filter(Objects::nonNull).distinct().count();
protected void writeFooter(PrintWriter out, Collection<SDf09> records, int counter) {
long checkSumCount = countIssues(records);
out.print(checkSumCount);
}
}

View file

@ -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<SDf11> {
return swtHeaderData;
}
protected long countIssues(Collection<SDf11> records) {
return records.stream()
.map(r -> r.getQuantity())
.filter(StringUtil::isNotEmpty)
.mapToLong(quantity -> Long.parseLong(quantity))
.sum();
}
@Override
protected int countIssues(Collection<SDf11> records) {
return (int) records.stream().map(SDf11::getSecurityCode).filter(Objects::nonNull).distinct().count();
protected void writeFooter(PrintWriter out, Collection<SDf11> records, int counter) {
long checkSumCount = countIssues(records);
out.print(checkSumCount);
}
}

View file

@ -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<SDf12> {
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<SDf12> {
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<SDf12> records) {
return records.stream()
.map(r -> r.getQuantity())
.filter(StringUtil::isNotEmpty)
.mapToLong(quantity -> Long.parseLong(quantity))
.sum();
}
@Override
protected void writeFooter(PrintWriter out, Collection<SDf12> records, int counter) {
String footerCheckSum = counter + lineSeparator + records.size() + lineSeparator;
out.print(footerCheckSum);
String shsCheckSum = "SHS" + countIssues(records);
out.print(shsCheckSum);
}
}

View file

@ -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<SDf14> {
swtHeaderData.setValFor20Tag(java.util.UUID.randomUUID().toString());
return swtHeaderData;
}
@Override
protected void writeFooter(PrintWriter out, Collection<SDf14> records, int counter) {
// нет специального конца файла
}
}