обработка sdf04/sdf13 и изменения balance для регистров

This commit is contained in:
etreschenkov 2023-07-31 15:51:50 +03:00
parent 49c836cbde
commit e8232caf2b
2 changed files with 34 additions and 2 deletions

View file

@ -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)

View file

@ -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;
}