обработка 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)
|
//todo переписать логику поиска на аналогичную по счетам(TRAN)
|
||||||
Session activeSession = sessionImdg.getSingleObjectByFieldValues(Map.of("workflowStatus", Status.Active.getKey()));
|
Session activeSession = sessionImdg.getSingleObjectByFieldValues(Map.of("workflowStatus", Status.Active.getKey()));
|
||||||
if (activeSession != null) {
|
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)
|
registriesByActiveSessionId.stream().filter(registry -> registry.getBalance().compareTo(BigDecimal.ZERO) < 0)
|
||||||
.forEach(registry -> {
|
.forEach(registry -> {
|
||||||
registry.setBalance(BigDecimal.ZERO);
|
registry.setBalance(BigDecimal.ZERO);
|
||||||
|
|
@ -125,11 +125,12 @@ public class Sdf04Executor extends AbstractExecutor<SDf04> {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Collection<Registry> selectABRegistryBySessionId(Long sessionId) {
|
protected Collection<Registry> selectAMBRegistryBySessionId(Long sessionId) {
|
||||||
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
ImdgPredicateBuilder pb = registryImdg.predicateBuilder();
|
||||||
ImdgPredicate query = pb.and(
|
ImdgPredicate query = pb.and(
|
||||||
pb.and(
|
pb.and(
|
||||||
pb.equals("registryDesignation", RegistryDesignation.A.getKey()),
|
pb.equals("registryDesignation", RegistryDesignation.A.getKey()),
|
||||||
|
pb.equals("registryInstrumentType", RegistryInstrumentType.M.getKey()),
|
||||||
pb.equals("registryUnit", RegistryUnit.B.getKey())
|
pb.equals("registryUnit", RegistryUnit.B.getKey())
|
||||||
),
|
),
|
||||||
pb.equals("sessionId", sessionId)
|
pb.equals("sessionId", sessionId)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.spcex.clearing.service.executors;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
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.registry.Registry;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf12;
|
import ru.clearing.classes.statics.data.sdf.SDf12;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf13;
|
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.RegistryDesignation;
|
||||||
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||||
import ru.spcex.platform.enumeration.RegistryUnit;
|
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.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.time.Instant;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
@ -29,11 +32,13 @@ public class Sdf13Executor extends AbstractExecutor<SDf13> {
|
||||||
private final Imdg<SDf12> sdf12Imdg;
|
private final Imdg<SDf12> sdf12Imdg;
|
||||||
private final ImdgProvider imdgProvider;
|
private final ImdgProvider imdgProvider;
|
||||||
private final Imdg<Registry> registryImdg;
|
private final Imdg<Registry> registryImdg;
|
||||||
|
protected final Imdg<Session> sessionImdg;
|
||||||
|
|
||||||
public Sdf13Executor(ImdgProvider imdgProvider) {
|
public Sdf13Executor(ImdgProvider imdgProvider) {
|
||||||
this.imdgProvider = imdgProvider;
|
this.imdgProvider = imdgProvider;
|
||||||
this.sdf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
this.sdf12Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf12, SDf12.class);
|
||||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||||
|
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -61,6 +66,32 @@ public class Sdf13Executor extends AbstractExecutor<SDf13> {
|
||||||
Collection<Registry> registries = selectRegistryForSDF12(sDf12.getDepoCodeSender(), sDf12.getSecurityCode());
|
Collection<Registry> registries = selectRegistryForSDF12(sDf12.getDepoCodeSender(), sDf12.getSecurityCode());
|
||||||
registries.forEach(registry -> unlockRegistry(registry, new BigDecimal(sDf12.getQuantity())));
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue