This commit is contained in:
parent
0e3cdcac4c
commit
bd0237f129
5 changed files with 46 additions and 27 deletions
|
|
@ -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<Relation> imdgRelation;
|
||||
Imdg<Company> imdgCompany;
|
||||
Imdg<Currency> 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
|
||||
|
|
|
|||
|
|
@ -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<Session> activeSessions = ssnImdg.getCollectionObjectsByFieldValues(Map.of(
|
||||
"workflowStatus", WorkflowStatus.Active.getKey()
|
||||
));
|
||||
ImdgPredicateBuilder pb = ssnImdg.predicateBuilder();
|
||||
Collection<Session> 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())
|
||||
);
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ public class TasksDelayedBySessionServiceV2 implements ImdgEntryListener<Session
|
|||
|
||||
@Override
|
||||
public void innerEntryUpdated(ImdgEntryEvent<Session> 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<Session
|
|||
}
|
||||
}
|
||||
|
||||
private boolean notSessionEndEvent(Session sessionOldValue, Session sessionNewValue) {
|
||||
private boolean sessionEndEvent(Session sessionOldValue, Session sessionNewValue) {
|
||||
if (sessionOldValue == null || sessionNewValue == null) {
|
||||
log.warn("old value null {}, new value null {}",
|
||||
sessionOldValue == null, sessionNewValue == null);
|
||||
|
|
@ -115,7 +115,9 @@ public class TasksDelayedBySessionServiceV2 implements ImdgEntryListener<Session
|
|||
String oldWS = sessionOldValue.getWorkflowStatus();
|
||||
String newWS = sessionNewValue.getWorkflowStatus();
|
||||
log.trace("workflow statuses: {} -> {}", 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) {
|
||||
|
|
|
|||
|
|
@ -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<T extends IValidatorContext>
|
||||
implements IValidationRule<T> {
|
||||
private final IsActiveSessionRunningService ssnChecker;
|
||||
|
||||
public ActiveSessionIsPresentValidationRule(IsActiveSessionRunningService ssnChecker) {
|
||||
this.ssnChecker = ssnChecker;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<EnumMessage> validate(T context) {
|
||||
if (ssnChecker.isThereAnActiveSession()) {
|
||||
return of(ClearingError.ActiveSessionIsPresent);
|
||||
}
|
||||
return empty();
|
||||
}
|
||||
}
|
||||
|
|
@ -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<ImdgValidationCont
|
|||
return empty();
|
||||
}
|
||||
},
|
||||
Session() {
|
||||
@Override
|
||||
public Optional<EnumMessage> validate(ImdgValidationContext<SDf06> context) {
|
||||
Imdg<Session> sessionImdg = context.obtainMap(IMDGDistributedNames.Map_Session, Session.class);
|
||||
Collection<Session> activeSessions = sessionImdg.getCollectionObjectsByFieldValues(Map.of(
|
||||
"workflowStatus", WorkflowStatus.Active.getKey()
|
||||
));
|
||||
if (activeSessions.size() > 0) {
|
||||
return of(ClearingError.ActiveSessionIsPresent);
|
||||
}
|
||||
return empty();
|
||||
}
|
||||
},
|
||||
Balance() {
|
||||
@Override
|
||||
public Optional<EnumMessage> validate(ImdgValidationContext<SDf06> context) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue