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.RegistryReturnDepositRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDepositActionRequest;
|
import ru.spcex.clearing.platform.messaging.domain.cud.registry.RegistrySplitDepositActionRequest;
|
||||||
import ru.spcex.clearing.service.AssetTrio;
|
import ru.spcex.clearing.service.AssetTrio;
|
||||||
|
import ru.spcex.clearing.service.IsActiveSessionRunningService;
|
||||||
import ru.spcex.clearing.service.registry.AssetTBFProcessing;
|
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.AnltAccLoad;
|
||||||
import ru.spcex.clearing.service.validation.ClrngValidationStored;
|
import ru.spcex.clearing.service.validation.ClrngValidationStored;
|
||||||
import ru.spcex.clearing.service.validation.CompanyByTradingCodeValidationRule;
|
import ru.spcex.clearing.service.validation.CompanyByTradingCodeValidationRule;
|
||||||
|
|
@ -99,6 +101,8 @@ import ru.spcex.platform.utils.validation.ValidatorImpl;
|
||||||
@Configuration
|
@Configuration
|
||||||
public class ValidationConfig {
|
public class ValidationConfig {
|
||||||
|
|
||||||
|
private final IsActiveSessionRunningService actionSessionChecker;
|
||||||
|
|
||||||
Imdg<Relation> imdgRelation;
|
Imdg<Relation> imdgRelation;
|
||||||
Imdg<Company> imdgCompany;
|
Imdg<Company> imdgCompany;
|
||||||
Imdg<Currency> imdgCurrency;
|
Imdg<Currency> imdgCurrency;
|
||||||
|
|
@ -128,7 +132,8 @@ public class ValidationConfig {
|
||||||
ImdgProvider imdgProvider;
|
ImdgProvider imdgProvider;
|
||||||
AssetTBFProcessing assetsMng;
|
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.imdgRelation = imdgProvider.getImdg(IMDGDistributedNames.Map_Relation, Relation.class);
|
||||||
this.imdgCompany = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
this.imdgCompany = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
this.imdgCurrency = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
|
this.imdgCurrency = imdgProvider.getImdg(IMDGDistributedNames.Map_Currency, Currency.class);
|
||||||
|
|
@ -303,7 +308,7 @@ public class ValidationConfig {
|
||||||
Sdf06NewValidationRule.CompanySymbolAndCompanyPresent,
|
Sdf06NewValidationRule.CompanySymbolAndCompanyPresent,
|
||||||
Sdf06NewValidationRule.AccountPresent,
|
Sdf06NewValidationRule.AccountPresent,
|
||||||
Sdf06NewValidationRule.CompanyAndAccountMatch,
|
Sdf06NewValidationRule.CompanyAndAccountMatch,
|
||||||
Sdf06NewValidationRule.Session,
|
new ActiveSessionIsPresentValidationRule<>(actionSessionChecker),
|
||||||
Sdf06NewValidationRule.Balance,
|
Sdf06NewValidationRule.Balance,
|
||||||
Sdf06NewValidationRule.TcrPresent,
|
Sdf06NewValidationRule.TcrPresent,
|
||||||
CurrencyCodeValidationRule.get(ClearingError.CompanyDebitCheck)
|
CurrencyCodeValidationRule.get(ClearingError.CompanyDebitCheck)
|
||||||
|
|
@ -333,7 +338,7 @@ public class ValidationConfig {
|
||||||
Sdf10ValidationRule.DepoAccountPresent,
|
Sdf10ValidationRule.DepoAccountPresent,
|
||||||
CompanyByTradingCodeValidationRule.instance(SDf10::getDepoCode),
|
CompanyByTradingCodeValidationRule.instance(SDf10::getDepoCode),
|
||||||
Sdf10ValidationRule.CompanyStatus,
|
Sdf10ValidationRule.CompanyStatus,
|
||||||
Sdf06NewValidationRule.Session,
|
new ActiveSessionIsPresentValidationRule<>(actionSessionChecker),
|
||||||
Sdf10ValidationRule.TcrPresent,
|
Sdf10ValidationRule.TcrPresent,
|
||||||
SecurityBySecurityCodeValidationRule.instance(SDf10::getSecurityCode),
|
SecurityBySecurityCodeValidationRule.instance(SDf10::getSecurityCode),
|
||||||
Sdf10ValidationRule.Balance
|
Sdf10ValidationRule.Balance
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package ru.spcex.clearing.service;
|
package ru.spcex.clearing.service;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
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.enumeration.WorkflowStatus;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class IsActiveSessionRunningService {
|
public class IsActiveSessionRunningService {
|
||||||
|
|
@ -21,9 +21,13 @@ public class IsActiveSessionRunningService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isThereAnActiveSession() {
|
public boolean isThereAnActiveSession() {
|
||||||
Collection<Session> activeSessions = ssnImdg.getCollectionObjectsByFieldValues(Map.of(
|
ImdgPredicateBuilder pb = ssnImdg.predicateBuilder();
|
||||||
"workflowStatus", WorkflowStatus.Active.getKey()
|
Collection<Session> activeSessions = ssnImdg.getCollectionObjectsByPredicate(
|
||||||
));
|
pb.or(
|
||||||
|
pb.equals("workflowStatus", WorkflowStatus.Active.getKey()),
|
||||||
|
pb.equals("workflowStatus", WorkflowStatus.Pause.getKey())
|
||||||
|
)
|
||||||
|
);
|
||||||
activeSessions.stream().findFirst().ifPresent(
|
activeSessions.stream().findFirst().ifPresent(
|
||||||
session -> log.debug("found session.id {}", session.getId())
|
session -> log.debug("found session.id {}", session.getId())
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ public class TasksDelayedBySessionServiceV2 implements ImdgEntryListener<Session
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void innerEntryUpdated(ImdgEntryEvent<Session> event) {
|
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.");
|
log.trace("not a session end event.");
|
||||||
return;
|
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) {
|
if (sessionOldValue == null || sessionNewValue == null) {
|
||||||
log.warn("old value null {}, new value null {}",
|
log.warn("old value null {}, new value null {}",
|
||||||
sessionOldValue == null, sessionNewValue == null);
|
sessionOldValue == null, sessionNewValue == null);
|
||||||
|
|
@ -115,7 +115,9 @@ public class TasksDelayedBySessionServiceV2 implements ImdgEntryListener<Session
|
||||||
String oldWS = sessionOldValue.getWorkflowStatus();
|
String oldWS = sessionOldValue.getWorkflowStatus();
|
||||||
String newWS = sessionNewValue.getWorkflowStatus();
|
String newWS = sessionNewValue.getWorkflowStatus();
|
||||||
log.trace("workflow statuses: {} -> {}", oldWS, newWS);
|
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) {
|
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;
|
package ru.spcex.clearing.service.validation;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
@ -10,7 +8,6 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
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.Registry;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
import ru.clearing.classes.statics.data.registry.TradingClearingRegistry;
|
||||||
import ru.clearing.classes.statics.data.registry.TradingClearingRegistryList;
|
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.InOutDirection;
|
||||||
import ru.spcex.platform.enumeration.RegistryStatus;
|
import ru.spcex.platform.enumeration.RegistryStatus;
|
||||||
import ru.spcex.platform.enumeration.RegistryTradingParams;
|
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.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicate;
|
||||||
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
import ru.spcex.platform.imdg.api.predicate.ImdgPredicateBuilder;
|
||||||
|
|
@ -103,19 +99,6 @@ public enum Sdf06NewValidationRule implements IValidationRule<ImdgValidationCont
|
||||||
return empty();
|
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() {
|
Balance() {
|
||||||
@Override
|
@Override
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<SDf06> context) {
|
public Optional<EnumMessage> validate(ImdgValidationContext<SDf06> context) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue