diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java index bdce7f0da..4ed26d340 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/config/ValidationConfig.java @@ -49,7 +49,9 @@ import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryChangeSt import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistryReturnDepositRequest; import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDepositActionRequest; import ru.spcex.clearing.service.AssetTrio; +import ru.spcex.clearing.service.IsActiveSessionRunningService; import ru.spcex.clearing.service.registry.AssetTBFProcessing; +import ru.spcex.clearing.service.validation.ActiveSessionIsPresentValidationRule; import ru.spcex.clearing.service.validation.AnltAccLoad; import ru.spcex.clearing.service.validation.ClrngValidationStored; import ru.spcex.clearing.service.validation.CompanyByTradingCodeValidationRule; @@ -99,6 +101,8 @@ import ru.spcex.platform.utils.validation.ValidatorImpl; @Configuration public class ValidationConfig { + private final IsActiveSessionRunningService actionSessionChecker; + Imdg imdgRelation; Imdg imdgCompany; Imdg imdgCurrency; @@ -128,7 +132,8 @@ public class ValidationConfig { ImdgProvider imdgProvider; AssetTBFProcessing assetsMng; - public ValidationConfig(ImdgProvider imdgProvider, AssetTBFProcessing assetsMng) { + public ValidationConfig(IsActiveSessionRunningService actionSessionChecker, ImdgProvider imdgProvider, AssetTBFProcessing assetsMng) { + this.actionSessionChecker = actionSessionChecker; this.imdgRelation = imdgProvider.getImdg(IMDGDistributedNames.Map_Relation, Relation.class); this.imdgCompany = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); this.imdgCurrency = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class); @@ -303,7 +308,7 @@ public class ValidationConfig { Sdf06NewValidationRule.CompanySymbolAndCompanyPresent, Sdf06NewValidationRule.AccountPresent, Sdf06NewValidationRule.CompanyAndAccountMatch, - Sdf06NewValidationRule.Session, + new ActiveSessionIsPresentValidationRule<>(actionSessionChecker), Sdf06NewValidationRule.Balance, Sdf06NewValidationRule.TcrPresent, CurrencyCodeValidationRule.get(ClearingError.CompanyDebitCheck) @@ -333,7 +338,7 @@ public class ValidationConfig { Sdf10ValidationRule.DepoAccountPresent, CompanyByTradingCodeValidationRule.instance(SDf10::getDepoCode), Sdf10ValidationRule.CompanyStatus, - Sdf06NewValidationRule.Session, + new ActiveSessionIsPresentValidationRule<>(actionSessionChecker), Sdf10ValidationRule.TcrPresent, SecurityBySecurityCodeValidationRule.instance(SDf10::getSecurityCode), Sdf10ValidationRule.Balance diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/IsActiveSessionRunningService.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/IsActiveSessionRunningService.java index 87963e87a..21b65dbfd 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/IsActiveSessionRunningService.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/IsActiveSessionRunningService.java @@ -1,7 +1,6 @@ package ru.spcex.clearing.service; import java.util.Collection; -import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -10,6 +9,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; @Service public class IsActiveSessionRunningService { @@ -21,9 +21,13 @@ public class IsActiveSessionRunningService { } public boolean isThereAnActiveSession() { - Collection activeSessions = ssnImdg.getCollectionObjectsByFieldValues(Map.of( - "workflowStatus", WorkflowStatus.Active.getKey() - )); + ImdgPredicateBuilder pb = ssnImdg.predicateBuilder(); + Collection activeSessions = ssnImdg.getCollectionObjectsByPredicate( + pb.or( + pb.equals("workflowStatus", WorkflowStatus.Active.getKey()), + pb.equals("workflowStatus", WorkflowStatus.Pause.getKey()) + ) + ); activeSessions.stream().findFirst().ifPresent( session -> log.debug("found session.id {}", session.getId()) ); diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/schedule/TasksDelayedBySessionServiceV2.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/schedule/TasksDelayedBySessionServiceV2.java index e6ea3f7fc..885cd3aba 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/schedule/TasksDelayedBySessionServiceV2.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/schedule/TasksDelayedBySessionServiceV2.java @@ -95,7 +95,7 @@ public class TasksDelayedBySessionServiceV2 implements ImdgEntryListener event) { - if (notSessionEndEvent(event.getOldValue(), event.getValue())) { + if (!sessionEndEvent(event.getOldValue(), event.getValue())) { log.trace("not a session end event."); return; } @@ -106,7 +106,7 @@ public class TasksDelayedBySessionServiceV2 implements ImdgEntryListener {}", oldWS, newWS); - return !(WorkflowStatus.Active.equalsByKey(oldWS) && !WorkflowStatus.Active.equalsByKey(newWS)); + return WorkflowStatus.Active.equalsByKey(oldWS) + && !WorkflowStatus.Active.equalsByKey(newWS) + && !WorkflowStatus.Pause.equalsByKey(newWS); } private void notifyEventReceiver(Long groupId) { diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ActiveSessionIsPresentValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ActiveSessionIsPresentValidationRule.java new file mode 100644 index 000000000..0ed09446e --- /dev/null +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/ActiveSessionIsPresentValidationRule.java @@ -0,0 +1,25 @@ +package ru.spcex.clearing.service.validation; + +import java.util.Optional; +import ru.spcex.clearing.error.ClearingError; +import ru.spcex.clearing.service.IsActiveSessionRunningService; +import ru.spcex.platform.utils.enumeration.EnumMessage; +import ru.spcex.platform.utils.validation.IValidationRule; +import ru.spcex.platform.utils.validation.IValidatorContext; + +public class ActiveSessionIsPresentValidationRule + implements IValidationRule { + private final IsActiveSessionRunningService ssnChecker; + + public ActiveSessionIsPresentValidationRule(IsActiveSessionRunningService ssnChecker) { + this.ssnChecker = ssnChecker; + } + + @Override + public Optional validate(T context) { + if (ssnChecker.isThereAnActiveSession()) { + return of(ClearingError.ActiveSessionIsPresent); + } + return empty(); + } +} diff --git a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf06NewValidationRule.java b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf06NewValidationRule.java index 49fe1010b..d279e5ed5 100644 --- a/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf06NewValidationRule.java +++ b/clearing-parent/clearing-service/src/main/java/ru/spcex/clearing/service/validation/Sdf06NewValidationRule.java @@ -1,8 +1,6 @@ package ru.spcex.clearing.service.validation; import java.math.BigDecimal; -import java.util.Collection; -import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.function.Function; @@ -10,7 +8,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ru.clearing.classes.statics.data.account.Account; import ru.clearing.classes.statics.data.company.Company; -import ru.clearing.classes.statics.data.misc.Session; import ru.clearing.classes.statics.data.registry.Registry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistry; import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList; @@ -23,7 +20,6 @@ import ru.spcex.platform.enumeration.AccountType; import ru.spcex.platform.enumeration.InOutDirection; import ru.spcex.platform.enumeration.RegistryStatus; import ru.spcex.platform.enumeration.RegistryTradingParams; -import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.predicate.ImdgPredicate; import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder; @@ -103,19 +99,6 @@ public enum Sdf06NewValidationRule implements IValidationRule validate(ImdgValidationContext context) { - Imdg sessionImdg = context.obtainMap(IMDGDistributedNames.Map_Session, Session.class); - Collection activeSessions = sessionImdg.getCollectionObjectsByFieldValues(Map.of( - "workflowStatus", WorkflowStatus.Active.getKey() - )); - if (activeSessions.size() > 0) { - return of(ClearingError.ActiveSessionIsPresent); - } - return empty(); - } - }, Balance() { @Override public Optional validate(ImdgValidationContext context) {