This commit is contained in:
AKurakin 2023-08-09 11:53:46 +03:00
parent acb9b5a674
commit f39991a559
7 changed files with 56 additions and 21 deletions

View file

@ -27,6 +27,7 @@ import static ru.spcex.clearing.platform.messaging.domain.Consts.JOURNAL_SERVICE
public abstract class AbstractExporterService<T extends SpcexObjectBase> {
protected final Logger log = LoggerFactory.getLogger(getClass());
public static final Charset ENCODING = Charset.forName("windows-1251");
protected final SwtTable type;
protected final Imdg<T> sdfImdg;
private final DateTimeFormatter dtFileNameFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
@ -57,7 +58,7 @@ public abstract class AbstractExporterService<T extends SpcexObjectBase> {
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<T extends SpcexObjectBase> {
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<T extends SpcexObjectBase> {
// protected abstract String[] swtHeader();
protected void makeSWTData(SWTHeaderData header, Collection<T> 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

View file

@ -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<SDf09> {
@ -43,12 +45,13 @@ public class DF09Exporter extends AbstractExporterService<SDf09> {
}
@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<SDf09> {
return swtHeaderData;
}
// Выборка отсортированная
@Override
protected Collection<SDf09> selectItems(Long groupId) {
List<SDf09> 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 "Уведомление об исполнении операции загрузки ценных бумаг или уведомление об ошибке";

View file

@ -60,7 +60,7 @@ public class DF11Exporter extends AbstractExporterService<SDf11> {
}
@Override
protected SWTHeaderData getHeader(SDf11 record) {
protected SWTHeaderData getHeader(SDf11 record, int count) {
SWTHeaderData swtHeaderData = new SWTHeaderData();
swtHeaderData.setTo("CSO");
swtHeaderData.setFrom("SPCE");

View file

@ -74,7 +74,7 @@ public class DF12Exporter extends AbstractExporterService<SDf12> {
}
@Override
protected SWTHeaderData getHeader(SDf12 record) {
protected SWTHeaderData getHeader(SDf12 record, int count) {
SWTHeaderData swtHeaderData = new SWTHeaderData();
swtHeaderData.setTo("RDS");
swtHeaderData.setFrom("SPCEX");

View file

@ -61,7 +61,7 @@ public class DF14Exporter extends AbstractExporterService<SDf14> {
}
@Override
protected SWTHeaderData getHeader(SDf14 record) {
protected SWTHeaderData getHeader(SDf14 record, int count) {
SWTHeaderData swtHeaderData = new SWTHeaderData();
swtHeaderData.setTo("CSO");
swtHeaderData.setFrom("SPCE");

View file

@ -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);
}

View file

@ -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<SDf09> 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 {