swt-exporter http://jira.mfd.msk:8088/browse/CLS-478 S_DF09
This commit is contained in:
parent
acb9b5a674
commit
f39991a559
7 changed files with 56 additions and 21 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 "Уведомление об исполнении операции загрузки ценных бумаг или уведомление об ошибке";
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue