обработка sdf04/sdf13 и изменения balance для регистров
This commit is contained in:
parent
e8232caf2b
commit
5343be3b58
3 changed files with 47 additions and 15 deletions
|
|
@ -139,7 +139,7 @@ public class StatementService extends QueueConsumer implements InitializingBean
|
|||
processSdf01And57(completePairKey.get(), null);
|
||||
return;
|
||||
}
|
||||
} else if (List.of(SdfTable.SDF_08, SdfTable.SDF_04).contains(table)) {
|
||||
} else if (List.of(SdfTable.SDF_08, SdfTable.SDF_04, SdfTable.SDF_13).contains(table)) {
|
||||
if (table == SdfTable.SDF_08) {
|
||||
{
|
||||
Long key = completePairKey.get();
|
||||
|
|
@ -156,6 +156,14 @@ public class StatementService extends QueueConsumer implements InitializingBean
|
|||
pairOfSdfRequest.remove(key);
|
||||
doSomeone = true;
|
||||
}
|
||||
} else if (table == SdfTable.SDF_13) {
|
||||
{
|
||||
Long key = completePairKey.get();
|
||||
Pair<StatementRequest, StatementRequest> pair = pairOfSdfRequest.get(key);
|
||||
processSdf13(pair.getFirst());
|
||||
pairOfSdfRequest.remove(key);
|
||||
doSomeone = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (doSomeone) {
|
||||
|
|
@ -253,7 +261,7 @@ public class StatementService extends QueueConsumer implements InitializingBean
|
|||
private Optional<Long> saveRequest(StatementRequest statementRequest) {
|
||||
SdfTable sdfTable = statementRequest.getTable();
|
||||
//immediately process
|
||||
if (List.of(SdfTable.SDF_08, SdfTable.SDF_04).contains(sdfTable)) {
|
||||
if (List.of(SdfTable.SDF_08, SdfTable.SDF_04, SdfTable.SDF_13).contains(sdfTable)) {
|
||||
Long id = imdgProvider.getImdgIdGenerator().nextId();
|
||||
pairOfSdfRequest.put(id, new Pair<>(statementRequest, null));
|
||||
return Optional.of(id);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
|||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.service.AnltSearcher;
|
||||
import ru.spcex.clearing.service.RegistryManager;
|
||||
import ru.spcex.clearing.service.model.Result;
|
||||
import ru.spcex.platform.enumeration.*;
|
||||
import ru.spcex.platform.imdg.api.Imdg;
|
||||
|
|
@ -25,6 +26,7 @@ import java.time.Instant;
|
|||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class Sdf04Executor extends AbstractExecutor<SDf04> {
|
||||
|
|
@ -36,14 +38,16 @@ public class Sdf04Executor extends AbstractExecutor<SDf04> {
|
|||
private final AnltSearcher anltSearcher;
|
||||
private final IMessageResolver msgRslv;
|
||||
protected final Imdg<Session> sessionImdg;
|
||||
private RegistryManager registryManager;
|
||||
|
||||
public Sdf04Executor(ImdgProvider imdgProvider, AnltSearcher anltSearcher, IMessageResolver msgRslv) {
|
||||
public Sdf04Executor(ImdgProvider imdgProvider, AnltSearcher anltSearcher, IMessageResolver msgRslv, RegistryManager registryManager) {
|
||||
this.imdgProvider = imdgProvider;
|
||||
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
|
||||
this.accountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Account, Account.class);
|
||||
this.sessionImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Session, Session.class);
|
||||
this.anltSearcher = anltSearcher;
|
||||
this.msgRslv = msgRslv;
|
||||
this.registryManager = registryManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -96,12 +100,21 @@ public class Sdf04Executor extends AbstractExecutor<SDf04> {
|
|||
}
|
||||
//todo переписать логику поиска на аналогичную по счетам(TRAN)
|
||||
Session activeSession = sessionImdg.getSingleObjectByFieldValues(Map.of("workflowStatus", Status.Active.getKey()));
|
||||
Instant now = Instant.now();
|
||||
if (activeSession != null) {
|
||||
Collection<Registry> registriesByActiveSessionId = selectAMBRegistryBySessionId(activeSession.getId());
|
||||
registriesByActiveSessionId.stream().filter(registry -> registry.getBalance().compareTo(BigDecimal.ZERO) < 0)
|
||||
.forEach(registry -> {
|
||||
registry.setBalance(BigDecimal.ZERO);
|
||||
registry.setUpdated(Instant.now());
|
||||
Optional<Registry> registryUnitF = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), registry, RegistryUnit.F);
|
||||
Optional<Registry> registryUnitT = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), registry, RegistryUnit.T);
|
||||
if (registryUnitF.isPresent() && registryUnitT.isPresent()) {
|
||||
registryUnitF.get().setBalance(registryUnitT.get().getBalance().subtract(registry.getBalance()));
|
||||
registryUnitF.get().setUpdated(now);
|
||||
registryImdg.update(registryUnitF.get());
|
||||
}
|
||||
|
||||
registry.setUpdated(now);
|
||||
registryImdg.update(registry);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import ru.clearing.classes.statics.data.sdf.SDf13;
|
|||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest;
|
||||
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
|
||||
import ru.spcex.clearing.service.RegistryManager;
|
||||
import ru.spcex.clearing.service.model.Result;
|
||||
import ru.spcex.platform.enumeration.RegistryDesignation;
|
||||
import ru.spcex.platform.enumeration.RegistryInstrumentType;
|
||||
|
|
@ -24,6 +25,7 @@ import java.math.BigDecimal;
|
|||
import java.time.Instant;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class Sdf13Executor extends AbstractExecutor<SDf13> {
|
||||
|
|
@ -33,12 +35,13 @@ public class Sdf13Executor extends AbstractExecutor<SDf13> {
|
|||
private final ImdgProvider imdgProvider;
|
||||
private final Imdg<Registry> registryImdg;
|
||||
protected final Imdg<Session> sessionImdg;
|
||||
|
||||
public Sdf13Executor(ImdgProvider imdgProvider) {
|
||||
protected final RegistryManager registryManager;
|
||||
public Sdf13Executor(ImdgProvider imdgProvider, RegistryManager registryManager) {
|
||||
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);
|
||||
this.registryManager = registryManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -59,20 +62,28 @@ public class Sdf13Executor extends AbstractExecutor<SDf13> {
|
|||
Result result = new Result();
|
||||
Long generationIdForGroup = imdgProvider.getImdgIdGenerator().nextId();
|
||||
result.setGenerationId(generationIdForGroup);
|
||||
for (SDf13 sdf13 : sdf) {
|
||||
//обычно мы ищем по группу sdf04, здесь как будто всегда только одна запись, todo нужно прочекать этот момент
|
||||
SDf12 sDf12 = selectSdf12bySdf13(sdf13);
|
||||
log.debug("Process sdf13 record; sdf13.id: {}", sdf13.getId());
|
||||
Collection<Registry> registries = selectRegistryForSDF12(sDf12.getDepoCodeSender(), sDf12.getSecurityCode());
|
||||
registries.forEach(registry -> unlockRegistry(registry, new BigDecimal(sDf12.getQuantity())));
|
||||
}
|
||||
// for (SDf13 sdf13 : sdf) {
|
||||
// //обычно мы ищем по группу sdf04, здесь как будто всегда только одна запись, todo нужно прочекать этот момент
|
||||
// SDf12 sDf12 = selectSdf12bySdf13(sdf13);
|
||||
// log.debug("Process sdf13 record; sdf13.id: {}", sdf13.getId());
|
||||
// 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()));
|
||||
Instant now = Instant.now();
|
||||
if (activeSession != null) {
|
||||
Collection<Registry> registriesByActiveSessionId = selectASBRegistryBySessionId(activeSession.getId());
|
||||
registriesByActiveSessionId.stream().filter(registry -> registry.getBalance().compareTo(BigDecimal.ZERO) < 0)
|
||||
registriesByActiveSessionId
|
||||
.forEach(registry -> {
|
||||
registry.setBalance(BigDecimal.ZERO);
|
||||
registry.setUpdated(Instant.now());
|
||||
Optional<Registry> registryUnitF = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), registry, RegistryUnit.F);
|
||||
Optional<Registry> registryUnitT = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), registry, RegistryUnit.T);
|
||||
if (registryUnitF.isPresent() && registryUnitT.isPresent()) {
|
||||
registryUnitF.get().setBalance(registryUnitT.get().getBalance().subtract(registry.getBalance()));
|
||||
registryUnitF.get().setUpdated(now);
|
||||
registryImdg.update(registryUnitF.get());
|
||||
}
|
||||
registry.setUpdated(now);
|
||||
registryImdg.update(registry);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue