diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java index 5bc78342c..4986c50fd 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/executors/Sdf57Executor.java @@ -320,15 +320,35 @@ public class Sdf57Executor extends AbstractExecutor { registryD.getId()); sessionIsNeededFlag.set(true); } else if (tm_tFound.isPresent()) { - Registry tm_t = tm_tFound.get(); - Registry registryD = copyRegD(tm_t, stmt, RegistryUnit.X); - registryImdg.insert(registryD); - log.debug("stmt.id={}, sdf57.specif={} found TM*T.id={} new DM*X.id={}. Return money identification for Initiator account based on TM*T registry searchin on companyId, accountId, contract and registry_status=PROC|MGN", - stmt.getId(), - sdf57.getSpecif(), - tm_t.getId(), - registryD.getId()); - sessionIsNeededFlag.set(true); + Optional dm_xFound = RegistrySearch.builder(registryImdg) + .rgsCode(RegistryTradingParams.DM_X) + .companyId(company.getId()) + .accountId(account.getId()) + .contract(stmt.getContract()) + .statusNotOk() + .find(); + if (dm_xFound.isEmpty()) { + Registry tm_t = tm_tFound.get(); + Registry registryD = copyRegD(tm_t, stmt, RegistryUnit.X); + registryImdg.insert(registryD); + log.debug("stmt.id={}, sdf57.specif={} found TM*T.id={} new DM*X.id={}. Return money identification for Initiator account based on TM*T registry searchin on companyId, accountId, contract and registry_status=PROC|MGN", + stmt.getId(), + sdf57.getSpecif(), + tm_t.getId(), + registryD.getId()); + sessionIsNeededFlag.set(true); + } else { + Registry dm_x = dm_xFound.get(); + dm_x.setBalance(safeBD(dm_x.getBalance()).add(safeBD(stmt.getAmount()))); + dm_x.setUpdated(Instant.now()); + registryImdg.update(dm_x); + log.debug("stmt.id={}, sdf57.specif={} updated {}.id={}", + stmt.getId(), + sdf57.getSpecif(), + dm_x.getRegistryCode(), + dm_x.getId()); + sessionIsNeededFlag.set(true); + } } } stmt.setOperationStatus(OperationStatus.Executed.getKey()); @@ -610,6 +630,14 @@ public class Sdf57Executor extends AbstractExecutor { return this; } + private RegistrySearch statusNotOk() { + predicate = pb.and(predicate, pb.or( + pb.equals("registryStatus", RegistryStatus.PROC.getKey()), + pb.equals("registryStatus", RegistryStatus.UNCV.getKey()) + )); + return this; + } + private Optional find() { return Optional.ofNullable(registryImdg.getSingleObjectByPredicate(predicate)); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java index a8aa42d54..37cc52524 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/registry/AssetTBFProcessing.java @@ -209,7 +209,8 @@ public class AssetTBFProcessing { pb.sql(RegistryCodeSqlBuilder.getInstance(params).build()), pb.equals("tradingClearingRegistryId", rgs.getTradingClearingRegistryId()), pb.equals("companyId", rgs.getCompanyId()), - pb.equals("accountId", rgs.getAccountId()) + pb.equals("accountId", rgs.getAccountId()), + pb.equals("securityId", rgs.getSecurityId()) ); return Optional.ofNullable(rgsImdg.getFirstObjectByPredicate(prdct)); } diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java index e0577eab0..833d337eb 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/session/stage/PrimaryAuctionBnSession.java @@ -214,16 +214,16 @@ public class PrimaryAuctionBnSession extends AbstractSession implements Initiali public void finishPart() { try { //stage 9 continue revision - { - StageResult reviseRes = runStage(TaskType.AgainRevise, currSession.getId(), balanceRevise, false); - if (!reviseRes.isSuccess()) { - this.afterReviseErrorMonitor = SessionMonitorFactory.waitReviseError(section()); - log.warn("{} stage error, created monitor for {}", - TaskType.AgainRevise, - afterReviseErrorMonitor.allConditions()); - return; - } - } + //{ + // StageResult reviseRes = runStage(TaskType.AgainRevise, currSession.getId(), balanceRevise, false); + // if (!reviseRes.isSuccess()) { + // this.afterReviseErrorMonitor = SessionMonitorFactory.waitReviseError(section()); + // log.warn("{} stage error, created monitor for {}", + // TaskType.AgainRevise, + // afterReviseErrorMonitor.allConditions()); + // return; + // } + //} //stage 10 { FinishingSessionPayload payload = new FinishingSessionPayload();