обработка sdf04/sdf13 и изменения balance для регистров
This commit is contained in:
parent
49c836cbde
commit
e8232caf2b
2 changed files with 34 additions and 2 deletions
|
|
@ -97,7 +97,7 @@ public class Sdf04Executor extends AbstractExecutor<SDf04> {
|
|||
//todo переписать логику поиска на аналогичную по счетам(TRAN)
|
||||
Session activeSession = sessionImdg.getSingleObjectByFieldValues(Map.of("workflowStatus", Status.Active.getKey()));
|
||||
if (activeSession != null) {
|
||||
Collection<Registry> registriesByActiveSessionId = selectABRegistryBySessionId(activeSession.getId());
|
||||
Collection<Registry> registriesByActiveSessionId = selectAMBRegistryBySessionId(activeSession.getId());
|
||||
registriesByActiveSessionId.stream().filter(registry -> registry.getBalance().compareTo(BigDecimal.ZERO) < 0)
|
||||
.forEach(registry -> {
|
||||
registry.setBalance(BigDecimal.ZERO);
|
||||
|
|
@ -125,11 +125,12 @@ public class Sdf04Executor extends AbstractExecutor<SDf04> {
|
|||
return result;
|
||||
}
|
||||
|
||||
protected Collection<Registry> selectABRegistryBySessionId(Long sessionId) {
|
||||
protected Collection<Registry> selectAMBRegistryBySessionId(Long sessionId) {
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
ImdgPredicate query = pb.and(
|
||||
pb.and(
|
||||
pb.equals("registryDesignation", RegistryDesignation.A.getKey()),
|
||||
pb.equals("registryInstrumentType", RegistryInstrumentType.M.getKey()),
|
||||
pb.equals("registryUnit", RegistryUnit.B.getKey())
|
||||
),
|
||||
pb.equals("sessionId", sessionId)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package ru.spcex.clearing.service.executors;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.clearing.classes.statics.data.misc.Session;
|
||||
import ru.clearing.classes.statics.data.registry.Registry;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf12;
|
||||
import ru.clearing.classes.statics.data.sdf.SDf13;
|
||||
|
|
@ -13,12 +14,14 @@ import ru.spcex.clearing.service.model.Result;
|
|||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||
import ru.spcex.platform.enumeration.RegistryUnit;
|
||||
import ru.spcex.platform.enumeration.Status;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
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.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
|
|
@ -29,11 +32,13 @@ public class Sdf13Executor extends AbstractExecutor<SDf13> {
|
|||
private final Imdg<SDf12> sdf12Imdg;
|
||||
private final ImdgProvider imdgProvider;
|
||||
private final Imdg<Registry> registryImdg;
|
||||
protected final Imdg<Session> sessionImdg;
|
||||
|
||||
public Sdf13Executor(ImdgProvider imdgProvider) {
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.sdf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -61,6 +66,32 @@ public class Sdf13Executor extends AbstractExecutor<SDf13> {
|
|||
Collection<Registry> registries = selectRegistryForSDF12(sDf12.getDepoCodeSender(), sDf12.getSecurityCode());
|
||||
registries.forEach(registry -> unlockRegistry(registry, new BigDecimal(sDf12.getQuantity())));
|
||||
}
|
||||
Session activeSession = sessionImdg.getSingleObjectByFieldValues(Map.of("workflowStatus", Status.Active.getKey()));
|
||||
if (activeSession != null) {
|
||||
Collection<Registry> registriesByActiveSessionId = selectASBRegistryBySessionId(activeSession.getId());
|
||||
registriesByActiveSessionId.stream().filter(registry -> registry.getBalance().compareTo(BigDecimal.ZERO) < 0)
|
||||
.forEach(registry -> {
|
||||
registry.setBalance(BigDecimal.ZERO);
|
||||
registry.setUpdated(Instant.now());
|
||||
registryImdg.update(registry);
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
protected Collection<Registry> selectASBRegistryBySessionId(Long sessionId) {
|
||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||
ImdgPredicate query = pb.and(
|
||||
pb.and(
|
||||
pb.equals("registryDesignation", RegistryDesignation.A.getKey()),
|
||||
pb.equals("registryInstrumentType", RegistryInstrumentType.S.getKey()),
|
||||
pb.equals("registryUnit", RegistryUnit.B.getKey())
|
||||
),
|
||||
pb.equals("sessionId", sessionId)
|
||||
);
|
||||
|
||||
Collection<Registry> result = registryImdg.getCollectionObjectsByPredicate(query);
|
||||
log.trace("Selected {} registry's by sql: {}", result.size(), query);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue