coverageStatus fix
This commit is contained in:
parent
5a158cec1d
commit
a7c93234c8
1 changed files with 49 additions and 31 deletions
|
|
@ -1,16 +1,27 @@
|
|||
package ru.spcex.clearing.session.stage.impl;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionCommon;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionCurrency;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionDeposit;
|
||||
import ru.clearing.classes.statics.data.execution.ExecutionFond;
|
||||
import ru.clearing.classes.statics.data.misc.Session;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf05;
|
||||
import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.Consts;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportRequestWithRegistryId;
|
||||
|
|
@ -22,7 +33,12 @@ 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.*;
|
||||
import ru.spcex.platform.enumeration.CoverageStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
||||
import ru.spcex.platform.enumeration.Section;
|
||||
import ru.spcex.platform.enumeration.SessionType;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||
|
|
@ -31,19 +47,8 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
|||
import ru.spcex.platform.utils.collection.Pair;
|
||||
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError;
|
||||
import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey;
|
||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||
|
||||
@Service
|
||||
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
|
||||
|
|
@ -54,6 +59,7 @@ public class FinishingSession implements ISessionStage {
|
|||
private final Imdg<Registry> registryImdg;
|
||||
private final Imdg<ExecutionFond> executionFondImdg;
|
||||
private final Imdg<ExecutionDeposit> executionDepositImdg;
|
||||
private final Imdg<ExecutionCurrency> executionCurrencyImdg;
|
||||
private final Imdg<Session> sessionImdg;
|
||||
private final Imdg<SDf05> sDf05Imdg;
|
||||
private final KafkaSender kafkaSender;
|
||||
|
|
@ -70,6 +76,7 @@ public class FinishingSession implements ISessionStage {
|
|||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.executionFondImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionFond, ExecutionFond.class);
|
||||
this.executionDepositImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionDeposit, ExecutionDeposit.class);
|
||||
this.executionCurrencyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ExecutionCurrency, ExecutionCurrency.class);
|
||||
this.sDf05Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf05, SDf05.class);
|
||||
this.kafkaSender = kafkaSender;
|
||||
this.msgResolver = msgResolver;
|
||||
|
|
@ -138,7 +145,8 @@ public class FinishingSession implements ISessionStage {
|
|||
log.trace("obligations number with second leg in the past: {}", exchangeExecutionIdsPreviousDay.size());
|
||||
int allowed = 0;
|
||||
int notAllowed = 0;
|
||||
if (IEnumKey.contains(session.getSessionType(), SessionType.FINL, SessionType.MEDM)) {
|
||||
SessionType sessionType = getEnumByKey(SessionType.class, session.getSessionType());
|
||||
if (IEnumKey.contains(sessionType, SessionType.FINL, SessionType.MEDM)) {
|
||||
Collection<ExecutionDeposit> executions = findExecutionDepositBySessionId(sessionId);
|
||||
log.trace("loaded {} ExecutionDeposits for sessionId {}", executions.size(), sessionId);
|
||||
for (ExecutionDeposit execution : executions) {
|
||||
|
|
@ -163,10 +171,10 @@ public class FinishingSession implements ISessionStage {
|
|||
allowed,
|
||||
notAllowed,
|
||||
executions.size() - (allowed + notAllowed));
|
||||
} else if (IEnumKey.contains(session.getSessionType(), SessionType.TRDT, SessionType.IPOB, SessionType.IPO0, SessionType.IPOT)) {
|
||||
Collection<ExecutionFond> executions = findExecutionFondBySessionId(sessionId);
|
||||
log.trace("loaded {} ExecutionFonds for sessionId {}", executions.size(), sessionId);
|
||||
for (ExecutionFond execution : executions) {
|
||||
} else if (IEnumKey.contains(sessionType, SessionType.CURR, SessionType.TRDT, SessionType.IPOB, SessionType.IPO0, SessionType.IPOT)) {
|
||||
Collection<? extends ExecutionCommon> executions = findExecutionFondBySessionId(sessionId, sessionType);
|
||||
log.trace("loaded {} Executions for sessionId {}", executions.size(), sessionId);
|
||||
for (ExecutionCommon execution : executions) {
|
||||
CoverageStatus toStatus = statusByExchangeId.apply(execution.getExchangeExecutionId());
|
||||
if (toStatus == null) {
|
||||
log.trace("CoverageStatus not defined for execution.id={}", execution.getId());
|
||||
|
|
@ -180,7 +188,11 @@ public class FinishingSession implements ISessionStage {
|
|||
}
|
||||
execution.setCoverageStatus(toStatus.getKey());
|
||||
execution.setUpdated(Instant.now());
|
||||
executionFondImdg.update(execution);
|
||||
if (sessionType.equals(SessionType.CURR)) {
|
||||
executionCurrencyImdg.update((ExecutionCurrency) execution);
|
||||
} else {
|
||||
executionFondImdg.update((ExecutionFond) execution);
|
||||
}
|
||||
}
|
||||
log.trace("By sessionId={} processed {} ExecutionFond: allowed {}, denied {}, skipped {}",
|
||||
sessionId,
|
||||
|
|
@ -297,22 +309,28 @@ public class FinishingSession implements ISessionStage {
|
|||
return result;
|
||||
}
|
||||
|
||||
protected Collection<ExecutionFond> findExecutionFondBySessionId(Long sessionId) {
|
||||
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||
protected Collection<? extends ExecutionCommon> findExecutionFondBySessionId(Long sessionId, SessionType sessionType) {
|
||||
Imdg<? extends ExecutionCommon> excImdg;
|
||||
if (sessionType.equals(SessionType.CURR)) {
|
||||
excImdg = executionCurrencyImdg;
|
||||
} else {
|
||||
excImdg = executionFondImdg;
|
||||
}
|
||||
ImdgPredicateBuilder pb = excImdg.predicateBuilder();
|
||||
ImdgPredicate prdct = pb.or(
|
||||
pb.equals("sessionId", sessionId),
|
||||
pb.equals("settlementDate", LocalDate.now())
|
||||
);
|
||||
Collection<ExecutionFond> result = executionFondImdg.getCollectionObjectsByPredicate(prdct)
|
||||
.stream()
|
||||
.filter(eFond -> Objects.nonNull(eFond.getSessionId()))
|
||||
.filter(eFond -> {
|
||||
if (sessionId.equals(eFond.getSessionId())) return true;
|
||||
Session session = sessionImdg.getSingleObjectByID(eFond.getSessionId());
|
||||
return sessionType.equalsByKey(session.getSessionType());
|
||||
})
|
||||
.toList();
|
||||
log.trace("found {} ExecutionFond by sessionId={}", result.size(), sessionId);
|
||||
Collection<? extends ExecutionCommon> result = excImdg.getCollectionObjectsByPredicate(prdct)
|
||||
.stream()
|
||||
.filter(eFond -> Objects.nonNull(eFond.getSessionId()))
|
||||
.filter(eFond -> {
|
||||
if (sessionId.equals(eFond.getSessionId())) return true;
|
||||
Session session = sessionImdg.getSingleObjectByID(eFond.getSessionId());
|
||||
return this.sessionType.equalsByKey(session.getSessionType());
|
||||
})
|
||||
.toList();
|
||||
log.trace("found {} Executions by sessionId={}", result.size(), sessionId);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue