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