diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryManager.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryManager.java index fbdf859a4..5b48041b5 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryManager.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/RegistryManager.java @@ -90,6 +90,26 @@ public class RegistryManager { IEnumKey.getEnumByKey(RegistryCapacity.class, rgs.getRegistryCapacity()), IEnumKey.getEnumByKey(RegistryUnit.class, rgs.getRegistryUnit()) ); + } + public Optional findRegByUnit(Long companyId, Long accountId, String contract, Registry registry, RegistryUnit unit) { + RegistryTradingParams p = new RegistryTradingParams( + IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()), + IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()), + IEnumKey.getEnumByKey(RegistryCapacity.class, registry.getRegistryCapacity()), + unit + ); + String sql = RegistryCodeSqlBuilder.getInstance(p).build(); + ImdgPredicateBuilder pb = rgsImdg.predicateBuilder(); + ImdgPredicate rgstrPredicate = pb.and(pb.sql(sql), + pb.sql(sql), + pb.equals("companyId", companyId), + pb.equals("accountId", accountId) + + ); + if (RegistryDesignation.D.equalsByKey(registry.getRegistryDesignation()) && !TextUtil.isEmpty(contract)) { + rgstrPredicate = pb.and(rgstrPredicate, pb.equals("contract", contract)); + } + return Optional.ofNullable(rgsImdg.getSingleObjectByPredicate(rgstrPredicate)); } } 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 5e3a54515..82e71cf60 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 @@ -183,7 +183,6 @@ public class Sdf08Executor extends AbstractExecutor { registryImdg.insert(registryB); registryImdg.insert(registryF); } - //todo //2. отправить notification на backend stmt.setOperationStatus(OperationStatus.Executed.getKey()); statementImdg.update(stmt); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/STradesValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/STradesValidationRule.java index 80921ae77..6b132d5f8 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/STradesValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/STradesValidationRule.java @@ -35,7 +35,7 @@ public enum STradesValidationRule implements IValidationRule> returnsPayment = null; { - //todo здесь FormingPaymentInstructionDealsMkrPayload payload = new FormingPaymentInstructionDealsMkrPayload(); payload.setSessionId(currSession.getId()); payload.setSendSdfs(false); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java index 2e8606349..aa6907134 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/impl/InspectionObligations.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.registry.Registry; import ru.spcex.clearing.error.ClearingError; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.service.RegistryManager; import ru.spcex.clearing.session.stage.ISessionStage; import ru.spcex.clearing.session.stage.StageResult; import ru.spcex.clearing.session.stage.Task; @@ -36,13 +37,15 @@ import static ru.spcex.platform.enumeration.RegistryTradingParams.*; public class InspectionObligations implements ISessionStage { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg registryImdg; + private final RegistryManager registryManager; private final IMessageResolver msgResolver = new SimpleMessageResolver(); private SessionType sessionType; private Section section; @Autowired - public InspectionObligations(ImdgProvider imdgProvider) { + public InspectionObligations(ImdgProvider imdgProvider, RegistryManager registryManager) { this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class); + this.registryManager = registryManager; } public void setSessionType(SessionType sessionType) { @@ -107,40 +110,42 @@ public class InspectionObligations implements ISessionStage { isUncovered = false; } defineStatusAndUpdateRegistry(checkResults, group); - if (checkResults.stream().allMatch(checkResult -> checkResult.isUncovered)) { + if (checkResults.stream().noneMatch(checkResult -> checkResult.isUncovered)) { + Instant now = Instant.now(); //по каждому регистру OM*T, TM*T, OS*T, TS*T из одной группы - Optional omt_registryOpt = group.stream().filter(registry -> - IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O - && IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.M) - .findFirst(); for (Registry registry : group) { - String securityBAssetSql = searchSecurityBAssetsSql(registry); - log.debug("search security asset by registry.id={} sql {}", registry.getId(), securityBAssetSql); - Registry securityBAsset = registryImdg.getFirstObjectBySQL(securityBAssetSql); + Registry blockedRegistry = null; if (IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.M) { String moneyBAssetSql = searchMoneyBAssetsSql(registry); log.debug("search money asset by registry.id={} sql {}", registry.getId(), moneyBAssetSql); - Registry moneyBAsset = registryImdg.getFirstObjectBySQL(moneyBAssetSql); + blockedRegistry = registryImdg.getFirstObjectBySQL(moneyBAssetSql); if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) { - moneyBAsset.setBalance(securityBAsset.getBalance().add(registry.getBalance())); + blockedRegistry.setBalance(blockedRegistry.getBalance().add(registry.getBalance())); } else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) { - moneyBAsset.setBalance(securityBAsset.getBalance().subtract(registry.getBalance())); + blockedRegistry.setBalance(blockedRegistry.getBalance().subtract(registry.getBalance())); } - registryImdg.update(moneyBAsset); + blockedRegistry.setUpdated(now); + registryImdg.update(blockedRegistry); } else if (section != null && section == Section.FOND && IEnumKey.getEnumByKey(RegistryInstrumentType.class, registry.getRegistryInstrumentType()) == RegistryInstrumentType.S) { + String securityBAssetSql = searchSecurityBAssetsSql(registry); + log.debug("search security asset by registry.id={} sql {}", registry.getId(), securityBAssetSql); + blockedRegistry = registryImdg.getFirstObjectBySQL(securityBAssetSql); if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.O) { - securityBAsset.setBalance(securityBAsset.getBalance().add(registry.getBalance())); - registryImdg.update(securityBAsset); + blockedRegistry.setBalance(blockedRegistry.getBalance().add(registry.getBalance())); } else if (IEnumKey.getEnumByKey(RegistryDesignation.class, registry.getRegistryDesignation()) == RegistryDesignation.T) { - if (omt_registryOpt.isPresent()) { - Registry omtRegistry = omt_registryOpt.get(); - String moneyBAssetSql = searchMoneyBAssetsSql(omtRegistry); - log.debug("search money asset by registry.id={} sql {}", registry.getId(), moneyBAssetSql); - Registry moneyBAsset = registryImdg.getFirstObjectBySQL(moneyBAssetSql); - moneyBAsset.setBalance(securityBAsset.getBalance().subtract(registry.getBalance())); - registryImdg.update(moneyBAsset); - } + blockedRegistry.setBalance(blockedRegistry.getBalance().subtract(registry.getBalance())); + } + blockedRegistry.setUpdated(now); + registryImdg.update(blockedRegistry); + } + if (blockedRegistry != null) { + Optional registryUnitF = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), blockedRegistry, RegistryUnit.F); + Optional registryUnitT = registryManager.findRegByUnit(registry.getCompanyId(), registry.getAccountId(), registry.getContract(), blockedRegistry, RegistryUnit.T); + if (registryUnitF.isPresent() && registryUnitT.isPresent()) { + registryUnitF.get().setBalance(registryUnitT.get().getBalance().subtract(blockedRegistry.getBalance())); + registryUnitF.get().setUpdated(now); + registryImdg.update(registryUnitF.get()); } } } @@ -156,7 +161,7 @@ public class InspectionObligations implements ISessionStage { counterRegistryTradingParams = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.S, null, - RegistryUnit.T); + RegistryUnit.F); } else if (IEnumKey.getEnumByKey(RegistryInstrumentType.class, obligation.getRegistryInstrumentType()) == RegistryInstrumentType.M) { counterRegistryTradingParams = new RegistryTradingParams(RegistryDesignation.A, RegistryInstrumentType.M,