diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf08Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf08Executor.java index d695c373e..7a27b0946 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf08Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf08Executor.java @@ -5,8 +5,10 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.account.Account; -import ru.clearing.classes.statics.data.account.ClearingAccount; +import ru.clearing.classes.statics.data.account.DepoAccount; import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.instrument.issue.EquitySecurity; +import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeSecurity; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.sdf.SDf08; @@ -48,9 +50,10 @@ public class Sdf08Executor extends AbstractExecutor { private final Imdg statementImdg; private final ImdgProvider imdgProvider; private final Imdg registryImdg; - private final Imdg securityImdg; + private final Imdg fixedIncomeSecurityImdg; + private final Imdg equitySecurityImdg; private final Function sDf08Validator; - private final Imdg clearingAccountImdg; + private final Imdg depoAccountImdg; private final Imdg tradingClearingRegistryImdg; private final Imdg companyImdg; private final Imdg sdf09Imdg; @@ -62,8 +65,9 @@ public class Sdf08Executor extends AbstractExecutor { this.imdgProvider = imdgProvider; this.statementImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); - this.securityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Security, Security.class); - this.clearingAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingAccount, ClearingAccount.class); + this.fixedIncomeSecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_FixedIncomeSecurity, FixedIncomeSecurity.class); + this.equitySecurityImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_EquitySecurity, EquitySecurity.class); + this.depoAccountImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_DepoAccount, DepoAccount.class); this.tradingClearingRegistryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_TradingClearingRegistry, TradingClearingRegistry.class); this.companyImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.sdf09Imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_SDf09, SDf09.class); @@ -164,7 +168,7 @@ public class Sdf08Executor extends AbstractExecutor { Statement stmt = new Statement(); stmt.setAddresseeId(account.getCompanyId()); stmt.setSenderId(Sender.Rdc.getId()); - stmt.setStatementType(StatementType.incr.getKey()); + stmt.setStatementType(StatementType.full.getKey()); stmt.setAccountId(account.getId()); stmt.setAccount(account.getAccount()); stmt.setInOutDirection(InOutDirection.in.getKey()); @@ -173,9 +177,12 @@ public class Sdf08Executor extends AbstractExecutor { } stmt.setOperationStatus(OperationStatus.Pending.getKey()); stmt.setInSDfId(sdf08.getId()); - stmt.setInOutSDfType(InOutSDfType.type1.getKey()); + stmt.setInOutSDfType(InOutSDfType.type08.getKey()); stmt.setClearingDate(LocalDate.now()); - Security security = securityImdg.getSingleObjectByFieldValues(Map.of("securitySymbol", sdf08.getSecurityCode())); + Security security = fixedIncomeSecurityImdg.getSingleObjectByFieldValues(Map.of("securitySymbol", sdf08.getSecurityCode())); + if (security == null) { + security = equitySecurityImdg.getSingleObjectByFieldValues(Map.of("securitySymbol", sdf08.getSecurityCode())); + } if (security != null) { stmt.setSecurityId(security.getId()); } @@ -208,14 +215,14 @@ public class Sdf08Executor extends AbstractExecutor { rgs.setAccount(account.getAccount()); rgs.setRegistryDesignation(RegistryDesignation.A.getKey()); rgs.setRegistryInstrumentType(RegistryInstrumentType.S.getKey()); - ClearingAccount accountForStatement = clearingAccountImdg.getSingleObjectByID(statement.getAccountId()); - if (accountForStatement != null) { - rgs.setRegistryCapacity(accountForStatement.getClearingAccountType()); + DepoAccount depoAccount = depoAccountImdg.getSingleObjectByID(statement.getAccountId()); + if (depoAccount != null) { + rgs.setRegistryCapacity(depoAccount.getDepoAccountType()); } rgs.setRegistryUnit(RegistryUnit.T.getKey()); rgs.setRegistryCode(RegistryUtil.clearingCode(rgs)); Collection tcrsByAccount = tradingClearingRegistryImdg.getCollectionObjectsByFieldValues(Map.of( - "moneyAccountId", statement.getAccountId(), + "depoAccountId", statement.getAccountId(), "companyId", statement.getAddresseeId() )); if (!tcrsByAccount.isEmpty()) { @@ -227,19 +234,20 @@ public class Sdf08Executor extends AbstractExecutor { rgs.setRegistryStatus(RegistryStatus.PROC.getKey()); rgs.setSecurityId(statement.getSecurityId()); if (statement.getSecurityId() != null) { - Security security = securityImdg.getSingleObjectByID(statement.getSecurityId()); + Security security = fixedIncomeSecurityImdg.getSingleObjectByID(statement.getSecurityId()); + if (security == null) { + security = equitySecurityImdg.getSingleObjectByID(statement.getSecurityId()); + } if (security != null) { rgs.setSecuritySymbol(security.getSecuritySymbol()); } } rgs.setCheckBalance(BigDecimalUtil.safeBD(statement.getAmount())); - rgs.setDiffBalance(rgs.getCheckBalance().negate()); - rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); //fixme ! смотри описание и ссылка на начало html'ки - //fixme !rgs.setSettlementCode(); - rgs.setTradingDate(statement.getSettlementDate()); //fixme ! today ? + rgs.setBalance(BigDecimalUtil.safeBD(statement.getAmount())); + rgs.setDiffBalance(rgs.getBalance().subtract(rgs.getCheckBalance())); + rgs.setBalanceDimension(BalanceDimension.MONY.getKey()); + rgs.setTradingDate(statement.getSettlementDate()); rgs.setClearingDate(LocalDate.now()); - //fixme rgs.setRefundDate(); - //fixme rgs.setValueDate(); //создается на базе stmt, companyCred, accountDeb rgs.setCounterPartyId(statement.getAddresseeId()); rgs.setCreated(Instant.now()); diff --git a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java index e7d4e2f88..bd9f728ee 100644 --- a/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java +++ b/platform-parent/platform-enum/src/main/java/ru/spcex/platform/enumeration/InOutSDfType.java @@ -3,7 +3,7 @@ package ru.spcex.platform.enumeration; import ru.spcex.platform.utils.enumeration.IEnumKey; public enum InOutSDfType implements IEnumKey { - type1("0102"), type16("1617"), type9("0910"), type57("57"); + type1("0102"), type16("1617"), type9("0910"), type57("57"), type08("0809"); private final String key;