DF-14
This commit is contained in:
parent
0e4acc54fa
commit
5ed3f63e91
17 changed files with 137 additions and 16 deletions
|
|
@ -0,0 +1,50 @@
|
|||
package ru.spcex.clearing.service;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf14;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.platform.enumeration.SdfResult;
|
||||
import ru.spcex.platform.enumeration.SwtTable;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgId;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
@Component
|
||||
public class Sdf14Sender {
|
||||
private final ImdgId idGenerator;
|
||||
private final Imdg<SDf14> sDf14Imdg;
|
||||
private final KafkaSender kafkaSender;
|
||||
private static DateTimeFormatter tmTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
||||
@Autowired
|
||||
public Sdf14Sender(ImdgProvider imdgProvider, KafkaSender kafkaSender) {
|
||||
this.idGenerator = imdgProvider.getImdgIdGenerator();
|
||||
this.sDf14Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf14, SDf14.class);
|
||||
this.kafkaSender = kafkaSender;
|
||||
}
|
||||
|
||||
public void sendSdf14(Long sessionId) {
|
||||
SDf14 sDf14 = new SDf14();
|
||||
sDf14.setId(idGenerator.nextId());
|
||||
sDf14.setResult(SdfResult.OK.getKey());
|
||||
sDf14.setGenerationTime(Instant.now());
|
||||
sDf14.setGenerationId(idGenerator.nextId());
|
||||
|
||||
SwtExporterRequest swtReq = new SwtExporterRequest();
|
||||
swtReq.setGroupId(sDf14.getGenerationId());
|
||||
swtReq.setType(SwtTable.SDF_14.getKey());
|
||||
swtReq.setSessionId(sessionId);
|
||||
kafkaSender.sendRequestToQueue(Consts.SWT_EXPORTER, swtReq);
|
||||
log.info("created sdf14.id {}, sent request to export", sDf14.getId());
|
||||
}
|
||||
}
|
||||
|
|
@ -298,7 +298,7 @@ public class Sdf01Executor extends AbstractExecutor<SDf01> {
|
|||
sDf02.setInSDfId(sdf01.getId());
|
||||
sDf02.setGenerationId(generationIdForGroup);
|
||||
sDf02.setGenerationTime(Instant.now());
|
||||
sDf02.setResult("OK");
|
||||
sDf02.setResult(SdfResult.OK.getKey());
|
||||
return sDf02;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -300,7 +300,7 @@ public class Sdf08Executor extends AbstractExecutor<SDf08> {
|
|||
sDf09.setClientName(sdf08.getClientName());
|
||||
sDf09.setGenerationId(generationIdForGroup);
|
||||
sDf09.setGenerationTime(Instant.now());
|
||||
sDf09.setResult("OK");
|
||||
sDf09.setResult(SdfResult.OK.getKey());
|
||||
return sDf09;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ public class Sdf10Executor {
|
|||
for (SDf10 sdf10 : sdfs) {
|
||||
SDf11 sdf11 = createSdf11(sdf10, now);
|
||||
sdf11.setGenerationId(sdf11GroupId);
|
||||
sdf11.setResult("OK");
|
||||
sdf11.setResult(SdfResult.OK.getKey());
|
||||
sdf11Imdg.insert(sdf11);
|
||||
log.debug("sdf10.id={} created sdf11.id={}", sdf10.getId(), sdf11.getId());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,6 +94,7 @@ public class PrimaryAuctionB0Session extends AbstractSession implements Initiali
|
|||
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||
inclusionObligations.setSessionType(sessionType());
|
||||
inspectionObligations.setSection(section());
|
||||
finishingSession.setSection(section());
|
||||
imdgProvider.waitAvailable();
|
||||
initSessionIfPresent();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali
|
|||
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||
inclusionObligations.setSessionType(sessionType());
|
||||
inspectionObligations.setSection(section());
|
||||
finishingSession.setSection(section());
|
||||
imdgProvider.waitAvailable();
|
||||
initSessionIfPresent();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ public class PrimaryAuctionT0Session extends AbstractSession implements Initiali
|
|||
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||
inclusionObligations.setSessionType(sessionType());
|
||||
inspectionObligations.setSection(section());
|
||||
finishingSession.setSection(section());
|
||||
imdgProvider.waitAvailable();
|
||||
initSessionIfPresent();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ public class SecondaryAuctionT0Session extends AbstractSession implements Initia
|
|||
dealsPrepare.addExecutionFondCondition(execFondPb.in("market", marketCodes.get().toArray(new String[0])));
|
||||
inclusionObligations.setSessionType(sessionType());
|
||||
inspectionObligations.setSection(section());
|
||||
finishingSession.setSection(section());
|
||||
imdgProvider.waitAvailable();
|
||||
initSessionIfPresent();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,12 +14,14 @@ import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWith
|
|||
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithSessionId;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.service.Sdf05Sender;
|
||||
import ru.spcex.clearing.service.Sdf14Sender;
|
||||
import ru.spcex.clearing.session.stage.ISessionStage;
|
||||
import ru.spcex.clearing.session.stage.StageResult;
|
||||
import ru.spcex.clearing.session.stage.Task;
|
||||
import ru.spcex.clearing.session.stage.task.FinishingSessionPayload;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.Section;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
|
|
@ -43,15 +45,22 @@ public class FinishingSession implements ISessionStage {
|
|||
private final KafkaSender kafkaSender;
|
||||
private final IMessageResolver msgResolver;
|
||||
private final Sdf05Sender sdf05Sender;
|
||||
private final Sdf14Sender sdf14Sender;
|
||||
private Section section;
|
||||
|
||||
@Autowired
|
||||
public FinishingSession(ImdgProvider imdgProvider, KafkaSender kafkaSender, IMessageResolver msgResolver, Sdf05Sender sdf05Sender) {
|
||||
public FinishingSession(ImdgProvider imdgProvider, KafkaSender kafkaSender, IMessageResolver msgResolver, Sdf05Sender sdf05Sender, Sdf14Sender sdf14Sender) {
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.sDf05Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf05, SDf05.class);
|
||||
this.kafkaSender = kafkaSender;
|
||||
this.msgResolver = msgResolver;
|
||||
this.sdf05Sender = sdf05Sender;
|
||||
this.sdf14Sender = sdf14Sender;
|
||||
}
|
||||
|
||||
public void setSection(Section section) {
|
||||
this.section = section;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -89,6 +98,9 @@ public class FinishingSession implements ISessionStage {
|
|||
}
|
||||
}
|
||||
sdf05Sender.sendSdf05(pr);
|
||||
if (Section.FOND.equals(section)) {
|
||||
sdf14Sender.sendSdf14(sessionId);
|
||||
}
|
||||
StageResult<Collection<Registry>> res = new StageResult<>(null, true);
|
||||
return res;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package ru.spcex.clearing.swt.exporter.services;
|
|||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.JournalEventExportedRequest;
|
||||
import ru.spcex.clearing.platform.messaging.serialization.LogFormatter;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
|
|
@ -54,17 +55,17 @@ public abstract class AbstractExporterService<T extends SpcexObjectBase> {
|
|||
|
||||
protected abstract String typeForFileName();
|
||||
|
||||
protected abstract String sectionForFileName();
|
||||
protected abstract String sectionForFileName(SwtExporterRequest req);
|
||||
|
||||
protected abstract String typeForHeader();
|
||||
|
||||
protected abstract SWTHeaderData getHeader(T record, int count);
|
||||
|
||||
|
||||
public void process(Long groupId) {
|
||||
public void process(SwtExporterRequest req) {
|
||||
LocalDateTime exportAt = LocalDateTime.now();
|
||||
|
||||
String fileName = formatFileName(typeForFileName(), sectionForFileName(), exportAt);
|
||||
Long groupId = req.getGroupId();
|
||||
String fileName = formatFileName(typeForFileName(), sectionForFileName(req), exportAt);
|
||||
log.debug("Start export {} Lim file", fileName);
|
||||
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public class LauncherCommandReceiver extends QueueConsumer implements Initializi
|
|||
for (AbstractExporterService exporter : exporterServices) {
|
||||
log.debug("Export {}", exporter);
|
||||
try {
|
||||
exporter.process(-1L);
|
||||
exporter.process(null);
|
||||
} catch (Exception e) {
|
||||
log.error("One of exporter has error: {}", ExceptionUtils.getStackTrace(e));
|
||||
}
|
||||
|
|
@ -57,7 +57,7 @@ public class LauncherCommandReceiver extends QueueConsumer implements Initializi
|
|||
if (exporter.getType().getKey().equals(req.getType())) {
|
||||
log.debug("Export {}", exporter);
|
||||
try {
|
||||
exporter.process(req.getGroupId());
|
||||
exporter.process(req);
|
||||
} catch (Exception e) {
|
||||
log.error("Exporter has error: {}", ExceptionUtils.getStackTrace(e));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ 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;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.swt.exporter.services.AbstractExporterService;
|
||||
import ru.spcex.clearing.swt.exporter.services.FileStorage;
|
||||
|
|
@ -35,7 +36,7 @@ public class DF09Exporter extends AbstractExporterService<SDf09> {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String sectionForFileName() {
|
||||
protected String sectionForFileName(SwtExporterRequest req) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.hazelcast.aws.utility.StringUtil;
|
|||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf11;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.swt.exporter.services.AbstractExporterService;
|
||||
import ru.spcex.clearing.swt.exporter.services.FileStorage;
|
||||
|
|
@ -34,7 +35,7 @@ public class DF11Exporter extends AbstractExporterService<SDf11> {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String sectionForFileName() {
|
||||
protected String sectionForFileName(SwtExporterRequest req) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.hazelcast.aws.utility.StringUtil;
|
|||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf12;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.swt.exporter.services.AbstractExporterService;
|
||||
import ru.spcex.clearing.swt.exporter.services.FileStorage;
|
||||
|
|
@ -35,7 +36,7 @@ public class DF12Exporter extends AbstractExporterService<SDf12> {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String sectionForFileName() {
|
||||
protected String sectionForFileName(SwtExporterRequest req) {
|
||||
return "bond"; // todo bond / fund
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,25 +1,33 @@
|
|||
package ru.spcex.clearing.swt.exporter.services.exportimpl;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.misc.Session;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf14;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.importexport.SwtExporterRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.swt.exporter.services.AbstractExporterService;
|
||||
import ru.spcex.clearing.swt.exporter.services.FileStorage;
|
||||
import ru.spcex.clearing.swt.exporter.util.ConvertionContext;
|
||||
import ru.spcex.clearing.swt.exporter.util.SWTHeaderData;
|
||||
import ru.spcex.platform.enumeration.Section;
|
||||
import ru.spcex.platform.enumeration.SessionType;
|
||||
import ru.spcex.platform.enumeration.SwtTable;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
@Service
|
||||
public class DF14Exporter extends AbstractExporterService<SDf14> {
|
||||
|
||||
private static final String RESULT_CONST = "OK";
|
||||
private final Imdg<Session> sessionImdg;
|
||||
|
||||
public DF14Exporter(FileStorage fileStorage,
|
||||
KafkaSender kafkaSender,
|
||||
|
|
@ -27,6 +35,7 @@ public class DF14Exporter extends AbstractExporterService<SDf14> {
|
|||
super(fileStorage, kafkaSender, imdgProvider,
|
||||
SwtTable.SDF_14,
|
||||
IMDGDistributedNames.Map_SDf14, SDf14.class);
|
||||
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -35,8 +44,20 @@ public class DF14Exporter extends AbstractExporterService<SDf14> {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String sectionForFileName() {
|
||||
return "bond"; // todo bond / fund
|
||||
protected String sectionForFileName(SwtExporterRequest req) {
|
||||
Long sessionId = req.getSessionId();
|
||||
Objects.requireNonNull(sessionId, "cannot process DF-14 without session id");
|
||||
Session session = sessionImdg.getSingleObjectByID(sessionId);
|
||||
Objects.requireNonNull(session, "cannot process DF-14: couldn't find session.id=%d".formatted(sessionId));
|
||||
SessionType type = IEnumKey.getEnumByKey(SessionType.class, session.getSessionType());
|
||||
Objects.requireNonNull(type, "cannot process DF-14: session.id=%d couldn't determine session type %s".formatted(sessionId, session.getSessionType()));
|
||||
if (!Section.FOND.equalsByKey(session.getSection())) {
|
||||
throw new IllegalStateException("DF-14 is only processed for FOND section");
|
||||
}
|
||||
if (type == SessionType.TRDT) {
|
||||
return "fund";
|
||||
}
|
||||
return "bond";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -56,7 +77,7 @@ public class DF14Exporter extends AbstractExporterService<SDf14> {
|
|||
@Override
|
||||
protected String convertRecord(SDf14 record, ConvertionContext context) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.append(RESULT_CONST).append(SWTHeaderData.LINE_SEPARATOR);
|
||||
stringBuilder.append(record.getResult()).append(SWTHeaderData.LINE_SEPARATOR);
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
package ru.spcex.platform.enumeration;
|
||||
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
public enum SdfResult implements IEnumKey {
|
||||
OK("OK"),
|
||||
;
|
||||
|
||||
private final String key;
|
||||
|
||||
SdfResult(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,9 @@ public class SwtExporterRequest {
|
|||
@JsonProperty
|
||||
public Long groupId;
|
||||
|
||||
@JsonProperty
|
||||
public Long sessionId;
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
|
@ -24,4 +27,12 @@ public class SwtExporterRequest {
|
|||
public void setGroupId(Long groupId) {
|
||||
this.groupId = groupId;
|
||||
}
|
||||
|
||||
public Long getSessionId() {
|
||||
return sessionId;
|
||||
}
|
||||
|
||||
public void setSessionId(Long sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue