убрал для итоговой МКР провверку обязательств по бумагам в шаге 5

добавил обновление статусов регистров в FAIL по второму дню в шаге 5
This commit is contained in:
ialbert 2023-06-06 12:54:56 +03:00
parent c7a752120d
commit 41c414497d
2 changed files with 31 additions and 0 deletions

View file

@ -80,6 +80,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean
@Override @Override
public void afterPropertiesSet() throws Exception { public void afterPropertiesSet() throws Exception {
dealsPrepare.searchForExecutions(ExecutionType.ExecutionDeposit); dealsPrepare.searchForExecutions(ExecutionType.ExecutionDeposit);
inspectionObligations.setSessionType(sectionType());
} }
@Override @Override

View file

@ -13,13 +13,16 @@ import ru.spcex.clearing.session.stage.Task;
import ru.spcex.platform.enumeration.*; import ru.spcex.platform.enumeration.*;
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.ImdgPredicateBuilder;
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; 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.EnumMessage;
import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.enumeration.IMessageResolver; import ru.spcex.platform.utils.enumeration.IMessageResolver;
import ru.spcex.platform.utils.enumeration.SimpleMessageResolver; import ru.spcex.platform.utils.enumeration.SimpleMessageResolver;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -30,6 +33,7 @@ public class InspectionObligations implements ISessionStage {
private ImdgProvider imdgProvider; private ImdgProvider imdgProvider;
private Imdg<Registry> registryImdg; private Imdg<Registry> registryImdg;
private final IMessageResolver msgResolver = new SimpleMessageResolver(); private final IMessageResolver msgResolver = new SimpleMessageResolver();
private SessionType sessionType;
private final static RegistryTradingParams OS_T; private final static RegistryTradingParams OS_T;
private final static RegistryTradingParams OM_T; private final static RegistryTradingParams OM_T;
@ -65,6 +69,10 @@ public class InspectionObligations implements ISessionStage {
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
} }
public void setSessionType(SessionType sessionType) {
this.sessionType = sessionType;
}
@Override @Override
public StageResult submit(Task<?> task) { public StageResult submit(Task<?> task) {
switch (task.getTaskType()) { switch (task.getTaskType()) {
@ -95,6 +103,10 @@ public class InspectionObligations implements ISessionStage {
boolean isUncovered = false; boolean isUncovered = false;
List<CheckResult> checkResults = new ArrayList<>(); List<CheckResult> checkResults = new ArrayList<>();
for (Registry obligation : obligationsInGroup) { for (Registry obligation : obligationsInGroup) {
if (SessionType.FINL.equals(sessionType) && RegistryInstrumentType.S.equalsByKey(obligation.getRegistryInstrumentType())) {
checkResults.add(new CheckResult(obligation, false));
continue;
}
String sqlAssetRegistryCondition = searchAssetsByObligationSql(obligation); String sqlAssetRegistryCondition = searchAssetsByObligationSql(obligation);
log.debug("search asset by registry.id={} sql {}", sqlAssetRegistryCondition, obligation.getId()); log.debug("search asset by registry.id={} sql {}", sqlAssetRegistryCondition, obligation.getId());
Registry asset = registryImdg.getSingleObjectBySQL(sqlAssetRegistryCondition); Registry asset = registryImdg.getSingleObjectBySQL(sqlAssetRegistryCondition);
@ -154,6 +166,24 @@ public class InspectionObligations implements ISessionStage {
tRegistryWithSameCompany.ifPresent(registry -> updateRegistryStatus(registry, RegistryStatus.FAIL)); tRegistryWithSameCompany.ifPresent(registry -> updateRegistryStatus(registry, RegistryStatus.FAIL));
} }
} }
//проверяем есть ли второй день для сделки (он не входит в пул, поэтому ищем отдельно)
if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null)) {
Optional<Pair<Long, LocalDate>> groupIdAndSettleDate = registries.stream()
.map(rgs -> new Pair<>(rgs.getGroupId(), rgs.getSettlementDate()))
.filter(pair -> pair.getFirst() != null)
.filter(pair -> pair.getSecond() != null)
.findFirst();
if (groupIdAndSettleDate.isEmpty())
return;
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
Collection<Registry> refundRgs = registryImdg.getCollectionObjectsByPredicate(
pb.and(
pb.equals("groupId", groupIdAndSettleDate.get().getFirst()),
pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond()))
)
);
refundRgs.forEach(rgs -> updateRegistryStatus(rgs, RegistryStatus.FAIL));
}
} else { } else {
registries.forEach(registry -> updateRegistryStatus(registry, RegistryStatus.OK)); registries.forEach(registry -> updateRegistryStatus(registry, RegistryStatus.OK));
} }