execution fond status denied
This commit is contained in:
parent
9e009307f4
commit
815631d5d2
4 changed files with 36 additions and 15 deletions
|
|
@ -6,7 +6,6 @@ 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.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;
|
||||||
|
|
@ -34,11 +33,10 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
import ru.spcex.platform.utils.enumeration.IMessageResolver;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.Collection;
|
import java.time.LocalDate;
|
||||||
import java.util.Map;
|
import java.util.*;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError;
|
import static ru.spcex.clearing.error.ClearingErrorInternal.SessionGeneralError;
|
||||||
|
|
||||||
|
|
@ -112,14 +110,20 @@ public class FinishingSession implements ISessionStage {
|
||||||
.filter(rgs -> RegistryStatus.CLRD.equalsByKey(rgs.getRegistryStatus()))
|
.filter(rgs -> RegistryStatus.CLRD.equalsByKey(rgs.getRegistryStatus()))
|
||||||
.map(Registry::getGroupId) // Registry::getGroupId == Execution.ExchangeExecutionId, см. RegistryFondBuilder/RegistryDepoBuilder
|
.map(Registry::getGroupId) // Registry::getGroupId == Execution.ExchangeExecutionId, см. RegistryFondBuilder/RegistryDepoBuilder
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
Set<Long> exchangeExecutionIdsPreviousDay = oRegs.stream()
|
||||||
|
.filter(rgs -> Objects.nonNull(rgs.getSettlementDate()))
|
||||||
|
.filter(rgs -> Objects.nonNull(rgs.getTradingDate()))
|
||||||
|
.filter(rgs -> rgs.getSettlementDate().compareTo(rgs.getTradingDate()) > 0)
|
||||||
|
.map(Registry::getGroupId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
if (IEnumKey.contains(session.getSessionType(), SessionType.FINL, SessionType.MEDM)) {
|
if (IEnumKey.contains(session.getSessionType(), SessionType.FINL, SessionType.MEDM)) {
|
||||||
Collection<ExecutionDeposit> executions = findExecutionDepositBySessionId(sessionId);
|
Collection<ExecutionDeposit> executions = findExecutionDepositBySessionId(sessionId);
|
||||||
int notAllowed = 0;
|
int notAllowed = 0;
|
||||||
for (ExecutionDeposit execution : executions) {
|
for (ExecutionDeposit execution : executions) {
|
||||||
CoverageStatus toStatus = exchangeExecutionIdAllowed.contains(execution.getExchangeExecutionId()) ?
|
CoverageStatus toStatus = exchangeExecutionIdAllowed.contains(execution.getExchangeExecutionId()) ?
|
||||||
CoverageStatus.ALWD : CoverageStatus.DNED;
|
CoverageStatus.ALWD : CoverageStatus.DEND;
|
||||||
if (toStatus == CoverageStatus.DNED)
|
if (toStatus == CoverageStatus.DEND)
|
||||||
notAllowed++;
|
notAllowed++;
|
||||||
execution.setCoverageStatus(toStatus.getKey());
|
execution.setCoverageStatus(toStatus.getKey());
|
||||||
execution.setUpdated(Instant.now());
|
execution.setUpdated(Instant.now());
|
||||||
|
|
@ -128,12 +132,15 @@ public class FinishingSession implements ISessionStage {
|
||||||
log.trace("By sessionId={} update {} ExecutionDeposit: {} allowed, {} denied", sessionId,
|
log.trace("By sessionId={} update {} ExecutionDeposit: {} allowed, {} denied", sessionId,
|
||||||
executions.size(), exchangeExecutionIdAllowed.size(), notAllowed);
|
executions.size(), exchangeExecutionIdAllowed.size(), notAllowed);
|
||||||
} else if (IEnumKey.contains(session.getSessionType(), SessionType.TRDT, SessionType.IPOB, SessionType.IPO0, SessionType.IPOT)) {
|
} else if (IEnumKey.contains(session.getSessionType(), SessionType.TRDT, SessionType.IPOB, SessionType.IPO0, SessionType.IPOT)) {
|
||||||
Collection<ExecutionFond> executions = findExecutionFondBySessionId(sessionId);
|
List<ExecutionFond> executions = Stream.concat(
|
||||||
|
findExecutionFondBySessionId(sessionId).stream(),
|
||||||
|
findExecutionFondBySessionId(exchangeExecutionIdsPreviousDay).stream())
|
||||||
|
.toList();
|
||||||
int notAllowed = 0;
|
int notAllowed = 0;
|
||||||
for (ExecutionFond execution : executions) {
|
for (ExecutionFond execution : executions) {
|
||||||
CoverageStatus toStatus = exchangeExecutionIdAllowed.contains(execution.getExchangeExecutionId()) ?
|
CoverageStatus toStatus = exchangeExecutionIdAllowed.contains(execution.getExchangeExecutionId()) ?
|
||||||
CoverageStatus.ALWD : CoverageStatus.DNED;
|
CoverageStatus.ALWD : CoverageStatus.DEND;
|
||||||
if (toStatus == CoverageStatus.DNED)
|
if (toStatus == CoverageStatus.DEND)
|
||||||
notAllowed++;
|
notAllowed++;
|
||||||
execution.setCoverageStatus(toStatus.getKey());
|
execution.setCoverageStatus(toStatus.getKey());
|
||||||
execution.setUpdated(Instant.now());
|
execution.setUpdated(Instant.now());
|
||||||
|
|
@ -242,18 +249,32 @@ public class FinishingSession implements ISessionStage {
|
||||||
Collection<Registry> result = registryImdg.getCollectionObjectsByPredicate(prdct);
|
Collection<Registry> result = registryImdg.getCollectionObjectsByPredicate(prdct);
|
||||||
log.trace("found {} liabilities by query {} ", result.size(), prdct);
|
log.trace("found {} liabilities by query {} ", result.size(), prdct);
|
||||||
result = result.stream()
|
result = result.stream()
|
||||||
|
.filter(registry -> Objects.equals(registry.getSettlementDate(), LocalDate.now()))
|
||||||
.filter(registry -> Objects.equals(registry.getValueDate(), registry.getSettlementDate()))
|
.filter(registry -> Objects.equals(registry.getValueDate(), registry.getSettlementDate()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
log.debug("found {} liabilities 'O' by query {} and ValueDate==SettlementDate", result.size(), prdct);
|
log.debug("found {} liabilities 'O' by query {} and ValueDate==SettlementDate", result.size(), prdct);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Collection<ExecutionFond> findExecutionFondBySessionId(Long sessionId) {
|
protected Collection<ExecutionFond> findExecutionFondBySessionId(Long sessionId) {
|
||||||
Collection<ExecutionFond> result = executionFondImdg.getCollectionObjectsByFieldValues(Map.of("sessionId", sessionId));
|
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||||
|
ImdgPredicate prdct = pb.and(
|
||||||
|
pb.equals("sessionId", sessionId),
|
||||||
|
pb.equals("settlementDate", LocalDate.now())
|
||||||
|
);
|
||||||
|
Collection<ExecutionFond> result = executionFondImdg.getCollectionObjectsByPredicate(prdct);
|
||||||
log.trace("found {} ExecutionFond by sessionId={}", result.size(), sessionId);
|
log.trace("found {} ExecutionFond by sessionId={}", result.size(), sessionId);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Collection<ExecutionFond> findExecutionFondBySessionId(Set<Long> exchangeIds) {
|
||||||
|
ImdgPredicateBuilder pb = executionFondImdg.predicateBuilder();
|
||||||
|
ImdgPredicate prdct = pb.in("exchangeExecutionId", exchangeIds.toArray(new Long[0]));
|
||||||
|
Collection<ExecutionFond> result = executionFondImdg.getCollectionObjectsByPredicate(prdct);
|
||||||
|
log.trace("found {} ExecutionFond from first day", result.size());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
protected Collection<ExecutionDeposit> findExecutionDepositBySessionId(Long sessionId) {
|
protected Collection<ExecutionDeposit> findExecutionDepositBySessionId(Long sessionId) {
|
||||||
Collection<ExecutionDeposit> result = executionDepositImdg.getCollectionObjectsByFieldValues(Map.of("sessionId", sessionId));
|
Collection<ExecutionDeposit> result = executionDepositImdg.getCollectionObjectsByFieldValues(Map.of("sessionId", sessionId));
|
||||||
log.trace("found {} ExecutionDeposit by sessionId={}", result.size(), sessionId);
|
log.trace("found {} ExecutionDeposit by sessionId={}", result.size(), sessionId);
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ public class KSRepTradesReportBuilder extends CSVReportBuilder<EmptyParams, KSRe
|
||||||
status = "0";
|
status = "0";
|
||||||
} else if (coverage == CoverageStatus.ALWD) {
|
} else if (coverage == CoverageStatus.ALWD) {
|
||||||
status = "1";
|
status = "1";
|
||||||
} else if (coverage == CoverageStatus.DNED) {
|
} else if (coverage == CoverageStatus.DEND) {
|
||||||
if (execution instanceof ExecutionDeposit) {
|
if (execution instanceof ExecutionDeposit) {
|
||||||
ksRepTradesReport.setStatus("2");
|
ksRepTradesReport.setStatus("2");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -466,7 +466,7 @@ public class ReportServiceTest_KS {
|
||||||
executionDeposit.setFirstLegAmount(BigDecimal.valueOf(8888.888888));
|
executionDeposit.setFirstLegAmount(BigDecimal.valueOf(8888.888888));
|
||||||
executionDeposit.setExchangeExecutionId(222L);
|
executionDeposit.setExchangeExecutionId(222L);
|
||||||
executionDeposit.setExchangeExecutionTime(Instant.ofEpochMilli(LocalDateTime.of(2022, 1, 1, 1, 1, 1).toEpochSecond(ZoneOffset.UTC)));
|
executionDeposit.setExchangeExecutionTime(Instant.ofEpochMilli(LocalDateTime.of(2022, 1, 1, 1, 1, 1).toEpochSecond(ZoneOffset.UTC)));
|
||||||
executionDeposit.setCoverageStatus(CoverageStatus.DNED.getKey());
|
executionDeposit.setCoverageStatus(CoverageStatus.DEND.getKey());
|
||||||
executionDepositImdg.insert(executionDeposit);
|
executionDepositImdg.insert(executionDeposit);
|
||||||
|
|
||||||
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
|
String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L);
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
public enum CoverageStatus implements IEnumKey {
|
public enum CoverageStatus implements IEnumKey {
|
||||||
NULL("NULL"),
|
NULL("NULL"),
|
||||||
ALWD("ALWD"),
|
ALWD("ALWD"),
|
||||||
DNED("DNED"),
|
DEND("DEND"),
|
||||||
;
|
;
|
||||||
|
|
||||||
private final String key;
|
private final String key;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue