>> SDF57 D**I -> OK && session present => AxxT.planned += DxxI.balance
This commit is contained in:
parent
892bdcb769
commit
54c3d7c235
2 changed files with 26 additions and 5 deletions
|
|
@ -169,6 +169,9 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
||||||
result.setChildGenerationId(generationIdForGroup);
|
result.setChildGenerationId(generationIdForGroup);
|
||||||
log.info("SDF57 execution: sdf57 number={}, groupId={}", sdf.size(), sdf.stream().findFirst().map(SDf57::getGenerationId).orElse(null));
|
log.info("SDF57 execution: sdf57 number={}, groupId={}", sdf.size(), sdf.stream().findFirst().map(SDf57::getGenerationId).orElse(null));
|
||||||
AtomicReference<Boolean> sessionIsNeededFlag = new AtomicReference<>(false);
|
AtomicReference<Boolean> sessionIsNeededFlag = new AtomicReference<>(false);
|
||||||
|
boolean sessionIsPresent = sessionImdg.getFirstObjectByFieldValues(Map.of(
|
||||||
|
"workflowStatus", SessionStatus.ACTV.getKey()
|
||||||
|
)) != null;
|
||||||
for (SDf57 sdf57 : sdf) {
|
for (SDf57 sdf57 : sdf) {
|
||||||
IValidator validator = sDf57Validator.apply(sdf57);
|
IValidator validator = sDf57Validator.apply(sdf57);
|
||||||
Optional<EnumMessage> error = validator.tillFirstError();
|
Optional<EnumMessage> error = validator.tillFirstError();
|
||||||
|
|
@ -397,10 +400,17 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
||||||
searchResult.getCompany().getId());
|
searchResult.getCompany().getId());
|
||||||
asts = createRegistryIfNeeded.apply(new StmtCmpAcc(stmt, searchResult.getCompany(), searchResult.getAccount()));
|
asts = createRegistryIfNeeded.apply(new StmtCmpAcc(stmt, searchResult.getCompany(), searchResult.getAccount()));
|
||||||
if (OperationStatus.Executed.equalsByKey(stmt.getOperationStatus())) {
|
if (OperationStatus.Executed.equalsByKey(stmt.getOperationStatus())) {
|
||||||
dmiService.setOk(searchResult.getTcr().getId(),
|
Optional<BigDecimal> dmiBalance = dmiService.setOk(searchResult.getTcr().getId(),
|
||||||
CurrencyCode.RUB.getKey(),
|
CurrencyCode.RUB.getKey(),
|
||||||
sdf57.getDbfId().toString());
|
sdf57.getDbfId().toString());
|
||||||
asts.ifPresent(trio -> assets.process(trio.a__b(), trio.a__t(), trio.a__f(), BigDecimal.ZERO));
|
asts.ifPresent(trio -> {
|
||||||
|
if (dmiBalance.isPresent() && sessionIsPresent) {
|
||||||
|
BigDecimal planBalance = safeBD(trio.a__t().getPlanBalance());
|
||||||
|
trio.a__t().setPlanBalance(planBalance.add(dmiBalance.get()));
|
||||||
|
registryImdg.update(trio.a__t());
|
||||||
|
}
|
||||||
|
assets.process(trio.a__b(), trio.a__t(), trio.a__f(), BigDecimal.ZERO);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else if (InOutDirection.in.equals(IEnumKey.getEnumByKey(InOutDirection.class, stmt.getInOutDirection()))) {
|
} else if (InOutDirection.in.equals(IEnumKey.getEnumByKey(InOutDirection.class, stmt.getInOutDirection()))) {
|
||||||
log.debug("stmt.id={} comment='{}' error: {}. Operating through DMAU registry",
|
log.debug("stmt.id={} comment='{}' error: {}. Operating through DMAU registry",
|
||||||
|
|
@ -434,10 +444,17 @@ public class Sdf57Executor extends AbstractExecutor<SDf57> {
|
||||||
}
|
}
|
||||||
} else if (OperationStatus.Executed.equalsByKey(stmt.getOperationStatus())) {
|
} else if (OperationStatus.Executed.equalsByKey(stmt.getOperationStatus())) {
|
||||||
if (asts.isPresent()) {
|
if (asts.isPresent()) {
|
||||||
dmiService.setOk(asts.get().a__t().getTradingClearingRegistryId(),
|
Optional<BigDecimal> dmiBalance = dmiService.setOk(asts.get().a__t().getTradingClearingRegistryId(),
|
||||||
CurrencyCode.RUB.getKey(),
|
CurrencyCode.RUB.getKey(),
|
||||||
sdf57.getDbfId().toString());
|
sdf57.getDbfId().toString());
|
||||||
asts.ifPresent(trio -> assets.process(trio.a__b(), trio.a__t(), trio.a__f(), BigDecimal.ZERO));
|
asts.ifPresent(trio -> {
|
||||||
|
if (dmiBalance.isPresent() && sessionIsPresent) {
|
||||||
|
BigDecimal planBalance = safeBD(trio.a__t().getPlanBalance());
|
||||||
|
trio.a__t().setPlanBalance(planBalance.add(dmiBalance.get()));
|
||||||
|
registryImdg.update(trio.a__t());
|
||||||
|
}
|
||||||
|
assets.process(trio.a__b(), trio.a__t(), trio.a__f(), BigDecimal.ZERO);
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
log.error("stmt.id={} operationStatus={} but couldn't extract TCR.id for DM*I update",
|
log.error("stmt.id={} operationStatus={} but couldn't extract TCR.id for DM*I update",
|
||||||
stmt.getId(),
|
stmt.getId(),
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ 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 ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder;
|
||||||
import ru.spcex.platform.utils.log.ExceptionUtils;
|
import ru.spcex.platform.utils.log.ExceptionUtils;
|
||||||
|
import ru.spcex.platform.utils.number.BigDecimalUtil;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
@ -128,18 +129,21 @@ public class DmiService {
|
||||||
* ищем D**I по tcrId/security/contract
|
* ищем D**I по tcrId/security/contract
|
||||||
* задаем статус ОК
|
* задаем статус ОК
|
||||||
*/
|
*/
|
||||||
public void setOk(Long tcrId,
|
public Optional<BigDecimal> setOk(Long tcrId,
|
||||||
String securitySymbol,
|
String securitySymbol,
|
||||||
String contract) {
|
String contract) {
|
||||||
|
BigDecimal[] dmiBalance = {null};
|
||||||
findDmiByContract(tcrId, securitySymbol, contract).ifPresentOrElse(d__i -> {
|
findDmiByContract(tcrId, securitySymbol, contract).ifPresentOrElse(d__i -> {
|
||||||
d__i.setRegistryStatus(RegistryStatus.OK.getKey());
|
d__i.setRegistryStatus(RegistryStatus.OK.getKey());
|
||||||
d__i.setUpdated(Instant.now());
|
d__i.setUpdated(Instant.now());
|
||||||
log.trace("updating {} status to {}", d__i.getRegistryCode(), d__i.getRegistryStatus());
|
log.trace("updating {} status to {}", d__i.getRegistryCode(), d__i.getRegistryStatus());
|
||||||
rgsImdg.update(d__i);
|
rgsImdg.update(d__i);
|
||||||
|
dmiBalance[0] = BigDecimalUtil.safeBD(d__i.getBalance());
|
||||||
}, () -> {
|
}, () -> {
|
||||||
log.trace("didn't find DM*I by tcr.id={} securitySymbol={} contract={}",
|
log.trace("didn't find DM*I by tcr.id={} securitySymbol={} contract={}",
|
||||||
tcrId, securitySymbol, contract);
|
tcrId, securitySymbol, contract);
|
||||||
});
|
});
|
||||||
|
return Optional.ofNullable(dmiBalance[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<Registry> findDmiByContract(Long tcrId, String securitySymbol, String contract) {
|
private Optional<Registry> findDmiByContract(Long tcrId, String securitySymbol, String contract) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue