InclusionObligations

This commit is contained in:
ialbert 2023-05-31 18:13:54 +03:00
parent e224a4ffb7
commit 74697eb48f
3 changed files with 32 additions and 4 deletions

View file

@ -13,11 +13,15 @@ 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.InclusionToPoolPayload;
import ru.spcex.platform.enumeration.RegistryStatus;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@ -33,6 +37,7 @@ public class InclusionObligations implements ISessionStage {
private ImdgId idGenerator;
private Imdg<Registry> registryImdg;
private KafkaSender kafkaSender;
private final List<ImdgPredicate> registryConditions = new ArrayList<>();
@Autowired
public InclusionObligations(ImdgProvider imdgProvider) {
@ -41,6 +46,17 @@ public class InclusionObligations implements ISessionStage {
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
}
/**
* для сессии возврата депозитов статус регистров
* proc ИЛИ mng
* proc не захардкожен для случая дополнительных условий
* указывать обязательно если есть дополнительные условия
*/
public InclusionObligations addRegistryCondition(ImdgPredicate imdgPredicate) {
this.registryConditions.add(imdgPredicate);
return this;
}
@Override
public StageResult submit(Task<?> task) {
InclusionToPoolPayload payload = (InclusionToPoolPayload) task.getData();
@ -59,14 +75,25 @@ public class InclusionObligations implements ISessionStage {
String sqlCondition = String.format("registryDesignation in ('%s', '%s') and " +
"registryInstrumentType in ('%s', '%s') and " +
"registryUnit = '%s' and " +
"registryStatus = '%s' and " +
"sessionType = '%s'",
"O", "T",
"S", "M",
"T",
"PROC",
sessionType);
Collection<Registry> obligations = registryImdg.getCollectionObjectsBySQL(sqlCondition);
ImdgPredicateBuilder prdctBuilder = registryImdg.predicateBuilder();
ImdgPredicate registryPredicate;
if (registryConditions.size() > 0) {
registryPredicate = prdctBuilder.and(
prdctBuilder.sql(sqlCondition),
prdctBuilder.and(registryConditions.toArray(new ImdgPredicate[0]))
);
} else {
registryPredicate = prdctBuilder.and(
prdctBuilder.sql(sqlCondition),
prdctBuilder.equals("registryStatus", RegistryStatus.PROC.getKey())
);
}
Collection<Registry> obligations = registryImdg.getCollectionObjectsByPredicate(registryPredicate);
Map<Long, List<Registry>> registryByGroupId = obligations.stream()
.filter(registry -> registry.getSettlementDate().isEqual(LocalDate.now()))
.collect(Collectors.groupingBy(Registry::getGroupId));

View file

@ -8,6 +8,7 @@ public enum RegistryStatus implements IEnumKey {
NACK("NACK"),
FAIL("FAIL"),
UNCV("UNCV"),
MNG("MNG"),
POOL("POOL")
;

View file

@ -3,7 +3,7 @@ package ru.spcex.platform.enumeration;
import ru.spcex.platform.utils.enumeration.IEnumKey;
public enum SessionType implements IEnumKey {
IPOB("IPOB"), IPO0("IPO0"), IPOT("IPOT"), TRDT("TRDT"), MEDM("MEDM"), FINL("FINL"),
IPOB("IPOB"), IPO0("IPO0"), IPOT("IPOT"), TRDT("TRDT"), MEDM("MEDM"), FINL("FINL"), XDEP("XDEP"),
;
SessionType(String key) {