From cd802139b0d5e5280b72ce28390c9a7bf609b142 Mon Sep 17 00:00:00 2001 From: ialbert Date: Fri, 26 May 2023 14:20:19 +0300 Subject: [PATCH] SDF01 executor --- .../service/executors/Sdf01Executor.java | 55 ++++++++----------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java index f10b6c73d..046f5a9e7 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf01Executor.java @@ -36,6 +36,7 @@ import ru.spcex.platform.imdg.api.predicate.specific.RegistryCodeSqlBuilder; import ru.spcex.platform.utils.enumeration.EnumMessage; import ru.spcex.platform.utils.enumeration.IEnumKey; import ru.spcex.platform.utils.enumeration.IMessageResolver; +import ru.spcex.platform.utils.number.BigDecimalUtil; import ru.spcex.platform.utils.validation.IValidator; import java.math.BigDecimal; @@ -47,6 +48,7 @@ import java.util.Map; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.Supplier; @Service public class Sdf01Executor extends AbstractExecutor { @@ -143,23 +145,23 @@ public class Sdf01Executor extends AbstractExecutor { updateReg(stmt, rgs); registryImdg.update(rgs); }; - Consumer create = (dsgn) -> { - Registry registry = createRegistryByStatement(stmt, company, account, dsgn); - Registry registryF = registry.clone(); - registryF.setRegistryUnit(RegistryUnit.F.getKey()); - registryF.setRegistryCode(RegistryUtil.clearingCode(registryF)); - registryF.setId(imdgProvider.getImdgIdGenerator().nextId()); - Registry registryB = registry.clone(); - registryB.setRegistryUnit(RegistryUnit.B.getKey()); - registryB.setRegistryCode(RegistryUtil.clearingCode(registryB)); - registryB.setId(imdgProvider.getImdgIdGenerator().nextId()); + Supplier create = () -> { + Registry registry = createRegistryByStatement(stmt, company, account); registryImdg.insert(registry); - registryImdg.insert(registryF); - registryImdg.insert(registryB); + return registry; }; - findReg(stmt, RegistryInstrumentType.M).ifPresentOrElse(update, () -> create.accept(RegistryDesignation.A)); - findReg(stmt, RegistryInstrumentType.S).ifPresentOrElse(update, () -> create.accept(RegistryDesignation.D)); + Optional reg = findReg(stmt); + Registry regFinal; + if (reg.isPresent()) { + update.accept(reg.get()); + regFinal = reg.get(); + } else { + regFinal = create.get(); + } + //todo + //1. stmt.setOperationStatus в зависимости от diffBalance = 0 + //2. отправить notification на backend stmt.setOperationStatus(OperationStatus.Executed.getKey()); } else { stmt.setErrorCodeId(err.get().getSubject().getId()); // fixme ErrorText insert @@ -254,7 +256,7 @@ public class Sdf01Executor extends AbstractExecutor { return Optional.empty(); } - private Registry createRegistryByStatement(Statement statement, Company company, Account account, RegistryDesignation designation) { + private Registry createRegistryByStatement(Statement statement, Company company, Account account) { Registry rgs = new Registry(); rgs.setCompanyId(statement.getAddresseeId()); rgs.setTradingCode(company.getTradingCode()); @@ -264,16 +266,14 @@ public class Sdf01Executor extends AbstractExecutor { rgs.setAccountId(account.getId()); rgs.setAccountType(account.getAccountType()); rgs.setAccount(account.getAccount()); - rgs.setRegistryDesignation(designation.getKey()); + rgs.setRegistryDesignation(RegistryDesignation.A.getKey()); rgs.setRegistryInstrumentType(RegistryInstrumentType.M.getKey()); - ClearingAccount accountForStatement = clearingAccountImdg.getSingleObjectByID(statement.getAccountId()); if (accountForStatement != null) { rgs.setRegistryCapacity(accountForStatement.getClearingAccountType()); } rgs.setRegistryUnit(RegistryUnit.T.getKey()); rgs.setRegistryCode(RegistryUtil.clearingCode(rgs)); - Collection tcrsByAccount = tradingClearingRegistryImdg.getCollectionObjectsByFieldValues(Map.of( "moneyAccountId", statement.getAccountId() )); @@ -291,25 +291,14 @@ public class Sdf01Executor extends AbstractExecutor { rgs.setSecuritySymbol(security.getSecuritySymbol()); } } - InOutDirection inOutDirection = IEnumKey.getEnumByKey(InOutDirection.class, statement.getInOutDirection()); - //считаю balance при создании нулевым и исхожу из этого - //При добавлении (на базе изменения statement по sDf57): - //Если значение statement.inOutDirection=IN, то: - //= текущее значение registry.balance + statement.amount - // - //Если значение statement.inOutDirection=OUT, то: - //= текущее значение registry.balance - statement.amount - switch (inOutDirection) { - case in -> rgs.setBalance(statement.getAmount()); - case out -> rgs.setBalance(statement.getAmount().negate()); - } + rgs.setCheckBalance(BigDecimalUtil.safeBD(statement.getAmount())); + rgs.setCheckBalance(rgs.getCheckBalance().negate()); rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки //fixme !rgs.setSettlementCode(); rgs.setTradingDate(statement.getSettlementDate()); //fixme ! today ? rgs.setClearingDate(LocalDate.now()); //fixme rgs.setRefundDate(); //fixme rgs.setValueDate(); - rgs.setContract(statement.getContract()); //создается на базе stmt, companyCred, accountDeb rgs.setCounterPartyId(statement.getAddresseeId()); rgs.setCreated(Instant.now()); @@ -325,9 +314,9 @@ public class Sdf01Executor extends AbstractExecutor { r.setUpdated(Instant.now()); } - private Optional findReg(Statement s, RegistryInstrumentType registryInstrumentType) { + private Optional findReg(Statement s) { RegistryTradingParams p = new RegistryTradingParams( - RegistryDesignation.A, registryInstrumentType, RegistryCapacity.A, RegistryUnit.T + RegistryDesignation.A, RegistryInstrumentType.M, null, RegistryUnit.T ); String sql = RegistryCodeSqlBuilder.getInstance(p).build(); ImdgPredicateBuilder pb = registryImdg.predicateBuilder();