InspectionObligations 5й шаг
This commit is contained in:
parent
5b82083596
commit
1deb4337cb
6 changed files with 79 additions and 20 deletions
|
|
@ -204,10 +204,16 @@ public class Registry extends BusinessObject implements Cloneable {
|
|||
}
|
||||
|
||||
public BigDecimal getBalance() {
|
||||
if (balance == null) {
|
||||
balance = BigDecimal.ZERO;
|
||||
}
|
||||
return balance;
|
||||
}
|
||||
|
||||
public void setBalance(BigDecimal balance) {
|
||||
if (balance == null) {
|
||||
balance = BigDecimal.ZERO;
|
||||
}
|
||||
this.balance = balance;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
package ru.spcex.clearing.error;
|
||||
|
||||
import ru.spcex.platform.utils.enumeration.IErrorEnumId;
|
||||
|
||||
public enum RgsError implements IErrorEnumId {
|
||||
|
||||
A__tNotFound(5700L)
|
||||
|
||||
;
|
||||
private final Long id;
|
||||
|
||||
RgsError(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
|
@ -108,6 +108,7 @@ public class FinalMkrSession extends AbstractSession implements InitializingBean
|
|||
inclusionObligations.setSessionType(sessionType());
|
||||
inspectionObligationsReturn.setSessionType(sessionType());
|
||||
inspectionObligations.setSessionType(sessionType());
|
||||
inspectionObligations.setSection(section());
|
||||
formingPaymentInstructionDeals.setSection(section());
|
||||
formingPaymentInstructionDeals.setSessionType(sessionType());
|
||||
imdgProvider.waitAvailable();
|
||||
|
|
|
|||
|
|
@ -102,6 +102,7 @@ public class IntermediateMkrSession extends AbstractSession implements Initializ
|
|||
);
|
||||
inclusionObligations.setSessionType(sessionType());
|
||||
inspectionObligations.setSessionType(sessionType());
|
||||
inspectionObligations.setSection(section());
|
||||
formingPaymentInstructionDeals.setSection(section());
|
||||
imdgProvider.waitAvailable();
|
||||
initSessionIfPresent();
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import org.springframework.context.annotation.Scope;
|
|||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.spcex.clearing.error.ClearingError;
|
||||
import ru.spcex.clearing.error.RgsError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
||||
import ru.spcex.clearing.service.registry.RegistryManager;
|
||||
|
|
@ -35,6 +36,7 @@ import java.time.Instant;
|
|||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static ru.spcex.platform.enumeration.RegistryTradingParams.*;
|
||||
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
|
||||
|
|
@ -98,6 +100,7 @@ public class InspectionObligations implements ISessionStage {
|
|||
.toList();
|
||||
|
||||
log.info("found {} ({} groups) registries by sql: {}", registriesToProcess.size(), registriesByGroupSorted.size(), sqlCondition);
|
||||
GROUP:
|
||||
for (Map.Entry<Long, List<Registry>> entry : registriesByGroupSorted) {
|
||||
List<Registry> group = entry.getValue();
|
||||
List<Registry> obligationsInGroup = group.stream().filter(registry ->
|
||||
|
|
@ -141,6 +144,27 @@ public class InspectionObligations implements ISessionStage {
|
|||
.ifPresent(chk -> chk.isUncovered = true);
|
||||
}
|
||||
}
|
||||
for (Registry rgs : group) {
|
||||
RegistryInstrumentType mOrS = IEnumKey.getEnumByKey(RegistryInstrumentType.class, rgs.getRegistryInstrumentType());
|
||||
if (mOrS == null) {
|
||||
log.error("RegistryInstrumentType is null for {}.id={}", rgs.getRegistryCode(), rgs.getId());
|
||||
continue;
|
||||
}
|
||||
if (Section.MKR.equals(section) && mOrS.equals(RegistryInstrumentType.S)) {
|
||||
continue;
|
||||
}
|
||||
Optional<Registry> a__t = assets.searchByTcrCompanyAccount(rgs, A__T.type(mOrS));
|
||||
if (a__t.isEmpty()) {
|
||||
log.debug("groupId {}, {}.id={} - A**T not found. settings FAIL to group",
|
||||
entry.getKey(), rgs.getRegistryCode(), rgs.getId());
|
||||
Stream.concat(group.stream(), getRefundDateRgsIfPresent(group).stream())
|
||||
.forEach(r -> {
|
||||
r.setComment(msgResolver.resolve(RgsError.A__tNotFound));
|
||||
updateRegistryStatus(r, RegistryStatus.FAIL);
|
||||
});
|
||||
continue GROUP;
|
||||
}
|
||||
}
|
||||
defineStatusAndUpdateRegistry(checkResults, group);
|
||||
if (checkResults.stream().noneMatch(checkResult -> checkResult.isUncovered)) {
|
||||
Instant now = Instant.now();
|
||||
|
|
@ -152,14 +176,14 @@ public class InspectionObligations implements ISessionStage {
|
|||
Optional<Registry> a__t = assets.searchByTcrCompanyAccount(registry, A__T.type(mOrS));
|
||||
Optional<Registry> a__b = a__t.map(a__tFound -> assets
|
||||
.searchByTcrCompanyAccount(a__tFound, A__B.type(mOrS))
|
||||
.orElse(copyB(a__tFound)));
|
||||
.orElseGet(() -> copyB(a__tFound)));
|
||||
Optional<Registry> a__f = a__t.map(a__tFound -> assets
|
||||
.searchByTcrCompanyAccount(a__tFound, A__F.type(mOrS))
|
||||
.orElse(copyF(a__tFound)));
|
||||
.orElseGet(() -> copyF(a__tFound)));
|
||||
log.debug("registry {}.id={}: {}", registry.getRegistryCode(), registry.getId(),
|
||||
a__t.map(r -> "A**T.id=%d/A**B.id=%d/A**F.id=%d"
|
||||
.formatted(a__t.get().getId(), a__b.get().getId(), a__f.get().getId()))
|
||||
.orElse("not found"));
|
||||
.orElse("A**T/A**B/A**F not found"));
|
||||
if (a__t.isPresent()) {
|
||||
BigDecimal amount = safeBD(registry.getBalance());
|
||||
if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) {
|
||||
|
|
@ -283,28 +307,32 @@ foreach( at: rgsAT)
|
|||
}
|
||||
}
|
||||
//проверяем есть ли второй день для сделки (он не входит в пул, поэтому ищем отдельно)
|
||||
if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null) && !SessionType.MEDM.equals(sessionType)) {
|
||||
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));
|
||||
}
|
||||
getRefundDateRgsIfPresent(registries).forEach(rgs -> updateRegistryStatus(rgs, RegistryStatus.FAIL));
|
||||
} else {
|
||||
registries.forEach(registry -> updateRegistryStatus(registry, RegistryStatus.OK));
|
||||
}
|
||||
}
|
||||
|
||||
private Collection<Registry> getRefundDateRgsIfPresent(List<Registry> registries) {
|
||||
if (registries.stream().anyMatch(rgs -> rgs.getRefundDate() != null) && !SessionType.MEDM.equals(sessionType)) {
|
||||
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 Collections.emptyList();
|
||||
}
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
return registryImdg.getCollectionObjectsByPredicate(
|
||||
pb.and(
|
||||
pb.equals("groupId", groupIdAndSettleDate.get().getFirst()),
|
||||
pb.not(pb.equals("settlementDate", groupIdAndSettleDate.get().getSecond()))
|
||||
)
|
||||
);
|
||||
} else return Collections.emptyList();
|
||||
}
|
||||
|
||||
private void updateRegistryStatus(Registry registry, RegistryStatus registryStatus) {
|
||||
log.debug("Update registry.id: {} to {}", registry.getId(), registryStatus.getKey());
|
||||
registry.setRegistryStatus(registryStatus.getKey());
|
||||
|
|
|
|||
|
|
@ -2,4 +2,7 @@ package ru.spcex.platform.utils.enumeration;
|
|||
|
||||
public interface IMessageResolver {
|
||||
String resolve(EnumMessage errorMessage);
|
||||
default String resolve(IEnumId subject, Object... args) {
|
||||
return resolve(new EnumMessage(subject, args));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue